From 3ec901c809110231748c242dab4c3602d62a2167 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 6 Sep 2023 01:14:22 +0000 Subject: [PATCH] Rebuild pages at 0fac4fdb88b5c4272981f9988d0f71fa493dabea --- AnnabelTing_ip_master/authorship.json | 2 +- AnnabelTing_ip_master/commits.json | 2 +- AryanG01_ip_master/authorship.json | 2 +- AryanG01_ip_master/commits.json | 2 +- Carlintyj_ip_master/commits.json | 2 +- Chandan8186_ip_master/authorship.json | 2 +- Chandan8186_ip_master/commits.json | 2 +- Daphne789_ip_master/authorship.json | 2 +- Daphne789_ip_master/commits.json | 2 +- Dioclei_ip_master/authorship.json | 2 +- Dioclei_ip_master/commits.json | 2 +- FerdiHS_ip_master/commits.json | 2 +- GlendaChong_ip_master/authorship.json | 2 +- GlendaChong_ip_master/commits.json | 2 +- HollaG_ip_master/authorship.json | 2 +- HollaG_ip_master/commits.json | 2 +- Jweng88_ip_master/authorship.json | 2 +- Jweng88_ip_master/commits.json | 2 +- Kokseng1_ip_master/authorship.json | 2 +- Kokseng1_ip_master/commits.json | 2 +- LHeng1_ip_master/authorship.json | 2 +- LHeng1_ip_master/commits.json | 2 +- Nixx162_ip_master/authorship.json | 2 +- Nixx162_ip_master/commits.json | 2 +- PearlynnT_ip_master/authorship.json | 2 +- PearlynnT_ip_master/commits.json | 2 +- RSXIX_ip_master/authorship.json | 2 +- RSXIX_ip_master/commits.json | 2 +- RiyaMehta2211_ip_master/authorship.json | 2 +- RiyaMehta2211_ip_master/commits.json | 2 +- Sebtey_ip_master/authorship.json | 2 +- Sebtey_ip_master/commits.json | 2 +- SelwynAng_ip_master/authorship.json | 2 +- SelwynAng_ip_master/commits.json | 2 +- Seonlo99_ip_master/authorship.json | 2 +- Seonlo99_ip_master/commits.json | 2 +- Singa-pirate_ip_master/authorship.json | 2 +- Singa-pirate_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 +- Vanessamae23_ip_master/authorship.json | 2 +- Vanessamae23_ip_master/commits.json | 2 +- aarontxz_ip_master/authorship.json | 2 +- aarontxz_ip_master/commits.json | 2 +- archive.zip | Bin 7658086 -> 7806193 bytes brendanneojw_ip_master/authorship.json | 2 +- brendanneojw_ip_master/commits.json | 2 +- butteredyakiimo_ip_master/authorship.json | 2 +- butteredyakiimo_ip_master/commits.json | 2 +- dhruvir29_ip_master/authorship.json | 2 +- dhruvir29_ip_master/commits.json | 2 +- erohsikivar_ip_master/authorship.json | 2 +- erohsikivar_ip_master/commits.json | 2 +- flexibo_ip_master/authorship.json | 2 +- flexibo_ip_master/commits.json | 2 +- freshcabbage123_ip_master/authorship.json | 2 +- freshcabbage123_ip_master/commits.json | 2 +- howenc_ip_master/authorship.json | 2 +- howenc_ip_master/commits.json | 2 +- itsNatTan_ip_master/authorship.json | 2 +- itsNatTan_ip_master/commits.json | 2 +- jean-cq_ip_master/authorship.json | 2 +- jean-cq_ip_master/commits.json | 2 +- jinyuan0425_ip_master/authorship.json | 2 +- jinyuan0425_ip_master/commits.json | 2 +- jrchoo_ip_master/authorship.json | 2 +- jrchoo_ip_master/commits.json | 2 +- jylow_ip_master/authorship.json | 2 +- jylow_ip_master/commits.json | 2 +- kenvynKwek_ip_master/authorship.json | 2 +- kenvynKwek_ip_master/commits.json | 2 +- ketweeen_ip_master/authorship.json | 2 +- ketweeen_ip_master/commits.json | 2 +- kiatkat_ip_master/authorship.json | 2 +- kiatkat_ip_master/commits.json | 2 +- licongshen12_ip_master/authorship.json | 2 +- licongshen12_ip_master/commits.json | 2 +- lshaoqin_ip_master/authorship.json | 2 +- lshaoqin_ip_master/commits.json | 2 +- lunaroddity_ip_master/authorship.json | 2 +- lunaroddity_ip_master/commits.json | 2 +- lyuanww_ip_master/authorship.json | 2 +- lyuanww_ip_master/commits.json | 2 +- mamayuan_ip_master/authorship.json | 2 +- mamayuan_ip_master/commits.json | 2 +- marcellaantania_ip_master/authorship.json | 2 +- marcellaantania_ip_master/commits.json | 2 +- migfoo02_ip_master/authorship.json | 2 +- migfoo02_ip_master/commits.json | 2 +- ncmathan_ip_master/authorship.json | 2 +- ncmathan_ip_master/commits.json | 2 +- neyapraveen_ip_master/authorship.json | 2 +- neyapraveen_ip_master/commits.json | 2 +- ngeeyonglim_ip_master/authorship.json | 2 +- ngeeyonglim_ip_master/commits.json | 2 +- nicholascher_ip_master/authorship.json | 2 +- nicholascher_ip_master/commits.json | 2 +- nubnubyas_ip_master/authorship.json | 2 +- nubnubyas_ip_master/commits.json | 2 +- oeggy03_ip_master/authorship.json | 2 +- oeggy03_ip_master/commits.json | 2 +- owenyeo_ip_master/authorship.json | 2 +- owenyeo_ip_master/commits.json | 2 +- pangyyen_ip_master/authorship.json | 2 +- pangyyen_ip_master/commits.json | 2 +- papataco14_ip_master/authorship.json | 2 +- papataco14_ip_master/commits.json | 2 +- raynertjx_ip_master/authorship.json | 2 +- raynertjx_ip_master/commits.json | 2 +- reposense-logs/reposense.log.0 | 13404 ++++++++++---------- rocketninja7_ip_master/authorship.json | 2 +- rocketninja7_ip_master/commits.json | 2 +- ryamgoh_ip_master/authorship.json | 2 +- ryamgoh_ip_master/commits.json | 2 +- ryanozx_ip_master/authorship.json | 2 +- ryanozx_ip_master/commits.json | 2 +- s-peiran_ip_master/authorship.json | 2 +- s-peiran_ip_master/commits.json | 2 +- siqirua_ip_master/authorship.json | 2 +- siqirua_ip_master/commits.json | 2 +- summary.json | 2 +- tanshiyu1999_ip_master/authorship.json | 2 +- tanshiyu1999_ip_master/commits.json | 2 +- techjay-c_ip_master/authorship.json | 2 +- techjay-c_ip_master/commits.json | 2 +- teoks0199_ip_master/authorship.json | 2 +- teoks0199_ip_master/commits.json | 2 +- thaddeusong_ip_master/authorship.json | 2 +- thaddeusong_ip_master/commits.json | 2 +- tjch-o_ip_master/authorship.json | 2 +- tjch-o_ip_master/commits.json | 2 +- tjingsheng_ip_master/authorship.json | 2 +- tjingsheng_ip_master/commits.json | 2 +- wnchan_ip_master/authorship.json | 2 +- wnchan_ip_master/commits.json | 2 +- xenosf_ip_master/authorship.json | 2 +- xenosf_ip_master/commits.json | 2 +- yanghengtang_ip_master/authorship.json | 2 +- yanghengtang_ip_master/commits.json | 2 +- yytan25_ip_master/authorship.json | 2 +- yytan25_ip_master/commits.json | 2 +- zhengyup_ip_master/authorship.json | 2 +- zhengyup_ip_master/commits.json | 2 +- 145 files changed, 6845 insertions(+), 6845 deletions(-) diff --git a/AnnabelTing_ip_master/authorship.json b/AnnabelTing_ip_master/authorship.json index f9789641..fa570e6a 100644 --- a/AnnabelTing_ip_master/authorship.json +++ b/AnnabelTing_ip_master/authorship.json @@ -1 +1 @@ -[{"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}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"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":"AnnabelTing"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"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":{"AnnabelTing":1,"-":41}},{"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 499e0ba2..cbf62af6 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}}},{"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"}} +{"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}}}]},{"date":"2023-09-03","commitResults":[{"hash":"40d65c96e05faceaae8916f525ce9b3f9c72be84","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"a51d5c0aaa7f7fd6425ea93986ffd14b62e30b9e","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":0,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"AnnabelTing":{"java":612,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":1,"txt":11}},"authorContributionVariance":{"AnnabelTing":23419.102},"authorDisplayNameMap":{"AnnabelTing":"CS2103T-F10-1 TING..ABEL"}} diff --git a/AryanG01_ip_master/authorship.json b/AryanG01_ip_master/authorship.json index 7ddbc233..cfc11150 100644 --- a/AryanG01_ip_master/authorship.json +++ b/AryanG01_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"class DeadlineTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" private LocalDate byDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" public DeadlineTask(String description, LocalDate byDate, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" this.byDate \u003d byDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" return \"[D]\" + super.toString() + \" \" + getDescriptionDetails();","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" return String.format(\"%s | %d | %s (by: %s)\", getTaskType(), isDone ? 1 : 0, description,","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" byDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" return \"D\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" private String getDescriptionDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" return description + \" (by: \" + byDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AryanG01":31}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" tasks.loadTasksFromFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" Runtime.getRuntime().addShutdownHook(new Thread(tasks::saveTasksToFile));","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Hello! I\u0027m Axela\");","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" String command \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" if (command.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" } else if (command.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Here are the tasks in your list:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" tasks.saveTasksToFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e master","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" System.out.print(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" tasks.markAsDone(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" tasks.saveTasksToFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":" } else if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AryanG01"},"content":" tasks.markAsNotDone(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"AryanG01"},"content":" tasks.saveTasksToFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"AryanG01"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"AryanG01"},"content":" tasks.deleteTask(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"AryanG01"},"content":" tasks.saveTasksToFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"AryanG01"},"content":" tasks.processCommand(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"AryanG01"},"content":" tasks.saveTasksToFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"AryanG01"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":4,"AryanG01":47}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"class DukeException extends Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":" super(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AryanG01":5}},{"path":"src/main/java/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"class EventTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" private LocalDate atDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" public EventTask(String description, LocalDate atDate, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" this.atDate \u003d atDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" return \"[E]\" + super.toString() + \" \" + getDescriptionDetails();","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" return String.format(\"%s | %d | %s (at: %s)\", getTaskType(), isDone ? 1 : 0, description,","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" atDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" return \"E\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" private String getDescriptionDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" return description + \" (at: \" + atDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AryanG01":31}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" return isDone ? \"X\" : \" \";","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" return \"[\" + getStatusIcon() + \"]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" return String.format(\"%s | %d | %s\", getTaskType(), isDone ? 1 : 0, description);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" return \"\"; // Override in subclasses","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AryanG01":34}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.io.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" private String filePath \u003d \"src/main/java/duke.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" public TaskList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" public void processCommand(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" String[] parts \u003d command.split(\" \", 2);","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" TaskType taskType \u003d TaskType.valueOf(parts[0].toUpperCase());","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" case TODO:","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" if (parts.length \u003c 2 || parts[1].isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" String[] todoParts \u003d parts[1].split(\" /from \");","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" if (todoParts.length !\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Todo tasks must include \u0027/from\u0027 for date.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" String[] dateRange \u003d todoParts[1].split(\" /to \");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" if (dateRange.length !\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Todo tasks must include \u0027/to\u0027 for the end date.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" LocalDate fromDate \u003d LocalDate.parse(dateRange[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" LocalDate toDate \u003d LocalDate.parse(dateRange[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":" addTask(new TodoTask(todoParts[0], fromDate, toDate, false));","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"AryanG01"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"AryanG01"},"content":" if (parts.length \u003c 2 || parts[1].isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"AryanG01"},"content":" String[] deadlineParts \u003d parts[1].split(\" /by \");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"AryanG01"},"content":" if (deadlineParts.length !\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Deadline tasks must include \u0027/by\u0027 for date.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"AryanG01"},"content":" LocalDate byDate \u003d LocalDate.parse(deadlineParts[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"AryanG01"},"content":" addTask(new DeadlineTask(deadlineParts[0], byDate, false));","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"AryanG01"},"content":" case EVENT:","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"AryanG01"},"content":" if (parts.length \u003c 2 || parts[1].isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"AryanG01"},"content":" String[] eventParts \u003d parts[1].split(\" /at \");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"AryanG01"},"content":" if (eventParts.length !\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Event tasks must include \u0027/at\u0027 for date.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"AryanG01"},"content":" LocalDate atDate \u003d LocalDate.parse(eventParts[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"AryanG01"},"content":" addTask(new EventTask(eventParts[0], atDate, false));","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"AryanG01"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"AryanG01"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"AryanG01"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"AryanG01"},"content":" public void deleteTask(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"AryanG01"},"content":" int taskIndex \u003d extractTaskIndex(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"AryanG01"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"AryanG01"},"content":" Task deletedTask \u003d tasks.remove(taskIndex);","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + deletedTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"AryanG01"},"content":" public void markAsDone(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"AryanG01"},"content":" int taskIndex \u003d extractTaskIndex(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"AryanG01"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"AryanG01"},"content":" tasks.get(taskIndex).markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(taskIndex));","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"AryanG01"},"content":" public void markAsNotDone(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"AryanG01"},"content":" int taskIndex \u003d extractTaskIndex(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"AryanG01"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"AryanG01"},"content":" tasks.get(taskIndex).markAsNotDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(taskIndex));","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"AryanG01"},"content":" private int extractTaskIndex(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"AryanG01"},"content":" String[] parts \u003d command.split(\" \");","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"AryanG01"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Please provide the task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"AryanG01"},"content":" return Integer.parseInt(parts[1].trim()) - 1;","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"AryanG01"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"AryanG01"},"content":" sb.append(\" Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"AryanG01"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"AryanG01"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"AryanG01"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"AryanG01"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e master","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"AryanG01"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":129,"author":{"gitId":"AryanG01"},"content":" sb.append(\" \").append(i + 1).append(\".\").append(tasks.get(i));","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"AryanG01"},"content":" sb.append(\"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"AryanG01"},"content":" return sb.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"AryanG01"},"content":" public void saveTasksToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"AryanG01"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"AryanG01"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"AryanG01"},"content":" writer.write(task.toFileString() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"AryanG01"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"AryanG01"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"Error saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"AryanG01"},"content":" public void loadTasksFromFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"AryanG01"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"AryanG01"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"AryanG01"},"content":" return; // If the file doesn\u0027t exist yet, no need to load tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"AryanG01"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"AryanG01"},"content":" String line;","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"AryanG01"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"AryanG01"},"content":" processFileLine(line);","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"AryanG01"},"content":" reader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"AryanG01"},"content":" } catch (IOException | DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"Error loading tasks from file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"AryanG01"},"content":" private void processFileLine(String line) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"AryanG01"},"content":" // Parse the line and create tasks based on the format in the file","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"AryanG01"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"AryanG01"},"content":" if (parts.length !\u003d 3) {","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task format in the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"AryanG01"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"AryanG01"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"AryanG01"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"AryanG01"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"AryanG01"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"AryanG01"},"content":" // Check if the description contains date information","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"AryanG01"},"content":" String[] todoParts \u003d description.split(\" \\\\(from: | to: \", 3);","lastModifiedDate":"2023-09-05"},{"lineNumber":182,"author":{"gitId":"AryanG01"},"content":" if (todoParts.length \u003d\u003d 3) {","lastModifiedDate":"2023-09-05"},{"lineNumber":183,"author":{"gitId":"AryanG01"},"content":" LocalDate fromDate \u003d LocalDate.parse(todoParts[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":184,"author":{"gitId":"AryanG01"},"content":" LocalDate toDate \u003d LocalDate.parse(todoParts[2].substring(0, todoParts[2].length() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":185,"author":{"gitId":"AryanG01"},"content":" addTask(new TodoTask(todoParts[0], fromDate, toDate, isDone));","lastModifiedDate":"2023-09-05"},{"lineNumber":186,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":187,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid todo task format in the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":188,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":189,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"AryanG01"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"AryanG01"},"content":" // Check if the description contains date information","lastModifiedDate":"2023-09-05"},{"lineNumber":192,"author":{"gitId":"AryanG01"},"content":" String[] deadlineParts \u003d description.split(\" \\\\(by: \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":193,"author":{"gitId":"AryanG01"},"content":" if (deadlineParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":194,"author":{"gitId":"AryanG01"},"content":" LocalDate byDate \u003d LocalDate.parse(deadlineParts[1].substring(0, deadlineParts[1].length() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":195,"author":{"gitId":"AryanG01"},"content":" addTask(new DeadlineTask(deadlineParts[0], byDate, isDone));","lastModifiedDate":"2023-09-05"},{"lineNumber":196,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":197,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid deadline task format in the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":198,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":199,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"AryanG01"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"AryanG01"},"content":" // Check if the description contains date information","lastModifiedDate":"2023-09-05"},{"lineNumber":202,"author":{"gitId":"AryanG01"},"content":" String[] eventParts \u003d description.split(\" \\\\(at: \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":203,"author":{"gitId":"AryanG01"},"content":" if (eventParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":204,"author":{"gitId":"AryanG01"},"content":" LocalDate atDate \u003d LocalDate.parse(eventParts[1].substring(0, eventParts[1].length() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":205,"author":{"gitId":"AryanG01"},"content":" addTask(new EventTask(eventParts[0], atDate, isDone));","lastModifiedDate":"2023-09-05"},{"lineNumber":206,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":207,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid event task format in the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":208,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":209,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"AryanG01"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Unknown task type in file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":212,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AryanG01":214}},{"path":"src/main/java/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"public enum TaskType {","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AryanG01":3}},{"path":"src/main/java/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"class TodoTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" private LocalDate fromDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" private LocalDate toDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" public TodoTask(String description, LocalDate fromDate, LocalDate toDate, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" this.fromDate \u003d fromDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" this.toDate \u003d toDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" return \"[T]\" + super.toString() + \" \" + getDescriptionDetails();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" return String.format(\"%s | %d | %s (from: %s to: %s)\", getTaskType(), isDone ? 1 : 0, description,","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" fromDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")),","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" toDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")));","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" return \"T\";","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" private String getDescriptionDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" return description + \" (from: \" + fromDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) +","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" \" to: \" + toDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AryanG01":35}},{"path":"src/main/java/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"T | 0 | read book (from: 2019-10-15 to: 2019-10-15)","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"D | 0 | read book (by: 2019-10-15)","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"E | 0 | read book (at: 2019-10-15)","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"T | 0 | read book (from: 2019-10-15 to: 2020-10-15)","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":"T | 0 | borrow book /by 6th June","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e master","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"AryanG01":8}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"todo read book","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"todo join sports club","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":"todo borrow book","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":"mark 4","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":"todo","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":"deadline","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":"event","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":"blah","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":"mark","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":"mark 9","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":"mark 8","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":"unmark","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":"unmark -1","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":"unmark 7","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":"delete","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":"delete 100","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":"delete 6","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":"blah","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"AryanG01":27}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"if not exist C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\bin mkdir C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\bin","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":"javac -cp C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\src\\main\\java -Xlint:none -d C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\bin C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\src\\main\\java\\*.java","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":"java -classpath C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":17,"AryanG01":4}}] +[{"path":"src/main/java/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"class DeadlineTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" private LocalDate byDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" public DeadlineTask(String description, LocalDate byDate, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" this.byDate \u003d byDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" return \"[D]\" + super.toString() + \" \" + getDescriptionDetails();","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" return String.format(\"%s | %d | %s (by: %s)\", getTaskType(), isDone ? 1 : 0, description,","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" byDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" return \"D\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" private String getDescriptionDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" return description + \" (by: \" + byDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AryanG01":31}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" private Storage storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" private Ui ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" tasks \u003d new TaskList(storage.loadTasksFromFile());","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" public void run() {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" ui.showWelcomeMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" String command \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" if (Parser.isBye(command)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" ui.showGoodbyeMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" storage.saveTasksToFile(tasks.getAllTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" } else if (Parser.isList(command)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" ui.showTaskList(tasks.getAllTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":" } else if (Parser.isMarkDone(command)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"AryanG01"},"content":" int taskIndex \u003d Parser.extractTaskIndex(command);","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"AryanG01"},"content":" tasks.markAsDone(taskIndex);","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"AryanG01"},"content":" ui.showTaskMarkedAsDone(tasks.getTask(taskIndex));","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"AryanG01"},"content":" storage.saveTasksToFile(tasks.getAllTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"AryanG01"},"content":" } else if (Parser.isMarkNotDone(command)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"AryanG01"},"content":" int taskIndex \u003d Parser.extractTaskIndex(command);","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"AryanG01"},"content":" tasks.markAsNotDone(taskIndex);","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"AryanG01"},"content":" ui.showTaskMarkedAsNotDone(tasks.getTask(taskIndex));","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"AryanG01"},"content":" storage.saveTasksToFile(tasks.getAllTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"AryanG01"},"content":" } else if (Parser.isDelete(command)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"AryanG01"},"content":" int taskIndex \u003d Parser.extractTaskIndex(command);","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"AryanG01"},"content":" Task deletedTask \u003d tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"AryanG01"},"content":" ui.showTaskDeleted(deletedTask, tasks.getTotalTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"AryanG01"},"content":" storage.saveTasksToFile(tasks.getAllTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"AryanG01"},"content":" Task newTask \u003d Parser.parseTask(command);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"AryanG01"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"AryanG01"},"content":" ui.showTaskAdded(newTask, tasks.getTotalTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"AryanG01"},"content":" storage.saveTasksToFile(tasks.getAllTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"AryanG01"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"AryanG01"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":60,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"AryanG01"},"content":" new Duke(\"./src/main/java/duke.txt\").run();","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":5,"AryanG01":59}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"class DukeException extends Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":" super(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AryanG01":5}},{"path":"src/main/java/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"class EventTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" private LocalDate atDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" public EventTask(String description, LocalDate atDate, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" this.atDate \u003d atDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" return \"[E]\" + super.toString() + \" \" + getDescriptionDetails();","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" return String.format(\"%s | %d | %s (at: %s)\", getTaskType(), isDone ? 1 : 0, description,","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" atDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" return \"E\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" private String getDescriptionDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" return description + \" (at: \" + atDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AryanG01":31}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"public class Parser {","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" public static boolean isBye(String command) {","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" return command.equalsIgnoreCase(\"bye\");","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" public static boolean isList(String command) {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" return command.equalsIgnoreCase(\"list\");","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" public static boolean isMarkDone(String command) {","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" return command.startsWith(\"mark\");","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" public static boolean isMarkNotDone(String command) {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" return command.startsWith(\"unmark\");","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" public static boolean isDelete(String command) {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" return command.startsWith(\"delete\");","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" public static int extractTaskIndex(String command) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" String[] parts \u003d command.split(\" \");","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Please provide the task index.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" return Integer.parseInt(parts[1].trim()) - 1;","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" public static Task parseTask(String command) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":" String[] parts \u003d command.split(\" \", 2);","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"AryanG01"},"content":" TaskType taskType \u003d TaskType.valueOf(parts[0].toUpperCase());","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"AryanG01"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"AryanG01"},"content":" case TODO:","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"AryanG01"},"content":" // Parse the description, fromDate, and toDate","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"AryanG01"},"content":" String[] todoParts \u003d parts[1].split(\" /from \");","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"AryanG01"},"content":" if (todoParts.length !\u003d 2) {","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Todo tasks must include \u0027/from\u0027 for date.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"AryanG01"},"content":" String[] dateRange \u003d todoParts[1].split(\" /to \");","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"AryanG01"},"content":" if (dateRange.length !\u003d 2) {","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Todo tasks must include \u0027/to\u0027 for the end date.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"AryanG01"},"content":" LocalDate fromDate \u003d LocalDate.parse(dateRange[0]);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"AryanG01"},"content":" LocalDate toDate \u003d LocalDate.parse(dateRange[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"AryanG01"},"content":" return new TodoTask(todoParts[0], fromDate, toDate, false);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"AryanG01"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"AryanG01"},"content":" // Parse the description and byDate","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"AryanG01"},"content":" String[] deadlineParts \u003d parts[1].split(\" /by \");","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"AryanG01"},"content":" if (deadlineParts.length !\u003d 2) {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Deadline tasks must include \u0027/by\u0027 for date.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"AryanG01"},"content":" LocalDate byDate \u003d LocalDate.parse(deadlineParts[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"AryanG01"},"content":" return new DeadlineTask(deadlineParts[0], byDate, false);","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"AryanG01"},"content":" case EVENT:","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"AryanG01"},"content":" // Parse the description and atDate","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"AryanG01"},"content":" String[] eventParts \u003d parts[1].split(\" /at \");","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"AryanG01"},"content":" if (eventParts.length !\u003d 2) {","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Event tasks must include \u0027/at\u0027 for date.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"AryanG01"},"content":" LocalDate atDate \u003d LocalDate.parse(eventParts[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"AryanG01"},"content":" return new EventTask(eventParts[0], atDate, false);","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"AryanG01"},"content":" default:","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"AryanG01"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"AryanG01"},"content":" public static Task parseFileLine(String line) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"AryanG01"},"content":" // Parse the line and create tasks based on the format in the file","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"AryanG01"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"AryanG01"},"content":" if (parts.length !\u003d 3) {","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task format in the file.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"AryanG01"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"AryanG01"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"AryanG01"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"AryanG01"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"AryanG01"},"content":" case \"T\":","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"AryanG01"},"content":" // Check if the description contains date information","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"AryanG01"},"content":" String[] todoParts \u003d description.split(\" \\\\(from: | to: \", 3);","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"AryanG01"},"content":" if (todoParts.length \u003d\u003d 3) {","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"AryanG01"},"content":" LocalDate fromDate \u003d LocalDate.parse(todoParts[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"AryanG01"},"content":" LocalDate toDate \u003d LocalDate.parse(todoParts[2].substring(0, todoParts[2].length() - 1));","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"AryanG01"},"content":" return new TodoTask(todoParts[0], fromDate, toDate, isDone);","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid todo task format in the file.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"AryanG01"},"content":" case \"D\":","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"AryanG01"},"content":" // Check if the description contains date information","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"AryanG01"},"content":" String[] deadlineParts \u003d description.split(\" \\\\(by: \", 2);","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"AryanG01"},"content":" if (deadlineParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"AryanG01"},"content":" LocalDate byDate \u003d LocalDate.parse(deadlineParts[1].substring(0, deadlineParts[1].length() - 1));","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"AryanG01"},"content":" return new DeadlineTask(deadlineParts[0], byDate, isDone);","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid deadline task format in the file.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"AryanG01"},"content":" case \"E\":","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"AryanG01"},"content":" // Check if the description contains date information","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"AryanG01"},"content":" String[] eventParts \u003d description.split(\" \\\\(at: \", 2);","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"AryanG01"},"content":" if (eventParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"AryanG01"},"content":" LocalDate atDate \u003d LocalDate.parse(eventParts[1].substring(0, eventParts[1].length() - 1));","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"AryanG01"},"content":" return new EventTask(eventParts[0], atDate, isDone);","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid event task format in the file.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":123,"author":{"gitId":"AryanG01"},"content":" default:","lastModifiedDate":"2023-09-06"},{"lineNumber":124,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Unknown task type in file.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":125,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"AryanG01":127}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.io.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"import java.util.List;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"public class Storage {","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" private String filePath;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" public ArrayList\u003cTask\u003e loadTasksFromFile() throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" return tasks; // If the file doesn\u0027t exist yet, no need to load tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" String line;","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" Task task \u003d Parser.parseFileLine(line);","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" reader.close();","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Error loading tasks from file: \" + e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" return tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"AryanG01"},"content":" public void saveTasksToFile(List\u003cTask\u003e tasks) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"AryanG01"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"AryanG01"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"AryanG01"},"content":" writer.write(task.toFileString() + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"AryanG01"},"content":" writer.close();","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"AryanG01"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Error saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"AryanG01":47}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" return isDone ? \"X\" : \" \";","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" return \"[\" + getStatusIcon() + \"]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" return String.format(\"%s | %d | %s\", getTaskType(), isDone ? 1 : 0, description);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" return \"\"; // Override in subclasses","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AryanG01":34}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.io.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"import java.util.List;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":"class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" private String filePath \u003d \"./src/main/java/duke.txt\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" public TaskList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" public TaskList(ArrayList\u003cTask\u003e arr) {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" tasks \u003d arr;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" public void processCommand(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" String[] parts \u003d command.split(\" \", 2);","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" TaskType taskType \u003d TaskType.valueOf(parts[0].toUpperCase());","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" case TODO:","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" if (parts.length \u003c 2 || parts[1].isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" String[] todoParts \u003d parts[1].split(\" /from \");","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" if (todoParts.length !\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Todo tasks must include \u0027/from\u0027 for date.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" String[] dateRange \u003d todoParts[1].split(\" /to \");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":" if (dateRange.length !\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Todo tasks must include \u0027/to\u0027 for the end date.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"AryanG01"},"content":" LocalDate fromDate \u003d LocalDate.parse(dateRange[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"AryanG01"},"content":" LocalDate toDate \u003d LocalDate.parse(dateRange[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"AryanG01"},"content":" addTask(new TodoTask(todoParts[0], fromDate, toDate, false));","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"AryanG01"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"AryanG01"},"content":" if (parts.length \u003c 2 || parts[1].isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"AryanG01"},"content":" String[] deadlineParts \u003d parts[1].split(\" /by \");","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"AryanG01"},"content":" if (deadlineParts.length !\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Deadline tasks must include \u0027/by\u0027 for date.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"AryanG01"},"content":" LocalDate byDate \u003d LocalDate.parse(deadlineParts[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"AryanG01"},"content":" addTask(new DeadlineTask(deadlineParts[0], byDate, false));","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"AryanG01"},"content":" case EVENT:","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"AryanG01"},"content":" if (parts.length \u003c 2 || parts[1].isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"AryanG01"},"content":" String[] eventParts \u003d parts[1].split(\" /at \");","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"AryanG01"},"content":" if (eventParts.length !\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Event tasks must include \u0027/at\u0027 for date.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"AryanG01"},"content":" LocalDate atDate \u003d LocalDate.parse(eventParts[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"AryanG01"},"content":" addTask(new EventTask(eventParts[0], atDate, false));","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"AryanG01"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"AryanG01"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"AryanG01"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"AryanG01"},"content":" public void deleteTask(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"AryanG01"},"content":" int taskIndex \u003d extractTaskIndex(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"AryanG01"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"AryanG01"},"content":" Task deletedTask \u003d tasks.remove(taskIndex);","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + deletedTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"AryanG01"},"content":" public void markAsDone(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"AryanG01"},"content":" int taskIndex \u003d extractTaskIndex(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"AryanG01"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"AryanG01"},"content":" tasks.get(taskIndex).markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(taskIndex));","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"AryanG01"},"content":" public void markAsNotDone(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"AryanG01"},"content":" int taskIndex \u003d extractTaskIndex(command);","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"AryanG01"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"AryanG01"},"content":" tasks.get(taskIndex).markAsNotDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + tasks.get(taskIndex));","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"AryanG01"},"content":" private int extractTaskIndex(String command) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"AryanG01"},"content":" String[] parts \u003d command.split(\" \");","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"AryanG01"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"OOPS!!! Please provide the task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"AryanG01"},"content":" return Integer.parseInt(parts[1].trim()) - 1;","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"AryanG01"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"AryanG01"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":128,"author":{"gitId":"AryanG01"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":129,"author":{"gitId":"AryanG01"},"content":" sb.append(\" \").append(i + 1).append(\".\").append(tasks.get(i));","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"AryanG01"},"content":" sb.append(\"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"AryanG01"},"content":" return sb.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"AryanG01"},"content":" public void saveTasksToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"AryanG01"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"AryanG01"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"AryanG01"},"content":" writer.write(task.toFileString() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"AryanG01"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"AryanG01"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"Error saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"AryanG01"},"content":" public void loadTasksFromFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"AryanG01"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"AryanG01"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"AryanG01"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"AryanG01"},"content":" return; // If the file doesn\u0027t exist yet, no need to load tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"AryanG01"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"AryanG01"},"content":" String line;","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"AryanG01"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"AryanG01"},"content":" processFileLine(line);","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"AryanG01"},"content":" reader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"AryanG01"},"content":" } catch (IOException | DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"Error loading tasks from file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"AryanG01"},"content":" private void processFileLine(String line) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"AryanG01"},"content":" // Parse the line and create tasks based on the format in the file","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"AryanG01"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"AryanG01"},"content":" if (parts.length !\u003d 3) {","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task format in the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"AryanG01"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"AryanG01"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"AryanG01"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"AryanG01"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"AryanG01"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"AryanG01"},"content":" // Check if the description contains date information","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"AryanG01"},"content":" String[] todoParts \u003d description.split(\" \\\\(from: | to: \", 3);","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"AryanG01"},"content":" if (todoParts.length \u003d\u003d 3) {","lastModifiedDate":"2023-09-05"},{"lineNumber":182,"author":{"gitId":"AryanG01"},"content":" LocalDate fromDate \u003d LocalDate.parse(todoParts[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":183,"author":{"gitId":"AryanG01"},"content":" LocalDate toDate \u003d LocalDate.parse(todoParts[2].substring(0, todoParts[2].length() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":184,"author":{"gitId":"AryanG01"},"content":" addTask(new TodoTask(todoParts[0], fromDate, toDate, isDone));","lastModifiedDate":"2023-09-05"},{"lineNumber":185,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":186,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid todo task format in the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":187,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":188,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"AryanG01"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"AryanG01"},"content":" // Check if the description contains date information","lastModifiedDate":"2023-09-05"},{"lineNumber":191,"author":{"gitId":"AryanG01"},"content":" String[] deadlineParts \u003d description.split(\" \\\\(by: \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":192,"author":{"gitId":"AryanG01"},"content":" if (deadlineParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":193,"author":{"gitId":"AryanG01"},"content":" LocalDate byDate \u003d LocalDate.parse(deadlineParts[1].substring(0, deadlineParts[1].length() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":194,"author":{"gitId":"AryanG01"},"content":" addTask(new DeadlineTask(deadlineParts[0], byDate, isDone));","lastModifiedDate":"2023-09-05"},{"lineNumber":195,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":196,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid deadline task format in the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":197,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":198,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"AryanG01"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"AryanG01"},"content":" // Check if the description contains date information","lastModifiedDate":"2023-09-05"},{"lineNumber":201,"author":{"gitId":"AryanG01"},"content":" String[] eventParts \u003d description.split(\" \\\\(at: \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":202,"author":{"gitId":"AryanG01"},"content":" if (eventParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":203,"author":{"gitId":"AryanG01"},"content":" LocalDate atDate \u003d LocalDate.parse(eventParts[1].substring(0, eventParts[1].length() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":204,"author":{"gitId":"AryanG01"},"content":" addTask(new EventTask(eventParts[0], atDate, isDone));","lastModifiedDate":"2023-09-05"},{"lineNumber":205,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":206,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid event task format in the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":207,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":208,"author":{"gitId":"AryanG01"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"AryanG01"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Unknown task type in file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":211,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"AryanG01"},"content":" public List\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-09-06"},{"lineNumber":214,"author":{"gitId":"AryanG01"},"content":" return tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":215,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":216,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":217,"author":{"gitId":"AryanG01"},"content":" public int getTotalTasks() {","lastModifiedDate":"2023-09-06"},{"lineNumber":218,"author":{"gitId":"AryanG01"},"content":" return tasks.size();","lastModifiedDate":"2023-09-06"},{"lineNumber":219,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":220,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":221,"author":{"gitId":"AryanG01"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-06"},{"lineNumber":222,"author":{"gitId":"AryanG01"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":223,"author":{"gitId":"AryanG01"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-06"},{"lineNumber":224,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":225,"author":{"gitId":"AryanG01"},"content":" return null;","lastModifiedDate":"2023-09-06"},{"lineNumber":226,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":227,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":228,"author":{"gitId":"AryanG01"},"content":" public void markAsDone(int taskIndex) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":229,"author":{"gitId":"AryanG01"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":230,"author":{"gitId":"AryanG01"},"content":" tasks.get(taskIndex).markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":231,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":232,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task index.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":233,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":234,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":235,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":236,"author":{"gitId":"AryanG01"},"content":" public void markAsNotDone(int taskIndex) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":237,"author":{"gitId":"AryanG01"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":238,"author":{"gitId":"AryanG01"},"content":" tasks.get(taskIndex).markAsNotDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":239,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":240,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task index.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":241,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":242,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":243,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":244,"author":{"gitId":"AryanG01"},"content":" public Task deleteTask(int taskIndex) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":245,"author":{"gitId":"AryanG01"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":246,"author":{"gitId":"AryanG01"},"content":" Task deletedTask \u003d tasks.remove(taskIndex);","lastModifiedDate":"2023-09-06"},{"lineNumber":247,"author":{"gitId":"AryanG01"},"content":" return deletedTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":248,"author":{"gitId":"AryanG01"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":249,"author":{"gitId":"AryanG01"},"content":" throw new DukeException(\"Invalid task index.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":250,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":251,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":252,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":253,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AryanG01":253}},{"path":"src/main/java/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"public enum TaskType {","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AryanG01":3}},{"path":"src/main/java/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"class TodoTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" private LocalDate fromDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" private LocalDate toDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" public TodoTask(String description, LocalDate fromDate, LocalDate toDate, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" this.fromDate \u003d fromDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":" this.toDate \u003d toDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" return \"[T]\" + super.toString() + \" \" + getDescriptionDetails();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" return String.format(\"%s | %d | %s (from: %s to: %s)\", getTaskType(), isDone ? 1 : 0, description,","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" fromDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")),","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":" toDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")));","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" return \"T\";","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" private String getDescriptionDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":" return description + \" (from: \" + fromDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) +","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" \" to: \" + toDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AryanG01":35}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"import java.util.List;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"public class Ui {","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":" public void showWelcomeMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Hello! I\u0027m Axela\");","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":" public void showGoodbyeMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"Error loading tasks from file.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":" public void showTaskList(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Here are the tasks in your list:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + (i + 1) + \".\" + taskList.get(i));","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"AryanG01"},"content":" public void showTaskAdded(Task task, int totalTasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + totalTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"AryanG01"},"content":" public void showTaskMarkedAsDone(Task task) {","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"AryanG01"},"content":" public void showTaskMarkedAsNotDone(Task task) {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"AryanG01"},"content":" public void showTaskDeleted(Task task, int totalTasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" Now you have \" + totalTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"AryanG01"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"AryanG01"},"content":" public void showError(String message) {","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"AryanG01"},"content":" System.out.println(\" \" + message);","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"AryanG01"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"AryanG01"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"AryanG01"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"AryanG01":68}},{"path":"src/main/java/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"D | 0 | read (by: 2019-10-15)","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"E | 0 | read (at: 2019-10-15)","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"T | 0 | read (from: 2019-10-15 to: 2019-10-15)","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"T | 0 | read book (from: 2020-10-10 to: 2020-10-11)","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"D | 0 | read (by: 2019-10-15)","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"AryanG01":5}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AryanG01"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"AryanG01"},"content":"todo read book","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"AryanG01"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"AryanG01"},"content":"todo join sports club","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"AryanG01"},"content":"todo borrow book","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"AryanG01"},"content":"mark 4","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"AryanG01"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"AryanG01"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"AryanG01"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"AryanG01"},"content":"todo","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"AryanG01"},"content":"deadline","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"AryanG01"},"content":"event","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"AryanG01"},"content":"blah","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"AryanG01"},"content":"mark","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":"mark 9","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"AryanG01"},"content":"mark 8","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"AryanG01"},"content":"unmark","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"AryanG01"},"content":"unmark -1","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"AryanG01"},"content":"unmark 7","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"AryanG01"},"content":"delete","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"AryanG01"},"content":"delete 100","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"AryanG01"},"content":"delete 6","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"AryanG01"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"AryanG01"},"content":"blah","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"AryanG01":27}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"AryanG01"},"content":"if not exist C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\bin mkdir C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\bin","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"AryanG01"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"AryanG01"},"content":"javac -cp C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\src\\main\\java -Xlint:none -d C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\bin C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\src\\main\\java\\*.java","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"AryanG01"},"content":"java -classpath C:\\Users\\dell\\Desktop\\NUS_CS\\Modules\\Y2S1\\CS2100\\IP\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":17,"AryanG01":4}}] diff --git a/AryanG01_ip_master/commits.json b/AryanG01_ip_master/commits.json index 7dad4076..004774f0 100644 --- a/AryanG01_ip_master/commits.json +++ b/AryanG01_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"AryanG01":[{"date":"2023-08-24","commitResults":[{"hash":"08ff577bf38e658cc6b0850ec6ae86aa9ad192cc","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"9503fb3d183ad5ef693bffef83b89514231dcda6","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":4}}},{"hash":"af20120fa730895e8c3bbc4e3aada06e400c8d1d","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"03281e03e339d056c6c09b053627290318fe731c","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":5}}},{"hash":"fe37bbe141fffaa1cb856fde9e5d162ce0ecdb1f","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":21}}}]},{"date":"2023-08-25","commitResults":[{"hash":"4f1bb9381d69ea84ea618be9f1e86387ef3a7a7e","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"bat":{"insertions":5,"deletions":5}}}]},{"date":"2023-08-26","commitResults":[{"hash":"85328e8296f102022438b718ea94a93f493db900","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":56}}},{"hash":"be85d7a5b320f149a4780e6ca5aecf87ca463378","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":21}}},{"hash":"b11f3241ea3ab933c3d79cef90076bc32b12dacb","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":32}}}]},{"date":"2023-08-27","commitResults":[{"hash":"ac724c55711d1496a2bb64ce8e6066874620c405","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":15,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"7fc356d17d38f11957ff0146b8420c459f999ed5","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":96,"deletions":11}}},{"hash":"b959bdf3a7315a931076d8c5cfbf725ccca76ee5","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"9d584500b5cefdc41886f2de3253e28a2457f574","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":3,"deletions":4}}},{"hash":"16a688d7b9d0d329e6ad0eb48f8e6d4f15288e37","isMergeCommit":false,"messageTitle":"master","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"c459b53ea14955187a970135dde0e5bd1a66e32d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"ca53b892a5ce1d5629258fcaca203991c4025b6a","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":102,"deletions":64}}},{"hash":"6fa56a4c3c58f03b57182a048a0e6a0afbb6a58a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-8","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke.java\n#\tsrc/main/java/TaskList.java\n#\tsrc/main/java/duke.txt\n","fileTypesAndContributionMap":{}},{"hash":"1461f3c932d9fe61634032b945d75eef95a04599","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"AryanG01":{"java":400,"md":0,"fxml":0,"sh":0,"bat":4,"gradle":0,"txt":35}},"authorContributionVariance":{"AryanG01":8302.691},"authorDisplayNameMap":{"AryanG01":"CS2103T-F10-1 ARYA..ANJU"}} +{"authorDailyContributionsMap":{"AryanG01":[{"date":"2023-08-24","commitResults":[{"hash":"08ff577bf38e658cc6b0850ec6ae86aa9ad192cc","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"9503fb3d183ad5ef693bffef83b89514231dcda6","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":4}}},{"hash":"af20120fa730895e8c3bbc4e3aada06e400c8d1d","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"03281e03e339d056c6c09b053627290318fe731c","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":5}}},{"hash":"fe37bbe141fffaa1cb856fde9e5d162ce0ecdb1f","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":21}}}]},{"date":"2023-08-25","commitResults":[{"hash":"4f1bb9381d69ea84ea618be9f1e86387ef3a7a7e","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"bat":{"insertions":5,"deletions":5}}}]},{"date":"2023-08-26","commitResults":[{"hash":"85328e8296f102022438b718ea94a93f493db900","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":56}}},{"hash":"be85d7a5b320f149a4780e6ca5aecf87ca463378","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":21}}},{"hash":"b11f3241ea3ab933c3d79cef90076bc32b12dacb","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":32}}}]},{"date":"2023-08-27","commitResults":[{"hash":"ac724c55711d1496a2bb64ce8e6066874620c405","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":15,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"7fc356d17d38f11957ff0146b8420c459f999ed5","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":96,"deletions":11}}},{"hash":"b959bdf3a7315a931076d8c5cfbf725ccca76ee5","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"9d584500b5cefdc41886f2de3253e28a2457f574","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":3,"deletions":4}}},{"hash":"16a688d7b9d0d329e6ad0eb48f8e6d4f15288e37","isMergeCommit":false,"messageTitle":"master","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"c459b53ea14955187a970135dde0e5bd1a66e32d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"ca53b892a5ce1d5629258fcaca203991c4025b6a","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":102,"deletions":64}}},{"hash":"6fa56a4c3c58f03b57182a048a0e6a0afbb6a58a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-8","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke.java\n#\tsrc/main/java/TaskList.java\n#\tsrc/main/java/duke.txt\n","fileTypesAndContributionMap":{}},{"hash":"1461f3c932d9fe61634032b945d75eef95a04599","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"99c368cce10325cfb51a6ee426758bfba0441c42","isMergeCommit":false,"messageTitle":"commit changes","messageBody":"","tags":["change"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":7},"java":{"insertions":1,"deletions":11}}}]},{"date":"2023-09-06","commitResults":[{"hash":"0b23db5d55f28ec3051c4e329f458d8670790f67","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":336,"deletions":32}}}]}]},"authorFileTypeContributionMap":{"AryanG01":{"java":693,"md":0,"fxml":0,"sh":0,"bat":4,"gradle":0,"txt":32}},"authorContributionVariance":{"AryanG01":13208.839},"authorDisplayNameMap":{"AryanG01":"CS2103T-F10-1 ARYA..ANJU"}} diff --git a/Carlintyj_ip_master/commits.json b/Carlintyj_ip_master/commits.json index 24d9ecdf..e375113a 100644 --- a/Carlintyj_ip_master/commits.json +++ b/Carlintyj_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Carlintyj":[{"date":"2023-08-22","commitResults":[{"hash":"912d8cfe5ae97a83222112f1f7b9b5bbe3a8b763","isMergeCommit":false,"messageTitle":"Given chatbot a new name and implemented initial skeleton","messageBody":"","tags":["level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}},{"hash":"426e88b8230c62ab5dda4f85b83992f9ccb88a83","isMergeCommit":false,"messageTitle":"Improve skeletal version by echoing commands by user","messageBody":"","tags":["level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":5}}},{"hash":"74a1837d891cc06ea7bf86cac23797e60d4ceaa1","isMergeCommit":false,"messageTitle":"Added the ability to store whatever text entered by the user and display them back to the user when requested.","messageBody":"","tags":["level-2"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":1}}},{"hash":"24b17a3e5fbde98f729ad2a0fd7e0fea347568ec","isMergeCommit":false,"messageTitle":"Added the ability to mark tasks as done and back to not done.","messageBody":"","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":7}}},{"hash":"08603b8b2aec177ee9d61a3024a01e6c81a604d2","isMergeCommit":false,"messageTitle":"Added support for tracking three types of tasks","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":5}}},{"hash":"b96f64b64d52493401bead8164d3ceef1d404f6b","isMergeCommit":false,"messageTitle":"Test using I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":3,"deletions":2},"sh":{"insertions":0,"deletions":0}}},{"hash":"2872e615f280211512af79f879a72ea890c018de","isMergeCommit":false,"messageTitle":"Added Error Handling","messageBody":"","tags":["level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":61,"deletions":22}}},{"hash":"0b9beaabe4b68aec3a06dd8e6d1bd1401bab8e9a","isMergeCommit":false,"messageTitle":"Added support for deleting tasks from the list.","messageBody":"","tags":["level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":49,"deletions":31}}}]},{"date":"2023-08-29","commitResults":[{"hash":"c69d6b0133e26ecb05feb4d2a8bd9a96c4417471","isMergeCommit":false,"messageTitle":"Save tasks in the hard disk automatically whenever the task list changes.","messageBody":"","tags":["level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":190,"deletions":82}}},{"hash":"70384ae1d37fe6392808b7d584ec1ebc3c7cfc9a","isMergeCommit":false,"messageTitle":"Revert \"Save tasks in the hard disk automatically whenever the task list changes.\"","messageBody":"This reverts commit c69d6b0133e26ecb05feb4d2a8bd9a96c4417471.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":7},"java":{"insertions":82,"deletions":190}}},{"hash":"7419e6f4a8f1f887b89b3755e1617a5ccbad4c9f","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Save tasks in the hard disk automatically whenever the task list changes.\"\"","messageBody":"This reverts commit 70384ae1d37fe6392808b7d584ec1ebc3c7cfc9a.\n","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":190,"deletions":82}}},{"hash":"7f70cce68d82fb9fa5d09e538b0d732af416a020","isMergeCommit":false,"messageTitle":"Store dates as LocalDate","messageBody":"","tags":["level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":7},"java":{"insertions":62,"deletions":29}}}]},{"date":"2023-08-30","commitResults":[{"hash":"cc5770813dc53b2b1b440d278333cd18c2d24356","isMergeCommit":false,"messageTitle":"Configured program into more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":1},"java":{"insertions":451,"deletions":253}}},{"hash":"2f24ecc12be419d1017a29a5a389c320683b0180","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":15}}},{"hash":"9d66b26fc9fa8bbac5acfe05438b38b84e1098eb","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"* add-gradle-support:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"c27861be5e9cfa322bca8de760809a1b8390eac5","isMergeCommit":false,"messageTitle":"Automate project builds using Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1}}},{"hash":"46b3418e13a080fdfc4f23d591e3492f78f2801b","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":4},"java":{"insertions":114,"deletions":0}}},{"hash":"4e1042052ff4203d7f6230c60cc2f792cd436c57","isMergeCommit":false,"messageTitle":"Package App as JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"bedb067a571f134ed0cfc746d6af21088e17d3fc","isMergeCommit":false,"messageTitle":"Give users a way to find a task by searching for a keyword","messageBody":"","tags":["level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":42,"deletions":0}}},{"hash":"228e14ab0b604b749def7761165ac76a0d50ee1f","isMergeCommit":false,"messageTitle":"Follow coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":84}}},{"hash":"f1a6d9094dbbd85c60aaf4b9f7c98df59bad1645","isMergeCommit":false,"messageTitle":"JavaDocs for the Duke application","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":389,"deletions":3}}},{"hash":"1ac7ffaafb6819c5c867a03024d51c260390187a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Give users a way to find a task by searching for a keyword\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"be4f1660fb7db8e3ff5e7a9489d24e62ad946c78","isMergeCommit":false,"messageTitle":"Uses checkstyle to detect coding violations and fix it.","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":55}}},{"hash":"b0781902bc46bddb4cabab44b40e8b6914e575b8","isMergeCommit":false,"messageTitle":"Adds a GUI to the chatbot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":22,"deletions":1},"fxml":{"insertions":61,"deletions":0},"java":{"insertions":243,"deletions":79}}},{"hash":"8b0f3993f9ba1c1f30447a0cb112704d13e70705","isMergeCommit":false,"messageTitle":"Improves the GUI of chatbot","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":9,"deletions":9},"java":{"insertions":6,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"Carlintyj":{"java":1403,"md":0,"fxml":61,"sh":0,"bat":0,"gradle":27,"txt":29}},"authorContributionVariance":{"Carlintyj":166314.73},"authorDisplayNameMap":{"Carlintyj":"CS2103T-T17-4 TAN ..RLIN"}} +{"authorDailyContributionsMap":{"Carlintyj":[{"date":"2023-08-22","commitResults":[{"hash":"912d8cfe5ae97a83222112f1f7b9b5bbe3a8b763","isMergeCommit":false,"messageTitle":"Given chatbot a new name and implemented initial skeleton","messageBody":"","tags":["level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}},{"hash":"426e88b8230c62ab5dda4f85b83992f9ccb88a83","isMergeCommit":false,"messageTitle":"Improve skeletal version by echoing commands by user","messageBody":"","tags":["level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":5}}},{"hash":"74a1837d891cc06ea7bf86cac23797e60d4ceaa1","isMergeCommit":false,"messageTitle":"Added the ability to store whatever text entered by the user and display them back to the user when requested.","messageBody":"","tags":["level-2"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":1}}},{"hash":"24b17a3e5fbde98f729ad2a0fd7e0fea347568ec","isMergeCommit":false,"messageTitle":"Added the ability to mark tasks as done and back to not done.","messageBody":"","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":7}}},{"hash":"08603b8b2aec177ee9d61a3024a01e6c81a604d2","isMergeCommit":false,"messageTitle":"Added support for tracking three types of tasks","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":5}}},{"hash":"b96f64b64d52493401bead8164d3ceef1d404f6b","isMergeCommit":false,"messageTitle":"Test using I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":3,"deletions":2},"sh":{"insertions":0,"deletions":0}}},{"hash":"2872e615f280211512af79f879a72ea890c018de","isMergeCommit":false,"messageTitle":"Added Error Handling","messageBody":"","tags":["level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":61,"deletions":22}}},{"hash":"0b9beaabe4b68aec3a06dd8e6d1bd1401bab8e9a","isMergeCommit":false,"messageTitle":"Added support for deleting tasks from the list.","messageBody":"","tags":["level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":49,"deletions":31}}}]},{"date":"2023-08-29","commitResults":[{"hash":"c69d6b0133e26ecb05feb4d2a8bd9a96c4417471","isMergeCommit":false,"messageTitle":"Save tasks in the hard disk automatically whenever the task list changes.","messageBody":"","tags":["level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":190,"deletions":82}}},{"hash":"70384ae1d37fe6392808b7d584ec1ebc3c7cfc9a","isMergeCommit":false,"messageTitle":"Revert \"Save tasks in the hard disk automatically whenever the task list changes.\"","messageBody":"This reverts commit c69d6b0133e26ecb05feb4d2a8bd9a96c4417471.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":7},"java":{"insertions":82,"deletions":190}}},{"hash":"7419e6f4a8f1f887b89b3755e1617a5ccbad4c9f","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Save tasks in the hard disk automatically whenever the task list changes.\"\"","messageBody":"This reverts commit 70384ae1d37fe6392808b7d584ec1ebc3c7cfc9a.\n","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":190,"deletions":82}}},{"hash":"7f70cce68d82fb9fa5d09e538b0d732af416a020","isMergeCommit":false,"messageTitle":"Store dates as LocalDate","messageBody":"","tags":["level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":7},"java":{"insertions":62,"deletions":29}}}]},{"date":"2023-08-30","commitResults":[{"hash":"cc5770813dc53b2b1b440d278333cd18c2d24356","isMergeCommit":false,"messageTitle":"Configured program into more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":1},"java":{"insertions":451,"deletions":253}}},{"hash":"2f24ecc12be419d1017a29a5a389c320683b0180","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":15}}},{"hash":"9d66b26fc9fa8bbac5acfe05438b38b84e1098eb","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"* add-gradle-support:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"c27861be5e9cfa322bca8de760809a1b8390eac5","isMergeCommit":false,"messageTitle":"Automate project builds using Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1}}},{"hash":"46b3418e13a080fdfc4f23d591e3492f78f2801b","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":4},"java":{"insertions":114,"deletions":0}}},{"hash":"4e1042052ff4203d7f6230c60cc2f792cd436c57","isMergeCommit":false,"messageTitle":"Package App as JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"bedb067a571f134ed0cfc746d6af21088e17d3fc","isMergeCommit":false,"messageTitle":"Give users a way to find a task by searching for a keyword","messageBody":"","tags":["level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":42,"deletions":0}}},{"hash":"228e14ab0b604b749def7761165ac76a0d50ee1f","isMergeCommit":false,"messageTitle":"Follow coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":84}}},{"hash":"f1a6d9094dbbd85c60aaf4b9f7c98df59bad1645","isMergeCommit":false,"messageTitle":"JavaDocs for the Duke application","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":389,"deletions":3}}},{"hash":"1ac7ffaafb6819c5c867a03024d51c260390187a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Give users a way to find a task by searching for a keyword\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"be4f1660fb7db8e3ff5e7a9489d24e62ad946c78","isMergeCommit":false,"messageTitle":"Uses checkstyle to detect coding violations and fix it.","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":55}}},{"hash":"b0781902bc46bddb4cabab44b40e8b6914e575b8","isMergeCommit":false,"messageTitle":"Adds a GUI to the chatbot","messageBody":"","tags":["level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":22,"deletions":1},"fxml":{"insertions":61,"deletions":0},"java":{"insertions":243,"deletions":79}}},{"hash":"8b0f3993f9ba1c1f30447a0cb112704d13e70705","isMergeCommit":false,"messageTitle":"Improves the GUI of chatbot","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":9,"deletions":9},"java":{"insertions":6,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"Carlintyj":{"java":1403,"md":0,"fxml":61,"sh":0,"bat":0,"gradle":27,"txt":29}},"authorContributionVariance":{"Carlintyj":166314.73},"authorDisplayNameMap":{"Carlintyj":"CS2103T-T17-4 TAN ..RLIN"}} diff --git a/Chandan8186_ip_master/authorship.json b/Chandan8186_ip_master/authorship.json index 3681c75f..9f300e15 100644 --- a/Chandan8186_ip_master/authorship.json +++ b/Chandan8186_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Chandan8186":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"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":"Chandan8186"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Chandan8186":6,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import exceptions.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" * Duke is a chatbot that allows users to manage tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":"public class Duke {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" private static TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" private static Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" * Marks task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @throws DukeException If index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" public static void mark(int index)","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.markTaskAsDone(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" Ui.printMarkingOfTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" * Marks task as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" * @throws DukeException If index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" public static void unmark(int index)","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.unmarkTask(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" Ui.printUnmarkingOfTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" * Deletes task.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" * @throws DukeException If index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" public static void deleteTask(int index)","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.deleteTask(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" Ui.printDeletingOfTask(task, Duke.taskList.getSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" * Creates todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" public static void createTodo(String desc) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.addTodo(desc, 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":" Ui.printAddingOfTask(task, Duke.taskList.getSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" * Creates deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" * @param deadline Deadline date/time.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" * @throws DateTimeParseException If deadline doesn\u0027t match format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" public static void createDeadline(String desc, String deadline)","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" throws DateTimeParseException {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.addDeadline(desc, deadline, 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" Ui.printAddingOfTask(task, Duke.taskList.getSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" * Creates event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" * @param start Start date/time.","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" * @param end End date/time.","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" * @throws DateTimeParseException If start/end don\u0027t match format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":" public static void createEvent(String desc, String start, String end)","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" throws DateTimeParseException {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.addEvent(desc, start, end, 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" Ui.printAddingOfTask(task, Duke.taskList.getSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" * Prints out current tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":" public static void listTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Chandan8186"},"content":" Ui.printTaskList(Duke.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":103,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":104,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Chandan8186"},"content":" * Prints list of filtered tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Chandan8186"},"content":" * @param keyword String of list of filtered tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"Chandan8186"},"content":" public static void listFilteredTasks(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"Chandan8186"},"content":" Ui.printMessage(Duke.taskList.getMatchingTasks(keyword));","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Chandan8186"},"content":" * Runs the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"Chandan8186"},"content":" * @param filename Name of file to store task data.","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"Chandan8186"},"content":" public static void run(String filename) {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Chandan8186"},"content":" Storage storage \u003d new Storage(filename);","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Chandan8186"},"content":" Duke.storage \u003d storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Chandan8186"},"content":" Duke.taskList \u003d storage.retrieveSavedData();","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":123,"author":{"gitId":"Chandan8186"},"content":" Ui.printIntro();","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Chandan8186"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Chandan8186"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Chandan8186"},"content":" String bye \u003d \"bye\";","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":128,"author":{"gitId":"Chandan8186"},"content":" while (!userInput.toLowerCase().equals(bye)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":130,"author":{"gitId":"Chandan8186"},"content":" Parser.parseUserInput(userInput, Duke.taskList.getSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Chandan8186"},"content":" } catch (RuntimeException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":132,"author":{"gitId":"Chandan8186"},"content":" Ui.printMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"Chandan8186"},"content":" } finally {","lastModifiedDate":"2023-08-22"},{"lineNumber":134,"author":{"gitId":"Chandan8186"},"content":" userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":136,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":137,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":138,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"Chandan8186"},"content":" scanner.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"Chandan8186"},"content":" Ui.printOutro();","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":142,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":143,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"Chandan8186"},"content":" * Entrypoint into chatbot application.","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"Chandan8186"},"content":" * @param args Command line arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"Chandan8186"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"Chandan8186"},"content":" Duke.run(\"duke.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":152}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import exceptions.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidDeadlineException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidEventException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidTodoException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import exceptions.UnknownCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" * Parses user input and instructs Duke to act on the relevant command.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" * Parses the user input and asks Duke to invoke the relevant functions.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" * @param userInput The command and argument that the user enters.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @param taskListSize The current size of the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" * @return The command of the user input, if valid.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" * @throws UnknownCommandException If the command doesn\u0027t match any of Duke\u0027s commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" * @throws InvalidIndexException If the index provided is out of range, where relevant.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" * @throws InvalidTodoException If the user input is invalid (e.g. no description).","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" * @throws InvalidDeadlineException If the user input is invalid (e.g. no deadline).","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" * @throws InvalidEventException If the user input is invalid (e.g. no start).","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" public static String parseUserInput(String userInput, int taskListSize)","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" throws UnknownCommandException,","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" InvalidIndexException,","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" InvalidTodoException,","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" InvalidDeadlineException,","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" InvalidEventException {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" String[] inputArr \u003d userInput.trim().split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" if (inputArr.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" String command \u003d inputArr[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" switch(command) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" Duke.listTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" return \"list\";","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" case \"find\":","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" parseFilter(userInput);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" return \"find\";","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" parseMark(userInput, taskListSize);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" return \"mark\";","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" parseUnmark(userInput, taskListSize);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" return \"unmark\";","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" parseDelete(userInput, taskListSize);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" return \"delete\";","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" parseTodo(userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" return \"todo\";","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" parseDeadline(userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" return \"deadline\";","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":" parseEvent(userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" return \"event\";","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" private static void parseFilter(String userInput)","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(4).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" if (restOfInput.equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" throw new DukeException(\"No keyword was provided, please enter again.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" Duke.listFilteredTasks(restOfInput);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" private static void parseMark(String userInput, int taskListSize)","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" throws InvalidIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(4).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":" int taskNum \u003d Integer.parseInt(restOfInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" Duke.mark(taskNum);","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" } catch (NumberFormatException | DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(taskListSize);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" private static void parseUnmark(String userInput, int taskListSize)","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":" throws InvalidIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(6).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":" int taskNum \u003d Integer.parseInt(restOfInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" Duke.unmark(taskNum);","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" } catch (NumberFormatException | DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(taskListSize);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Chandan8186"},"content":" private static void parseDelete(String userInput, int taskListSize)","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Chandan8186"},"content":" throws InvalidIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(6).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Chandan8186"},"content":" int taskNum \u003d Integer.parseInt(restOfInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Chandan8186"},"content":" Duke.deleteTask(taskNum);","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Chandan8186"},"content":" } catch (NumberFormatException | DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(taskListSize);","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Chandan8186"},"content":" private static void parseTodo(String userInput)","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Chandan8186"},"content":" throws InvalidTodoException {","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(4).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Chandan8186"},"content":" if (restOfInput.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidTodoException();","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Chandan8186"},"content":" Duke.createTodo(restOfInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"Chandan8186"},"content":" private static void parseDeadline(String userInput)","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"Chandan8186"},"content":" throws InvalidDeadlineException {","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(8).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Chandan8186"},"content":" if (!restOfInput.contains(\"/by\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"Chandan8186"},"content":" String[] arr \u003d restOfInput.split(\"/by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"Chandan8186"},"content":" if (arr.length \u003c 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"Chandan8186"},"content":" String desc \u003d arr[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"Chandan8186"},"content":" String deadline \u003d arr[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"Chandan8186"},"content":" if (desc.equals(\"\") || deadline.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"Chandan8186"},"content":" Duke.createDeadline(desc, deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"Chandan8186"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"Chandan8186"},"content":" private static void parseEvent(String userInput)","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"Chandan8186"},"content":" throws InvalidEventException {","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(5).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"Chandan8186"},"content":" if (!restOfInput.contains(\"/from\") || !restOfInput.contains(\"/to\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"Chandan8186"},"content":" String[] arr \u003d restOfInput.split(\"/from|/to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"Chandan8186"},"content":" if (arr.length \u003c 3) {","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"Chandan8186"},"content":" String desc \u003d arr[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"Chandan8186"},"content":" String start \u003d arr[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"Chandan8186"},"content":" String end \u003d arr[2].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"Chandan8186"},"content":" if (desc.equals(\"\") || start.equals(\"\") || end.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"Chandan8186"},"content":" Duke.createEvent(desc, start, end);","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"Chandan8186"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Chandan8186":174}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" * Saves and retrieves tasks created by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" private final String FILENAME;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the file name indicated by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @param filename Name of file to read or write task data to or from.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" public Storage(String filename) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" this.FILENAME \u003d filename;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" * Obtains saved task data from data file and updates Duke with it.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" * @return A TaskList containing all the previously saved tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" public TaskList retrieveSavedData() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" ArrayList\u003cString\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" File f \u003d new File(\"data/\" + FILENAME);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" return new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" String str \u003d s.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" arr.add(str);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" s.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" return populate(arr);","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" return new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" * Parses stored task data and populates a TaskList with it.","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" * @param arr An array of tasks in the stored string format.","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" * @return A TaskList of the said tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" private TaskList populate(ArrayList\u003cString\u003e arr) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":" for (String str : arr) {","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" String[] segmented \u003d str.split(\"\\\\|\");","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" String taskType \u003d segmented[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" int isMarked \u003d Integer.parseInt(segmented[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" String desc \u003d segmented[2];","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" String end;","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" String start;","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":" case \"T\":","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" taskList.addTodo(desc, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" case \"D\":","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" end \u003d segmented[3];","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" taskList.addDeadline(desc, end, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" case \"E\":","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" end \u003d segmented[3];","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" start \u003d segmented[4];","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" taskList.addEvent(desc, start, end, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" return taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" * Creates a new data file or opens the existing one to update it with the latest tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":" * The format of the task string is \"~tasktype~|~isMarked~|~desc~|~end~|~start~\".","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" * Task type is T/D/E and isMarked is 0 for false and 1 for true.","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":" * @param taskList The TaskList containing the latest tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Chandan8186"},"content":" public void saveChanges(TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"Chandan8186"},"content":" File directory \u003d new File(\"data\");","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"Chandan8186"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"Chandan8186"},"content":" directory.mkdirs();","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"Chandan8186"},"content":" FileWriter fileWriter \u003d new FileWriter(\"data/\" + FILENAME);","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Chandan8186"},"content":" fileWriter.write(\"\");","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"Chandan8186"},"content":" fileWriter.append(taskList.getTextFormattedString());","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"Chandan8186"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"Chandan8186"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Chandan8186"},"content":" Ui.printMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Chandan8186":117}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":" * Prints formatted outputs for all the commands","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" private static final String HORIZONTAL_LINE \u003d","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" \"_____________________________________________________\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" private static final String INTRO_MESSAGE \u003d HORIZONTAL_LINE","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" + \" ____ _ _ ____ _____ ____ _ ____ _____\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" + \"/ (__`| |_| | / () \\\\|_ _|/ () \\\\ | |__ / () \\\\|_ _|\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" + \"\\\\____)|_| |_|/__/\\\\__\\\\ |_| /__/\\\\__\\\\|____|\\\\____/ |_|\\n\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" + \"Hello! I\u0027m ChatALot.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" + HORIZONTAL_LINE;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" private static final String OUTRO_MESSAGE \u003d HORIZONTAL_LINE","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" + \"Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" + HORIZONTAL_LINE;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" public static void printIntro() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" System.out.print(INTRO_MESSAGE);","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" public static void printOutro() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" System.out.print(OUTRO_MESSAGE);","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" * Prints the formatted output for when a task is added.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" * @param taskListSize The task list size after the task was added.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" public static void printAddingOfTask(Task task, int taskListSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" + task","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" + \"\\nNow you have \"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" + taskListSize","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" * Prints the formatted output for when a task is deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" * @param taskListSize The task list size after the task was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" public static void printDeletingOfTask(Task task, int taskListSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" System.out.println(String.format(\"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" + task","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" + \"\\nNow you have %d tasks in the list.\", taskListSize));","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":" * Prints the formatted output for when a task is marked complete.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" * @param task Task that was marked complete.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" public static void printMarkingOfTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" + task);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" * Prints the formatted output for when a task is marked incomplete.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" * @param task Task that was marked incomplete.","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" public static void printUnmarkingOfTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":" + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" + task);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" * Prints the current task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":" * @param taskList The task list to be printed.","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" public static void printTaskList(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" System.out.println(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Chandan8186"},"content":" * Prints any arbitrary message.","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Chandan8186"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Chandan8186"},"content":" public static void printMessage(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Chandan8186"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Chandan8186"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"Chandan8186"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Chandan8186":112}},{"path":"src/main/java/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A runtime exception thrown by Duke chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" * All other duke-specific exceptions will extend DukeException.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"public class DukeException extends RuntimeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initialises the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" * @param errorMessage Error message to be shown.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":17}},{"path":"src/main/java/exceptions/InvalidDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for invalid deadline task command.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class InvalidDeadlineException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" public InvalidDeadlineException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" super(\"Missing description/end for deadline task.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: deadline \u003ctask description\u003e /by \u003cyyyy-MM-dd HHmm\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":15}},{"path":"src/main/java/exceptions/InvalidEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for invalid event task command.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class InvalidEventException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" public InvalidEventException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" super(\"Missing description/start/end for event task.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: event \u003ctask description\u003e \"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" + \"/from \u003cyyyy-MM-dd HHmm\u003e /to \u003cyyyy-MM-dd HHmm\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":16}},{"path":"src/main/java/exceptions/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for invalid index when marking, unmarking or deleting task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class InvalidIndexException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" * @param listSize The size of the current task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" public InvalidIndexException(int listSize) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" super(String.format(\"Invalid index format.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: mark \u003ctask index\u003e OR unmark \u003ctask index\u003e \"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" + \"OR delete \u003ctask index\u003e\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" + \"where index is from 1 to %d.\", listSize));","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":19}},{"path":"src/main/java/exceptions/InvalidTodoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for invalid event task command.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class InvalidTodoException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" public InvalidTodoException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" super(\"Missing description for todo task.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: todo \u003ctask description\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":15}},{"path":"src/main/java/exceptions/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for an unknown command by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class UnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" public UnknownCommandException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" super(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":14}},{"path":"src/main/java/tasks/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":" * A deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" protected static final DateTimeFormatter INPUT_FORMAT \u003d","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" protected static final DateTimeFormatter DISPLAY_FORMAT \u003d","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" protected LocalDateTime deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes task description, deadline and isMarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" * @param desc Task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" * @param deadline Deadline date/time of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked 1 if is marked, 0 otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" public DeadlineTask(String desc, LocalDateTime deadline, int isMarked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" super(desc);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" if (isMarked \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" protected String getTextFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"D|%d|%s|%s\", this.isDone ? 1 : 0,","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" this.desc, this.deadline.format(INPUT_FORMAT));","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"[D]%s (by: %s)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" super.toString(),","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" this.deadline.format(DISPLAY_FORMAT));","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":45}},{"path":"src/main/java/tasks/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":" * An event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" protected static final DateTimeFormatter INPUT_FORMAT \u003d","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" protected static final DateTimeFormatter DISPLAY_FORMAT \u003d","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" protected LocalDateTime end;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes task description, start, end and isMarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @param desc Task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" * @param start Start date/time of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" * @param end End date/time of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked 1 if is marked, 0 otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" public EventTask(String desc, LocalDateTime start, LocalDateTime end, int isMarked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" super(desc);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" if (isMarked \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" protected String getTextFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"E|%d|%s|%s|%s\", this.isDone ? 1 : 0, this.desc,","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" this.end.format(INPUT_FORMAT),","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" this.start.format(INPUT_FORMAT));","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" super.toString(),","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" this.start.format(DISPLAY_FORMAT),","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" this.end.format(DISPLAY_FORMAT));","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":51}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * Abstract class representing a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" * All specific tasks will be its child classes.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" /** The task description */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" protected String desc;","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" /** Boolean indicating completion status */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes task description.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" * @param desc Task Description.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" public Task(String desc) {","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" /** Method signature for abstract method getTextFormattedString */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" protected abstract String getTextFormattedString();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" * Returns string representation of completion status.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" * @return String representation of completion status.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" * Marks task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" protected void markAsDone() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" * Marks task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" protected void unmark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" * Returns string representation of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" * @return String representation of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"[%s] %s\", getStatusIcon(), this.desc);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":61}},{"path":"src/main/java/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.lang.StringBuilder;","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"import exceptions.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" * Represents a list of all user tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"public class TaskList {","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" protected static final DateTimeFormatter DATETIME_FORMAT \u003d","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes array list.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" public TaskList() {","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" * Creates a todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked If task is marked, 1, else, 0.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" * @return A todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" public Task addTodo(String desc, int isMarked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new TodoTask(desc, isMarked);","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" * Creates a deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" * @param deadline Deadline date/time of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked If task is marked, 1, else, 0.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" * @return A deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" * @throws DateTimeParseException If deadline doesn\u0027t have format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" public Task addDeadline(String desc, String deadline, int isMarked)","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" throws DateTimeParseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(deadline, DATETIME_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new DeadlineTask(desc, dateTime, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" * Creates an event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" * @param start Start date/time of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" * @param end End date/time of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked If task is marked, 1, else, 0.","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" * @return An event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":" * @throws DateTimeParseException If start/end doesn\u0027t have format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" public Task addEvent(String desc, String start, String end, int isMarked)","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" throws DateTimeParseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" LocalDateTime dateTimeStart \u003d LocalDateTime.parse(start, DATETIME_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" LocalDateTime dateTimeEnd \u003d LocalDateTime.parse(end, DATETIME_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new EventTask(desc, dateTimeStart, dateTimeEnd, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" * Marks task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" * @param i Index of task to be marked done.","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" * @return Task which was marked done.","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" public Task markTaskAsDone(int i) {","lastModifiedDate":"2023-08-20"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" if (this.tasks.size() \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" throw new DukeException(\"The task list is empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" if (i \u003c 1 || i \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d this.tasks.get(i - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-20"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-20"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" * Marks task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" * @param i Index of task to be marked not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" * @return Task which was marked not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":" public Task unmarkTask(int i) {","lastModifiedDate":"2023-08-20"},{"lineNumber":101,"author":{"gitId":"Chandan8186"},"content":" if (this.tasks.size() \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Chandan8186"},"content":" throw new DukeException(\"The task list is empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Chandan8186"},"content":" if (i \u003c 1 || i \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d this.tasks.get(i - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Chandan8186"},"content":" task.unmark();","lastModifiedDate":"2023-08-20"},{"lineNumber":109,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-20"},{"lineNumber":110,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":111,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":112,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Chandan8186"},"content":" * Deletes a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Chandan8186"},"content":" * @param i Index of task to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Chandan8186"},"content":" * @return The deleted task.","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Chandan8186"},"content":" public Task deleteTask(int i) {","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"Chandan8186"},"content":" if (this.tasks.size() \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Chandan8186"},"content":" throw new DukeException(\"The task list is empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"Chandan8186"},"content":" if (i \u003c 1 || i \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Chandan8186"},"content":" return this.tasks.remove(i - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":127,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":128,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Chandan8186"},"content":" * Returns size of task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"Chandan8186"},"content":" * @return Size of task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Chandan8186"},"content":" public int getSize() {","lastModifiedDate":"2023-08-20"},{"lineNumber":134,"author":{"gitId":"Chandan8186"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":136,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":137,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"Chandan8186"},"content":" * Returns the task list in the relevant format for storing in data file.","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"Chandan8186"},"content":" * @return The task list string with the relevant format.","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"Chandan8186"},"content":" public String getTextFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"Chandan8186"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"Chandan8186"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"Chandan8186"},"content":" str.append(task.getTextFormattedString() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"Chandan8186"},"content":" return str.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"Chandan8186"},"content":" * Returns string representation of filtered task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"Chandan8186"},"content":" * @return String representation of filtered task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"Chandan8186"},"content":" public String getMatchingTasks(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"Chandan8186"},"content":" ArrayList\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"Chandan8186"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"Chandan8186"},"content":" if (task.desc.contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"Chandan8186"},"content":" filteredTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"Chandan8186"},"content":" if (filteredTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"Chandan8186"},"content":" return \"No task matches the given keyword.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"Chandan8186"},"content":" StringBuilder str \u003d new StringBuilder(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"Chandan8186"},"content":" for (int i \u003d 1; i \u003c\u003d filteredTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"Chandan8186"},"content":" str.append(i + \". \" + filteredTasks.get(i - 1).toString() + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"Chandan8186"},"content":" return str.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"Chandan8186"},"content":" * Returns string representation of task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"Chandan8186"},"content":" * @return String representation of task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":179,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":180,"author":{"gitId":"Chandan8186"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-08-20"},{"lineNumber":181,"author":{"gitId":"Chandan8186"},"content":" int len \u003d this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"Chandan8186"},"content":" if (len \u003d\u003d 0) {","lastModifiedDate":"2023-08-20"},{"lineNumber":183,"author":{"gitId":"Chandan8186"},"content":" return \"The task list is empty.\";","lastModifiedDate":"2023-08-20"},{"lineNumber":184,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":185,"author":{"gitId":"Chandan8186"},"content":" str.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-08-20"},{"lineNumber":186,"author":{"gitId":"Chandan8186"},"content":" for (int i \u003d 1; i \u003c len; i++) {","lastModifiedDate":"2023-08-20"},{"lineNumber":187,"author":{"gitId":"Chandan8186"},"content":" str.append(i + \". \" + this.tasks.get(i - 1) + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":189,"author":{"gitId":"Chandan8186"},"content":" str.append(len + \". \" + this.tasks.get(len - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"Chandan8186"},"content":" return str.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":191,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":192,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":193,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":193}},{"path":"src/main/java/tasks/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class TodoTask extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes task description and isMarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" * @param desc Task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked 1 if is marked, 0 otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" public TodoTask(String desc, int isMarked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" super(desc);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" if (isMarked \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" protected String getTextFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"T|%d|%s\", this.isDone ? 1 : 0, this.desc);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":31}},{"path":"src/test/java/tasks/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" public void testTodoTask_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" Task todoTask \u003d taskList.addTodo(\"some todo\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][ ] some todo\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" public void testDeadlineTask_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" Task deadlineTask \u003d taskList.addDeadline(\"some deadline\",","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" \"2023-01-01 1500\",","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"[D][ ] some deadline (by: 01-Jan-2023 1500)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, deadlineTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" public void testDeadlineTask_invalidDatetime_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" taskList.addDeadline(\"some deadline\",","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" \"2023-01-01 later\",","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"Text \u00272023-01-01 later\u0027 could not be parsed at index 11\";","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" public void testEventTask_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" Task eventTask \u003d taskList.addEvent(\"some event\",","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" \"2023-01-01 1530\",","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" \"2023-01-01 1600\",","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"[E][ ] some event (from: 01-Jan-2023 1530 to: 01-Jan-2023 1600)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, eventTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" public void testEventTask_invalidDatetime_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" taskList.addEvent(\"some deadline\",","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" \"today\",","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" \"tomorrow\",","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"Text \u0027today\u0027 could not be parsed at index 0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" public void testMarkTask_validIndex_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" Task todoTask \u003d taskList.addTodo(\"A todo task.\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][ ] A todo task.\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" taskList.markTaskAsDone(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][X] A todo task.\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" public void testMarkTask_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" taskList.addTodo(\"A todo task.\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" taskList.markTaskAsDone(3);","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"Invalid index format.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: mark \u003ctask index\u003e OR unmark \u003ctask index\u003e \"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":" + \"OR delete \u003ctask index\u003e\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" + \"where index is from 1 to 1.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" public void testUnmarkTask_validIndex_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" Task todoTask \u003d taskList.addTodo(\"Another todo task.\", 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][X] Another todo task.\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":" taskList.unmarkTask(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][ ] Another todo task.\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Chandan8186":100}},{"path":"src/test/java/tasks/TodoTaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"public class TodoTaskTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" public void testTodoTaskFormat_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new TodoTask(\"A todo task\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"T|0|A todo task\", task.getTextFormattedString());","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" public void testTodoTaskSaveFormat_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new TodoTask(\"A todo task\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][ ] A todo task\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Chandan8186":21}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"todo Assignment 1","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"deadline Assignment 2 /by 2023-01-01 1245","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"event exam /from 2023-01-01 1245 /to 2023-01-01 1300","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"unmark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"delete 2","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"unknown command","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"deadline /by","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"event something /from /to tomorrow","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":"deadline a /by b","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"event a /from b /to c","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"mark 0","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Chandan8186":17}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Chandan8186":1,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/Duke/*.java","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Chandan8186":1,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Chandan8186":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Chandan8186":21,"-":41}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" private void flip() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" db.flip();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" return db;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Chandan8186":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import exceptions.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" * Duke is a chatbot that allows users to manage tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"public class Duke {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" protected static TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" protected static Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" * Marks task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" * @return String to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @throws DukeException If index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" public static String markTask(int index)","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.markTaskAsDone(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskMarkingMessage(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" * Marks task as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" * @return String to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" * @throws DukeException If index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" public static String unmarkTask(int index)","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.unmarkTask(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskUnmarkingMessage(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" * Deletes task.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" * @return String to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" * @throws DukeException If index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" public static String deleteTask(int index)","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.deleteTask(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskDeletingMessage(task, Duke.taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" * Creates todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" * @return Message to be shown after task is created.","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":" public static String createTodo(String desc) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.addTodo(desc, 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskAddingMessage(task, Duke.taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" * Creates deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" * @param deadline Deadline date/time.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" * @return Message to be shown after task is created.","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" * @throws DateTimeParseException If deadline doesn\u0027t match format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" public static String createDeadline(String desc, String deadline)","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" throws DateTimeParseException {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.addDeadline(desc, deadline, 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskAddingMessage(task, Duke.taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" * Creates event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":" * @param start Start date/time.","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" * @param end End date/time.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" * @return Message to be shown after task is created.","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":" * @throws DateTimeParseException If start/end don\u0027t match format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" public static String createEvent(String desc, String start, String end)","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":" throws DateTimeParseException {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.addEvent(desc, start, end, 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskAddingMessage(task, Duke.taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":101,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":102,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Chandan8186"},"content":" * Gives list of current tasks in output message format.","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Chandan8186"},"content":" * @return Message to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Chandan8186"},"content":" public static String listTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Chandan8186"},"content":" return Duke.taskList.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":110,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":111,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Chandan8186"},"content":" * Gives list of current tasks in output message format.","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Chandan8186"},"content":" * @param keyword String of keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"Chandan8186"},"content":" * @return Message to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Chandan8186"},"content":" public static String listFilteredTasks(String keyword) {","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Chandan8186"},"content":" return Duke.taskList.getMatchingTasks(keyword);","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"Chandan8186"},"content":" * Gets the response string to be printed to the user after processing user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"Chandan8186"},"content":" * @param userInput User input.","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"Chandan8186"},"content":" * @return The response string.","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"Chandan8186"},"content":" protected String getResponse(String userInput) {","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"Chandan8186"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"Chandan8186"},"content":" output \u003d Parser.parseUserInput(userInput, Duke.taskList.getSize());","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"Chandan8186"},"content":" } catch (RuntimeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"Chandan8186"},"content":" output \u003d e.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"Chandan8186"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"Chandan8186"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":138}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Chandan8186":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" Storage storage \u003d new Storage(\"duke.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" duke.storage \u003d storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" duke.taskList \u003d storage.retrieveSavedData();","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Chandan8186":36}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" private Duke duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/userAvatar.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/dukeAvatar.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(Ui.getIntroMessage(), dukeImage));","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" DialogBox userDialog \u003d DialogBox.getUserDialog(input, userImage);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" userDialog.setMinHeight(Region.USE_PREF_SIZE);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" DialogBox dukeDialog \u003d DialogBox.getDukeDialog(response, dukeImage);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" dukeDialog.setMinHeight(Region.USE_PREF_SIZE);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" userDialog,","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" dukeDialog","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Chandan8186":60}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import exceptions.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidDeadlineException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidEventException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidTodoException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import exceptions.UnknownCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" * Parses user input and instructs Duke to act on the relevant command.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" * Parses the user input and asks Duke to invoke the relevant functions.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" * @param userInput The command and argument that the user enters.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @param taskListSize The current size of the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" * @return The command of the user input, if valid.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" * @throws UnknownCommandException If the command doesn\u0027t match any of Duke\u0027s commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" * @throws InvalidIndexException If the index provided is out of range, where relevant.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" * @throws InvalidTodoException If the user input is invalid (e.g. no description).","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" * @throws InvalidDeadlineException If the user input is invalid (e.g. no deadline).","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" * @throws InvalidEventException If the user input is invalid (e.g. no start).","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" public static String parseUserInput(String userInput, int taskListSize)","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" throws UnknownCommandException,","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" InvalidIndexException,","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" InvalidTodoException,","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" InvalidDeadlineException,","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" InvalidEventException {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" String[] inputArr \u003d userInput.trim().split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" if (inputArr.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" String command \u003d inputArr[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" switch(command) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" return Duke.listTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" case \"find\":","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" return parseFilter(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" return parseMark(userInput, taskListSize);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" return parseUnmark(userInput, taskListSize);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" return parseDelete(userInput, taskListSize);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" return parseTodo(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" return parseDeadline(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" return parseEvent(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" case \"bye\":","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" return Ui.getOutroMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" private static String parseFilter(String userInput)","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(4).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" if (restOfInput.equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" throw new DukeException(\"No keyword was provided, please enter again.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" return Duke.listFilteredTasks(restOfInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" private static String parseMark(String userInput, int taskListSize)","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" throws InvalidIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(4).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" int taskNum \u003d Integer.parseInt(restOfInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" return Duke.markTask(taskNum);","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(taskListSize);","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" private static String parseUnmark(String userInput, int taskListSize)","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" throws InvalidIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(6).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":" int taskNum \u003d Integer.parseInt(restOfInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" return Duke.unmarkTask(taskNum);","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(taskListSize);","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" private static String parseDelete(String userInput, int taskListSize)","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" throws InvalidIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(6).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Chandan8186"},"content":" int taskNum \u003d Integer.parseInt(restOfInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Chandan8186"},"content":" return Duke.deleteTask(taskNum);","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"Chandan8186"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(taskListSize);","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Chandan8186"},"content":" private static String parseTodo(String userInput)","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Chandan8186"},"content":" throws InvalidTodoException {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(4).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Chandan8186"},"content":" if (restOfInput.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidTodoException();","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Chandan8186"},"content":" return Duke.createTodo(restOfInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Chandan8186"},"content":" private static String parseDeadline(String userInput)","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Chandan8186"},"content":" throws InvalidDeadlineException {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(8).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Chandan8186"},"content":" if (!restOfInput.contains(\"/by\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Chandan8186"},"content":" String[] arr \u003d restOfInput.split(\"/by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Chandan8186"},"content":" if (arr.length \u003c 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"Chandan8186"},"content":" String desc \u003d arr[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"Chandan8186"},"content":" String deadline \u003d arr[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Chandan8186"},"content":" if (desc.equals(\"\") || deadline.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"Chandan8186"},"content":" return Duke.createDeadline(desc, deadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"Chandan8186"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"Chandan8186"},"content":" private static String parseEvent(String userInput)","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"Chandan8186"},"content":" throws InvalidEventException {","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(5).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"Chandan8186"},"content":" if (!restOfInput.contains(\"/from\") || !restOfInput.contains(\"/to\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"Chandan8186"},"content":" String[] arr \u003d restOfInput.split(\"/from|/to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"Chandan8186"},"content":" if (arr.length \u003c 3) {","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"Chandan8186"},"content":" String desc \u003d arr[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"Chandan8186"},"content":" String start \u003d arr[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"Chandan8186"},"content":" String end \u003d arr[2].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"Chandan8186"},"content":" if (desc.equals(\"\") || start.equals(\"\") || end.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"Chandan8186"},"content":" return Duke.createEvent(desc, start, end);","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"Chandan8186"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Chandan8186":168}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" * Saves and retrieves tasks created by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" private final String FILENAME;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the file name indicated by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @param filename Name of file to read or write task data to or from.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" public Storage(String filename) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" this.FILENAME \u003d filename;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" * Obtains saved task data from data file and updates Duke with it.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" * @return A TaskList containing all the previously saved tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" public TaskList retrieveSavedData() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" ArrayList\u003cString\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" File f \u003d new File(\"data/\" + FILENAME);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" return new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" String str \u003d s.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" arr.add(str);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" s.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" return populate(arr);","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" return new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" System.out.println(\"There was an error parsing the data in the data file; \"","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" + \"the file might have been tampered with externally.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" System.out.println(\"Hence, the data will be cleared.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" return new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" * Parses stored task data and populates a TaskList with it.","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" * @param arr An array of tasks in the stored string format.","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":" * @return A TaskList of the said tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" private TaskList populate(ArrayList\u003cString\u003e arr) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" for (String str : arr) {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" String[] segmented \u003d str.split(\"\\\\|\");","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" String taskType \u003d segmented[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" int isMarked \u003d Integer.parseInt(segmented[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":" String desc \u003d segmented[2];","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" String end;","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" String start;","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" case \"T\":","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" taskList.addTodo(desc, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" case \"D\":","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" end \u003d segmented[3];","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" taskList.addDeadline(desc, end, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" case \"E\":","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" end \u003d segmented[3];","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" start \u003d segmented[4];","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" taskList.addEvent(desc, start, end, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":" return taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":" * Creates a new data file or opens the existing one to update it with the latest tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Chandan8186"},"content":" * The format of the task string is \"~tasktype~|~isMarked~|~desc~|~end~|~start~\".","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Chandan8186"},"content":" * Task type is T/D/E and isMarked is 0 for false and 1 for true.","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Chandan8186"},"content":" * @param taskList The TaskList containing the latest tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Chandan8186"},"content":" public void saveChanges(TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"Chandan8186"},"content":" File directory \u003d new File(\"data\");","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"Chandan8186"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"Chandan8186"},"content":" directory.mkdirs();","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"Chandan8186"},"content":" FileWriter fileWriter \u003d new FileWriter(\"data/\" + FILENAME);","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Chandan8186"},"content":" fileWriter.write(\"\");","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"Chandan8186"},"content":" fileWriter.append(taskList.getTextFormattedString());","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"Chandan8186"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"Chandan8186"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Chandan8186"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Chandan8186":122}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":" * Provides formatted string outputs to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" private static final String INTRO_MESSAGE \u003d \"Hello! I\u0027m ChatALot.\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" + \"What can I do for you?\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" private static final String OUTRO_MESSAGE \u003d","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" \"Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" + \"You may close the window to end the chat.\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" public static String getIntroMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" return INTRO_MESSAGE;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" public static String getOutroMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" return OUTRO_MESSAGE;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" * Gives the formatted output for when a task is added.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" * @param taskListSize The task list size after the task was added.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" * @return The formatted output for when a task is added","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" public static String getTaskAddingMessage(Task task, int taskListSize) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" + task","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" + \"\\nNow you have \"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" + taskListSize","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" + \" tasks in the list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" * Gives the formatted output for when a task is deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" * @param taskListSize The task list size after the task was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" * @return The formatted output for when a task is deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" public static String getTaskDeletingMessage(Task task, int taskListSize) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" + task","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" + \"\\nNow you have %d tasks in the list.\", taskListSize);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" * Gives the formatted output for when a task is marked complete.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" * @param task Task that was marked complete.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" * @return The formatted output for when a task is marked complete.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" public static String getTaskMarkingMessage(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" + task;","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" * Gives the formatted output for when a task is marked incomplete.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" * @param task Task that was marked incomplete.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" * @return The formatted output for when a task is marked incomplete.","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" public static String getTaskUnmarkingMessage(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":" + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" + task;","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Chandan8186":78}},{"path":"src/main/java/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A runtime exception thrown by Duke chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" * All other duke-specific exceptions will extend DukeException.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"public class DukeException extends RuntimeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initialises the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" * @param errorMessage Error message to be shown.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":17}},{"path":"src/main/java/exceptions/InvalidDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for invalid deadline task command.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class InvalidDeadlineException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" public InvalidDeadlineException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" super(\"Missing description/end for deadline task.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: deadline \u003ctask description\u003e /by \u003cyyyy-MM-dd HHmm\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":15}},{"path":"src/main/java/exceptions/InvalidEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for invalid event task command.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class InvalidEventException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" public InvalidEventException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" super(\"Missing description/start/end for event task.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: event \u003ctask description\u003e \"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" + \"/from \u003cyyyy-MM-dd HHmm\u003e /to \u003cyyyy-MM-dd HHmm\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":16}},{"path":"src/main/java/exceptions/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for invalid index when marking, unmarking or deleting task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class InvalidIndexException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" * @param listSize The size of the current task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" public InvalidIndexException(int listSize) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" super(String.format(\"Invalid index format.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: mark \u003ctask index\u003e OR unmark \u003ctask index\u003e \"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" + \"OR delete \u003ctask index\u003e\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" + \"where index is from 1 to %d.\", listSize));","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":19}},{"path":"src/main/java/exceptions/InvalidTodoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for invalid event task command.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class InvalidTodoException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" public InvalidTodoException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" super(\"Missing description for todo task.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: todo \u003ctask description\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":15}},{"path":"src/main/java/exceptions/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for an unknown command by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class UnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" public UnknownCommandException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" super(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":14}},{"path":"src/main/java/tasks/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":" * A deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" private static final DateTimeFormatter INPUT_FORMAT \u003d","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" private static final DateTimeFormatter DISPLAY_FORMAT \u003d","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" private final LocalDateTime deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes task description, deadline and isMarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" * @param desc Task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" * @param deadline Deadline date/time of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked 1 if is marked, 0 otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" public DeadlineTask(String desc, LocalDateTime deadline, int isMarked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" super(desc);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" if (isMarked \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" protected String getTextFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"D|%d|%s|%s\", this.isDone ? 1 : 0,","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" this.desc, this.deadline.format(INPUT_FORMAT));","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"[D]%s (by: %s)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" super.toString(),","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" this.deadline.format(DISPLAY_FORMAT));","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":45}},{"path":"src/main/java/tasks/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":" * An event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" private static final DateTimeFormatter INPUT_FORMAT \u003d","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" private static final DateTimeFormatter DISPLAY_FORMAT \u003d","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" private final LocalDateTime start;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" private final LocalDateTime end;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes task description, start, end and isMarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @param desc Task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" * @param start Start date/time of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" * @param end End date/time of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked 1 if is marked, 0 otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" public EventTask(String desc, LocalDateTime start, LocalDateTime end, int isMarked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" super(desc);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" if (isMarked \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" protected String getTextFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"E|%d|%s|%s|%s\", this.isDone ? 1 : 0, this.desc,","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" this.end.format(INPUT_FORMAT),","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" this.start.format(INPUT_FORMAT));","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" super.toString(),","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" this.start.format(DISPLAY_FORMAT),","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" this.end.format(DISPLAY_FORMAT));","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":51}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * Abstract class representing a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" * All specific tasks will be its child classes.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" /** The task description */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" protected String desc;","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" /** Boolean indicating completion status */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes task description.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" * @param desc Task Description.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" public Task(String desc) {","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" /** Method signature for abstract method getTextFormattedString */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" protected abstract String getTextFormattedString();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" * Returns string representation of completion status.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" * @return String representation of completion status.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" * Marks task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" protected void markAsDone() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" * Marks task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" protected void unmark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" * Returns string representation of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" * @return String representation of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"[%s] %s\", getStatusIcon(), this.desc);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":61}},{"path":"src/main/java/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.lang.StringBuilder;","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"import exceptions.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" * Represents a list of all user tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"public class TaskList {","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" protected static final DateTimeFormatter DATETIME_FORMAT \u003d","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes array list.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" public TaskList() {","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" * Creates a todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked If task is marked, 1, else, 0.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" * @return A todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" public Task addTodo(String desc, int isMarked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new TodoTask(desc, isMarked);","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" * Creates a deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" * @param deadline Deadline date/time of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked If task is marked, 1, else, 0.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" * @return A deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" * @throws DateTimeParseException If deadline doesn\u0027t have format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" public Task addDeadline(String desc, String deadline, int isMarked)","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" throws DateTimeParseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(deadline, DATETIME_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new DeadlineTask(desc, dateTime, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" * Creates an event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" * @param start Start date/time of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" * @param end End date/time of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked If task is marked, 1, else, 0.","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" * @return An event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":" * @throws DateTimeParseException If start/end doesn\u0027t have format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" public Task addEvent(String desc, String start, String end, int isMarked)","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" throws DateTimeParseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" LocalDateTime dateTimeStart \u003d LocalDateTime.parse(start, DATETIME_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" LocalDateTime dateTimeEnd \u003d LocalDateTime.parse(end, DATETIME_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new EventTask(desc, dateTimeStart, dateTimeEnd, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" * Marks task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" * @param i Index of task to be marked done.","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" * @return Task which was marked done.","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" public Task markTaskAsDone(int i) {","lastModifiedDate":"2023-08-20"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" if (this.tasks.size() \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" throw new DukeException(\"The task list is empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" if (i \u003c 1 || i \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d this.tasks.get(i - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-20"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-20"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" * Marks task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" * @param i Index of task to be marked not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" * @return Task which was marked not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":" public Task unmarkTask(int i) {","lastModifiedDate":"2023-08-20"},{"lineNumber":101,"author":{"gitId":"Chandan8186"},"content":" if (this.tasks.size() \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Chandan8186"},"content":" throw new DukeException(\"The task list is empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Chandan8186"},"content":" if (i \u003c 1 || i \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d this.tasks.get(i - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Chandan8186"},"content":" task.unmark();","lastModifiedDate":"2023-08-20"},{"lineNumber":109,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-20"},{"lineNumber":110,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":111,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":112,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Chandan8186"},"content":" * Deletes a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Chandan8186"},"content":" * @param i Index of task to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Chandan8186"},"content":" * @return The deleted task.","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Chandan8186"},"content":" public Task deleteTask(int i) {","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"Chandan8186"},"content":" if (this.tasks.size() \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Chandan8186"},"content":" throw new DukeException(\"The task list is empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"Chandan8186"},"content":" if (i \u003c 1 || i \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Chandan8186"},"content":" return this.tasks.remove(i - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":127,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":128,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Chandan8186"},"content":" * Returns size of task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"Chandan8186"},"content":" * @return Size of task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Chandan8186"},"content":" public int getSize() {","lastModifiedDate":"2023-08-20"},{"lineNumber":134,"author":{"gitId":"Chandan8186"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":136,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":137,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"Chandan8186"},"content":" * Returns the task list in the relevant format for storing in data file.","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"Chandan8186"},"content":" * @return The task list string with the relevant format.","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"Chandan8186"},"content":" public String getTextFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"Chandan8186"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"Chandan8186"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"Chandan8186"},"content":" str.append(task.getTextFormattedString() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"Chandan8186"},"content":" return str.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"Chandan8186"},"content":" * Returns string representation of filtered task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"Chandan8186"},"content":" * @return String representation of filtered task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"Chandan8186"},"content":" public String getMatchingTasks(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"Chandan8186"},"content":" ArrayList\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"Chandan8186"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"Chandan8186"},"content":" if (task.desc.contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"Chandan8186"},"content":" filteredTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"Chandan8186"},"content":" if (filteredTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"Chandan8186"},"content":" return \"No task matches the given keyword.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"Chandan8186"},"content":" StringBuilder str \u003d new StringBuilder(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"Chandan8186"},"content":" for (int i \u003d 1; i \u003c\u003d filteredTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"Chandan8186"},"content":" str.append(i + \". \" + filteredTasks.get(i - 1).toString() + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"Chandan8186"},"content":" return str.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"Chandan8186"},"content":" * Returns string representation of task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"Chandan8186"},"content":" * @return String representation of task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":179,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":180,"author":{"gitId":"Chandan8186"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-08-20"},{"lineNumber":181,"author":{"gitId":"Chandan8186"},"content":" int len \u003d this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"Chandan8186"},"content":" if (len \u003d\u003d 0) {","lastModifiedDate":"2023-08-20"},{"lineNumber":183,"author":{"gitId":"Chandan8186"},"content":" return \"The task list is empty.\";","lastModifiedDate":"2023-08-20"},{"lineNumber":184,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":185,"author":{"gitId":"Chandan8186"},"content":" str.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-08-20"},{"lineNumber":186,"author":{"gitId":"Chandan8186"},"content":" for (int i \u003d 1; i \u003c len; i++) {","lastModifiedDate":"2023-08-20"},{"lineNumber":187,"author":{"gitId":"Chandan8186"},"content":" str.append(i + \". \" + this.tasks.get(i - 1) + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":189,"author":{"gitId":"Chandan8186"},"content":" str.append(len + \". \" + this.tasks.get(len - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"Chandan8186"},"content":" return str.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":191,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":192,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":193,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":193}},{"path":"src/main/java/tasks/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class TodoTask extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes task description and isMarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" * @param desc Task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked 1 if is marked, 0 otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" public TodoTask(String desc, int isMarked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" super(desc);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" if (isMarked \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" protected String getTextFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"T|%d|%s\", this.isDone ? 1 : 0, this.desc);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":31}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" style\u003d\"-fx-background-color: #CCEBF5 ; -fx-background-radius: 12px; -fx-border-color: black; -fx-border-radius: 12px;\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" \u003cInsets bottom\u003d\"6.0\" left\u003d\"6.0\" right\u003d\"6.0\" top\u003d\"6.0\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Chandan8186":24}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" style\u003d\"-fx-border-radius: 20px; -fx-background-radius: 20px;\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" style\u003d\"-fx-border-radius: 20px; -fx-background-radius: 20px;\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" maxHeight\u003d\"1.7976931348623157E308\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vbarPolicy\u003d\"ALWAYS\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Chandan8186":19}},{"path":"src/test/java/tasks/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" public void testTodoTask_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" Task todoTask \u003d taskList.addTodo(\"some todo\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][ ] some todo\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" public void testDeadlineTask_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" Task deadlineTask \u003d taskList.addDeadline(\"some deadline\",","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" \"2023-01-01 1500\",","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"[D][ ] some deadline (by: 01-Jan-2023 1500)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, deadlineTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" public void testDeadlineTask_invalidDatetime_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" taskList.addDeadline(\"some deadline\",","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" \"2023-01-01 later\",","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"Text \u00272023-01-01 later\u0027 could not be parsed at index 11\";","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" public void testEventTask_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" Task eventTask \u003d taskList.addEvent(\"some event\",","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" \"2023-01-01 1530\",","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" \"2023-01-01 1600\",","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"[E][ ] some event (from: 01-Jan-2023 1530 to: 01-Jan-2023 1600)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, eventTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" public void testEventTask_invalidDatetime_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" taskList.addEvent(\"some deadline\",","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" \"today\",","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" \"tomorrow\",","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"Text \u0027today\u0027 could not be parsed at index 0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" public void testMarkTask_validIndex_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" Task todoTask \u003d taskList.addTodo(\"A todo task.\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][ ] A todo task.\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" taskList.markTaskAsDone(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][X] A todo task.\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" public void testMarkTask_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" taskList.addTodo(\"A todo task.\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" taskList.markTaskAsDone(3);","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"Invalid index format.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: mark \u003ctask index\u003e OR unmark \u003ctask index\u003e \"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":" + \"OR delete \u003ctask index\u003e\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" + \"where index is from 1 to 1.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" public void testUnmarkTask_validIndex_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" Task todoTask \u003d taskList.addTodo(\"Another todo task.\", 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][X] Another todo task.\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":" taskList.unmarkTask(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][ ] Another todo task.\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Chandan8186":100}},{"path":"src/test/java/tasks/TodoTaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"public class TodoTaskTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" public void testTodoTaskFormat_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new TodoTask(\"A todo task\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"T|0|A todo task\", task.getTextFormattedString());","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" public void testTodoTaskSaveFormat_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new TodoTask(\"A todo task\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][ ] A todo task\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Chandan8186":21}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"todo Assignment 1","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"deadline Assignment 2 /by 2023-01-01 1245","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"event exam /from 2023-01-01 1245 /to 2023-01-01 1300","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"unmark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"delete 2","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"unknown command","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"deadline /by","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"event something /from /to tomorrow","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":"deadline a /by b","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"event a /from b /to c","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"mark 0","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Chandan8186":17}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Chandan8186":1,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/Duke/*.java","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Chandan8186":1,"-":37}}] diff --git a/Chandan8186_ip_master/commits.json b/Chandan8186_ip_master/commits.json index 6a3568fa..20faf9df 100644 --- a/Chandan8186_ip_master/commits.json +++ b/Chandan8186_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Chandan8186":[{"date":"2023-08-20","commitResults":[{"hash":"7d09b64d9a9d7f59f7abc1cc2dd9a32eceaeaede","isMergeCommit":false,"messageTitle":"Level-0: Rename, Greet, Exit","messageBody":"- Renamed Duke to ChatALot\n- Added greet message (skeletal version)\n- Added *.class to .gitignore\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"dd4059529d7d2176779e5ca6e1716327838b2f3c","isMergeCommit":false,"messageTitle":"Level-1: Echo","messageBody":"- ChatALot echoes user input\n- minor design changes\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":7}}},{"hash":"85d565ed32a4a678d2c80ff8c6c2fdbd58c31293","isMergeCommit":false,"messageTitle":"Level-2: Add, List","messageBody":"- functionality for storing items in a list\n","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":10}}},{"hash":"190f6a4206de7dd4f067a55d3b6a7b477e422f1c","isMergeCommit":false,"messageTitle":"Level-3: Mark as Done","messageBody":"- added task completion status\n","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":54}}},{"hash":"ad7b2626f22933b523441c30225ce71c47bddfd4","isMergeCommit":false,"messageTitle":"Level-4: ToDo, Event, Deadline","messageBody":"- renamed ChatALot.java back to Duke.java\n- added different task types\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":87}}}]},{"date":"2023-08-21","commitResults":[{"hash":"b35add30b19157676f2739a4f78293207f72ae00","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"- important bug fixes\n- added some tests for all commands\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":7,"deletions":7}}}]},{"date":"2023-08-22","commitResults":[{"hash":"81fe732209dbd9c2190dfa0f88a952723029a54b","isMergeCommit":false,"messageTitle":"Level-5: Handle Errors","messageBody":"- implemented error handling\n- bug fixes\n- updated runtest with more tests\n","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":1},"java":{"insertions":191,"deletions":59}}},{"hash":"7536706f528510bd2c13ff517778c07c201f697b","isMergeCommit":false,"messageTitle":"Level-6: Delete","messageBody":"- added delete functionality\n- added test case for delete\n","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":31,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"1aa8a8debb4de7852e71992f63e37ff9105142c6","isMergeCommit":false,"messageTitle":"Add Save Functionality","messageBody":"- Fix some bugs and refactor code\n- Add save functionality\n","fileTypesAndContributionMap":{"java":{"insertions":192,"deletions":52}}},{"hash":"b35f2ea880832843f383ef4a04a0209a2a7ef23b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"406123123dedd512f054b5edaff50912a091f9ef","isMergeCommit":false,"messageTitle":"Add date and time readability","messageBody":"- Fix some bugs\n- Add date and time readability\n","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":83}}},{"hash":"0e674b8c08ce5e2e5d14f496834f35f2d74cee1b","isMergeCommit":false,"messageTitle":"Update tests to accommodate date and time formats","messageBody":"- Change tests to test for invalid date and time formats\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2}}},{"hash":"57925f02f3e86390244627827c8a829e4c8aa36e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"e02a9fbf7e6acc1e55fb5c90ca032160b1931410","isMergeCommit":false,"messageTitle":"Add Ui and Storage classes","messageBody":"- add preliminary Ui and Storage classes integration\n","fileTypesAndContributionMap":{"java":{"insertions":207,"deletions":3}}}]},{"date":"2023-08-29","commitResults":[{"hash":"3112e8aa085bdbe91edb1553d30e6e9c6f65fbc0","isMergeCommit":false,"messageTitle":"Add Parser class","messageBody":"- Add parser class with parsing functionality\n- Update saving functionality to save after each task list alteration\n- Do some code refactoring and debugging\n","fileTypesAndContributionMap":{"java":{"insertions":214,"deletions":315}}},{"hash":"b47dbdac49a30c6fc0415ff7ed7873f42dd270f5","isMergeCommit":false,"messageTitle":"Integrate all helper classes","messageBody":"- Integrate Parser, Storage and Ui with Duke\n- Refactor some code\n","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":98}}},{"hash":"e3bb28d55a455e0c6a7b831a85ea2bf80ab35c9a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"eb7d4c4ad29f83818e6f7080c638904e33131c61","isMergeCommit":false,"messageTitle":"Organize into Packages","messageBody":"- Organize all non-trivial classes into duke, exceptions, tasks packages\n","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":10},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"0828be0785444c33bd53647fd30873649b7becec","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"c493674c384fd87f69b5e139c76a1b0591dc7241","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7370b464aca9b3d904e379e78d5ec08c73ae64f5","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"- Amend build.gradle accordingly\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"d07a488b992ed055e5abc6cedf58a54b573dbc35","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"83df484d6cf1202128edb209596c70889aa774fb","isMergeCommit":false,"messageTitle":"Add JUnit tests for tasks","messageBody":"- add some JUnit tests\n- modify Parser to aid in testing\n","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":8}}},{"hash":"c9bef8b0ae329d4fc49a5abc75ea92200af571ba","isMergeCommit":false,"messageTitle":"Modify Storage class to take in file name","messageBody":"- Modify Storage class to take in any file name fed by user\n","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":15}}},{"hash":"152040d69fda27cc83c7dc877491c6efa0247080","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"b568df6f83658267f38d16ab8ce558440a81d7fb","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"- Add javadocs for most classes and public methods\n","fileTypesAndContributionMap":{"java":{"insertions":261,"deletions":5}}},{"hash":"b373ed6eb90137e955a86cb3feda765daf0cd935","isMergeCommit":false,"messageTitle":"Add more javadocs","messageBody":"- Add more javadocs\n","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"830df1f9dfaf15c6de3db132a6b5847c0942d550","isMergeCommit":false,"messageTitle":"Fix code to follow coding standards","messageBody":"- Fix coding standard issues\n","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":64}}},{"hash":"1ec2f879143564340bf1b528f2ae6a96a474d57d","isMergeCommit":false,"messageTitle":"Add find function to TaskList","messageBody":"- Add find function to TaskList\n","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":22}}},{"hash":"46f4b7c57641e7179f4a29a7ec150f71457f2e09","isMergeCommit":false,"messageTitle":"Refactor a Ui function from level 9 branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"067ea04f86f64b31c02ec282832fe21d714bd516","isMergeCommit":false,"messageTitle":"Refactor Ui function and task list name from Javadoc branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":28}}},{"hash":"ec906b70d76a6891b48638acbc9616dcb0786910","isMergeCommit":false,"messageTitle":"Refactor Ui function from CodingStandards branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"25647fb2b4650d4b298ea229f599290aa48f8391","isMergeCommit":false,"messageTitle":"Implement finding task functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"b59c363b2a0728cec50b047629e2ad03e7428cbf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2c467faa1acbebafa47b7e8c214596bef88c94ac","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"47cf673b31119e1977c8737b75c423a1be4324f0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/tasks/TaskList.java\n","fileTypesAndContributionMap":{}},{"hash":"41395ed40f146f500e598a97691e5ef1f37cf1b1","isMergeCommit":false,"messageTitle":"Fix merge conflict errors","messageBody":"- Fix error of erased javadocs from merge commit\n","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":10}}}]},{"date":"2023-09-02","commitResults":[{"hash":"a70b0c892ca0244bbe66da55247a5a86bd86133a","isMergeCommit":false,"messageTitle":"Configure checkstyle","messageBody":"- Add and configure checkstyle xml files\n","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1}}},{"hash":"b586996bb5f660775f424dd842061845db408fcc","isMergeCommit":false,"messageTitle":"Fix checkstyle and coding standard issues","messageBody":"- fix almost all checkstyle errors and warnings\n- fix any coding standard issue\n- refactored some method and attribute names\n","fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":91}}},{"hash":"162f4036eedb57e8333e999e86c345306c04579e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Chandan8186":{"java":1153,"md":2,"fxml":0,"sh":1,"bat":1,"gradle":6,"txt":17}},"authorContributionVariance":{"Chandan8186":101186.6},"authorDisplayNameMap":{"Chandan8186":"CS2103T-T08-3 CHAN..BABU"}} +{"authorDailyContributionsMap":{"Chandan8186":[{"date":"2023-08-20","commitResults":[{"hash":"7d09b64d9a9d7f59f7abc1cc2dd9a32eceaeaede","isMergeCommit":false,"messageTitle":"Level-0: Rename, Greet, Exit","messageBody":"- Renamed Duke to ChatALot\n- Added greet message (skeletal version)\n- Added *.class to .gitignore\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"dd4059529d7d2176779e5ca6e1716327838b2f3c","isMergeCommit":false,"messageTitle":"Level-1: Echo","messageBody":"- ChatALot echoes user input\n- minor design changes\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":7}}},{"hash":"85d565ed32a4a678d2c80ff8c6c2fdbd58c31293","isMergeCommit":false,"messageTitle":"Level-2: Add, List","messageBody":"- functionality for storing items in a list\n","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":10}}},{"hash":"190f6a4206de7dd4f067a55d3b6a7b477e422f1c","isMergeCommit":false,"messageTitle":"Level-3: Mark as Done","messageBody":"- added task completion status\n","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":54}}},{"hash":"ad7b2626f22933b523441c30225ce71c47bddfd4","isMergeCommit":false,"messageTitle":"Level-4: ToDo, Event, Deadline","messageBody":"- renamed ChatALot.java back to Duke.java\n- added different task types\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":87}}}]},{"date":"2023-08-21","commitResults":[{"hash":"b35add30b19157676f2739a4f78293207f72ae00","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"- important bug fixes\n- added some tests for all commands\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":7,"deletions":7}}}]},{"date":"2023-08-22","commitResults":[{"hash":"81fe732209dbd9c2190dfa0f88a952723029a54b","isMergeCommit":false,"messageTitle":"Level-5: Handle Errors","messageBody":"- implemented error handling\n- bug fixes\n- updated runtest with more tests\n","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":1},"java":{"insertions":191,"deletions":59}}},{"hash":"7536706f528510bd2c13ff517778c07c201f697b","isMergeCommit":false,"messageTitle":"Level-6: Delete","messageBody":"- added delete functionality\n- added test case for delete\n","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":31,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"1aa8a8debb4de7852e71992f63e37ff9105142c6","isMergeCommit":false,"messageTitle":"Add Save Functionality","messageBody":"- Fix some bugs and refactor code\n- Add save functionality\n","fileTypesAndContributionMap":{"java":{"insertions":192,"deletions":52}}},{"hash":"b35f2ea880832843f383ef4a04a0209a2a7ef23b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"406123123dedd512f054b5edaff50912a091f9ef","isMergeCommit":false,"messageTitle":"Add date and time readability","messageBody":"- Fix some bugs\n- Add date and time readability\n","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":83}}},{"hash":"0e674b8c08ce5e2e5d14f496834f35f2d74cee1b","isMergeCommit":false,"messageTitle":"Update tests to accommodate date and time formats","messageBody":"- Change tests to test for invalid date and time formats\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2}}},{"hash":"57925f02f3e86390244627827c8a829e4c8aa36e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"e02a9fbf7e6acc1e55fb5c90ca032160b1931410","isMergeCommit":false,"messageTitle":"Add Ui and Storage classes","messageBody":"- add preliminary Ui and Storage classes integration\n","fileTypesAndContributionMap":{"java":{"insertions":207,"deletions":3}}}]},{"date":"2023-08-29","commitResults":[{"hash":"3112e8aa085bdbe91edb1553d30e6e9c6f65fbc0","isMergeCommit":false,"messageTitle":"Add Parser class","messageBody":"- Add parser class with parsing functionality\n- Update saving functionality to save after each task list alteration\n- Do some code refactoring and debugging\n","fileTypesAndContributionMap":{"java":{"insertions":214,"deletions":315}}},{"hash":"b47dbdac49a30c6fc0415ff7ed7873f42dd270f5","isMergeCommit":false,"messageTitle":"Integrate all helper classes","messageBody":"- Integrate Parser, Storage and Ui with Duke\n- Refactor some code\n","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":98}}},{"hash":"e3bb28d55a455e0c6a7b831a85ea2bf80ab35c9a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"eb7d4c4ad29f83818e6f7080c638904e33131c61","isMergeCommit":false,"messageTitle":"Organize into Packages","messageBody":"- Organize all non-trivial classes into duke, exceptions, tasks packages\n","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":10},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"0828be0785444c33bd53647fd30873649b7becec","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"c493674c384fd87f69b5e139c76a1b0591dc7241","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7370b464aca9b3d904e379e78d5ec08c73ae64f5","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"- Amend build.gradle accordingly\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"d07a488b992ed055e5abc6cedf58a54b573dbc35","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"83df484d6cf1202128edb209596c70889aa774fb","isMergeCommit":false,"messageTitle":"Add JUnit tests for tasks","messageBody":"- add some JUnit tests\n- modify Parser to aid in testing\n","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":8}}},{"hash":"c9bef8b0ae329d4fc49a5abc75ea92200af571ba","isMergeCommit":false,"messageTitle":"Modify Storage class to take in file name","messageBody":"- Modify Storage class to take in any file name fed by user\n","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":15}}},{"hash":"152040d69fda27cc83c7dc877491c6efa0247080","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"b568df6f83658267f38d16ab8ce558440a81d7fb","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"- Add javadocs for most classes and public methods\n","fileTypesAndContributionMap":{"java":{"insertions":261,"deletions":5}}},{"hash":"b373ed6eb90137e955a86cb3feda765daf0cd935","isMergeCommit":false,"messageTitle":"Add more javadocs","messageBody":"- Add more javadocs\n","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"830df1f9dfaf15c6de3db132a6b5847c0942d550","isMergeCommit":false,"messageTitle":"Fix code to follow coding standards","messageBody":"- Fix coding standard issues\n","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":64}}},{"hash":"1ec2f879143564340bf1b528f2ae6a96a474d57d","isMergeCommit":false,"messageTitle":"Add find function to TaskList","messageBody":"- Add find function to TaskList\n","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":22}}},{"hash":"46f4b7c57641e7179f4a29a7ec150f71457f2e09","isMergeCommit":false,"messageTitle":"Refactor a Ui function from level 9 branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"067ea04f86f64b31c02ec282832fe21d714bd516","isMergeCommit":false,"messageTitle":"Refactor Ui function and task list name from Javadoc branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":28}}},{"hash":"ec906b70d76a6891b48638acbc9616dcb0786910","isMergeCommit":false,"messageTitle":"Refactor Ui function from CodingStandards branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"25647fb2b4650d4b298ea229f599290aa48f8391","isMergeCommit":false,"messageTitle":"Implement finding task functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"b59c363b2a0728cec50b047629e2ad03e7428cbf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2c467faa1acbebafa47b7e8c214596bef88c94ac","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"47cf673b31119e1977c8737b75c423a1be4324f0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/tasks/TaskList.java\n","fileTypesAndContributionMap":{}},{"hash":"41395ed40f146f500e598a97691e5ef1f37cf1b1","isMergeCommit":false,"messageTitle":"Fix merge conflict errors","messageBody":"- Fix error of erased javadocs from merge commit\n","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":10}}}]},{"date":"2023-09-02","commitResults":[{"hash":"a70b0c892ca0244bbe66da55247a5a86bd86133a","isMergeCommit":false,"messageTitle":"Configure checkstyle","messageBody":"- Add and configure checkstyle xml files\n","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1}}},{"hash":"b586996bb5f660775f424dd842061845db408fcc","isMergeCommit":false,"messageTitle":"Fix checkstyle and coding standard issues","messageBody":"- fix almost all checkstyle errors and warnings\n- fix any coding standard issue\n- refactored some method and attribute names\n","fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":91}}},{"hash":"162f4036eedb57e8333e999e86c345306c04579e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"50a332699155021f042f91bc131873469c780590","isMergeCommit":false,"messageTitle":"Implement rudimentary JavaFX gui","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"java":{"insertions":171,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"efe3447af2e3be508dea71ec41f8bbd0a7c231ca","isMergeCommit":false,"messageTitle":"Implement basic gui with full functionality","messageBody":"- add full functionality to basic JavaFX gui\n- update build.gradle to allow for jar download\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":138,"deletions":85}}}]},{"date":"2023-09-04","commitResults":[{"hash":"389bb67e8e858541987b69292ad97f3b283a040a","isMergeCommit":false,"messageTitle":"Implement FXML","messageBody":"- implement FXML\n- clean up / refactor / remove unnecessary code\n","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":181,"deletions":283}}}]},{"date":"2023-09-06","commitResults":[{"hash":"6fac8a99e9e4b8d234c76dda260a21696ea4dc23","isMergeCommit":false,"messageTitle":"Implement final GUI","messageBody":"- improve GUI\n- refactor some code\n- fix some bugs\n- work on PR review comments\n","fileTypesAndContributionMap":{"fxml":{"insertions":12,"deletions":4},"java":{"insertions":30,"deletions":31}}},{"hash":"9cd29342116121fe332365eddef0190d06089f8a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Chandan8186":{"java":1273,"md":2,"fxml":43,"sh":1,"bat":1,"gradle":21,"txt":17}},"authorContributionVariance":{"Chandan8186":90417.28},"authorDisplayNameMap":{"Chandan8186":"CS2103T-T08-3 CHAN..BABU"}} diff --git a/Daphne789_ip_master/authorship.json b/Daphne789_ip_master/authorship.json index 29563eba..20e413a9 100644 --- a/Daphne789_ip_master/authorship.json +++ b/Daphne789_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":"Daphne789"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" mainClass.set(\"EchoBot\")","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" archiveFileName \u003d \u0027EchoBot.jar\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Daphne789":7,"-":38}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"T | 1 | buy bread","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"E | 0 | meeting | 2023-09-04 1200 | 2023-09-04 1500","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"T | 0 | do homework","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"D | 1 | buy book | 2023-09-21","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"D | 0 | buy food | 2023-08-29","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"T | 0 | watch movie","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"D | 1 | return book | 2023-10-02","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Daphne789":8}},{"path":"src/main/java/EchoBot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" * The main class that represents the EchoBot application.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":"public class EchoBot {","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" * The entry point of the EchoBot application.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" * @param args Command line arguments (not used).","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" String filePath \u003d \"./data/duke.txt\"; // Default path","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" Storage storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" ui.showWelcomeMessage();","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" tasks \u003d storage.loadTasks();","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" System.out.println(\"An error occurred while loading tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" while (true) {","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" // Read the user input","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" String userInput \u003d scanner.nextLine().trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" if (userInput.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" Ui.showByeMessage();","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" } else if (userInput.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" Ui.showTasks(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" } else if (userInput.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" String taskDescription \u003d Command.extractTaskDesc(userInput, \"todo\");","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" Command addCommand \u003d new AddCommand(Command.TaskType.TODO, taskDescription,","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" null, null);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" addCommand.doCommand(tasks, ui, storage);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" } else if (userInput.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" String taskDescription \u003d Command.extractTaskDesc(userInput, \"deadline\");","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":" int indexOfBy \u003d taskDescription.indexOf(\"/by\");","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":" String deadlineDescription \u003d taskDescription.substring(0, indexOfBy).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":" String by \u003d taskDescription.substring(indexOfBy + 3).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":" Command addCommand \u003d new AddCommand(Command.TaskType.DEADLINE, deadlineDescription,","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":" by, null);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Daphne789"},"content":" addCommand.doCommand(tasks, ui, storage);","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Daphne789"},"content":" } else if (userInput.startsWith(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"Daphne789"},"content":" String taskDescription \u003d Command.extractTaskDesc(userInput, \"event\");","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Daphne789"},"content":" int indexOfFrom \u003d taskDescription.indexOf(\"/from\");","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"Daphne789"},"content":" int indexOfTo \u003d taskDescription.indexOf(\"/to\");","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"Daphne789"},"content":" String eventDescription \u003d taskDescription.substring(0, indexOfFrom).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"Daphne789"},"content":" String from \u003d taskDescription.substring(indexOfFrom + 5, indexOfTo).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"Daphne789"},"content":" String to \u003d taskDescription.substring(indexOfTo + 3).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"Daphne789"},"content":" Command addCommand \u003d new AddCommand(Command.TaskType.EVENT, eventDescription, from, to);","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Daphne789"},"content":" addCommand.doCommand(tasks, ui, storage);","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Daphne789"},"content":" } else if (userInput.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"Daphne789"},"content":" int taskNum \u003d Command.extractTaskNum(userInput, \"mark\");","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Daphne789"},"content":" Command markCommand \u003d new MarkCommand(taskNum);","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Daphne789"},"content":" markCommand.doCommand(tasks, ui, storage);","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Daphne789"},"content":" } else if (userInput.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"Daphne789"},"content":" int taskNum \u003d Command.extractTaskNum(userInput, \"unmark\");","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Daphne789"},"content":" Command unmarkCommand \u003d new UnmarkCommand(taskNum);","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Daphne789"},"content":" unmarkCommand.doCommand(tasks, ui, storage);","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Daphne789"},"content":" } else if (userInput.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"Daphne789"},"content":" int taskNum \u003d Command.extractTaskNum(userInput, \"delete\");","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Daphne789"},"content":" Command deleteCommand \u003d new DeleteCommand(taskNum);","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Daphne789"},"content":" deleteCommand.doCommand(tasks, ui, storage);","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Daphne789"},"content":" } else if (userInput.startsWith(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Daphne789"},"content":" String keyword \u003d Command.extractTaskDesc(userInput, \"find\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Daphne789"},"content":" Command findCommand \u003d new FindCommand(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Daphne789"},"content":" findCommand.doCommand(tasks, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Daphne789"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"Daphne789"},"content":" Ui.showHorizontalLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"Daphne789"},"content":" System.out.println(\" OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Daphne789"},"content":" Ui.showHorizontalLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Daphne789":92}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" * Represents a command to add a new task.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" private final Command.TaskType taskType;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" private final String taskDescription;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" private final String additionalInfo1;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" private final String additionalInfo2;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" * Constructs an AddCommand instance.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" * @param taskType The type of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" * @param additionalInfo1 Additional information required for specific task types.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" * @param additionalInfo2 Additional information required for specific task types.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" public AddCommand(Command.TaskType taskType, String taskDescription,","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" String additionalInfo1, String additionalInfo2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" this.additionalInfo1 \u003d additionalInfo1;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" this.additionalInfo2 \u003d additionalInfo2;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" * Executes the AddCommand, adding a new task to the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" * @param storage The data storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" public void doCommand(ArrayList\u003cTask\u003e tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" if (taskDescription.isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" Ui.showHorizontalLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" throw new DukeException(\" Unable to add new task. Task description cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":" Task newTask;","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Daphne789"},"content":" case TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Daphne789"},"content":" newTask \u003d new Todo(taskDescription);","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Daphne789"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Daphne789"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Daphne789"},"content":" LocalDate byDate \u003d Parser.parseDate(additionalInfo1);","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Daphne789"},"content":" newTask \u003d new Deadline(taskDescription, byDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Daphne789"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Daphne789"},"content":" case EVENT:","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Daphne789"},"content":" LocalDateTime fromDate \u003d Parser.parseDateTime(additionalInfo1);","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Daphne789"},"content":" LocalDateTime toDate \u003d Parser.parseDateTime(additionalInfo2);","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Daphne789"},"content":" newTask \u003d new Event(taskDescription, fromDate, toDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"Daphne789"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Daphne789"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Daphne789"},"content":" throw new DukeException(\"Unsupported task type.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Daphne789"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Daphne789"},"content":" Ui.showHorizontalLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Daphne789"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\\n\" + \" \" + newTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Daphne789"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Daphne789"},"content":" Ui.showHorizontalLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Daphne789"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Daphne789"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"Daphne789"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Daphne789":86}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":" * Provides a base structure for command implementations.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" * Enumeration representing different types of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" public enum TaskType {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" * Executes the command operation.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" * @param storage The data storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" public abstract void doCommand(ArrayList\u003cTask\u003e tasks, Ui ui, Storage storage);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" * Extracts the task number from the user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" * @param userInput The user input string.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" * @param command The command keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" * @return The extracted task number.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" public static int extractTaskNum(String userInput, String command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" String taskNumberStr \u003d userInput.substring(command.length()).trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" return Integer.parseInt(taskNumberStr);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" * Extracts the task description from the user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" * @param userInput The user input string.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" * @param command The command keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" * @return The extracted task description.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" public static String extractTaskDesc(String userInput, String command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" return userInput.substring(command.length()).trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Daphne789":51}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":" * Represents a command to delete a task from the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":" private int taskNum;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" * Constructs a DeleteCommand instance.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" * @param taskNum The task number to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" public DeleteCommand(int taskNum) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" * Executes the DeleteCommand, removing a task from the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" * @param storage The data storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" public void doCommand(ArrayList\u003cTask\u003e tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" if (taskNum \u003e\u003d 1 \u0026\u0026 taskNum \u003c\u003d tasks.size()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" Task deletedTask \u003d tasks.remove(taskNum - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" Ui.showHorizontalLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\\n\" + \" \" + deletedTask.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" Ui.showHorizontalLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" storage.saveTasks(tasks); // Save after deleting","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Daphne789":43}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":" * Represents a command to find specific task based on the keyword","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":" private final String keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" * Finds tasks based on the specified keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" * @return A list of tasks containing the keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" public ArrayList\u003cTask\u003e findTasks(ArrayList\u003cTask\u003e tasks, String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" if (task.getDescription().toLowerCase().matches(\".*\\\\b\" + keyword.toLowerCase() + \"\\\\b.*\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" return matchingTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" * Executes the doCommand, searching for tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" * @param storage The data storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" public void doCommand(ArrayList\u003cTask\u003e tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d findTasks(tasks, keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" if (!matchingTasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" Ui.showHorizontalLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" System.out.println(\" Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" Task task \u003d matchingTasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" System.out.println(\" \" + (i + 1) + \".\" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":" Ui.showHorizontalLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":" Ui.showHorizontalLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Daphne789"},"content":" System.out.println(\" No tasks match the keyword: \" + keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Daphne789"},"content":" Ui.showHorizontalLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Daphne789":63}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" * Represents a command to mark a task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" private int taskNum;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" * Constructs a MarkCommand instance.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" * @param taskNum The task number to be marked as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" public MarkCommand(int taskNum) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" * Executes the MarkCommand, marking a task as done and updating the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" * @param storage The data storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" public void doCommand(ArrayList\u003cTask\u003e tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" if (taskNum \u003e\u003d 1 \u0026\u0026 taskNum \u003c\u003d tasks.size()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" Task task \u003d tasks.get(taskNum - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" task.mark();","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" Ui.showHorizontalLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" System.out.print(\" [\" + task.getStatusIcon() + \"] \" + task.getDescription());","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" // Additional information","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" if (task instanceof Event) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" LocalDateTime from \u003d ((Event) task).getFrom();","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" LocalDateTime to \u003d ((Event) task).getTo();","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" System.out.print(\" (from: \" + from + \" to: \" + to + \")\");","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" LocalDate by \u003d ((Deadline) task).getBy();","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" System.out.print(\" (by: \" + by + \")\");","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":" System.out.print(\"\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":" Ui.showHorizontalLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":" storage.saveTasks(tasks); // Save after marking","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Daphne789":61}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" * Represents a command to unmark a task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" private int taskNum;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" * Constructs an UnmarkCommand instance.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" * @param taskNum The task number to be unmarked.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" public UnmarkCommand(int taskNum) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" * Executes the UnmarkCommand, unmarking a task as not done and updating the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" * @param storage The data storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" public void doCommand(ArrayList\u003cTask\u003e tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" if (taskNum \u003e\u003d 1 \u0026\u0026 taskNum \u003c\u003d tasks.size()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" Task task \u003d tasks.get(taskNum - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" task.unmark();","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" Ui.showHorizontalLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" System.out.print(\" [\" + task.getStatusIcon() + \"] \" + task.getDescription());","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" if (task instanceof Event) {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" LocalDateTime from \u003d ((Event) task).getFrom();","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" LocalDateTime to \u003d ((Event) task).getTo();","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" System.out.print(\" (from: \" + from + \" to: \" + to + \")\");","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" LocalDate by \u003d ((Deadline) task).getBy();","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" System.out.print(\" (by: \" + by + \")\");","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":" System.out.print(\"\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":" Ui.showHorizontalLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":" storage.saveTasks(tasks); // Save after unmarking","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Daphne789":61}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":" * Represents an exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":" * This exception is thrown when there\u0027s an error.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":" * Constructs a DukeException with the given error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":" * @param errorMsg Error message associated with the exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":" public DukeException(String errorMsg) {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Daphne789":16}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":" * Provides methods for parsing date and date-time strings","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":" * into Java LocalDateTime and LocalDate objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":" * Parses a date-time string into a LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" * @param dateTime The date-time string.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" * @return A LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" public static LocalDateTime parseDateTime(String dateTime) {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" return LocalDateTime.parse(dateTime, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" * Parses a date string into a LocalDate object.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" * @param date The date string.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" * @return A LocalDate object.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" public static LocalDate parseDate(String date) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" return LocalDate.parse(date, DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Daphne789":31}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" * Handles loading and saving tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" private String filePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" * Constructs a Storage instance with the specified file path.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" * @param filePath The path to the file where tasks are stored.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" * Loads tasks from the file and returns them as a list.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" public ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" // Load tasks from the file and return them","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" File folder \u003d file.getParentFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" // Create the parent folder if it doesn\u0027t exist","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" if (!folder.exists() \u0026\u0026 !folder.mkdirs()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" System.err.println(\"Unable to create directory: \" + folder.getAbsolutePath());","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" return tasks; // Return an empty list","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" if (!file.exists() \u0026\u0026 !file.createNewFile()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" System.err.println(\"Unable to create file: \" + filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" return tasks; // Return an empty list","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":" String formattedTask \u003d scanner.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":" if (formattedTask.isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":" continue; // Skip empty lines","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Daphne789"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Daphne789"},"content":" Task task \u003d Task.fromFileString(formattedTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Daphne789"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Daphne789"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Daphne789"},"content":" // Handle corrupted data - logging the issue","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Daphne789"},"content":" Logger logger \u003d Logger.getLogger(Storage.class.getName());","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Daphne789"},"content":" logger.log(Level.SEVERE, \"Corrupted data: \" + formattedTask, e);","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Daphne789"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Daphne789"},"content":" System.out.println(\"Invalid data: \" + formattedTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Daphne789"},"content":" scanner.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Daphne789"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Daphne789"},"content":" System.err.println(\"An error occurred while handling file operations: \" + e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Daphne789"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Daphne789"},"content":" Logger logger \u003d Logger.getLogger(Storage.class.getName());","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Daphne789"},"content":" logger.log(Level.SEVERE, \"An error occurred while loading tasks\", e);","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Daphne789"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Daphne789"},"content":" * Saves the list of tasks to the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Daphne789"},"content":" public void saveTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"Daphne789"},"content":" // Save tasks to the file","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"Daphne789"},"content":" try (PrintWriter writer \u003d new PrintWriter(filePath)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"Daphne789"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"Daphne789"},"content":" writer.println(task.toFileString());","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"Daphne789"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"Daphne789"},"content":" System.out.println(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Daphne789":98}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":" * Represents a deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":" * Constructs a deadline task with description and due date.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" * @param description Description of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" * @param by Due date of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" * Gets the due date of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" * @return Due date.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" public LocalDate getBy() {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" return by;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" * Converts the deadline task into a string.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" * @return String representation of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Daphne789":41}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":" * Represents an event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" * Constructs an event task with description and date-time range.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" * @param from Starting date and time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" * @param to Ending date and time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" * Gets the starting date and time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" * @return Starting date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" return from;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" * Gets the ending date and time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" * @return Ending date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" return to;","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" * Converts the event task into a string.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" * @return String representation of the event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy h:mm a\"))","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" + \" to: \" + to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy h:mm a\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Daphne789":54}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":" * Represents a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"public class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":" protected String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" * Constructs a task with the given description.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" * Converts the task to a string for saving purpose.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" String type \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" String dateTime \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" if (this instanceof Todo) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" type \u003d \"T\";","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" } else if (this instanceof Deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" type \u003d \"D\";","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" dateTime \u003d \" | \" + ((Deadline) this).getBy().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" } else if (this instanceof Event) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" type \u003d \"E\";","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" dateTime \u003d \" | \" + ((Event) this).getFrom().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\")) + \" | \"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" + ((Event) this).getTo().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" return type + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + dateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" * Converts a file string into task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" * @param fileString File string representation of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" * @return Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":" public static Task fromFileString(String fileString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":" String[] parts \u003d fileString.split(\"\\\\s*\\\\|\\\\s*\"); // Adjusted delimiter","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"Daphne789"},"content":" Task task;","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Daphne789"},"content":" switch (type) {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Daphne789"},"content":" case \"T\":","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Daphne789"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Daphne789"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Daphne789"},"content":" case \"D\":","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Daphne789"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Daphne789"},"content":" // Use parseDate method to convert to LocalDate","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Daphne789"},"content":" task \u003d new Deadline(description, parseDate(by));","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Daphne789"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Daphne789"},"content":" case \"E\":","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Daphne789"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Daphne789"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Daphne789"},"content":" // Use parseDateTime method to convert to LocalDateTime","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Daphne789"},"content":" task \u003d new Event(description, parseDateTime(from), parseDateTime(to));","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Daphne789"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Daphne789"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Daphne789"},"content":" throw new IllegalArgumentException(\"Invalid task type: \" + type);","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"Daphne789"},"content":" if (isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"Daphne789"},"content":" task.mark();","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"Daphne789"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Daphne789"},"content":" * Parse date and time string into a LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Daphne789"},"content":" * @param dateTime Date and time string.","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Daphne789"},"content":" * @return LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Daphne789"},"content":" private static LocalDateTime parseDateTime(String dateTime) {","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"Daphne789"},"content":" return LocalDateTime.parse(dateTime, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Daphne789"},"content":" * Parses date string into a LocalDate object.","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Daphne789"},"content":" * @param date Date string.","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Daphne789"},"content":" * @return LocalDate object.","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Daphne789"},"content":" private static LocalDate parseDate(String date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"Daphne789"},"content":" return LocalDate.parse(date, DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Daphne789"},"content":" * Returns the status icon for the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Daphne789"},"content":" * @return Status icon (\"X\" for complete, \" \" for incomplete).","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Daphne789"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"Daphne789"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Daphne789"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Daphne789"},"content":" public void mark() {","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"Daphne789"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Daphne789"},"content":" * Unmarks the task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Daphne789"},"content":" public void unmark() {","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"Daphne789"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"Daphne789"},"content":" * Gets the task\u0027s description.","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"Daphne789"},"content":" * @return Task\u0027s description.","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"Daphne789"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"Daphne789"},"content":" return description;","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"Daphne789"},"content":" * Checks if the task is done.","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"Daphne789"},"content":" * @return True if the task is done, false otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"Daphne789"},"content":" public boolean isTaskDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"Daphne789"},"content":" return isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"Daphne789"},"content":" * Converts the task into a string.","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"Daphne789"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"Daphne789"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"Daphne789"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"Daphne789"},"content":" return \"[\" + getStatusIcon() + \"]\" + \" \" + getDescription();","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Daphne789":158}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":" * Represents a Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":" * Constructs a Todo task with the given description.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" * Converts the Todo task in string representation.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Daphne789":25}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":" * Provides methods related to user interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":" * Displays the EchoBot logo.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" public static void showLogo() {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" System.out.println(\" ____ _ \\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" + \" | _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" + \" | | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" + \" | |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" + \" |____/ \\\\__,_|_|\\\\_\\\\___|\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" * Displays a horizontal line separator.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" public static void showHorizontalLine() {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" System.out.println(\" ____________________________________________________________________________________\");","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" * Displays the welcome message.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" public void showWelcomeMessage() {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" showHorizontalLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" System.out.println(\" Hello! I\u0027m EchoBot\");","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" showLogo();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" System.out.println(\" What can I do for you?\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" * Displays the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" public static void showTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" showHorizontalLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" System.out.println(\" Here are the tasks in your list:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" System.out.println(\" \" + (i + 1) + \".\" + task.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" showHorizontalLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":" * Displays the goodbye message.","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Daphne789"},"content":" public static void showByeMessage() {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Daphne789"},"content":" showHorizontalLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Daphne789"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Daphne789"},"content":" showHorizontalLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Daphne789":64}},{"path":"src/test/java/duke/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" public void testAddTodoTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" Storage storage \u003d new Storage(\"./data/dummy.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" AddCommand addCommand \u003d new AddCommand(Command.TaskType.TODO, \"Attend lecture\",","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" null, null);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" addCommand.doCommand(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" assertEquals(1, tasks.size()); // Check if the task was added to the tasks list","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" assertTrue(tasks.get(0) instanceof Todo); // Check if the added task is a Todo","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" assertEquals(\"[T][ ] Attend lecture\", tasks.get(0).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" public void testAddDeadlineTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" Storage storage \u003d new Storage(\"./data/dummy.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" AddCommand addCommand \u003d new AddCommand(Command.TaskType.DEADLINE, \"Return book\",","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" \"2023-09-01\", null);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" addCommand.doCommand(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" assertEquals(1, tasks.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" assertTrue(tasks.get(0) instanceof Deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" assertEquals(\"[D][ ] Return book (by: Sep 01 2023)\", tasks.get(0).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Daphne789":46}},{"path":"src/test/java/duke/command/MarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":"public class MarkCommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" public void testMarkCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" Task task1 \u003d new Todo(\"Buy groceries\");","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" LocalDate by \u003d LocalDate.now();","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" Task task2 \u003d new Deadline(\"Finish homework\", by);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" LocalDateTime from \u003d LocalDateTime.now();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" LocalDateTime to \u003d LocalDateTime.now().plusHours(10);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" Task task3 \u003d new Event(\"Meeting\", from, to);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" tasks.add(task1);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" tasks.add(task2);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" tasks.add(task3);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" MarkCommand markCommand \u003d new MarkCommand(2);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" markCommand.doCommand(tasks, new Ui(), new Storage(\"./data/dummy.txt\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" assertTrue(task2.isTaskDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" public void anotherTestMarkCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" Task task1 \u003d new Todo(\"Buy groceries\");","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" LocalDate by \u003d LocalDate.now();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" Task task2 \u003d new Deadline(\"Finish homework\", by);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" LocalDateTime from \u003d LocalDateTime.now();","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" LocalDateTime to \u003d LocalDateTime.now().plusHours(10);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" Task task3 \u003d new Event(\"Meeting\", from, to);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" tasks.add(task1);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" tasks.add(task2);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" tasks.add(task3);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":" MarkCommand markCommand \u003d new MarkCommand(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":" markCommand.doCommand(tasks, new Ui(), new Storage(\"./data/dummy.txt\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":" assertFalse(task3.isTaskDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Daphne789":59}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"todo Borrow a book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"deadline Return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"event Project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"bye","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Daphne789":10}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":"java -classpath ..\\bin EchoBot \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":{"Daphne789":1,"-":20}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" mainClass.set(\"EchoBot\")","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":" archiveFileName \u003d \u0027EchoBot.jar\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Daphne789":22,"-":38}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"T | 1 | buy bread","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"E | 0 | meeting | 2023-09-04 1200 | 2023-09-04 1500","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"T | 0 | do homework","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"D | 1 | buy book | 2023-09-21","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"D | 0 | buy food | 2023-08-29","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"T | 0 | watch movie","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"D | 1 | return book | 2023-10-02","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"T | 1 | buy lunch","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"T | 1 | shower","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"T | 0 | eat","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"T | 0 | buy jam","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"T | 0 | eat","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":"T | 0 | eat waffle","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":"T | 0 | swimming","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":"D | 0 | do laundry | 2023-09-06","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":"D | 0 | sleep | 2023-09-06","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":"E | 0 | meeting2 | 2023-10-10 1400 | 2023-10-10 1530","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"Daphne789":18}},{"path":"src/main/java/EchoBot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"import java.awt.BorderLayout;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"import java.awt.event.ActionEvent;","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.awt.event.ActionListener;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JFrame;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JPanel;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JTextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JTextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"import javax.swing.SwingUtilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"import javax.swing.Timer;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" * The main class that represents the EchoBot application.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":"public class EchoBot {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" private JFrame frame;","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" private JTextArea chatArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" private JTextField inputField;","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" private Ui ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" private Storage storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" * Initializes and sets up the EchoBot GUI, loads tasks, and displays a welcome message.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" public EchoBot() {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" frame \u003d new JFrame(\"EchoBot\");","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" frame.setSize(400, 400);","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" chatArea \u003d new JTextArea();","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" chatArea.setEditable(false);","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" JScrollPane scrollPane \u003d new JScrollPane(chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" inputField \u003d new JTextField();","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" JButton sendButton \u003d new JButton(\"Send\");","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" sendButton.addActionListener(new ActionListener() {","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" public void actionPerformed(ActionEvent e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" handleUserInput();","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":" JPanel inputPanel \u003d new JPanel();","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":" inputPanel.setLayout(new BorderLayout());","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"Daphne789"},"content":" inputPanel.add(inputField, BorderLayout.CENTER);","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"Daphne789"},"content":" inputPanel.add(sendButton, BorderLayout.EAST);","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"Daphne789"},"content":" frame.add(scrollPane, BorderLayout.CENTER);","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"Daphne789"},"content":" frame.add(inputPanel, BorderLayout.SOUTH);","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"Daphne789"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"Daphne789"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"Daphne789"},"content":" storage \u003d new Storage(\"./data/duke.txt\");","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"Daphne789"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Daphne789"},"content":" tasks \u003d storage.loadTasks(chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"Daphne789"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"An error occurred while loading tasks: \" + e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"Daphne789"},"content":" ui.showWelcomeMessage(chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"Daphne789"},"content":" frame.setVisible(true);","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"Daphne789"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"Daphne789"},"content":" String userInput \u003d inputField.getText().trim();","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"Daphne789"},"content":" inputField.setText(\"\");","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"Daphne789"},"content":" if (userInput.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"Daphne789"},"content":" ui.showByeMessage(chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"Daphne789"},"content":" // Delay closing the GUI by 1 seconds","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"Daphne789"},"content":" int delay \u003d 1000;","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"Daphne789"},"content":" Timer timer \u003d new Timer(delay, new ActionListener() {","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"Daphne789"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"Daphne789"},"content":" public void actionPerformed(ActionEvent e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"Daphne789"},"content":" frame.dispose(); // Close the GUI","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"Daphne789"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"Daphne789"},"content":" timer.setRepeats(false); // Execute the timer only once","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"Daphne789"},"content":" timer.start();","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"Daphne789"},"content":" } else if (userInput.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":98,"author":{"gitId":"Daphne789"},"content":" ui.showTasks(tasks, chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"Daphne789"},"content":" } else if (userInput.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"Daphne789"},"content":" String taskDescription \u003d Command.extractTaskDesc(userInput, \"todo\");","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"Daphne789"},"content":" Command addCommand \u003d new AddCommand(Command.TaskType.TODO, taskDescription,","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Daphne789"},"content":" null, null);","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Daphne789"},"content":" addCommand.doCommand(tasks, ui, storage, chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"Daphne789"},"content":" } else if (userInput.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"Daphne789"},"content":" String taskDescription \u003d Command.extractTaskDesc(userInput, \"deadline\");","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"Daphne789"},"content":" int indexOfBy \u003d taskDescription.indexOf(\"/by\");","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"Daphne789"},"content":" String deadlineDescription \u003d taskDescription.substring(0, indexOfBy).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"Daphne789"},"content":" String by \u003d taskDescription.substring(indexOfBy + 3).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"Daphne789"},"content":" Command addCommand \u003d new AddCommand(Command.TaskType.DEADLINE, deadlineDescription,","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Daphne789"},"content":" by, null);","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Daphne789"},"content":" addCommand.doCommand(tasks, ui, storage, chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"Daphne789"},"content":" } else if (userInput.startsWith(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"Daphne789"},"content":" String taskDescription \u003d Command.extractTaskDesc(userInput, \"event\");","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"Daphne789"},"content":" int indexOfFrom \u003d taskDescription.indexOf(\"/from\");","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"Daphne789"},"content":" int indexOfTo \u003d taskDescription.indexOf(\"/to\");","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"Daphne789"},"content":" String eventDescription \u003d taskDescription.substring(0, indexOfFrom).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"Daphne789"},"content":" String from \u003d taskDescription.substring(indexOfFrom + 5, indexOfTo).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"Daphne789"},"content":" String to \u003d taskDescription.substring(indexOfTo + 3).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"Daphne789"},"content":" Command addCommand \u003d new AddCommand(Command.TaskType.EVENT, eventDescription, from, to);","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"Daphne789"},"content":" addCommand.doCommand(tasks, ui, storage, chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"Daphne789"},"content":" } else if (userInput.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"Daphne789"},"content":" int taskNum \u003d Command.extractTaskNum(userInput, \"mark\");","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"Daphne789"},"content":" Command markCommand \u003d new MarkCommand(taskNum);","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"Daphne789"},"content":" markCommand.doCommand(tasks, ui, storage, chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":125,"author":{"gitId":"Daphne789"},"content":" } else if (userInput.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"Daphne789"},"content":" int taskNum \u003d Command.extractTaskNum(userInput, \"unmark\");","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"Daphne789"},"content":" Command unmarkCommand \u003d new UnmarkCommand(taskNum);","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"Daphne789"},"content":" unmarkCommand.doCommand(tasks, ui, storage, chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":129,"author":{"gitId":"Daphne789"},"content":" } else if (userInput.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":130,"author":{"gitId":"Daphne789"},"content":" int taskNum \u003d Command.extractTaskNum(userInput, \"delete\");","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"Daphne789"},"content":" Command deleteCommand \u003d new DeleteCommand(taskNum);","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"Daphne789"},"content":" deleteCommand.doCommand(tasks, ui, storage, chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":133,"author":{"gitId":"Daphne789"},"content":" } else if (userInput.startsWith(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"Daphne789"},"content":" String keyword \u003d Command.extractTaskDesc(userInput, \"find\");","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Daphne789"},"content":" Command findCommand \u003d new FindCommand(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Daphne789"},"content":" findCommand.doCommand(tasks, ui, storage, chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":137,"author":{"gitId":"Daphne789"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":138,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\" + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":140,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":141,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":142,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":143,"author":{"gitId":"Daphne789"},"content":" * The entry point of the EchoBot application.","lastModifiedDate":"2023-09-06"},{"lineNumber":144,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":145,"author":{"gitId":"Daphne789"},"content":" * @param args Command line arguments (not used).","lastModifiedDate":"2023-09-06"},{"lineNumber":146,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":147,"author":{"gitId":"Daphne789"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":148,"author":{"gitId":"Daphne789"},"content":" SwingUtilities.invokeLater(new Runnable() {","lastModifiedDate":"2023-09-06"},{"lineNumber":149,"author":{"gitId":"Daphne789"},"content":" public void run() {","lastModifiedDate":"2023-09-06"},{"lineNumber":150,"author":{"gitId":"Daphne789"},"content":" new EchoBot();","lastModifiedDate":"2023-09-06"},{"lineNumber":151,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":152,"author":{"gitId":"Daphne789"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":153,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":154,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Daphne789":154}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JTextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" * Represents a command to add a new task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" private final Command.TaskType taskType;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" private final String taskDescription;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" private final String additionalInfo1;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" private final String additionalInfo2;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" * Constructs an AddCommand instance.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" * @param taskType The type of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" * @param additionalInfo1 Additional information required for specific task types.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" * @param additionalInfo2 Additional information required for specific task types.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" public AddCommand(Command.TaskType taskType, String taskDescription,","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" String additionalInfo1, String additionalInfo2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" this.additionalInfo1 \u003d additionalInfo1;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" this.additionalInfo2 \u003d additionalInfo2;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" * Executes the AddCommand, adding a new task to the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" * @param storage The data storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" * @param chatArea JTextArea for displaying messages in the GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" public void doCommand(ArrayList\u003cTask\u003e tasks, Ui ui, Storage storage, JTextArea chatArea) {","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" if (taskDescription.isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":" throw new DukeException(\"Unable to add new task. Task description cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":" Task newTask;","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Daphne789"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Daphne789"},"content":" case TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Daphne789"},"content":" newTask \u003d new Todo(taskDescription);","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Daphne789"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Daphne789"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Daphne789"},"content":" LocalDate byDate \u003d Parser.parseDate(additionalInfo1, chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"Daphne789"},"content":" newTask \u003d new Deadline(taskDescription, byDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Daphne789"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Daphne789"},"content":" case EVENT:","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Daphne789"},"content":" LocalDateTime fromDate \u003d Parser.parseDateTime(additionalInfo1, chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"Daphne789"},"content":" LocalDateTime toDate \u003d Parser.parseDateTime(additionalInfo2, chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"Daphne789"},"content":" if (fromDate \u003d\u003d null || toDate \u003d\u003d null) {","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"Daphne789"},"content":" return;","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"Daphne789"},"content":" newTask \u003d new Event(taskDescription, fromDate, toDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Daphne789"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Daphne789"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Daphne789"},"content":" throw new DukeException(\"Unsupported task type.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Daphne789"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"Daphne789"},"content":" newTask.display(chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"Now you have \" + tasks.size() + \" tasks in the list.\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"Daphne789"},"content":" storage.saveTasks(tasks, chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"Daphne789"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"Daphne789"},"content":" chatArea.append(e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Daphne789":90}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JTextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":" * Provides a base structure for command implementations.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" * Enumeration representing different types of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" public enum TaskType {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" * Executes the command operation.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" * @param storage The data storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" * @param chatArea JTextArea for displaying messages in the GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" public abstract void doCommand(ArrayList\u003cTask\u003e tasks, Ui ui, Storage storage, JTextArea chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" * Extracts the task number from the user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" * @param userInput The user input string.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" * @param command The command keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" * @return The extracted task number.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" public static int extractTaskNum(String userInput, String command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" String taskNumberStr \u003d userInput.substring(command.length()).trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" return Integer.parseInt(taskNumberStr);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" * Extracts the task description from the user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" * @param userInput The user input string.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" * @param command The command keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" * @return The extracted task description.","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" public static String extractTaskDesc(String userInput, String command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" return userInput.substring(command.length()).trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Daphne789":53}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JTextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":" * Represents a command to delete a task from the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" private int taskNum;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" * Constructs a DeleteCommand instance.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" * @param taskNum The task number to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" public DeleteCommand(int taskNum) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" * Executes the DeleteCommand, removing a task from the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" * @param storage The data storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" * @param chatArea JTextArea for displaying messages in the GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" public void doCommand(ArrayList\u003cTask\u003e tasks, Ui ui, Storage storage, JTextArea chatArea) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" if (taskNum \u003e\u003d 1 \u0026\u0026 taskNum \u003c\u003d tasks.size()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" Task deletedTask \u003d tasks.remove(taskNum - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"Noted. I\u0027ve removed this task:\\n\" + \" \");","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" deletedTask.display(chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"Now you have \" + tasks.size() + \" tasks in the list.\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" storage.saveTasks(tasks, chatArea); // Save after deleting","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Daphne789":44}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JTextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":" * Represents a command to find specific task based on the keyword","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" private final String keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" * Finds tasks based on the specified keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" * @return A list of tasks containing the keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" public ArrayList\u003cTask\u003e findTasks(ArrayList\u003cTask\u003e tasks, String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" if (task.getDescription().toLowerCase().matches(\".*\\\\b\" + keyword.toLowerCase() + \"\\\\b.*\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" return matchingTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" * Executes the doCommand, searching for tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" * @param storage The data storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" * @param chatArea JTextArea for displaying messages in the GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" public void doCommand(ArrayList\u003cTask\u003e tasks, Ui ui, Storage storage, JTextArea chatArea) {","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d findTasks(tasks, keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" if (!matchingTasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" Task task \u003d matchingTasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":" chatArea.append((i + 1) + \". \");","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":" task.display(chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"No tasks match the keyword: \" + keyword + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Daphne789":62}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JTextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" * Represents a command to mark a task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" private int taskNum;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" * Constructs a MarkCommand instance.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" * @param taskNum The task number to be marked as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" public MarkCommand(int taskNum) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" * Executes the MarkCommand, marking a task as done and updating the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" * @param storage The data storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" * @param chatArea JTextArea for displaying messages in the GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" public void doCommand(ArrayList\u003cTask\u003e tasks, Ui ui, Storage storage, JTextArea chatArea) {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" if (taskNum \u003e\u003d 1 \u0026\u0026 taskNum \u003c\u003d tasks.size()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" Task task \u003d tasks.get(taskNum - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" task.mark();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"Nice! I\u0027ve marked this task as done:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"[\" + task.getStatusIcon() + \"] \" + task.getDescription());","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" // Additional information","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" if (task instanceof Event) {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" LocalDateTime from \u003d ((Event) task).getFrom();","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" LocalDateTime to \u003d ((Event) task).getTo();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\" (from: \" + from + \" to: \" + to + \")\");","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" LocalDate by \u003d ((Deadline) task).getBy();","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\" (by: \" + by + \")\");","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":" storage.saveTasks(tasks, chatArea); // Save after marking","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Daphne789":61}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JTextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" * Represents a command to unmark a task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" private int taskNum;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" * Constructs an UnmarkCommand instance.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" * @param taskNum The task number to be unmarked.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" public UnmarkCommand(int taskNum) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" * Executes the UnmarkCommand, unmarking a task as not done and updating the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" * @param storage The data storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" * @param chatArea JTextArea for displaying messages in the GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" public void doCommand(ArrayList\u003cTask\u003e tasks, Ui ui, Storage storage, JTextArea chatArea) {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" if (taskNum \u003e\u003d 1 \u0026\u0026 taskNum \u003c\u003d tasks.size()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" Task task \u003d tasks.get(taskNum - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" task.unmark();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"OK, I\u0027ve marked this task as not done yet:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"[\" + task.getStatusIcon() + \"] \" + task.getDescription());","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" if (task instanceof Event) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" LocalDateTime from \u003d ((Event) task).getFrom();","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" LocalDateTime to \u003d ((Event) task).getTo();","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\" (from: \" + from + \" to: \" + to + \")\");","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" LocalDate by \u003d ((Deadline) task).getBy();","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\" (by: \" + by + \")\");","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":" storage.saveTasks(tasks, chatArea); // Save after unmarking","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Daphne789":61}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":" * Represents an exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":" * This exception is thrown when there\u0027s an error.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":" * Constructs a DukeException with the given error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":" * @param errorMsg Error message associated with the exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":" public DukeException(String errorMsg) {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":"// /**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":"// * Returns the error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":"// *","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":"// * @return The error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":"// */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":"// public String getErrorMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":"// return super.getMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":"// }","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Daphne789":25}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JTextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":" * Provides methods for parsing date and date-time strings","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":" * into Java LocalDateTime and LocalDate objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" * Parses a date-time string into a LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" * @param dateTime The date-time string.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" * @return A LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" public static LocalDateTime parseDateTime(String dateTime, JTextArea chatArea) {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" return LocalDateTime.parse(dateTime, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"Error parsing date-time: \" + e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" return null; // Return null to indicate an error","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" * Parses a date string into a LocalDate object.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" * @param date The date string.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" * @return A LocalDate object.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" public static LocalDate parseDate(String date, JTextArea chatArea) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" return LocalDate.parse(date, DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"Error parsing date: \" + e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" return null; // Return null to indicate an error","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Daphne789":42}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JTextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" * Handles loading and saving tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" private String filePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" * Constructs a Storage instance with the specified file path.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" * @param filePath The path to the file where tasks are stored.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" * Loads tasks from the file and returns them as a list.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" public ArrayList\u003cTask\u003e loadTasks(JTextArea chatArea) {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" // Load tasks from the file and return them","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" File folder \u003d file.getParentFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" // Create the parent folder if it doesn\u0027t exist","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" if (!folder.exists() \u0026\u0026 !folder.mkdirs()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"Unable to create directory: \" + folder.getAbsolutePath() + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" return tasks; // Return an empty list","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" if (!file.exists() \u0026\u0026 !file.createNewFile()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"Unable to create file: \" + filePath + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" return tasks; // Return an empty list","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":" String formattedTask \u003d scanner.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":" if (formattedTask.isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":" continue; // Skip empty lines","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Daphne789"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Daphne789"},"content":" Task task \u003d Task.fromFileString(formattedTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Daphne789"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Daphne789"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Daphne789"},"content":" // Handle corrupted data - logging the issue","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Daphne789"},"content":" Logger logger \u003d Logger.getLogger(Storage.class.getName());","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Daphne789"},"content":" logger.log(Level.SEVERE, \"Corrupted data: \" + formattedTask, e);","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Daphne789"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"Invalid data: \" + formattedTask + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Daphne789"},"content":" scanner.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Daphne789"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"An error occurred while handling file operations: \" + e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"Daphne789"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Daphne789"},"content":" Logger logger \u003d Logger.getLogger(Storage.class.getName());","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Daphne789"},"content":" logger.log(Level.SEVERE, \"An error occurred while loading tasks\", e);","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Daphne789"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Daphne789"},"content":" * Saves the list of tasks to the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Daphne789"},"content":" * @param chatArea JTextArea where the message will be displayed.","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Daphne789"},"content":" public void saveTasks(ArrayList\u003cTask\u003e tasks, JTextArea chatArea) {","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"Daphne789"},"content":" // Save tasks to the file","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"Daphne789"},"content":" try (PrintWriter writer \u003d new PrintWriter(filePath)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"Daphne789"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"Daphne789"},"content":" writer.println(task.toFileString());","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"Daphne789"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"Error saving tasks: \" + e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Daphne789":100}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JTextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":" * Represents a deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" * Constructs a deadline task with description and due date.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" * @param description Description of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" * @param by Due date of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" * Gets the due date of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" * @return Due date.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" public LocalDate getBy() {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" return by;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" * Converts the deadline task into a string and display it.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" * @param chatArea JTextArea where the message will be displayed.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" public void display(JTextArea chatArea) {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"[D]\");","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" super.display(chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\" (by: \" + by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Daphne789":43}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JTextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":" * Represents an event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" * Constructs an event task with description and date-time range.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" * @param from Starting date and time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" * @param to Ending date and time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" * Gets the starting date and time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" * @return Starting date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" return from;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" * Gets the ending date and time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" * @return Ending date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" return to;","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" * Converts the event task into a string and displays it in the given JTextArea.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" * @param chatArea JTextArea where the message will be displayed.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" public void display(JTextArea chatArea) {","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"[E]\");","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" super.display(chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\" (from: \" + from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy h:mm a\"))","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":" + \" to: \" + to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy h:mm a\")) + \")\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Daphne789":56}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JTextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":" * Represents a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"public class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":" protected String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" * Constructs a task with the given description.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" * Converts the task to a string for saving purpose.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" String type \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" String dateTime \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" if (this instanceof Todo) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" type \u003d \"T\";","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" } else if (this instanceof Deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" type \u003d \"D\";","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" dateTime \u003d \" | \" + ((Deadline) this).getBy().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" } else if (this instanceof Event) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" type \u003d \"E\";","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" dateTime \u003d \" | \" + ((Event) this).getFrom().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\")) + \" | \"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" + ((Event) this).getTo().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" return type + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + dateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" * Converts a file string into task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" * @param fileString File string representation of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" * @return Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":" public static Task fromFileString(String fileString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":" String[] parts \u003d fileString.split(\"\\\\s*\\\\|\\\\s*\"); // Adjusted delimiter","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Daphne789"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Daphne789"},"content":" Task task;","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Daphne789"},"content":" switch (type) {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Daphne789"},"content":" case \"T\":","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Daphne789"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Daphne789"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Daphne789"},"content":" case \"D\":","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Daphne789"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Daphne789"},"content":" // Use parseDate method to convert to LocalDate","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Daphne789"},"content":" task \u003d new Deadline(description, parseDate(by));","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Daphne789"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Daphne789"},"content":" case \"E\":","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Daphne789"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Daphne789"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Daphne789"},"content":" // Use parseDateTime method to convert to LocalDateTime","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Daphne789"},"content":" task \u003d new Event(description, parseDateTime(from), parseDateTime(to));","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"Daphne789"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Daphne789"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Daphne789"},"content":" throw new IllegalArgumentException(\"Invalid task type: \" + type);","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"Daphne789"},"content":" if (isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"Daphne789"},"content":" task.mark();","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"Daphne789"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Daphne789"},"content":" * Parse date and time string into a LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Daphne789"},"content":" * @param dateTime Date and time string.","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Daphne789"},"content":" * @return LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Daphne789"},"content":" private static LocalDateTime parseDateTime(String dateTime) {","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"Daphne789"},"content":" return LocalDateTime.parse(dateTime, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Daphne789"},"content":" * Parses date string into a LocalDate object.","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Daphne789"},"content":" * @param date Date string.","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Daphne789"},"content":" * @return LocalDate object.","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Daphne789"},"content":" private static LocalDate parseDate(String date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"Daphne789"},"content":" return LocalDate.parse(date, DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Daphne789"},"content":" * Returns the status icon for the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Daphne789"},"content":" * @return Status icon (\"X\" for complete, \" \" for incomplete).","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Daphne789"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"Daphne789"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Daphne789"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Daphne789"},"content":" public void mark() {","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"Daphne789"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Daphne789"},"content":" * Unmarks the task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"Daphne789"},"content":" public void unmark() {","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"Daphne789"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Daphne789"},"content":" * Gets the task\u0027s description.","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"Daphne789"},"content":" * @return Task\u0027s description.","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"Daphne789"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"Daphne789"},"content":" return description;","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"Daphne789"},"content":" * Checks if the task is done.","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"Daphne789"},"content":" * @return True if the task is done, false otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"Daphne789"},"content":" public boolean isTaskDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"Daphne789"},"content":" return isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"Daphne789"},"content":" * Displays the task information.","lastModifiedDate":"2023-09-06"},{"lineNumber":152,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"Daphne789"},"content":" * @param chatArea JTextArea where the message will be displayed.","lastModifiedDate":"2023-09-06"},{"lineNumber":154,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"Daphne789"},"content":" public void display(JTextArea chatArea) {","lastModifiedDate":"2023-09-06"},{"lineNumber":156,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"[\" + getStatusIcon() + \"] \" + getDescription());","lastModifiedDate":"2023-09-06"},{"lineNumber":157,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Daphne789":158}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JTextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":" * Represents a Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":" * Constructs a Todo task with the given description.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" * Converts the todo task into a string and display it.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" * @param chatArea JTextArea where the message will be displayed.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" public void display(JTextArea chatArea) {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"[T]\");","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" super.display(chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Daphne789":29}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JTextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":" * Provides methods related to user interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":" * Displays the EchoBot logo.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":" public static void showLogo(JTextArea chatArea) {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\" ____ _ \\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":" + \" | _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" + \" | | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" + \" | |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" + \" |____/ \\\\__,_|_|\\\\_\\\\___|\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" * Displays the welcome message.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" * @param chatArea JTextArea where the message will be displayed.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" public void showWelcomeMessage(JTextArea chatArea) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"Hello! I\u0027m EchoBot\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" showLogo(chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"What can I do for you?\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" * Displays the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" * @param chatArea JTextArea where the message will be displayed.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" public void showTasks(ArrayList\u003cTask\u003e tasks, JTextArea chatArea) {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\" \" + (i + 1) + \". \");","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" task.display(chatArea);","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" * Displays the goodbye message.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" * @param chatArea JTextArea where the message will be displayed.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":" public void showByeMessage(JTextArea chatArea) {","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":" chatArea.append(\"Bye. Hope to see you again soon!\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Daphne789":58}},{"path":"src/test/java/duke/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JTextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":" public void testAddTodoTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" Storage storage \u003d new Storage(\"./data/dummy.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" AddCommand addCommand \u003d new AddCommand(Command.TaskType.TODO, \"Attend lecture\",","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" null, null);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" addCommand.doCommand(tasks, ui, storage, new JTextArea());","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" assertEquals(1, tasks.size()); // Check if the task was added to the tasks list","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" assertTrue(tasks.get(0) instanceof Todo); // Check if the added task is a Todo","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":" assertEquals(\"[T][ ] Attend lecture\", tasks.get(0).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":" public void testAddDeadlineTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":" Storage storage \u003d new Storage(\"./data/dummy.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" AddCommand addCommand \u003d new AddCommand(Command.TaskType.DEADLINE, \"Return book\",","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":" \"2023-09-01\", null);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" addCommand.doCommand(tasks, ui, storage, new JTextArea());","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" assertEquals(1, tasks.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" assertTrue(tasks.get(0) instanceof Deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" assertEquals(\"[D][ ] Return book (by: Sep 01 2023)\", tasks.get(0).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Daphne789":47}},{"path":"src/test/java/duke/command/MarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"import javax.swing.JTextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Daphne789"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Daphne789"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Daphne789"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Daphne789"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Daphne789"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Daphne789"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Daphne789"},"content":"public class MarkCommandTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Daphne789"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Daphne789"},"content":" public void testMarkCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Daphne789"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Daphne789"},"content":" Task task1 \u003d new Todo(\"Buy groceries\");","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Daphne789"},"content":" LocalDate by \u003d LocalDate.now();","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Daphne789"},"content":" Task task2 \u003d new Deadline(\"Finish homework\", by);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Daphne789"},"content":" LocalDateTime from \u003d LocalDateTime.now();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Daphne789"},"content":" LocalDateTime to \u003d LocalDateTime.now().plusHours(10);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Daphne789"},"content":" Task task3 \u003d new Event(\"Meeting\", from, to);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Daphne789"},"content":" tasks.add(task1);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Daphne789"},"content":" tasks.add(task2);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Daphne789"},"content":" tasks.add(task3);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Daphne789"},"content":" MarkCommand markCommand \u003d new MarkCommand(2);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Daphne789"},"content":" markCommand.doCommand(tasks, new Ui(), new Storage(\"./data/dummy.txt\"), new JTextArea());","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Daphne789"},"content":" assertTrue(task2.isTaskDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Daphne789"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Daphne789"},"content":" public void anotherTestMarkCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Daphne789"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Daphne789"},"content":" Task task1 \u003d new Todo(\"Buy groceries\");","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Daphne789"},"content":" LocalDate by \u003d LocalDate.now();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Daphne789"},"content":" Task task2 \u003d new Deadline(\"Finish homework\", by);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Daphne789"},"content":" LocalDateTime from \u003d LocalDateTime.now();","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Daphne789"},"content":" LocalDateTime to \u003d LocalDateTime.now().plusHours(10);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Daphne789"},"content":" Task task3 \u003d new Event(\"Meeting\", from, to);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Daphne789"},"content":" tasks.add(task1);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Daphne789"},"content":" tasks.add(task2);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Daphne789"},"content":" tasks.add(task3);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Daphne789"},"content":" MarkCommand markCommand \u003d new MarkCommand(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Daphne789"},"content":" markCommand.doCommand(tasks, new Ui(), new Storage(\"./data/dummy.txt\"), new JTextArea());","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Daphne789"},"content":" assertFalse(task3.isTaskDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Daphne789"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Daphne789"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Daphne789":60}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Daphne789"},"content":"todo Borrow a book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Daphne789"},"content":"deadline Return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Daphne789"},"content":"event Project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Daphne789"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Daphne789"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Daphne789"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Daphne789"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Daphne789"},"content":"bye","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Daphne789"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Daphne789":10}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Daphne789"},"content":"java -classpath ..\\bin EchoBot \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":{"Daphne789":1,"-":20}}] diff --git a/Daphne789_ip_master/commits.json b/Daphne789_ip_master/commits.json index 9c72855a..e9ccb6f6 100644 --- a/Daphne789_ip_master/commits.json +++ b/Daphne789_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Daphne789":[{"date":"2023-08-23","commitResults":[{"hash":"02362df3ee1bd96d425091d823cb48a39c26db89","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":10}}},{"hash":"029ef0a5e7db2e9286638e9457a0649a37a5b3b1","isMergeCommit":false,"messageTitle":"Completed Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":9}}},{"hash":"749104536ba6b267681330de4d2c7035605043e3","isMergeCommit":false,"messageTitle":"Completed Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":11}}}]},{"date":"2023-08-24","commitResults":[{"hash":"0269005894a469eb608b45cebf8be842afbfa495","isMergeCommit":false,"messageTitle":"Completed Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":5}}},{"hash":"6c3165a9542d74e17644e1089af56103d508a632","isMergeCommit":false,"messageTitle":"Completed Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":8}}},{"hash":"a30c7ee6837d5d8a0513db218ac2000d5b12997f","isMergeCommit":false,"messageTitle":"Completed Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":1,"deletions":1},"bat":{"insertions":1,"deletions":1}}},{"hash":"1e8ba8a5b13e39de9e6fa356f3f5188b940f695a","isMergeCommit":false,"messageTitle":"Completed Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":7}}},{"hash":"d2a8ab6674f7741b14ac0125d623357cecf326e5","isMergeCommit":false,"messageTitle":"Completed Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":25}}}]},{"date":"2023-08-27","commitResults":[{"hash":"828ffdc231f95f3b94b5c6320a311d54266def58","isMergeCommit":false,"messageTitle":"Separate class into a new file","messageBody":"","tags":["release-1"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":0}}},{"hash":"f584933dac1798469569ce7a270a73e499f5ed58","isMergeCommit":false,"messageTitle":"Remove some classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":78}}},{"hash":"2cb64741aa0d6692d2caebd138d87a7617d52444","isMergeCommit":false,"messageTitle":"Add save feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":129,"deletions":3}}},{"hash":"6cfcbb88915c09d0463d409d43f35ca181ac5ec8","isMergeCommit":false,"messageTitle":"Complete Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":55,"deletions":21}}},{"hash":"dda36dd2ef7f39bcb71ea1dd73843e33239f2181","isMergeCommit":false,"messageTitle":"Complete Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":24,"deletions":24}}},{"hash":"5ed2caa9114ff5901e781a5e894fd22fc9692f24","isMergeCommit":false,"messageTitle":"Add data folder","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"69b1ffe763eb16b659c15aa0a7391158ed327d83","isMergeCommit":true,"messageTitle":"Complete Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"facb7c7b0a5fd0bfcaa86d8ec3350d03b0dc5158","isMergeCommit":false,"messageTitle":"Fix ArrayIndexOutOfBoundsException","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":7,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"a1e83b04e479a2fb9407e585adcf0db1c8e67f93","isMergeCommit":false,"messageTitle":"Complete A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":1},"java":{"insertions":309,"deletions":179}}},{"hash":"bc7ac7f67fbe5058effba02255caf2b4e9778b1e","isMergeCommit":false,"messageTitle":"Complete A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":3},"java":{"insertions":103,"deletions":22}}},{"hash":"a4812d069bdcd52614f08b717f3bb2b6f5a6e536","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"888d93b822f5022389b4998717aaa73bc510b109","isMergeCommit":false,"messageTitle":"Complete A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"b5fb304557f9a804f29e237c02c98337953e7700","isMergeCommit":false,"messageTitle":"Complete A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":0}}},{"hash":"00f814edb4571b4ea6cc4dfaa34cce8d562bd64c","isMergeCommit":false,"messageTitle":"Add isTaskDone method","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"24dd9232afd7c61470a8872f9d0876aa6b47ec54","isMergeCommit":false,"messageTitle":"Complete A-Jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":3},"java":{"insertions":1,"deletions":1}}},{"hash":"77dc2d085c42e987a7218a6b1d8fa7931699fe02","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":285,"deletions":12}}}]},{"date":"2023-08-30","commitResults":[{"hash":"d7244d63593ae46c74b36103017a134010ca5604","isMergeCommit":false,"messageTitle":"Complete A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":6}}},{"hash":"2e7b2b10e99b4e9d6ef46a2699e271e55bfb5d26","isMergeCommit":false,"messageTitle":"Complete Level-9","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":54,"deletions":1}}},{"hash":"cd2b1c4c8c378d900eb67ba4be18b07d538e7374","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":1}}}]},{"date":"2023-09-05","commitResults":[{"hash":"7550680e0b8afb0a6926e4b7f725b81b930d8472","isMergeCommit":false,"messageTitle":"Complete A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":95,"deletions":89}}}]}]},"authorFileTypeContributionMap":{"Daphne789":{"java":1049,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":7,"txt":18}},"authorContributionVariance":{"Daphne789":33690.324},"authorDisplayNameMap":{"Daphne789":"CS2103T-W09-1 DAPH..MINA"}} +{"authorDailyContributionsMap":{"Daphne789":[{"date":"2023-08-23","commitResults":[{"hash":"02362df3ee1bd96d425091d823cb48a39c26db89","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":10}}},{"hash":"029ef0a5e7db2e9286638e9457a0649a37a5b3b1","isMergeCommit":false,"messageTitle":"Completed Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":9}}},{"hash":"749104536ba6b267681330de4d2c7035605043e3","isMergeCommit":false,"messageTitle":"Completed Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":11}}}]},{"date":"2023-08-24","commitResults":[{"hash":"0269005894a469eb608b45cebf8be842afbfa495","isMergeCommit":false,"messageTitle":"Completed Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":5}}},{"hash":"6c3165a9542d74e17644e1089af56103d508a632","isMergeCommit":false,"messageTitle":"Completed Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":8}}},{"hash":"a30c7ee6837d5d8a0513db218ac2000d5b12997f","isMergeCommit":false,"messageTitle":"Completed Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":1,"deletions":1},"bat":{"insertions":1,"deletions":1}}},{"hash":"1e8ba8a5b13e39de9e6fa356f3f5188b940f695a","isMergeCommit":false,"messageTitle":"Completed Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":7}}},{"hash":"d2a8ab6674f7741b14ac0125d623357cecf326e5","isMergeCommit":false,"messageTitle":"Completed Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":25}}}]},{"date":"2023-08-27","commitResults":[{"hash":"828ffdc231f95f3b94b5c6320a311d54266def58","isMergeCommit":false,"messageTitle":"Separate class into a new file","messageBody":"","tags":["release-1"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":0}}},{"hash":"f584933dac1798469569ce7a270a73e499f5ed58","isMergeCommit":false,"messageTitle":"Remove some classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":78}}},{"hash":"2cb64741aa0d6692d2caebd138d87a7617d52444","isMergeCommit":false,"messageTitle":"Add save feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":129,"deletions":3}}},{"hash":"6cfcbb88915c09d0463d409d43f35ca181ac5ec8","isMergeCommit":false,"messageTitle":"Complete Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":55,"deletions":21}}},{"hash":"dda36dd2ef7f39bcb71ea1dd73843e33239f2181","isMergeCommit":false,"messageTitle":"Complete Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":24,"deletions":24}}},{"hash":"5ed2caa9114ff5901e781a5e894fd22fc9692f24","isMergeCommit":false,"messageTitle":"Add data folder","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"69b1ffe763eb16b659c15aa0a7391158ed327d83","isMergeCommit":true,"messageTitle":"Complete Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"facb7c7b0a5fd0bfcaa86d8ec3350d03b0dc5158","isMergeCommit":false,"messageTitle":"Fix ArrayIndexOutOfBoundsException","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":7,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"a1e83b04e479a2fb9407e585adcf0db1c8e67f93","isMergeCommit":false,"messageTitle":"Complete A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":1},"java":{"insertions":309,"deletions":179}}},{"hash":"bc7ac7f67fbe5058effba02255caf2b4e9778b1e","isMergeCommit":false,"messageTitle":"Complete A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":3},"java":{"insertions":103,"deletions":22}}},{"hash":"a4812d069bdcd52614f08b717f3bb2b6f5a6e536","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"888d93b822f5022389b4998717aaa73bc510b109","isMergeCommit":false,"messageTitle":"Complete A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"b5fb304557f9a804f29e237c02c98337953e7700","isMergeCommit":false,"messageTitle":"Complete A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":0}}},{"hash":"00f814edb4571b4ea6cc4dfaa34cce8d562bd64c","isMergeCommit":false,"messageTitle":"Add isTaskDone method","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"24dd9232afd7c61470a8872f9d0876aa6b47ec54","isMergeCommit":false,"messageTitle":"Complete A-Jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":3},"java":{"insertions":1,"deletions":1}}},{"hash":"77dc2d085c42e987a7218a6b1d8fa7931699fe02","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":285,"deletions":12}}}]},{"date":"2023-08-30","commitResults":[{"hash":"d7244d63593ae46c74b36103017a134010ca5604","isMergeCommit":false,"messageTitle":"Complete A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":6}}},{"hash":"2e7b2b10e99b4e9d6ef46a2699e271e55bfb5d26","isMergeCommit":false,"messageTitle":"Complete Level-9","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":54,"deletions":1}}},{"hash":"cd2b1c4c8c378d900eb67ba4be18b07d538e7374","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":1}}}]},{"date":"2023-09-05","commitResults":[{"hash":"7550680e0b8afb0a6926e4b7f725b81b930d8472","isMergeCommit":false,"messageTitle":"Complete A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":95,"deletions":89}}}]},{"date":"2023-09-06","commitResults":[{"hash":"233c35e760cbeaf7a76dfb85e117a645e5d7f7a5","isMergeCommit":false,"messageTitle":"Complete Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":10,"deletions":0},"java":{"insertions":266,"deletions":172}}}]}]},"authorFileTypeContributionMap":{"Daphne789":{"java":1143,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":22,"txt":28}},"authorContributionVariance":{"Daphne789":37868.387},"authorDisplayNameMap":{"Daphne789":"CS2103T-W09-1 DAPH..MINA"}} diff --git a/Dioclei_ip_master/authorship.json b/Dioclei_ip_master/authorship.json index 33207733..264ae85e 100644 --- a/Dioclei_ip_master/authorship.json +++ b/Dioclei_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/fluke/Fluke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.InvalidInputException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" * Fluke is a chatbot which gets your commands right by fluke. Fluke\u0027s main goal is to help manage tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":"public class Fluke {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" private final static String SAVE_FILE_NAME \u003d \"fluke.txt\";","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" * Enumerates all possible commands.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" public enum Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":" BYE, LIST, MARK, UNMARK, DELETE, TODO, DEADLINE, EVENT, FIND","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" * Constructs a Fluke chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" * @param filePath file path in which Fluke stores its tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" public Fluke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" } catch (FlukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Dioclei"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Dioclei"},"content":" * Main entry point into Fluke\u0027s program.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Dioclei"},"content":" * @param args Arguments given for Fluke\u0027s program.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Dioclei"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Dioclei"},"content":" // initialise Fluke","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Dioclei"},"content":" Fluke fluke \u003d new Fluke(SAVE_FILE_NAME);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Dioclei"},"content":" fluke.run();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Dioclei"},"content":" * Runs Fluke\u0027s program, accepting input from the user and outputting appropriately.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Dioclei"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Dioclei"},"content":" // greet the user","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Dioclei"},"content":" this.ui.greet();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Dioclei"},"content":" // initialise scanner to check for user input","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Dioclei"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Dioclei"},"content":" boolean isWaitingForInput \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Dioclei"},"content":" while (isWaitingForInput) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Dioclei"},"content":" // check for user commands","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Dioclei"},"content":" String nextCommand \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Dioclei"},"content":" Command commandType \u003d Parser.parseCommand(nextCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Dioclei"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Dioclei"},"content":" case BYE:","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Dioclei"},"content":" isWaitingForInput \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Dioclei"},"content":" this.ui.sayBye();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Dioclei"},"content":" case LIST:","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Dioclei"},"content":" this.ui.showListOfTasks(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Dioclei"},"content":" case FIND:","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Dioclei"},"content":" findTask(nextCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Dioclei"},"content":" case MARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Dioclei"},"content":" case UNMARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Dioclei"},"content":" case DELETE:","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Dioclei"},"content":" case TODO:","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Dioclei"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Dioclei"},"content":" case EVENT:","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Dioclei"},"content":" changeTodoList(commandType, nextCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Dioclei"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Dioclei"},"content":" } catch (FlukeException d) {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Dioclei"},"content":" this.ui.showError(d.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Dioclei"},"content":" * Tells Fluke to add a Todo to its tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Dioclei"},"content":" * @param command Command given to Fluke.","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if an error occurs while adding the task, for instance, with invalid inputs.","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Dioclei"},"content":" public void addTodo(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Dioclei"},"content":" String parsedDescription \u003d Parser.parseTodoCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Dioclei"},"content":" Task taskAdded \u003d this.tasks.addTodo(parsedDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Dioclei"},"content":" this.ui.showTaskAdded(taskAdded, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Dioclei"},"content":" * Tells Fluke to add a Deadline to its tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Dioclei"},"content":" * @param command Command given to Fluke.","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if an error occurs while adding the task, for instance, with invalid inputs.","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Dioclei"},"content":" private void addDeadline(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Dioclei"},"content":" String[] parsedCommand \u003d Parser.parseDeadlineCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Dioclei"},"content":" String description \u003d parsedCommand[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Dioclei"},"content":" String byDate \u003d parsedCommand[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Dioclei"},"content":" Task taskAdded \u003d this.tasks.addDeadline(description, byDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Dioclei"},"content":" this.ui.showTaskAdded(taskAdded, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Dioclei"},"content":" * Tells Fluke to add an Event to its tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Dioclei"},"content":" * @param command Command given to Fluke.","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if an error occurs while adding the task, for instance, with invalid inputs.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Dioclei"},"content":" private void addEvent(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Dioclei"},"content":" String[] parsedCommand \u003d Parser.parseEventCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Dioclei"},"content":" String description \u003d parsedCommand[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Dioclei"},"content":" String fromDate \u003d parsedCommand[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Dioclei"},"content":" String toDate \u003d parsedCommand[2];","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Dioclei"},"content":" Task taskAdded \u003d this.tasks.addEvent(description, fromDate, toDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Dioclei"},"content":" this.ui.showTaskAdded(taskAdded, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Dioclei"},"content":" * Tells Fluke to mark a task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Dioclei"},"content":" * @param command Command given to Fluke.","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if an error occurs while marking a task as done, for instance, with invalid inputs.","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Dioclei"},"content":" private void markTaskAsDone(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Dioclei"},"content":" int index \u003d Parser.parseMarkAsDoneCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Dioclei"},"content":" Task taskMarked \u003d tasks.markTaskAsDone(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Dioclei"},"content":" this.ui.showTaskMarkedAsDone(taskMarked);","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Dioclei"},"content":" * Tells Fluke to mark a task as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Dioclei"},"content":" * @param command Command given to Fluke.","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if an error occurs while marking a task as not done, for instance, with invalid inputs.","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Dioclei"},"content":" private void markTaskAsUndone(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Dioclei"},"content":" int index \u003d Parser.parseMarkAsUndoneCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Dioclei"},"content":" Task taskMarked \u003d tasks.markTaskAsUndone(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Dioclei"},"content":" this.ui.showTaskMarkedAsUndone(taskMarked);","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Dioclei"},"content":" * Tells Fluke to delete a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Dioclei"},"content":" * @param command Command given to Fluke.","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if an error occurs while deleting a task, for instance, with invalid inputs.","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"Dioclei"},"content":" private void deleteTask(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"Dioclei"},"content":" int index \u003d Parser.parseDeleteCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"Dioclei"},"content":" Task deleted \u003d tasks.deleteTask(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"Dioclei"},"content":" this.ui.showTaskDeleted(deleted, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"Dioclei"},"content":" * Fluke attempts to find tasks with the corresponding keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"Dioclei"},"content":" * @param command the command given","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"Dioclei"},"content":" * @throws InvalidInputException if there is no keyword given.","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"Dioclei"},"content":" private void findTask(String command) throws InvalidInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"Dioclei"},"content":" String keyword \u003d Parser.parseFindCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"Dioclei"},"content":" this.ui.showTasksWithKeyword(this.tasks.findTask(keyword));","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"Dioclei"},"content":" * Helper function for additional logic related to changing the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"Dioclei"},"content":" * @param commandType type of command","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"Dioclei"},"content":" * @param command the content in the command","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException an exception related to operations with fluke.Fluke","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"Dioclei"},"content":" private void changeTodoList(Command commandType, String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"Dioclei"},"content":" // 1. make changes to the list","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"Dioclei"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"Dioclei"},"content":" case MARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"Dioclei"},"content":" markTaskAsDone(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"Dioclei"},"content":" case UNMARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"Dioclei"},"content":" markTaskAsUndone(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"Dioclei"},"content":" case DELETE:","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"Dioclei"},"content":" deleteTask(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"Dioclei"},"content":" case TODO:","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"Dioclei"},"content":" addTodo(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"Dioclei"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"Dioclei"},"content":" addDeadline(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"Dioclei"},"content":" case EVENT:","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"Dioclei"},"content":" addEvent(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"Dioclei"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"Dioclei"},"content":" // should not occur","lastModifiedDate":"2023-09-02"},{"lineNumber":203,"author":{"gitId":"Dioclei"},"content":" throw new FlukeException(\"An unknown error has occurred.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"Dioclei"},"content":" // 2. save to file","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":207,"author":{"gitId":"Dioclei"},"content":" this.storage.save(tasks.getListOfTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"Dioclei"},"content":" } catch (IOException i) {","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"Dioclei"},"content":" throw new FlukeException(i.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Dioclei":212}},{"path":"src/main/java/fluke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.InvalidInputException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.SaveFileParsingException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" * Handles parsing for Fluke.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" private final static DateTimeFormatter DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":" * Parses a command (input as a string by the user) into an Enum value","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" * @param command Command to be parsed","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" * @return a Command corresponding to the command given.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" * @throws InvalidInputException if the command given is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" public static Fluke.Command parseCommand(String command) throws InvalidInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.BYE;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.LIST;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.MARK;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Dioclei"},"content":" } else if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.UNMARK;","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Dioclei"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.DELETE;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Dioclei"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.TODO;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Dioclei"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.DEADLINE;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Dioclei"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.EVENT;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Dioclei"},"content":" } else if (nextCommand.startsWith(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.FIND;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Dioclei"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Dioclei"},"content":" * Parses the task from a line in the save file corresponding to a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Dioclei"},"content":" * @param taskString Line in the save file","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Dioclei"},"content":" * @return a Task corresponding to the line.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if the line is invalid, for instance if the save file is tampered with or corrupted.","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Dioclei"},"content":" public static Task parseTask(String taskString) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Dioclei"},"content":" Fluke.Command taskType;","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Dioclei"},"content":" boolean isMarked;","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Dioclei"},"content":" // parse type","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Dioclei"},"content":" Pattern typePattern \u003d Pattern.compile(\"\\\\[[TDE]]\");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Dioclei"},"content":" Matcher typeMatcher \u003d typePattern.matcher(taskString);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Dioclei"},"content":" boolean typeIsFound \u003d typeMatcher.find();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Dioclei"},"content":" if (!typeIsFound) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Dioclei"},"content":" switch (typeMatcher.group()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Dioclei"},"content":" case \"[T]\":","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Dioclei"},"content":" taskType \u003d Fluke.Command.TODO;","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Dioclei"},"content":" case \"[D]\":","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Dioclei"},"content":" taskType \u003d Fluke.Command.DEADLINE;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Dioclei"},"content":" case \"[E]\":","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Dioclei"},"content":" taskType \u003d Fluke.Command.EVENT;","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Dioclei"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Dioclei"},"content":" // parse mark","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Dioclei"},"content":" Pattern markPattern \u003d Pattern.compile(\"\\\\[[X ]]\");","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Dioclei"},"content":" Matcher markMatcher \u003d markPattern.matcher(taskString);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Dioclei"},"content":" boolean markIsFound \u003d markMatcher.find();","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Dioclei"},"content":" if (!markIsFound) {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Dioclei"},"content":" String mark \u003d markMatcher.group();","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Dioclei"},"content":" switch (mark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Dioclei"},"content":" case \"[ ]\":","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Dioclei"},"content":" isMarked \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Dioclei"},"content":" case \"[X]\":","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Dioclei"},"content":" isMarked \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Dioclei"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Dioclei"},"content":" String taskDesc \u003d taskString.substring(7);","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Dioclei"},"content":" if (taskType \u003d\u003d Fluke.Command.TODO) {","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Dioclei"},"content":" return new Todo(taskDesc, isMarked);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Dioclei"},"content":" } else if (taskType \u003d\u003d Fluke.Command.DEADLINE) {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Dioclei"},"content":" // parse by date","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Dioclei"},"content":" int bracketStartIndex \u003d taskDesc.indexOf(\u0027(\u0027);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Dioclei"},"content":" int bracketEndIndex \u003d taskDesc.indexOf(\u0027)\u0027);","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Dioclei"},"content":" if (bracketStartIndex \u003c 0 || bracketEndIndex \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Dioclei"},"content":" String desc \u003d taskDesc.substring(0, bracketStartIndex).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Dioclei"},"content":" String by \u003d taskDesc.substring(bracketStartIndex + 4, bracketEndIndex).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Dioclei"},"content":" LocalDate date \u003d LocalDate.parse(by, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Dioclei"},"content":" return new Deadline(desc, isMarked, date.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Dioclei"},"content":" } else if (taskType \u003d\u003d Fluke.Command.EVENT) {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Dioclei"},"content":" int bracketStartIndex \u003d taskDesc.indexOf(\u0027(\u0027);","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Dioclei"},"content":" if (bracketStartIndex \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Dioclei"},"content":" String desc \u003d taskDesc.substring(0, bracketStartIndex).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Dioclei"},"content":" // parse from date","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Dioclei"},"content":" Pattern fromPattern \u003d Pattern.compile(\"from:.+to:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Dioclei"},"content":" Matcher fromMatcher \u003d fromPattern.matcher(taskDesc);","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Dioclei"},"content":" boolean fromDateIsFound \u003d fromMatcher.find();","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Dioclei"},"content":" if (!fromDateIsFound) {","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Dioclei"},"content":" String from \u003d fromMatcher.group().substring(5).replaceFirst(\"to:\", \"\").trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Dioclei"},"content":" LocalDate fromDate \u003d LocalDate.parse(from, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Dioclei"},"content":" // parse to date","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Dioclei"},"content":" Pattern toPattern \u003d Pattern.compile(\"to:.+\\\\)\");","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Dioclei"},"content":" Matcher toMatcher \u003d toPattern.matcher(taskDesc);","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Dioclei"},"content":" boolean toDateIsFound \u003d toMatcher.find();","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Dioclei"},"content":" if (!toDateIsFound) {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Dioclei"},"content":" String to \u003d toMatcher.group().substring(3).replaceFirst(\"\\\\)\", \"\").trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Dioclei"},"content":" LocalDate toDate \u003d LocalDate.parse(to, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Dioclei"},"content":" return new Event(desc, isMarked, fromDate.toString(), toDate.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Dioclei"},"content":" * Parses a Todo command.","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Dioclei"},"content":" * @param command Command given by the user","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Dioclei"},"content":" * @return the description of the todo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if the description given is empty.","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Dioclei"},"content":" public static String parseTodoCommand(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Dioclei"},"content":" if (command.length() \u003c\u003d 5) {","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Dioclei"},"content":" // command is too short, description is invalid","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Dioclei"},"content":" throw new EmptyDescriptionException();","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"Dioclei"},"content":" return command.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"Dioclei"},"content":" * Parses and validates a Deadline command","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"Dioclei"},"content":" * @param command Command given by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"Dioclei"},"content":" * @return a String array containing at 0: description, 1: (String) by date","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if the description given is invalid, or if the by date given is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"Dioclei"},"content":" public static String[] parseDeadlineCommand(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"Dioclei"},"content":" if (command.length() \u003c\u003d 9) {","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"Dioclei"},"content":" // command is too short, description is invalid","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"Dioclei"},"content":" throw new EmptyDescriptionException();","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"Dioclei"},"content":" String str \u003d command.substring(9);","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"Dioclei"},"content":" int byIndex \u003d str.indexOf(\"/by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"Dioclei"},"content":" if (byIndex \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"Dioclei"},"content":" String description \u003d str.substring(0, byIndex - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"Dioclei"},"content":" String by \u003d str.substring(byIndex + 4);","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"Dioclei"},"content":" return new String[]{description, by};","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"Dioclei"},"content":" * Parses and validates an Event command.","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"Dioclei"},"content":" * @param command Command given by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"Dioclei"},"content":" * @return a String array containing at 0: description, 1: (String) from date 2: to date.","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if any of the inputs are invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"Dioclei"},"content":" public static String[] parseEventCommand(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"Dioclei"},"content":" if (command.length() \u003c\u003d 6) {","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"Dioclei"},"content":" // command is too short, description is invalid","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"Dioclei"},"content":" throw new EmptyDescriptionException();","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"Dioclei"},"content":" String str \u003d command.substring(6);","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"Dioclei"},"content":" int fromIndex \u003d str.indexOf(\"/from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"Dioclei"},"content":" int toIndex \u003d str.indexOf(\"/to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"Dioclei"},"content":" if (fromIndex \u003c 0 || toIndex \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"Dioclei"},"content":" String description \u003d str.substring(0, fromIndex - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"Dioclei"},"content":" String from \u003d str.substring(fromIndex + 6, toIndex - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"Dioclei"},"content":" String to \u003d str.substring(toIndex + 4);","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"Dioclei"},"content":" return new String[]{description, from, to};","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":203,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"Dioclei"},"content":" * Parses a Delete command.","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"Dioclei"},"content":" * @param command Command given by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":207,"author":{"gitId":"Dioclei"},"content":" * @return index of the task in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if the input is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"Dioclei"},"content":" public static int parseDeleteCommand(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"Dioclei"},"content":" if (command.length() \u003c\u003d 7) {","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"Dioclei"},"content":" int taskNumber \u003d obtainTaskNumber(command.substring(7));","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"Dioclei"},"content":" return taskNumber - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":218,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":219,"author":{"gitId":"Dioclei"},"content":" * Parses a Mark as Done Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":220,"author":{"gitId":"Dioclei"},"content":" * @param command Command given by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":221,"author":{"gitId":"Dioclei"},"content":" * @return index of the task in the task list to be marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":222,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if the input is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":223,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":224,"author":{"gitId":"Dioclei"},"content":" public static int parseMarkAsDoneCommand(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":225,"author":{"gitId":"Dioclei"},"content":" if (command.length() \u003c\u003d 5) {","lastModifiedDate":"2023-09-02"},{"lineNumber":226,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":227,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":228,"author":{"gitId":"Dioclei"},"content":" int taskNumber \u003d obtainTaskNumber(command.substring(5));","lastModifiedDate":"2023-09-02"},{"lineNumber":229,"author":{"gitId":"Dioclei"},"content":" return taskNumber - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":230,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":231,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":232,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":233,"author":{"gitId":"Dioclei"},"content":" * Parses a Mark as Undone Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":234,"author":{"gitId":"Dioclei"},"content":" * @param command Command given by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":235,"author":{"gitId":"Dioclei"},"content":" * @return index of the task in the task list to be marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":236,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if the input is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":237,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":238,"author":{"gitId":"Dioclei"},"content":" public static int parseMarkAsUndoneCommand(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":239,"author":{"gitId":"Dioclei"},"content":" if (command.length() \u003c\u003d 7) {","lastModifiedDate":"2023-09-02"},{"lineNumber":240,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":241,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":242,"author":{"gitId":"Dioclei"},"content":" int taskNumber \u003d obtainTaskNumber(command.substring(7));","lastModifiedDate":"2023-09-02"},{"lineNumber":243,"author":{"gitId":"Dioclei"},"content":" return taskNumber - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":244,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":245,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":246,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":247,"author":{"gitId":"Dioclei"},"content":" * Helper function to obtain a number from a string.","lastModifiedDate":"2023-09-02"},{"lineNumber":248,"author":{"gitId":"Dioclei"},"content":" * @param taskNumberString String to obtain a number from.","lastModifiedDate":"2023-09-02"},{"lineNumber":249,"author":{"gitId":"Dioclei"},"content":" * @return An integer","lastModifiedDate":"2023-09-02"},{"lineNumber":250,"author":{"gitId":"Dioclei"},"content":" * @throws InvalidInputException if the string is not a valid number.","lastModifiedDate":"2023-09-02"},{"lineNumber":251,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":252,"author":{"gitId":"Dioclei"},"content":" private static int obtainTaskNumber(String taskNumberString) throws InvalidInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":253,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":254,"author":{"gitId":"Dioclei"},"content":" return Integer.parseInt(taskNumberString);","lastModifiedDate":"2023-09-02"},{"lineNumber":255,"author":{"gitId":"Dioclei"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":256,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":257,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":258,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":259,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":260,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":261,"author":{"gitId":"Dioclei"},"content":" * Parses a find command to obtain the keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":262,"author":{"gitId":"Dioclei"},"content":" * @param command the command given.","lastModifiedDate":"2023-09-02"},{"lineNumber":263,"author":{"gitId":"Dioclei"},"content":" * @return the keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":264,"author":{"gitId":"Dioclei"},"content":" * @throws InvalidInputException if there is no keyword given.","lastModifiedDate":"2023-09-02"},{"lineNumber":265,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":266,"author":{"gitId":"Dioclei"},"content":" public static String parseFindCommand(String command) throws InvalidInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":267,"author":{"gitId":"Dioclei"},"content":" if (command.length() \u003c 6) {","lastModifiedDate":"2023-09-02"},{"lineNumber":268,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":269,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":270,"author":{"gitId":"Dioclei"},"content":" return command.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":271,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":272,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Dioclei":272}},{"path":"src/main/java/fluke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" * Handles storing of task list data.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" private final String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" private final ArrayList\u003cTask\u003e tasksReadFromStorage;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":" * Constructs a Storage with an appropriate filePath.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" * @param filePath file path of the text file to store task data.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" this.tasksReadFromStorage \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" * Attempts to load tasks from local storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" * @return An ArrayList containing tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":" public ArrayList\u003cTask\u003e load() throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" File saveFile \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" if (saveFile.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":" // parse the file and write to list","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Dioclei"},"content":" Scanner fileScanner \u003d new Scanner(saveFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Dioclei"},"content":" while (fileScanner.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Dioclei"},"content":" String line \u003d fileScanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Dioclei"},"content":" if (!line.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Dioclei"},"content":" Task task \u003d Parser.parseTask(line);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Dioclei"},"content":" tasksReadFromStorage.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Dioclei"},"content":" } catch (FileNotFoundException f) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Dioclei"},"content":" throw new FlukeException(f.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Dioclei"},"content":" return tasksReadFromStorage;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Dioclei"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Dioclei"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Dioclei"},"content":" * Saves list of tasks to local storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Dioclei"},"content":" * @param tasks An ArrayList containing tasks to be saved.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Dioclei"},"content":" * @throws IOException Error that occurs during saving","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Dioclei"},"content":" public void save(ArrayList\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Dioclei"},"content":" FileWriter writer \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Dioclei"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Dioclei"},"content":" String out \u003d tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Dioclei"},"content":" writer.write(out);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Dioclei"},"content":" writer.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Dioclei":68}},{"path":"src/main/java/fluke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.TaskDoesNotExistException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" private final ArrayList\u003cTask\u003e listOfTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":" * Constructs a TaskList with an empty list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" this.listOfTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" * Constructs a TaskList with an initial list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" * @param initialTasks the initial list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" public TaskList(ArrayList\u003cTask\u003e initialTasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" this.listOfTasks \u003d initialTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" * Getter for the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" * @return the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" public ArrayList\u003cTask\u003e getListOfTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" return listOfTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Dioclei"},"content":" * Gets the size of the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Dioclei"},"content":" * @return size of the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Dioclei"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Dioclei"},"content":" return listOfTasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Dioclei"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Dioclei"},"content":" * @param task task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Dioclei"},"content":" private void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Dioclei"},"content":" listOfTasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Dioclei"},"content":" * Adds a Todo to the list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Dioclei"},"content":" * @param description description of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Dioclei"},"content":" * @return the task added.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if there is an error while adding the task, for instance an invalid description.","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Dioclei"},"content":" public Task addTodo(String description) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Dioclei"},"content":" Todo newTodo \u003d new Todo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Dioclei"},"content":" addTask(newTodo);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Dioclei"},"content":" return newTodo;","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Dioclei"},"content":" * Adds a Deadline to the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Dioclei"},"content":" * @param description description of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Dioclei"},"content":" * @param byDate the date which the task is due","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Dioclei"},"content":" * @return the task added.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if there is an error while adding the task, for instance an invalid description.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Dioclei"},"content":" public Task addDeadline(String description, String byDate) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Dioclei"},"content":" Task newDeadline \u003d new Deadline(description, byDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Dioclei"},"content":" addTask(newDeadline);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Dioclei"},"content":" return newDeadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Dioclei"},"content":" * Adds an Event to the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Dioclei"},"content":" * @param description description of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Dioclei"},"content":" * @param fromDate the date which the event starts","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Dioclei"},"content":" * @param toDate the date which the event ends","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Dioclei"},"content":" * @return the task added.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if there is an error while adding the task, for instance an invalid description.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Dioclei"},"content":" public Task addEvent(String description, String fromDate, String toDate) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Dioclei"},"content":" Task newEvent \u003d new Event(description, fromDate, toDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Dioclei"},"content":" addTask(newEvent);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Dioclei"},"content":" return newEvent;","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Dioclei"},"content":" * Deletes a task from the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Dioclei"},"content":" * @param index index of the task in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Dioclei"},"content":" * @return the deleted task.","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Dioclei"},"content":" * @throws TaskDoesNotExistException if the index given is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Dioclei"},"content":" public Task deleteTask(int index) throws TaskDoesNotExistException {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Dioclei"},"content":" // check if task exists","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Dioclei"},"content":" if (index \u003c listOfTasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Dioclei"},"content":" Task taskToBeDeleted \u003d listOfTasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Dioclei"},"content":" listOfTasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Dioclei"},"content":" return taskToBeDeleted;","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Dioclei"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Dioclei"},"content":" throw new TaskDoesNotExistException();","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Dioclei"},"content":" * Marks a task in the task list as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Dioclei"},"content":" * @param index index of the task in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Dioclei"},"content":" * @return the marked task.","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Dioclei"},"content":" * @throws TaskDoesNotExistException if the index given is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Dioclei"},"content":" public Task markTaskAsDone(int index) throws TaskDoesNotExistException {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Dioclei"},"content":" // check if task exists","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Dioclei"},"content":" if (index \u003c listOfTasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Dioclei"},"content":" Task task \u003d listOfTasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Dioclei"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Dioclei"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Dioclei"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Dioclei"},"content":" throw new TaskDoesNotExistException();","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Dioclei"},"content":" * Marks a task in the task list as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Dioclei"},"content":" * @param index index of the task in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Dioclei"},"content":" * @return the marked task.","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Dioclei"},"content":" * @throws TaskDoesNotExistException if the index given is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Dioclei"},"content":" public Task markTaskAsUndone(int index) throws TaskDoesNotExistException {","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Dioclei"},"content":" // check if task exists","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Dioclei"},"content":" if (index \u003c listOfTasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Dioclei"},"content":" Task task \u003d listOfTasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Dioclei"},"content":" task.markAsUndone();","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Dioclei"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Dioclei"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Dioclei"},"content":" throw new TaskDoesNotExistException();","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Dioclei"},"content":" * Finds all tasks containing a specific keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Dioclei"},"content":" * @param keyword the keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Dioclei"},"content":" * @return a TaskList containing all tasks containing the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Dioclei"},"content":" public TaskList findTask(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Dioclei"},"content":" ArrayList\u003cTask\u003e newListOfTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Dioclei"},"content":" for (int i \u003d 0; i \u003c this.getSize(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Dioclei"},"content":" Task task \u003d this.listOfTasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Dioclei"},"content":" if (task.hasKeyword(keyword)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Dioclei"},"content":" newListOfTasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"Dioclei"},"content":" return new TaskList(newListOfTasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"Dioclei"},"content":" * Returns a string representation of the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"Dioclei"},"content":" * @return a string representation of the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"Dioclei"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"Dioclei"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"Dioclei"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"Dioclei"},"content":" for (int i \u003d 0; i \u003c listOfTasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"Dioclei"},"content":" Task task \u003d listOfTasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"Dioclei"},"content":" int number \u003d i + 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"Dioclei"},"content":" str +\u003d (number + \".\" + task);","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"Dioclei"},"content":" if (i !\u003d listOfTasks.size() - 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"Dioclei"},"content":" str +\u003d \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"Dioclei"},"content":" return str;","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Dioclei":177}},{"path":"src/main/java/fluke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":" * This class contains all user interface related functionalities.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":" private final static String CHATBOT_NAME \u003d \"Fluke\";","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":" private final static String LOGO \u003d","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" \" ________ __\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" \" / ____/ /_ __/ /_____\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" \" / /_ / / / / / //_/ _ \\\\\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" \" / __/ / / /_/ / ,\u003c / __/\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":" \"/_/ /_/\\\\__,_/_/|_|\\\\___/\";","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":" private final static String GREETING \u003d","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" \"Hello! I\u0027m \" + CHATBOT_NAME + \", everything I do is down to luck!\" + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" \"Feeling lucky today?\";","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" private final static String GOODBYE \u003d \"Bye. Good luck!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" * Greets the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" public void greet() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":" // introduce Fluke","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" System.out.println(LOGO);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" System.out.println(GREETING);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":" * Says goodbye to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" public void sayBye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":" System.out.println(GOODBYE);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Dioclei"},"content":" * Adds a horizontal line break","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Dioclei"},"content":" private void addHorizontalLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Dioclei"},"content":" * prints an error","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Dioclei"},"content":" * @param message the error message","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Dioclei"},"content":" public void showError(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"☹ OOPS!!! \" + message);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Dioclei"},"content":" * shows the current list of tasks to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Dioclei"},"content":" * @param tasks the corresponding TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Dioclei"},"content":" public void showListOfTasks(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"Here are the tasks we have currently!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Dioclei"},"content":" System.out.println(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Dioclei"},"content":" * shows the addition of a task to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Dioclei"},"content":" * @param addedTask the task added.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Dioclei"},"content":" * @param tasks the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Dioclei"},"content":" public void showTaskAdded(Task addedTask, TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"(Scribbles randomly). Hope I got it right!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Dioclei"},"content":" System.out.println(\" \" + addedTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"I think there are now \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Dioclei"},"content":" * shows the deletion of a task to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Dioclei"},"content":" * @param deletedTask the task deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Dioclei"},"content":" * @param tasks the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Dioclei"},"content":" public void showTaskDeleted(Task deletedTask, TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"fluke.tasks.Task deleted! I hope it\u0027s the right one:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Dioclei"},"content":" System.out.println(\" \" + deletedTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"I think there are now \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Dioclei"},"content":" * Shows a task being marked as done to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Dioclei"},"content":" * @param markedTask the task marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Dioclei"},"content":" public void showTaskMarkedAsDone(Task markedTask) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"I have marked this task as done, I hope it\u0027s the right one:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Dioclei"},"content":" System.out.println(\" \" + markedTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Dioclei"},"content":" * Shows a task being marked as not done to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Dioclei"},"content":" * @param markedTask the task marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Dioclei"},"content":" public void showTaskMarkedAsUndone(Task markedTask) {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"I have marked this task as not done yet, I hope it\u0027s the right one:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Dioclei"},"content":" System.out.println(\" \" + markedTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Dioclei"},"content":" * Shows the user tasks with a certain keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Dioclei"},"content":" * @param tasksWithKeyword list of tasks to show","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Dioclei"},"content":" public void showTasksWithKeyword(TaskList tasksWithKeyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"I have randomly picked out a few tasks. Looks like they have what you want!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Dioclei"},"content":" System.out.println(tasksWithKeyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Dioclei"},"content":" * Shows a loading error to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Dioclei"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Dioclei"},"content":" showError(\"Failed to load!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Dioclei":125}},{"path":"src/main/java/fluke/exceptions/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":" * This exception should be thrown when an empty description is given for a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"public class EmptyDescriptionException extends FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":" private static final String ERROR_MESSAGE \u003d \"I cannot create a task without a description!\";","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":" * Constructs an EmptyDescriptionException.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" public EmptyDescriptionException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" super(ERROR_MESSAGE);","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Dioclei":15}},{"path":"src/main/java/fluke/exceptions/FlukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":" * This exception is thrown whenever an error occurs with Fluke.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"public class FlukeException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":" * Constructs a FlukeException.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":" * @param message Error message","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" public FlukeException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Dioclei":14}},{"path":"src/main/java/fluke/exceptions/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":" * This exception should be thrown whenever there is invalid input.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"public class InvalidInputException extends FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":" private static final String ERROR_MESSAGE \u003d \"I don\u0027t understand!\";","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":" * Constructs an InvalidInputException.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" public InvalidInputException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" super(ERROR_MESSAGE);","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Dioclei":15}},{"path":"src/main/java/fluke/exceptions/SaveFileParsingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":" * This exception should be thrown when there is an error parsing the save file.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"public class SaveFileParsingException extends FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":" private static final String ERROR_MESSAGE \u003d \"I couldn\u0027t understand the save file...\";","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":" * Constructs a SaveFileParsingException.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" public SaveFileParsingException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" super(ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Dioclei":15}},{"path":"src/main/java/fluke/exceptions/TaskDoesNotExistException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":" * This exception should be thrown when an operation tries to access a task that does not exist.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"public class TaskDoesNotExistException extends FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":" private static final String ERROR_MESSAGE \u003d \"I\u0027m pretty sure that task doesn\u0027t exist...\";","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":" * Constructs a TaskDoesNotExistException.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" public TaskDoesNotExistException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" super(ERROR_MESSAGE);","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Dioclei":15}},{"path":"src/main/java/fluke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.InvalidInputException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" * A deadline task refers to a task which has a deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":" private final static DateTimeFormatter DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" * The deadline of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":" protected LocalDate byDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" * Constructs a Deadline. Takes in a description and a by date.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":" * @param byDate Date which the task is due, in YYYY-MM-DD format.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException when the description or by date is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" public Deadline(String description, String byDate) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" this.byDate \u003d LocalDate.parse(byDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" } catch (DateTimeParseException d) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Dioclei"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Dioclei"},"content":" * Constructs a Deadline. Takes in a description and a by date.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Dioclei"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Dioclei"},"content":" * @param isDone Whether the deadline is marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Dioclei"},"content":" * @param byDate Date which the task is due, in YYYY-MM-DD format.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException when the description or by date is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Dioclei"},"content":" public Deadline(String description, boolean isDone, String byDate) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Dioclei"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Dioclei"},"content":" this.byDate \u003d LocalDate.parse(byDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Dioclei"},"content":" * String representation of a Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Dioclei"},"content":" * @return a String representation of a Deadline, containing description and date which it is due.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Dioclei"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Dioclei"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"Dioclei"},"content":" String byString \u003d byDate.format(DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Dioclei"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byString + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Dioclei":59}},{"path":"src/main/java/fluke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.InvalidInputException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" * An event refers to a task which has a starting \"from\" date and an ending \"to\" date.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":" private final static DateTimeFormatter DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" * Date which this event begins.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":" protected LocalDate fromDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" * Date which this event ends.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":" protected LocalDate toDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" * Constructs an Event with a description, from date and to date.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" * @param fromDate Beginning date of the event, in format YYYY-MM-DD.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" * @param toDate Ending date of the event, in format YYYY-MM-DD","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException when the description or the dates given are invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" public Event(String description, String fromDate, String toDate) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Dioclei"},"content":" this.fromDate \u003d LocalDate.parse(fromDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Dioclei"},"content":" this.toDate \u003d LocalDate.parse(toDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Dioclei"},"content":" if (this.fromDate.isAfter(this.toDate)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Dioclei"},"content":" } catch (DateTimeParseException d) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Dioclei"},"content":" * Constructs an Event with a description, from date and to date.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Dioclei"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Dioclei"},"content":" * @param isDone Whether the event is over.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Dioclei"},"content":" * @param fromDate Beginning date of the event, in format YYYY-MM-DD.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Dioclei"},"content":" * @param toDate Ending date of the event, in format YYYY-MM-DD","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException when the description or the dates given are invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Dioclei"},"content":" public Event(String description, boolean isDone, String fromDate, String toDate) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Dioclei"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Dioclei"},"content":" this.fromDate \u003d LocalDate.parse(fromDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Dioclei"},"content":" this.toDate \u003d LocalDate.parse(toDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Dioclei"},"content":" * String representation of an event.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Dioclei"},"content":" * @return a String representation of the event, containing its description and starting and ending dates.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Dioclei"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"Dioclei"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"Dioclei"},"content":" String fromString \u003d fromDate.format(DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Dioclei"},"content":" String toString \u003d toDate.format(DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Dioclei"},"content":" return \"[E]\" + super.toString() + \" (from: \" + fromString + \" to: \" + toString + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Dioclei":72}},{"path":"src/main/java/fluke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":" * A task is something which is to be done. It contains a description and whether it is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" * Description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" * Whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" protected boolean isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" * Constructs a task with a description.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException when the description given is empty.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" protected Task(String description) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" String trimmedDescription \u003d description.trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" if (trimmedDescription.equals(\"\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" throw new EmptyDescriptionException();","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" this.description \u003d trimmedDescription;","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" * Constructs a task with a description and whether it is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Dioclei"},"content":" * @param isDone Whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException when the description given is empty.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Dioclei"},"content":" protected Task(String description, boolean isDone) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Dioclei"},"content":" String trimmedDescription \u003d description.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Dioclei"},"content":" if (trimmedDescription.equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Dioclei"},"content":" throw new EmptyDescriptionException();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Dioclei"},"content":" this.description \u003d trimmedDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Dioclei"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Dioclei"},"content":" * Marks this task as done.","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"Dioclei"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"Dioclei"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Dioclei"},"content":" * Marks this task as not done.","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"Dioclei"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"Dioclei"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Dioclei"},"content":" * Checks whether this task has a keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Dioclei"},"content":" * @param keyword the keyword to check","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Dioclei"},"content":" * @return whether the keyword is present in the task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Dioclei"},"content":" public boolean hasKeyword(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Dioclei"},"content":" return this.description.toLowerCase().contains(keyword.toLowerCase());","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"Dioclei"},"content":" * Returns a string representation of a task.","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"Dioclei"},"content":" * @return a string representation containing whether the task is completed and what it is.","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"Dioclei"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":77,"author":{"gitId":"Dioclei"},"content":" String doneString \u003d this.isDone ? \"X\" : \" \";","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"Dioclei"},"content":" return \"[\" + doneString + \"] \" + this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":79,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Dioclei":80}},{"path":"src/main/java/fluke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":" * A todo is a task without any dates associated with it.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":" * Constructs a Todo.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException when the description given is empty.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" public Todo(String description) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" * Constructs a Todo.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":" * @param isDone Whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException when the description given is empty.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" public Todo(String description, boolean isDone) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" * String representation of a Todo.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" * @return a String representation of a Todo containing its description.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Dioclei":36}},{"path":"src/test/java/fluke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" public void parseTask_garbageInput_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" Parser.parseTask(\"garbage input\");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":" } catch (FlukeException f) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":" assertEquals(\"I couldn\u0027t understand the save file...\", f.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Dioclei":19}},{"path":"src/test/java/fluke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" public void addDeadline_invalidDateInput_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":" Deadline task \u003d new Deadline(\"Do Homework\", \"invalid date\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" } catch (FlukeException f) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" assertEquals(\"I don\u0027t understand!\", f.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" public void addEvent_futureToPastInput_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" Event task \u003d new Event(\"Do Homework\", \"2023-02-01\", \"2023-01-26\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" } catch (FlukeException f) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" assertEquals(\"I don\u0027t understand!\", f.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Dioclei":32}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"todo do homework","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"event house event /from tomorrow /to friday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"deadline prepare for test /by friday night","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Dioclei":4}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"checkstyle {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Dioclei":5,"-":42}},{"path":"src/main/java/fluke/Fluke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.InvalidInputException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" * Fluke is a chatbot which gets your commands right by fluke. Fluke\u0027s main goal is to help manage tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":"public class Fluke {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" private static final String SAVE_FILE_NAME \u003d \"fluke.txt\";","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" * Enumerates all possible commands.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" public enum Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":" BYE, LIST, MARK, UNMARK, DELETE, TODO, DEADLINE, EVENT, FIND","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" * Constructs a Fluke chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" * @param filePath file path in which Fluke stores its tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" public Fluke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" } catch (FlukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Dioclei"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Dioclei"},"content":" * Main entry point into Fluke\u0027s program.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Dioclei"},"content":" * @param args Arguments given for Fluke\u0027s program.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Dioclei"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Dioclei"},"content":" // initialise Fluke","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Dioclei"},"content":" Fluke fluke \u003d new Fluke(SAVE_FILE_NAME);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Dioclei"},"content":" fluke.run();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Dioclei"},"content":" * Runs Fluke\u0027s program, accepting input from the user and outputting appropriately.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Dioclei"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Dioclei"},"content":" // greet the user","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Dioclei"},"content":" this.ui.greet();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Dioclei"},"content":" // initialise scanner to check for user input","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Dioclei"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Dioclei"},"content":" boolean isWaitingForInput \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Dioclei"},"content":" while (isWaitingForInput) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Dioclei"},"content":" // check for user commands","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Dioclei"},"content":" String nextCommand \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Dioclei"},"content":" Command commandType \u003d Parser.parseCommand(nextCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Dioclei"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Dioclei"},"content":" case BYE:","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Dioclei"},"content":" isWaitingForInput \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Dioclei"},"content":" this.ui.sayBye();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Dioclei"},"content":" case LIST:","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Dioclei"},"content":" this.ui.showListOfTasks(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Dioclei"},"content":" case FIND:","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Dioclei"},"content":" findTask(nextCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Dioclei"},"content":" case MARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Dioclei"},"content":" case UNMARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Dioclei"},"content":" case DELETE:","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Dioclei"},"content":" case TODO:","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Dioclei"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Dioclei"},"content":" case EVENT:","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Dioclei"},"content":" changeTodoList(commandType, nextCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Dioclei"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Dioclei"},"content":" } catch (FlukeException d) {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Dioclei"},"content":" this.ui.showError(d.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Dioclei"},"content":" * Tells Fluke to add a Todo to its tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Dioclei"},"content":" * @param command Command given to Fluke.","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if an error occurs while adding the task, for instance, with invalid inputs.","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Dioclei"},"content":" public void addTodo(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Dioclei"},"content":" String parsedDescription \u003d Parser.parseTodoCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Dioclei"},"content":" Task taskAdded \u003d this.tasks.addTodo(parsedDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Dioclei"},"content":" this.ui.showTaskAdded(taskAdded, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Dioclei"},"content":" * Tells Fluke to add a Deadline to its tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Dioclei"},"content":" * @param command Command given to Fluke.","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if an error occurs while adding the task, for instance, with invalid inputs.","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Dioclei"},"content":" private void addDeadline(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Dioclei"},"content":" String[] parsedCommand \u003d Parser.parseDeadlineCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Dioclei"},"content":" String description \u003d parsedCommand[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Dioclei"},"content":" String byDate \u003d parsedCommand[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Dioclei"},"content":" Task taskAdded \u003d this.tasks.addDeadline(description, byDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Dioclei"},"content":" this.ui.showTaskAdded(taskAdded, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Dioclei"},"content":" * Tells Fluke to add an Event to its tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Dioclei"},"content":" * @param command Command given to Fluke.","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if an error occurs while adding the task, for instance, with invalid inputs.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Dioclei"},"content":" private void addEvent(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Dioclei"},"content":" String[] parsedCommand \u003d Parser.parseEventCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Dioclei"},"content":" String description \u003d parsedCommand[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Dioclei"},"content":" String fromDate \u003d parsedCommand[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Dioclei"},"content":" String toDate \u003d parsedCommand[2];","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Dioclei"},"content":" Task taskAdded \u003d this.tasks.addEvent(description, fromDate, toDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Dioclei"},"content":" this.ui.showTaskAdded(taskAdded, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Dioclei"},"content":" * Tells Fluke to mark a task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Dioclei"},"content":" * @param command Command given to Fluke.","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if an error occurs while marking a task as done, for instance, with invalid inputs.","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Dioclei"},"content":" private void markTaskAsDone(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Dioclei"},"content":" int index \u003d Parser.parseMarkAsDoneCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Dioclei"},"content":" Task taskMarked \u003d tasks.markTaskAsDone(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Dioclei"},"content":" this.ui.showTaskMarkedAsDone(taskMarked);","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Dioclei"},"content":" * Tells Fluke to mark a task as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Dioclei"},"content":" * @param command Command given to Fluke.","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if an error occurs while marking a task as not done, for instance, with invalid inputs.","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Dioclei"},"content":" private void markTaskAsUndone(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Dioclei"},"content":" int index \u003d Parser.parseMarkAsUndoneCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Dioclei"},"content":" Task taskMarked \u003d tasks.markTaskAsUndone(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Dioclei"},"content":" this.ui.showTaskMarkedAsUndone(taskMarked);","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Dioclei"},"content":" * Tells Fluke to delete a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Dioclei"},"content":" * @param command Command given to Fluke.","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if an error occurs while deleting a task, for instance, with invalid inputs.","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"Dioclei"},"content":" private void deleteTask(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"Dioclei"},"content":" int index \u003d Parser.parseDeleteCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"Dioclei"},"content":" Task deleted \u003d tasks.deleteTask(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"Dioclei"},"content":" this.ui.showTaskDeleted(deleted, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"Dioclei"},"content":" * Fluke attempts to find tasks with the corresponding keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"Dioclei"},"content":" * @param command the command given","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"Dioclei"},"content":" * @throws InvalidInputException if there is no keyword given.","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"Dioclei"},"content":" private void findTask(String command) throws InvalidInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"Dioclei"},"content":" String keyword \u003d Parser.parseFindCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"Dioclei"},"content":" this.ui.showTasksWithKeyword(this.tasks.findTask(keyword));","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"Dioclei"},"content":" * Helper function for additional logic related to changing the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"Dioclei"},"content":" * @param commandType type of command","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"Dioclei"},"content":" * @param command the content in the command","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException an exception related to operations with fluke.Fluke","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"Dioclei"},"content":" private void changeTodoList(Command commandType, String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"Dioclei"},"content":" // 1. make changes to the list","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"Dioclei"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"Dioclei"},"content":" case MARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"Dioclei"},"content":" markTaskAsDone(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"Dioclei"},"content":" case UNMARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"Dioclei"},"content":" markTaskAsUndone(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"Dioclei"},"content":" case DELETE:","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"Dioclei"},"content":" deleteTask(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"Dioclei"},"content":" case TODO:","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"Dioclei"},"content":" addTodo(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"Dioclei"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"Dioclei"},"content":" addDeadline(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"Dioclei"},"content":" case EVENT:","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"Dioclei"},"content":" addEvent(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"Dioclei"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"Dioclei"},"content":" // should not occur","lastModifiedDate":"2023-09-02"},{"lineNumber":203,"author":{"gitId":"Dioclei"},"content":" throw new FlukeException(\"An unknown error has occurred.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"Dioclei"},"content":" // 2. save to file","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":207,"author":{"gitId":"Dioclei"},"content":" this.storage.save(tasks.getListOfTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"Dioclei"},"content":" } catch (IOException i) {","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"Dioclei"},"content":" throw new FlukeException(i.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Dioclei":212}},{"path":"src/main/java/fluke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.InvalidInputException;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.SaveFileParsingException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" * Handles parsing for Fluke.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" private static final DateTimeFormatter DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":" * Parses a command (input as a string by the user) into an Enum value","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" * @param command Command to be parsed","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" * @return a Command corresponding to the command given.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" * @throws InvalidInputException if the command given is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" public static Fluke.Command parseCommand(String command) throws InvalidInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.BYE;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.LIST;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.MARK;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Dioclei"},"content":" } else if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.UNMARK;","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Dioclei"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.DELETE;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Dioclei"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.TODO;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Dioclei"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.DEADLINE;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Dioclei"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.EVENT;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Dioclei"},"content":" } else if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"Dioclei"},"content":" return Fluke.Command.FIND;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Dioclei"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Dioclei"},"content":" * Parses the task from a line in the save file corresponding to a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Dioclei"},"content":" * @param taskString Line in the save file","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Dioclei"},"content":" * @return a Task corresponding to the line.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if the line is invalid, for instance if the save file is tampered with or corrupted.","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Dioclei"},"content":" public static Task parseTask(String taskString) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Dioclei"},"content":" Fluke.Command taskType;","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Dioclei"},"content":" boolean isMarked;","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Dioclei"},"content":" // parse type","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Dioclei"},"content":" Pattern typePattern \u003d Pattern.compile(\"\\\\[[TDE]]\");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Dioclei"},"content":" Matcher typeMatcher \u003d typePattern.matcher(taskString);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Dioclei"},"content":" boolean typeIsFound \u003d typeMatcher.find();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Dioclei"},"content":" if (!typeIsFound) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Dioclei"},"content":" switch (typeMatcher.group()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Dioclei"},"content":" case \"[T]\":","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Dioclei"},"content":" taskType \u003d Fluke.Command.TODO;","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Dioclei"},"content":" case \"[D]\":","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Dioclei"},"content":" taskType \u003d Fluke.Command.DEADLINE;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Dioclei"},"content":" case \"[E]\":","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Dioclei"},"content":" taskType \u003d Fluke.Command.EVENT;","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Dioclei"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Dioclei"},"content":" // parse mark","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Dioclei"},"content":" Pattern markPattern \u003d Pattern.compile(\"\\\\[[X ]]\");","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Dioclei"},"content":" Matcher markMatcher \u003d markPattern.matcher(taskString);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Dioclei"},"content":" boolean markIsFound \u003d markMatcher.find();","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Dioclei"},"content":" if (!markIsFound) {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Dioclei"},"content":" String mark \u003d markMatcher.group();","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Dioclei"},"content":" switch (mark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Dioclei"},"content":" case \"[ ]\":","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Dioclei"},"content":" isMarked \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Dioclei"},"content":" case \"[X]\":","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Dioclei"},"content":" isMarked \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Dioclei"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Dioclei"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Dioclei"},"content":" String taskDesc \u003d taskString.substring(7);","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Dioclei"},"content":" if (taskType \u003d\u003d Fluke.Command.TODO) {","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Dioclei"},"content":" return new Todo(taskDesc, isMarked);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Dioclei"},"content":" } else if (taskType \u003d\u003d Fluke.Command.DEADLINE) {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Dioclei"},"content":" // parse by date","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Dioclei"},"content":" int bracketStartIndex \u003d taskDesc.indexOf(\u0027(\u0027);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Dioclei"},"content":" int bracketEndIndex \u003d taskDesc.indexOf(\u0027)\u0027);","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Dioclei"},"content":" if (bracketStartIndex \u003c 0 || bracketEndIndex \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Dioclei"},"content":" String desc \u003d taskDesc.substring(0, bracketStartIndex).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Dioclei"},"content":" String by \u003d taskDesc.substring(bracketStartIndex + 4, bracketEndIndex).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Dioclei"},"content":" LocalDate date \u003d LocalDate.parse(by, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Dioclei"},"content":" return new Deadline(desc, isMarked, date.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Dioclei"},"content":" } else if (taskType \u003d\u003d Fluke.Command.EVENT) {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Dioclei"},"content":" int bracketStartIndex \u003d taskDesc.indexOf(\u0027(\u0027);","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Dioclei"},"content":" if (bracketStartIndex \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Dioclei"},"content":" String desc \u003d taskDesc.substring(0, bracketStartIndex).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Dioclei"},"content":" // parse from date","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Dioclei"},"content":" Pattern fromPattern \u003d Pattern.compile(\"from:.+to:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Dioclei"},"content":" Matcher fromMatcher \u003d fromPattern.matcher(taskDesc);","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Dioclei"},"content":" boolean fromDateIsFound \u003d fromMatcher.find();","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Dioclei"},"content":" if (!fromDateIsFound) {","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Dioclei"},"content":" String from \u003d fromMatcher.group().substring(5).replaceFirst(\"to:\", \"\").trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Dioclei"},"content":" LocalDate fromDate \u003d LocalDate.parse(from, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Dioclei"},"content":" // parse to date","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Dioclei"},"content":" Pattern toPattern \u003d Pattern.compile(\"to:.+\\\\)\");","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Dioclei"},"content":" Matcher toMatcher \u003d toPattern.matcher(taskDesc);","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Dioclei"},"content":" boolean toDateIsFound \u003d toMatcher.find();","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Dioclei"},"content":" if (!toDateIsFound) {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Dioclei"},"content":" String to \u003d toMatcher.group().substring(3).replaceFirst(\"\\\\)\", \"\").trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Dioclei"},"content":" LocalDate toDate \u003d LocalDate.parse(to, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Dioclei"},"content":" return new Event(desc, isMarked, fromDate.toString(), toDate.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Dioclei"},"content":" throw new SaveFileParsingException();","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Dioclei"},"content":" * Parses a Todo command.","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Dioclei"},"content":" * @param command Command given by the user","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Dioclei"},"content":" * @return the description of the todo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if the description given is empty.","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Dioclei"},"content":" public static String parseTodoCommand(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Dioclei"},"content":" if (command.length() \u003c\u003d 5) {","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Dioclei"},"content":" // command is too short, description is invalid","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Dioclei"},"content":" throw new EmptyDescriptionException();","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"Dioclei"},"content":" return command.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"Dioclei"},"content":" * Parses and validates a Deadline command","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"Dioclei"},"content":" * @param command Command given by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"Dioclei"},"content":" * @return a String array containing at 0: description, 1: (String) by date","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if the description given is invalid, or if the by date given is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"Dioclei"},"content":" public static String[] parseDeadlineCommand(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"Dioclei"},"content":" if (command.length() \u003c\u003d 9) {","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"Dioclei"},"content":" // command is too short, description is invalid","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"Dioclei"},"content":" throw new EmptyDescriptionException();","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"Dioclei"},"content":" String str \u003d command.substring(9);","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"Dioclei"},"content":" int byIndex \u003d str.indexOf(\"/by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"Dioclei"},"content":" if (byIndex \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"Dioclei"},"content":" String description \u003d str.substring(0, byIndex - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"Dioclei"},"content":" String by \u003d str.substring(byIndex + 4);","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"Dioclei"},"content":" return new String[]{description, by};","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"Dioclei"},"content":" * Parses and validates an Event command.","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"Dioclei"},"content":" * @param command Command given by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"Dioclei"},"content":" * @return a String array containing at 0: description, 1: (String) from date 2: to date.","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if any of the inputs are invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"Dioclei"},"content":" public static String[] parseEventCommand(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"Dioclei"},"content":" if (command.length() \u003c\u003d 6) {","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"Dioclei"},"content":" // command is too short, description is invalid","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"Dioclei"},"content":" throw new EmptyDescriptionException();","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"Dioclei"},"content":" String str \u003d command.substring(6);","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"Dioclei"},"content":" int fromIndex \u003d str.indexOf(\"/from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"Dioclei"},"content":" int toIndex \u003d str.indexOf(\"/to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"Dioclei"},"content":" if (fromIndex \u003c 0 || toIndex \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"Dioclei"},"content":" String description \u003d str.substring(0, fromIndex - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"Dioclei"},"content":" String from \u003d str.substring(fromIndex + 6, toIndex - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"Dioclei"},"content":" String to \u003d str.substring(toIndex + 4);","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"Dioclei"},"content":" return new String[]{description, from, to};","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":203,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"Dioclei"},"content":" * Parses a Delete command.","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"Dioclei"},"content":" * @param command Command given by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":207,"author":{"gitId":"Dioclei"},"content":" * @return index of the task in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if the input is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"Dioclei"},"content":" public static int parseDeleteCommand(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"Dioclei"},"content":" if (command.length() \u003c\u003d 7) {","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"Dioclei"},"content":" int taskNumber \u003d obtainTaskNumber(command.substring(7));","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"Dioclei"},"content":" return taskNumber - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":218,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":219,"author":{"gitId":"Dioclei"},"content":" * Parses a Mark as Done Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":220,"author":{"gitId":"Dioclei"},"content":" * @param command Command given by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":221,"author":{"gitId":"Dioclei"},"content":" * @return index of the task in the task list to be marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":222,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if the input is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":223,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":224,"author":{"gitId":"Dioclei"},"content":" public static int parseMarkAsDoneCommand(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":225,"author":{"gitId":"Dioclei"},"content":" if (command.length() \u003c\u003d 5) {","lastModifiedDate":"2023-09-02"},{"lineNumber":226,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":227,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":228,"author":{"gitId":"Dioclei"},"content":" int taskNumber \u003d obtainTaskNumber(command.substring(5));","lastModifiedDate":"2023-09-02"},{"lineNumber":229,"author":{"gitId":"Dioclei"},"content":" return taskNumber - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":230,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":231,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":232,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":233,"author":{"gitId":"Dioclei"},"content":" * Parses a Mark as Undone Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":234,"author":{"gitId":"Dioclei"},"content":" * @param command Command given by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":235,"author":{"gitId":"Dioclei"},"content":" * @return index of the task in the task list to be marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":236,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if the input is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":237,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":238,"author":{"gitId":"Dioclei"},"content":" public static int parseMarkAsUndoneCommand(String command) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":239,"author":{"gitId":"Dioclei"},"content":" if (command.length() \u003c\u003d 7) {","lastModifiedDate":"2023-09-02"},{"lineNumber":240,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":241,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":242,"author":{"gitId":"Dioclei"},"content":" int taskNumber \u003d obtainTaskNumber(command.substring(7));","lastModifiedDate":"2023-09-02"},{"lineNumber":243,"author":{"gitId":"Dioclei"},"content":" return taskNumber - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":244,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":245,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":246,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":247,"author":{"gitId":"Dioclei"},"content":" * Helper function to obtain a number from a string.","lastModifiedDate":"2023-09-02"},{"lineNumber":248,"author":{"gitId":"Dioclei"},"content":" * @param taskNumberString String to obtain a number from.","lastModifiedDate":"2023-09-02"},{"lineNumber":249,"author":{"gitId":"Dioclei"},"content":" * @return An integer","lastModifiedDate":"2023-09-02"},{"lineNumber":250,"author":{"gitId":"Dioclei"},"content":" * @throws InvalidInputException if the string is not a valid number.","lastModifiedDate":"2023-09-02"},{"lineNumber":251,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":252,"author":{"gitId":"Dioclei"},"content":" private static int obtainTaskNumber(String taskNumberString) throws InvalidInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":253,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":254,"author":{"gitId":"Dioclei"},"content":" return Integer.parseInt(taskNumberString);","lastModifiedDate":"2023-09-02"},{"lineNumber":255,"author":{"gitId":"Dioclei"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":256,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":257,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":258,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":259,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":260,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":261,"author":{"gitId":"Dioclei"},"content":" * Parses a find command to obtain the keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":262,"author":{"gitId":"Dioclei"},"content":" * @param command the command given.","lastModifiedDate":"2023-09-02"},{"lineNumber":263,"author":{"gitId":"Dioclei"},"content":" * @return the keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":264,"author":{"gitId":"Dioclei"},"content":" * @throws InvalidInputException if there is no keyword given.","lastModifiedDate":"2023-09-02"},{"lineNumber":265,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":266,"author":{"gitId":"Dioclei"},"content":" public static String parseFindCommand(String command) throws InvalidInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":267,"author":{"gitId":"Dioclei"},"content":" if (command.length() \u003c 6) {","lastModifiedDate":"2023-09-02"},{"lineNumber":268,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":269,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":270,"author":{"gitId":"Dioclei"},"content":" return command.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":271,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":272,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Dioclei":272}},{"path":"src/main/java/fluke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" * Handles storing of task list data.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" private final String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" private final ArrayList\u003cTask\u003e tasksReadFromStorage;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":" * Constructs a Storage with an appropriate filePath.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" * @param filePath file path of the text file to store task data.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" this.tasksReadFromStorage \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" * Attempts to load tasks from local storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" * @return An ArrayList containing tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":" public ArrayList\u003cTask\u003e load() throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" File saveFile \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" if (saveFile.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":" // parse the file and write to list","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Dioclei"},"content":" Scanner fileScanner \u003d new Scanner(saveFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Dioclei"},"content":" while (fileScanner.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Dioclei"},"content":" String line \u003d fileScanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Dioclei"},"content":" if (!line.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Dioclei"},"content":" Task task \u003d Parser.parseTask(line);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Dioclei"},"content":" tasksReadFromStorage.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Dioclei"},"content":" } catch (FileNotFoundException f) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Dioclei"},"content":" throw new FlukeException(f.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Dioclei"},"content":" return tasksReadFromStorage;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Dioclei"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Dioclei"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Dioclei"},"content":" * Saves list of tasks to local storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Dioclei"},"content":" * @param tasks An ArrayList containing tasks to be saved.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Dioclei"},"content":" * @throws IOException Error that occurs during saving","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Dioclei"},"content":" public void save(ArrayList\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Dioclei"},"content":" FileWriter writer \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Dioclei"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Dioclei"},"content":" String out \u003d tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Dioclei"},"content":" writer.write(out);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Dioclei"},"content":" writer.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Dioclei":68}},{"path":"src/main/java/fluke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.TaskDoesNotExistException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" * TaskList is a wrapper class that manages the internal list of tasks by implementing","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" * various methods related to managing the list of tasks, such as adding and deleting.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" private final ArrayList\u003cTask\u003e listOfTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":" * Constructs a TaskList with an empty list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" this.listOfTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" * Constructs a TaskList with an initial list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" * @param initialTasks the initial list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" public TaskList(ArrayList\u003cTask\u003e initialTasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" this.listOfTasks \u003d initialTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" * Getter for the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":" * @return the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Dioclei"},"content":" public ArrayList\u003cTask\u003e getListOfTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Dioclei"},"content":" return listOfTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Dioclei"},"content":" * Gets the size of the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Dioclei"},"content":" * @return size of the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Dioclei"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Dioclei"},"content":" return listOfTasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Dioclei"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Dioclei"},"content":" * @param task task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Dioclei"},"content":" private void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Dioclei"},"content":" listOfTasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Dioclei"},"content":" * Adds a Todo to the list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Dioclei"},"content":" * @param description description of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Dioclei"},"content":" * @return the task added.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if there is an error while adding the task, for instance an invalid description.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Dioclei"},"content":" public Task addTodo(String description) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Dioclei"},"content":" Todo newTodo \u003d new Todo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Dioclei"},"content":" addTask(newTodo);","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Dioclei"},"content":" return newTodo;","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Dioclei"},"content":" * Adds a Deadline to the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Dioclei"},"content":" * @param description description of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Dioclei"},"content":" * @param byDate the date which the task is due","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Dioclei"},"content":" * @return the task added.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if there is an error while adding the task, for instance an invalid description.","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Dioclei"},"content":" public Task addDeadline(String description, String byDate) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Dioclei"},"content":" Task newDeadline \u003d new Deadline(description, byDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Dioclei"},"content":" addTask(newDeadline);","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Dioclei"},"content":" return newDeadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Dioclei"},"content":" * Adds an Event to the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Dioclei"},"content":" * @param description description of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Dioclei"},"content":" * @param fromDate the date which the event starts","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Dioclei"},"content":" * @param toDate the date which the event ends","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Dioclei"},"content":" * @return the task added.","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException if there is an error while adding the task, for instance an invalid description.","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Dioclei"},"content":" public Task addEvent(String description, String fromDate, String toDate) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Dioclei"},"content":" Task newEvent \u003d new Event(description, fromDate, toDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Dioclei"},"content":" addTask(newEvent);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Dioclei"},"content":" return newEvent;","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Dioclei"},"content":" * Deletes a task from the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Dioclei"},"content":" * @param index index of the task in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Dioclei"},"content":" * @return the deleted task.","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Dioclei"},"content":" * @throws TaskDoesNotExistException if the index given is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Dioclei"},"content":" public Task deleteTask(int index) throws TaskDoesNotExistException {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Dioclei"},"content":" // check if task exists","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Dioclei"},"content":" if (index \u003c listOfTasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Dioclei"},"content":" Task taskToBeDeleted \u003d listOfTasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Dioclei"},"content":" listOfTasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Dioclei"},"content":" return taskToBeDeleted;","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Dioclei"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Dioclei"},"content":" throw new TaskDoesNotExistException();","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Dioclei"},"content":" * Marks a task in the task list as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Dioclei"},"content":" * @param index index of the task in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Dioclei"},"content":" * @return the marked task.","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Dioclei"},"content":" * @throws TaskDoesNotExistException if the index given is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Dioclei"},"content":" public Task markTaskAsDone(int index) throws TaskDoesNotExistException {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Dioclei"},"content":" // check if task exists","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Dioclei"},"content":" if (index \u003c listOfTasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Dioclei"},"content":" Task task \u003d listOfTasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Dioclei"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Dioclei"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Dioclei"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Dioclei"},"content":" throw new TaskDoesNotExistException();","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Dioclei"},"content":" * Marks a task in the task list as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Dioclei"},"content":" * @param index index of the task in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Dioclei"},"content":" * @return the marked task.","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Dioclei"},"content":" * @throws TaskDoesNotExistException if the index given is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Dioclei"},"content":" public Task markTaskAsUndone(int index) throws TaskDoesNotExistException {","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Dioclei"},"content":" // check if task exists","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Dioclei"},"content":" if (index \u003c listOfTasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Dioclei"},"content":" Task task \u003d listOfTasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Dioclei"},"content":" task.markAsUndone();","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Dioclei"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Dioclei"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Dioclei"},"content":" throw new TaskDoesNotExistException();","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Dioclei"},"content":" * Finds all tasks containing a specific keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Dioclei"},"content":" * @param keyword the keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Dioclei"},"content":" * @return a TaskList containing all tasks containing the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Dioclei"},"content":" public TaskList findTask(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Dioclei"},"content":" ArrayList\u003cTask\u003e newListOfTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Dioclei"},"content":" for (int i \u003d 0; i \u003c this.getSize(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"Dioclei"},"content":" Task task \u003d this.listOfTasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"Dioclei"},"content":" if (task.hasKeyword(keyword)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"Dioclei"},"content":" newListOfTasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"Dioclei"},"content":" return new TaskList(newListOfTasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"Dioclei"},"content":" * Returns a string representation of the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"Dioclei"},"content":" * @return a string representation of the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"Dioclei"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"Dioclei"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"Dioclei"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"Dioclei"},"content":" for (int i \u003d 0; i \u003c listOfTasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"Dioclei"},"content":" Task task \u003d listOfTasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"Dioclei"},"content":" int number \u003d i + 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"Dioclei"},"content":" str +\u003d (number + \".\" + task);","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"Dioclei"},"content":" if (i !\u003d listOfTasks.size() - 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"Dioclei"},"content":" str +\u003d \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"Dioclei"},"content":" return str;","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Dioclei":181}},{"path":"src/main/java/fluke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":" * This class contains all user interface related functionalities.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":" private static final String CHATBOT_NAME \u003d \"Fluke\";","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":" private static final String LOGO \u003d","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" \" ________ __\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" + \" / ____/ /_ __/ /_____\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" + \" / /_ / / / / / //_/ _ \\\\\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" + \" / __/ / / /_/ / ,\u003c / __/\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":" + \"/_/ /_/\\\\__,_/_/|_|\\\\___/\";","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":" private static final String GREETING \u003d","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" \"Hello! I\u0027m \" + CHATBOT_NAME + \", everything I do is down to luck!\" + \"\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" + \"Feeling lucky today?\";","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" private static final String GOODBYE \u003d \"Bye. Good luck!\";","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" * Greets the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" public void greet() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":" // introduce Fluke","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" System.out.println(LOGO);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" System.out.println(GREETING);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":" * Says goodbye to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" public void sayBye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":" System.out.println(GOODBYE);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Dioclei"},"content":" * Adds a horizontal line break","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Dioclei"},"content":" private void addHorizontalLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Dioclei"},"content":" * prints an error","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Dioclei"},"content":" * @param message the error message","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Dioclei"},"content":" public void showError(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"☹ OOPS!!! \" + message);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Dioclei"},"content":" * shows the current list of tasks to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Dioclei"},"content":" * @param tasks the corresponding TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Dioclei"},"content":" public void showListOfTasks(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"Here are the tasks we have currently!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Dioclei"},"content":" System.out.println(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Dioclei"},"content":" * shows the addition of a task to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Dioclei"},"content":" * @param addedTask the task added.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Dioclei"},"content":" * @param tasks the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Dioclei"},"content":" public void showTaskAdded(Task addedTask, TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"(Scribbles randomly). Hope I got it right!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Dioclei"},"content":" System.out.println(\" \" + addedTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"I think there are now \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Dioclei"},"content":" * shows the deletion of a task to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Dioclei"},"content":" * @param deletedTask the task deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Dioclei"},"content":" * @param tasks the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Dioclei"},"content":" public void showTaskDeleted(Task deletedTask, TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"fluke.tasks.Task deleted! I hope it\u0027s the right one:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Dioclei"},"content":" System.out.println(\" \" + deletedTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"I think there are now \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Dioclei"},"content":" * Shows a task being marked as done to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Dioclei"},"content":" * @param markedTask the task marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Dioclei"},"content":" public void showTaskMarkedAsDone(Task markedTask) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"I have marked this task as done, I hope it\u0027s the right one:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Dioclei"},"content":" System.out.println(\" \" + markedTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Dioclei"},"content":" * Shows a task being marked as not done to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Dioclei"},"content":" * @param markedTask the task marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Dioclei"},"content":" public void showTaskMarkedAsUndone(Task markedTask) {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"I have marked this task as not done yet, I hope it\u0027s the right one:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Dioclei"},"content":" System.out.println(\" \" + markedTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Dioclei"},"content":" * Shows the user tasks with a certain keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Dioclei"},"content":" * @param tasksWithKeyword list of tasks to show","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Dioclei"},"content":" public void showTasksWithKeyword(TaskList tasksWithKeyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Dioclei"},"content":" System.out.println(\"I have randomly picked out a few tasks. Looks like they have what you want!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Dioclei"},"content":" System.out.println(tasksWithKeyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Dioclei"},"content":" addHorizontalLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Dioclei"},"content":" * Shows a loading error to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Dioclei"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Dioclei"},"content":" showError(\"Failed to load!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Dioclei":125}},{"path":"src/main/java/fluke/exceptions/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":" * This exception should be thrown when an empty description is given for a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"public class EmptyDescriptionException extends FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":" private static final String ERROR_MESSAGE \u003d \"I cannot create a task without a description!\";","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":" * Constructs an EmptyDescriptionException.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" public EmptyDescriptionException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" super(ERROR_MESSAGE);","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Dioclei":15}},{"path":"src/main/java/fluke/exceptions/FlukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":" * This exception is thrown whenever an error occurs with Fluke.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"public class FlukeException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":" * Constructs a FlukeException.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":" * @param message Error message","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" public FlukeException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Dioclei":14}},{"path":"src/main/java/fluke/exceptions/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":" * This exception should be thrown whenever there is invalid input.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"public class InvalidInputException extends FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":" private static final String ERROR_MESSAGE \u003d \"I don\u0027t understand!\";","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":" * Constructs an InvalidInputException.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" public InvalidInputException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" super(ERROR_MESSAGE);","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Dioclei":15}},{"path":"src/main/java/fluke/exceptions/SaveFileParsingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":" * This exception should be thrown when there is an error parsing the save file.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"public class SaveFileParsingException extends FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":" private static final String ERROR_MESSAGE \u003d \"I couldn\u0027t understand the save file...\";","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":" * Constructs a SaveFileParsingException.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" public SaveFileParsingException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" super(ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Dioclei":15}},{"path":"src/main/java/fluke/exceptions/TaskDoesNotExistException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":" * This exception should be thrown when an operation tries to access a task that does not exist.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"public class TaskDoesNotExistException extends FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":" private static final String ERROR_MESSAGE \u003d \"I\u0027m pretty sure that task doesn\u0027t exist...\";","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":" * Constructs a TaskDoesNotExistException.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" public TaskDoesNotExistException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" super(ERROR_MESSAGE);","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Dioclei":15}},{"path":"src/main/java/fluke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.InvalidInputException;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" * A deadline task refers to a task which has a deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":" private static final DateTimeFormatter DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" * The deadline of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":" protected LocalDate byDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" * Constructs a Deadline. Takes in a description and a by date.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":" * @param byDate Date which the task is due, in YYYY-MM-DD format.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException when the description or by date is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" public Deadline(String description, String byDate) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" this.byDate \u003d LocalDate.parse(byDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" } catch (DateTimeParseException d) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Dioclei"},"content":" * Constructs a Deadline. Takes in a description and a by date.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Dioclei"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Dioclei"},"content":" * @param isDone Whether the deadline is marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Dioclei"},"content":" * @param byDate Date which the task is due, in YYYY-MM-DD format.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException when the description or by date is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Dioclei"},"content":" public Deadline(String description, boolean isDone, String byDate) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Dioclei"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Dioclei"},"content":" this.byDate \u003d LocalDate.parse(byDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Dioclei"},"content":" * String representation of a Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Dioclei"},"content":" * @return a String representation of a Deadline, containing description and date which it is due.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Dioclei"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"Dioclei"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Dioclei"},"content":" String byString \u003d byDate.format(DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Dioclei"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byString + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Dioclei":58}},{"path":"src/main/java/fluke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.InvalidInputException;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" * An event refers to a task which has a starting \"from\" date and an ending \"to\" date.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":" private static final DateTimeFormatter DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" * Date which this event begins.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":" protected LocalDate fromDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" * Date which this event ends.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":" protected LocalDate toDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" * Constructs an Event with a description, from date and to date.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" * @param fromDate Beginning date of the event, in format YYYY-MM-DD.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" * @param toDate Ending date of the event, in format YYYY-MM-DD","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException when the description or the dates given are invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" public Event(String description, String fromDate, String toDate) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Dioclei"},"content":" this.fromDate \u003d LocalDate.parse(fromDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Dioclei"},"content":" this.toDate \u003d LocalDate.parse(toDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Dioclei"},"content":" if (this.fromDate.isAfter(this.toDate)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Dioclei"},"content":" } catch (DateTimeParseException d) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Dioclei"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Dioclei"},"content":" * Constructs an Event with a description, from date and to date.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Dioclei"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Dioclei"},"content":" * @param isDone Whether the event is over.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Dioclei"},"content":" * @param fromDate Beginning date of the event, in format YYYY-MM-DD.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Dioclei"},"content":" * @param toDate Ending date of the event, in format YYYY-MM-DD","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException when the description or the dates given are invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Dioclei"},"content":" public Event(String description, boolean isDone, String fromDate, String toDate) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Dioclei"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Dioclei"},"content":" this.fromDate \u003d LocalDate.parse(fromDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Dioclei"},"content":" this.toDate \u003d LocalDate.parse(toDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Dioclei"},"content":" * String representation of an event.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Dioclei"},"content":" * @return a String representation of the event, containing its description and starting and ending dates.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Dioclei"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"Dioclei"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"Dioclei"},"content":" String fromString \u003d fromDate.format(DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Dioclei"},"content":" String toString \u003d toDate.format(DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Dioclei"},"content":" return \"[E]\" + super.toString() + \" (from: \" + fromString + \" to: \" + toString + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Dioclei":72}},{"path":"src/main/java/fluke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":" * A task is something which is to be done. It contains a description and whether it is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" * Description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" * Whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" protected boolean isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" * Constructs a task with a description.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException when the description given is empty.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" protected Task(String description) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" String trimmedDescription \u003d description.trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" if (trimmedDescription.equals(\"\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" throw new EmptyDescriptionException();","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" this.description \u003d trimmedDescription;","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" * Constructs a task with a description and whether it is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Dioclei"},"content":" * @param isDone Whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException when the description given is empty.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Dioclei"},"content":" protected Task(String description, boolean isDone) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Dioclei"},"content":" String trimmedDescription \u003d description.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Dioclei"},"content":" if (trimmedDescription.equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Dioclei"},"content":" throw new EmptyDescriptionException();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Dioclei"},"content":" this.description \u003d trimmedDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Dioclei"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Dioclei"},"content":" * Marks this task as done.","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"Dioclei"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"Dioclei"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Dioclei"},"content":" * Marks this task as not done.","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"Dioclei"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"Dioclei"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Dioclei"},"content":" * Checks whether this task has a keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Dioclei"},"content":" * @param keyword the keyword to check","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Dioclei"},"content":" * @return whether the keyword is present in the task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Dioclei"},"content":" public boolean hasKeyword(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Dioclei"},"content":" return this.description.toLowerCase().contains(keyword.toLowerCase());","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"Dioclei"},"content":" * Returns a string representation of a task.","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"Dioclei"},"content":" * @return a string representation containing whether the task is completed and what it is.","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"Dioclei"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":77,"author":{"gitId":"Dioclei"},"content":" String doneString \u003d this.isDone ? \"X\" : \" \";","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"Dioclei"},"content":" return \"[\" + doneString + \"] \" + this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":79,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Dioclei":80}},{"path":"src/main/java/fluke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":" * A todo is a task without any dates associated with it.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":" * Constructs a Todo.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException when the description given is empty.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" public Todo(String description) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" * Constructs a Todo.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":" * @param isDone Whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":" * @throws FlukeException when the description given is empty.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" public Todo(String description, boolean isDone) throws FlukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" * String representation of a Todo.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" * @return a String representation of a Todo containing its description.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Dioclei"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Dioclei"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Dioclei":36}},{"path":"src/test/java/fluke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":" public void parseTask_garbageInput_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" Parser.parseTask(\"garbage input\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":" } catch (FlukeException f) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" assertEquals(\"I couldn\u0027t understand the save file...\", f.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Dioclei":20}},{"path":"src/test/java/fluke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"package fluke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Dioclei"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Dioclei"},"content":"import fluke.exceptions.FlukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Dioclei"},"content":"import fluke.tasks.Event;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Dioclei"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Dioclei"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Dioclei"},"content":" public void addDeadline_invalidDateInput_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Dioclei"},"content":" Deadline task \u003d new Deadline(\"Do Homework\", \"invalid date\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Dioclei"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Dioclei"},"content":" } catch (FlukeException f) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Dioclei"},"content":" assertEquals(\"I don\u0027t understand!\", f.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Dioclei"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Dioclei"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Dioclei"},"content":" public void addEvent_futureToPastInput_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Dioclei"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Dioclei"},"content":" Event task \u003d new Event(\"Do Homework\", \"2023-02-01\", \"2023-01-26\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Dioclei"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Dioclei"},"content":" } catch (FlukeException f) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Dioclei"},"content":" assertEquals(\"I don\u0027t understand!\", f.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Dioclei"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Dioclei"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Dioclei":32}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Dioclei"},"content":"todo do homework","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"Dioclei"},"content":"event house event /from tomorrow /to friday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"Dioclei"},"content":"deadline prepare for test /by friday night","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"Dioclei"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Dioclei":4}}] diff --git a/Dioclei_ip_master/commits.json b/Dioclei_ip_master/commits.json index 19dd4611..c467bc75 100644 --- a/Dioclei_ip_master/commits.json +++ b/Dioclei_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Dioclei":[{"date":"2023-08-22","commitResults":[{"hash":"4cf7ee367cb37d07db1a55e5604682dbc5a9946d","isMergeCommit":false,"messageTitle":"Renamed Duke to Fluke. Added skeletal code.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":6}}},{"hash":"9f91054ed5479f293bfcbc299b0008c9a9079c01","isMergeCommit":false,"messageTitle":"Give Fluke a personality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"63285781b96d23f7de6c80ab538def7928dbe16a","isMergeCommit":false,"messageTitle":"Add ability to give Fluke commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":1}}},{"hash":"b90cbc4a74fc7bf427ff723ad87718f96d7c19f5","isMergeCommit":false,"messageTitle":"input now adds to a list.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":6}}},{"hash":"5a7ac04f01da24d088e00456750457e8003500ea","isMergeCommit":false,"messageTitle":"added tasks and renamed methods appropriately.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":18}}},{"hash":"9230ffd07a7f65b13489eb0fc839431dc68f51b7","isMergeCommit":false,"messageTitle":"Updated with 3 types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":13}}}]},{"date":"2023-08-23","commitResults":[{"hash":"6b5329e69a7ce9928931fa999318f007657ecb80","isMergeCommit":false,"messageTitle":"added automated testing library","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":3,"deletions":4}}},{"hash":"b84f82a43adb82c832e356c7850367a540f180ff","isMergeCommit":false,"messageTitle":"added delete","messageBody":"","tags":["Level-6","Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":169,"deletions":83}}},{"hash":"c4821039b67230864c4d9cd3af21ad3b9d6b2265","isMergeCommit":false,"messageTitle":"add enum for commands","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":19}}}]},{"date":"2023-08-29","commitResults":[{"hash":"0f40dee189782af4758ae0703b28154453a23a26","isMergeCommit":false,"messageTitle":"reformatted code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":32}}},{"hash":"c6c2a28c77fa87987d8275e7390b77f705a923bb","isMergeCommit":false,"messageTitle":"add error handling for invalid inputs for event and deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"b99462223840b51c3a8c0821483ec26c3482063f","isMergeCommit":false,"messageTitle":"Save todo list data to fluke.txt and read data on startup","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":13}}},{"hash":"f2c4544801c808446490f5a543955c068909d93f","isMergeCommit":false,"messageTitle":"change storage of date data to use LocalDate","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":16}}}]},{"date":"2023-09-02","commitResults":[{"hash":"cc2341d0c7109d9ea3cabae3e61dada5e3616bda","isMergeCommit":false,"messageTitle":"refactor code, add parser storage tasklist and ui. rename duke to fluke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":551,"deletions":409}}},{"hash":"663d74f2d3655789d054c8e0424b96f0ee00a2c4","isMergeCommit":false,"messageTitle":"rename DukeException to FlukeException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":44}}},{"hash":"dc4537bb28e530801bcba6ff77304be447b76e65","isMergeCommit":false,"messageTitle":"fix ui bug with printing list","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"5e58c6fc19758b325e3d51cedd58b29e577e8074","isMergeCommit":true,"messageTitle":"Merge branch \u0027MoreOOP\u0027","messageBody":"* MoreOOP:\n fix ui bug with printing list\n rename DukeException to FlukeException\n refactor code, add parser storage tasklist and ui. rename duke to fluke\n","fileTypesAndContributionMap":{}},{"hash":"971d094062c28c2e4b0687ff108b6821c027650f","isMergeCommit":false,"messageTitle":"cleanup code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"777a1daf77cea8f030fbcf9c138e9d41947eced5","isMergeCommit":false,"messageTitle":"refactor into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":4}}},{"hash":"d095b8d10c2547fa845dcefb47e1c31a561057af","isMergeCommit":true,"messageTitle":"Merge branch \u0027Packages\u0027","messageBody":"* Packages:\n refactor into packages\n cleanup code\n","fileTypesAndContributionMap":{}},{"hash":"6199fe6e1d135d4b9782b1b8620e3166031798c8","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"* commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027:\n Bump gradle and lib version\n Add Gradle support\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"a1c1bd2d99c56a64dfe94e7d6686bf02536d5622","isMergeCommit":false,"messageTitle":"remove redundant constructor for fluke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":7}}},{"hash":"4871cb40156fd0e2ab22a7f8e139b22aa5aa6041","isMergeCommit":false,"messageTitle":"fix mark as done bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"a20d71718d956fe9c57858a61f08e3a7ea76a85b","isMergeCommit":false,"messageTitle":"add tests for TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":3}}},{"hash":"0e9e2c46647d8335c212fae56b697079561a59cf","isMergeCommit":false,"messageTitle":"add tests for Parser","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":4}}},{"hash":"60e411bcd87f0c1ac5854586efe9872acd651627","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-testing\u0027","messageBody":"* branch-testing:\n add tests for Parser\n add tests for TaskList\n","fileTypesAndContributionMap":{}},{"hash":"813a550786fd7e0ce16127e849a94b9b987463f5","isMergeCommit":false,"messageTitle":"Add javadoc to all public methods and a few non-trivial private methods.","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":365,"deletions":15}}},{"hash":"c9423d2b666226afa04884fa31537691127c0c9a","isMergeCommit":false,"messageTitle":"comply with coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":78}}},{"hash":"c96772447232771393b8d7f77cd6670973716dff","isMergeCommit":false,"messageTitle":"implement find feature","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":1}}},{"hash":"2cbaaf3e51a59b56a1f71cb2cab283811a07235b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"* branch-A-JavaDoc:\n Add javadoc to all public methods and a few non-trivial private methods.\n","fileTypesAndContributionMap":{}},{"hash":"bb17b4b34fa56552d04fc3744a165335a385757e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"* branch-A-CodingStandard:\n comply with coding standards\n\n# Conflicts:\n#\tsrc/main/java/fluke/Fluke.java\n#\tsrc/main/java/fluke/Parser.java\n#\tsrc/main/java/fluke/TaskList.java\n#\tsrc/main/java/fluke/Ui.java\n#\tsrc/main/java/fluke/tasks/Deadline.java\n#\tsrc/main/java/fluke/tasks/Event.java\n","fileTypesAndContributionMap":{}},{"hash":"1c3fb51896664555a227424829f81f8b5053f3b3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n implement find feature\n\n# Conflicts:\n#\tsrc/main/java/fluke/TaskList.java\n#\tsrc/main/java/fluke/Ui.java\n","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Dioclei":{"java":1226,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":4}},"authorContributionVariance":{"Dioclei":194385.88},"authorDisplayNameMap":{"Dioclei":"CS2103T-W17-4 JASO..XUAN"}} +{"authorDailyContributionsMap":{"Dioclei":[{"date":"2023-08-22","commitResults":[{"hash":"4cf7ee367cb37d07db1a55e5604682dbc5a9946d","isMergeCommit":false,"messageTitle":"Renamed Duke to Fluke. Added skeletal code.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":6}}},{"hash":"9f91054ed5479f293bfcbc299b0008c9a9079c01","isMergeCommit":false,"messageTitle":"Give Fluke a personality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"63285781b96d23f7de6c80ab538def7928dbe16a","isMergeCommit":false,"messageTitle":"Add ability to give Fluke commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":1}}},{"hash":"b90cbc4a74fc7bf427ff723ad87718f96d7c19f5","isMergeCommit":false,"messageTitle":"input now adds to a list.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":6}}},{"hash":"5a7ac04f01da24d088e00456750457e8003500ea","isMergeCommit":false,"messageTitle":"added tasks and renamed methods appropriately.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":18}}},{"hash":"9230ffd07a7f65b13489eb0fc839431dc68f51b7","isMergeCommit":false,"messageTitle":"Updated with 3 types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":13}}}]},{"date":"2023-08-23","commitResults":[{"hash":"6b5329e69a7ce9928931fa999318f007657ecb80","isMergeCommit":false,"messageTitle":"added automated testing library","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":3,"deletions":4}}},{"hash":"b84f82a43adb82c832e356c7850367a540f180ff","isMergeCommit":false,"messageTitle":"added delete","messageBody":"","tags":["Level-6","Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":169,"deletions":83}}},{"hash":"c4821039b67230864c4d9cd3af21ad3b9d6b2265","isMergeCommit":false,"messageTitle":"add enum for commands","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":19}}}]},{"date":"2023-08-29","commitResults":[{"hash":"0f40dee189782af4758ae0703b28154453a23a26","isMergeCommit":false,"messageTitle":"reformatted code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":32}}},{"hash":"c6c2a28c77fa87987d8275e7390b77f705a923bb","isMergeCommit":false,"messageTitle":"add error handling for invalid inputs for event and deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"b99462223840b51c3a8c0821483ec26c3482063f","isMergeCommit":false,"messageTitle":"Save todo list data to fluke.txt and read data on startup","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":13}}},{"hash":"f2c4544801c808446490f5a543955c068909d93f","isMergeCommit":false,"messageTitle":"change storage of date data to use LocalDate","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":16}}}]},{"date":"2023-09-02","commitResults":[{"hash":"cc2341d0c7109d9ea3cabae3e61dada5e3616bda","isMergeCommit":false,"messageTitle":"refactor code, add parser storage tasklist and ui. rename duke to fluke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":551,"deletions":409}}},{"hash":"663d74f2d3655789d054c8e0424b96f0ee00a2c4","isMergeCommit":false,"messageTitle":"rename DukeException to FlukeException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":44}}},{"hash":"dc4537bb28e530801bcba6ff77304be447b76e65","isMergeCommit":false,"messageTitle":"fix ui bug with printing list","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"5e58c6fc19758b325e3d51cedd58b29e577e8074","isMergeCommit":true,"messageTitle":"Merge branch \u0027MoreOOP\u0027","messageBody":"* MoreOOP:\n fix ui bug with printing list\n rename DukeException to FlukeException\n refactor code, add parser storage tasklist and ui. rename duke to fluke\n","fileTypesAndContributionMap":{}},{"hash":"971d094062c28c2e4b0687ff108b6821c027650f","isMergeCommit":false,"messageTitle":"cleanup code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"777a1daf77cea8f030fbcf9c138e9d41947eced5","isMergeCommit":false,"messageTitle":"refactor into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":4}}},{"hash":"d095b8d10c2547fa845dcefb47e1c31a561057af","isMergeCommit":true,"messageTitle":"Merge branch \u0027Packages\u0027","messageBody":"* Packages:\n refactor into packages\n cleanup code\n","fileTypesAndContributionMap":{}},{"hash":"6199fe6e1d135d4b9782b1b8620e3166031798c8","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"* commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027:\n Bump gradle and lib version\n Add Gradle support\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"a1c1bd2d99c56a64dfe94e7d6686bf02536d5622","isMergeCommit":false,"messageTitle":"remove redundant constructor for fluke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":7}}},{"hash":"4871cb40156fd0e2ab22a7f8e139b22aa5aa6041","isMergeCommit":false,"messageTitle":"fix mark as done bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"a20d71718d956fe9c57858a61f08e3a7ea76a85b","isMergeCommit":false,"messageTitle":"add tests for TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":3}}},{"hash":"0e9e2c46647d8335c212fae56b697079561a59cf","isMergeCommit":false,"messageTitle":"add tests for Parser","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":4}}},{"hash":"60e411bcd87f0c1ac5854586efe9872acd651627","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-testing\u0027","messageBody":"* branch-testing:\n add tests for Parser\n add tests for TaskList\n","fileTypesAndContributionMap":{}},{"hash":"813a550786fd7e0ce16127e849a94b9b987463f5","isMergeCommit":false,"messageTitle":"Add javadoc to all public methods and a few non-trivial private methods.","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":365,"deletions":15}}},{"hash":"c9423d2b666226afa04884fa31537691127c0c9a","isMergeCommit":false,"messageTitle":"comply with coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":78}}},{"hash":"c96772447232771393b8d7f77cd6670973716dff","isMergeCommit":false,"messageTitle":"implement find feature","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":1}}},{"hash":"2cbaaf3e51a59b56a1f71cb2cab283811a07235b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"* branch-A-JavaDoc:\n Add javadoc to all public methods and a few non-trivial private methods.\n","fileTypesAndContributionMap":{}},{"hash":"bb17b4b34fa56552d04fc3744a165335a385757e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"* branch-A-CodingStandard:\n comply with coding standards\n\n# Conflicts:\n#\tsrc/main/java/fluke/Fluke.java\n#\tsrc/main/java/fluke/Parser.java\n#\tsrc/main/java/fluke/TaskList.java\n#\tsrc/main/java/fluke/Ui.java\n#\tsrc/main/java/fluke/tasks/Deadline.java\n#\tsrc/main/java/fluke/tasks/Event.java\n","fileTypesAndContributionMap":{}},{"hash":"1c3fb51896664555a227424829f81f8b5053f3b3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n implement find feature\n\n# Conflicts:\n#\tsrc/main/java/fluke/TaskList.java\n#\tsrc/main/java/fluke/Ui.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"6205dcd14841c60777f3397cb2d2ae6c838f6d7b","isMergeCommit":false,"messageTitle":"add checkstyle gradle script","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":49,"deletions":45}}},{"hash":"30bb208ee425a5639aa31a705518350719266d18","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-CheckStyle\u0027","messageBody":"* tag \u0027A-CheckStyle\u0027:\n add checkstyle gradle script\n","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Dioclei":{"java":1230,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":5,"txt":4}},"authorContributionVariance":{"Dioclei":159461.25},"authorDisplayNameMap":{"Dioclei":"CS2103T-W17-4 JASO..XUAN"}} diff --git a/FerdiHS_ip_master/commits.json b/FerdiHS_ip_master/commits.json index 23f2dea5..4d9a3ebc 100644 --- a/FerdiHS_ip_master/commits.json +++ b/FerdiHS_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"FerdiHS":[{"date":"2023-08-24","commitResults":[{"hash":"d43e1bd978dfa70c7e185bb0952e169d12c31f74","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"457e190b734efd801aaf4647a9982b8830dcb638","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":7}}},{"hash":"10bed217abfaf031a0c5617e0122350d6e06c682","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"57ec385beb24c6c8ae058b42a97a6dd138f73357","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":2}}},{"hash":"944acedcb724cb72100909c787394069abb8b461","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":0}}},{"hash":"2434d1f632e4b1c8cbff827a969278ddee4390f8","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":47}}},{"hash":"62a9b32c9b1a3b32b2c96831eb6e5f469940b85e","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":0}}},{"hash":"a364fbe17bb725815ab68866eea3cea8bae3d911","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0}}},{"hash":"3b80a9c849d84cacdf88300686c945946223d5b6","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":2},"java":{"insertions":157,"deletions":43}}},{"hash":"fe364212472909ec5489dcc5c6c9023e190ae0db","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":12}}},{"hash":"c3c6e30e4d8afb7e731c0c3273db314ebe7dd5ae","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":10,"deletions":2}}}]},{"date":"2023-08-30","commitResults":[{"hash":"ae8fe66c98c6d1d949e7e16ec34016eafefeddb6","isMergeCommit":false,"messageTitle":"Add storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":279,"deletions":36}}},{"hash":"5c899f8503e56d5c718b5eb186e9e1ac7da0f3d7","isMergeCommit":true,"messageTitle":"Merge pull request #1 from FerdiHS/branch-Level-7","messageBody":"Merge branch-level-7 to master","tags":["level-7"],"fileTypesAndContributionMap":{}},{"hash":"232423215345195789a59fc44367b32efc66fca7","isMergeCommit":false,"messageTitle":"Use Java LocalDate","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":29,"deletions":14},"java":{"insertions":67,"deletions":56}}},{"hash":"0e64728dd52acec1ab704d11ca61553cf964c334","isMergeCommit":true,"messageTitle":"Merge pull request #2 from FerdiHS/branch-Level-8","messageBody":"Merge branch-Level-8 to master","tags":["level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"2ef7fa1fe6a79e3550ca06c2f0c2440435ffff59","isMergeCommit":false,"messageTitle":"Add TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":145,"deletions":69}}},{"hash":"eb08150d8a746297799ddaa1f578151f453d5798","isMergeCommit":false,"messageTitle":"Add Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":171,"deletions":41}}},{"hash":"a3225cfafedace7ad11f8181ea16d3db53b0e9f1","isMergeCommit":false,"messageTitle":"Add Parser class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"java":{"insertions":138,"deletions":150}}}]},{"date":"2023-09-01","commitResults":[{"hash":"9008932711a6ed7bdc159bdb3d3d9c1a7a771c7d","isMergeCommit":false,"messageTitle":"Add Parser and Command class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":162,"deletions":30}}},{"hash":"ccac537c19707e01037ce904aa11c1763adcb69e","isMergeCommit":false,"messageTitle":"Remove some unused methods and variables","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":19}}},{"hash":"98c9f1ea056b465f2f3f30fc6a60e3d4183f0961","isMergeCommit":true,"messageTitle":"Merge pull request #3 from FerdiHS/A-MoreOOP","messageBody":"Merge branch A-MoreOOP to master","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"77bbbbb170d7d41bf1d30af73b60e6250afe4c5c","isMergeCommit":false,"messageTitle":"Add duke package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":46}}},{"hash":"f8dddec78a29b52aa83acea650afb1ca98b5a75d","isMergeCommit":true,"messageTitle":"Merge pull request #4 from FerdiHS/add-gradle-support","messageBody":"Merge branch add-gradle-support","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"ccf2c4948acb17827606ca4be4e7d8513e877082","isMergeCommit":false,"messageTitle":"Add JUnit Testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":148,"deletions":0}}},{"hash":"e5dbd71d86dacc53660528eaeb16d5b229f83002","isMergeCommit":false,"messageTitle":"Update the directory of the storage for JUnit Test","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":0},"txt":{"insertions":0,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"5c693a32ab65a98f8d7f02b1532aefc420da7292","isMergeCommit":false,"messageTitle":"Fix code styling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":27}}},{"hash":"1ca9b79572894dd98c71cd885f359df0553d200d","isMergeCommit":true,"messageTitle":"Merge pull request #5 from FerdiHS/branch-A-CodingStandard","messageBody":"Merge branch-A-CodingStandard to master","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"649b0abb47b262aeb42b7d28d280406570bab5eb","isMergeCommit":false,"messageTitle":"Add and fix JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":95,"deletions":189}}},{"hash":"2cc83fb2ff854c15074906d7ea381cdef3c981d4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3f969ea0c6589a1e8026b2194cc94e4915174830","isMergeCommit":true,"messageTitle":"Merge pull request #6 from FerdiHS/branch-A-JavaDoc","messageBody":"Merge branch-A-JavaDoc to master","fileTypesAndContributionMap":{}},{"hash":"beb6faab7ad8814fd8e09c3a049aeb1b8e64a498","isMergeCommit":false,"messageTitle":"Fix minor mistake caused by merging","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"a5dedb7205ed349021bbe5b8b6e71db4b0129194","isMergeCommit":false,"messageTitle":"Add find feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":65,"deletions":2}}},{"hash":"7410e8175ff9ec66c9e63a1d44e2c92bedb0d268","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fdc2050d16ae6e7df1f35e9f94ea93de5bcd91d6","isMergeCommit":true,"messageTitle":"Merge pull request #7 from FerdiHS/branch-Level-9","messageBody":"Merge branch-Level-9 to master","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"8db7899ac12df8896f03894ee640a0e5498abeae","isMergeCommit":false,"messageTitle":"Fix the style with the help of check style","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":149,"deletions":86}}},{"hash":"f4593b1e27c1b12ef1387aff6ca3300ca62245cf","isMergeCommit":true,"messageTitle":"Merge pull request #8 from FerdiHS/branch-A-CheckStyle","messageBody":"Merge branch-A-CheckStyle to master","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"FerdiHS":{"java":1135,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":7,"txt":59}},"authorContributionVariance":{"FerdiHS":62124.406},"authorDisplayNameMap":{"FerdiHS":"CS2103T-W11-2 FERD..TOSO"}} +{"authorDailyContributionsMap":{"FerdiHS":[{"date":"2023-08-24","commitResults":[{"hash":"d43e1bd978dfa70c7e185bb0952e169d12c31f74","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"457e190b734efd801aaf4647a9982b8830dcb638","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":7}}},{"hash":"10bed217abfaf031a0c5617e0122350d6e06c682","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"57ec385beb24c6c8ae058b42a97a6dd138f73357","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":2}}},{"hash":"944acedcb724cb72100909c787394069abb8b461","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":0}}},{"hash":"2434d1f632e4b1c8cbff827a969278ddee4390f8","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":47}}},{"hash":"62a9b32c9b1a3b32b2c96831eb6e5f469940b85e","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":0}}},{"hash":"a364fbe17bb725815ab68866eea3cea8bae3d911","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0}}},{"hash":"3b80a9c849d84cacdf88300686c945946223d5b6","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":2},"java":{"insertions":157,"deletions":43}}},{"hash":"fe364212472909ec5489dcc5c6c9023e190ae0db","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":12}}},{"hash":"c3c6e30e4d8afb7e731c0c3273db314ebe7dd5ae","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":10,"deletions":2}}}]},{"date":"2023-08-30","commitResults":[{"hash":"ae8fe66c98c6d1d949e7e16ec34016eafefeddb6","isMergeCommit":false,"messageTitle":"Add storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":279,"deletions":36}}},{"hash":"5c899f8503e56d5c718b5eb186e9e1ac7da0f3d7","isMergeCommit":true,"messageTitle":"Merge pull request #1 from FerdiHS/branch-Level-7","messageBody":"Merge branch-level-7 to master","tags":["level-7"],"fileTypesAndContributionMap":{}},{"hash":"232423215345195789a59fc44367b32efc66fca7","isMergeCommit":false,"messageTitle":"Use Java LocalDate","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":29,"deletions":14},"java":{"insertions":67,"deletions":56}}},{"hash":"0e64728dd52acec1ab704d11ca61553cf964c334","isMergeCommit":true,"messageTitle":"Merge pull request #2 from FerdiHS/branch-Level-8","messageBody":"Merge branch-Level-8 to master","tags":["level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"2ef7fa1fe6a79e3550ca06c2f0c2440435ffff59","isMergeCommit":false,"messageTitle":"Add TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":145,"deletions":69}}},{"hash":"eb08150d8a746297799ddaa1f578151f453d5798","isMergeCommit":false,"messageTitle":"Add Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":171,"deletions":41}}},{"hash":"a3225cfafedace7ad11f8181ea16d3db53b0e9f1","isMergeCommit":false,"messageTitle":"Add Parser class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"java":{"insertions":138,"deletions":150}}}]},{"date":"2023-09-01","commitResults":[{"hash":"9008932711a6ed7bdc159bdb3d3d9c1a7a771c7d","isMergeCommit":false,"messageTitle":"Add Parser and Command class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":162,"deletions":30}}},{"hash":"ccac537c19707e01037ce904aa11c1763adcb69e","isMergeCommit":false,"messageTitle":"Remove some unused methods and variables","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":19}}},{"hash":"98c9f1ea056b465f2f3f30fc6a60e3d4183f0961","isMergeCommit":true,"messageTitle":"Merge pull request #3 from FerdiHS/A-MoreOOP","messageBody":"Merge branch A-MoreOOP to master","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"77bbbbb170d7d41bf1d30af73b60e6250afe4c5c","isMergeCommit":false,"messageTitle":"Add duke package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":46}}},{"hash":"f8dddec78a29b52aa83acea650afb1ca98b5a75d","isMergeCommit":true,"messageTitle":"Merge pull request #4 from FerdiHS/add-gradle-support","messageBody":"Merge branch add-gradle-support","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"ccf2c4948acb17827606ca4be4e7d8513e877082","isMergeCommit":false,"messageTitle":"Add JUnit Testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":148,"deletions":0}}},{"hash":"e5dbd71d86dacc53660528eaeb16d5b229f83002","isMergeCommit":false,"messageTitle":"Update the directory of the storage for JUnit Test","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":0},"txt":{"insertions":0,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"5c693a32ab65a98f8d7f02b1532aefc420da7292","isMergeCommit":false,"messageTitle":"Fix code styling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":27}}},{"hash":"1ca9b79572894dd98c71cd885f359df0553d200d","isMergeCommit":true,"messageTitle":"Merge pull request #5 from FerdiHS/branch-A-CodingStandard","messageBody":"Merge branch-A-CodingStandard to master","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"649b0abb47b262aeb42b7d28d280406570bab5eb","isMergeCommit":false,"messageTitle":"Add and fix JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":95,"deletions":189}}},{"hash":"2cc83fb2ff854c15074906d7ea381cdef3c981d4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3f969ea0c6589a1e8026b2194cc94e4915174830","isMergeCommit":true,"messageTitle":"Merge pull request #6 from FerdiHS/branch-A-JavaDoc","messageBody":"Merge branch-A-JavaDoc to master","fileTypesAndContributionMap":{}},{"hash":"beb6faab7ad8814fd8e09c3a049aeb1b8e64a498","isMergeCommit":false,"messageTitle":"Fix minor mistake caused by merging","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"a5dedb7205ed349021bbe5b8b6e71db4b0129194","isMergeCommit":false,"messageTitle":"Add find feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":65,"deletions":2}}},{"hash":"7410e8175ff9ec66c9e63a1d44e2c92bedb0d268","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fdc2050d16ae6e7df1f35e9f94ea93de5bcd91d6","isMergeCommit":true,"messageTitle":"Merge pull request #7 from FerdiHS/branch-Level-9","messageBody":"Merge branch-Level-9 to master","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"8db7899ac12df8896f03894ee640a0e5498abeae","isMergeCommit":false,"messageTitle":"Fix the style with the help of check style","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":149,"deletions":86}}},{"hash":"f4593b1e27c1b12ef1387aff6ca3300ca62245cf","isMergeCommit":true,"messageTitle":"Merge pull request #8 from FerdiHS/branch-A-CheckStyle","messageBody":"Merge branch-A-CheckStyle to master","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"FerdiHS":{"java":1135,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":7,"txt":59}},"authorContributionVariance":{"FerdiHS":62124.406},"authorDisplayNameMap":{"FerdiHS":"CS2103T-W11-2 FERD..TOSO"}} diff --git a/GlendaChong_ip_master/authorship.json b/GlendaChong_ip_master/authorship.json index 839d8dd1..6e3cedcc 100644 --- a/GlendaChong_ip_master/authorship.json +++ b/GlendaChong_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":"// mainClass.set(\"duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" mainClassName \u003d \u0027duke.Duke\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"GlendaChong":8,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"T | 1 | read book","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"D | 1 | project | 12 Dec 2023 | 7.00PM","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"E | 0 | testing| from 12/12 | to 12/12","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"GlendaChong":3}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" * Duke is a personal assistant chatbot that helps","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" * to keep track of various tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" public static final String FILE_PATH \u003d \"data/duke.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" * Constructs a Duke object.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" * @param filePath The filepath for loading and saving the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" storage \u003d new Storage(FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" * Runs the Duke application, handling user interactions.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" ui.showWelcomeMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" // Get the next task input","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" String command \u003d scanner.nextLine();","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" Command c \u003d Parser.parse(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" scanner.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" * The main method to start the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" * @param args Command-line arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" new Duke(FILE_PATH).run();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"GlendaChong":65,"-":3}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The AddCommand class represents a command to add a new task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" private final Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * Constructs an AddCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param task Task to be added into the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" taskList.add(this.task);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" ui.showAddedTask(this.task, taskList.getNumberOfTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" storage.save(taskList.getList(), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":29}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The Command class is an abstract base class for different types of commands in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" * Executes the command, performing specific actions based on the type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" * @param tasks The TaskList containing tasks to be manipulated.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param ui The Ui instance for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" * @param storage The Storage instance for loading and saving tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" * @throws DukeException If there is an error while executing the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" * @return true if the command is an ExitCommand, false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" return (this instanceof ExitCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":31}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The DeleteCommand class represents a command to deleted from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * Constructs a DeleteCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param taskNumber Task number corresponding to the task to be deleted from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public DeleteCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" if (taskNumber \u003e taskList.getNumberOfTasks()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! Task \" + taskNumber + \" does not exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" ui.showDeletedTask(taskList.getTask(taskNumber), taskList.getNumberOfTasks() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" taskList.remove(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" storage.save(taskList.getList(), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":32}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" * The ExitCommand class represents a command to quit the Duke application once done.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" ui.showGoodbyeMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":15}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" * The FindCommand class represents a command to find tasks that match a given keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" private String keyword;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" * Constructs a FindCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" * @param keyword Keyword to be searched from the list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" for (Task task: taskList.getList()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" if (task.toString().contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" ui.showMatchingTasksToKeyword(matchingTasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"GlendaChong":37}},{"path":"src/main/java/duke/command/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The InvalidCommand class represents a command that throws an error to users","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" * when they provide an invalid user input as the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" private final DukeException error;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" public InvalidCommand(DukeException error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" this.error \u003d error;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(this.error.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":22}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The ListCommand class represents a command to list out all the tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" * in the current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" ui.showAllTasks(taskList.getList());","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":17}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The MarkCommand class represents a command to mark the specified task in the list as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * Construcst a MarkCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param taskNumber The task number corresponding to the task, to be marked done.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public MarkCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" if (taskNumber \u003e taskList.getNumberOfTasks()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! Task \" + taskNumber + \" does not exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" ui.showTaskMarkedAsDone(taskList.getTask(taskNumber));","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" storage.save(taskList.getList(), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":31}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The UnmarkCommand class represents a command to be marked undone in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * Construcst an UnmarkCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param taskNumber The task number corresponding to the task, to be marked undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public UnmarkCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" if (taskNumber \u003e taskList.getNumberOfTasks()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! Task \" + taskNumber + \" does not exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" ui.showTaskMarkedAsUndone(taskList.getTask(taskNumber));","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" storage.save(taskList.getList(), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":31}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" * The DukeException class represents an exception that can be thrown by the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * Constructs a DukeException with a default error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" public DukeException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" super(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" * Constructs a DukeException with a custom error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" * @param message The custom error message explaining the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":23}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" * The Parser class deals with interpreting the user inputs","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" * and generating corresponding commands if valid.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" * Returns a command based on the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" * If the command is invalid, an exception is thrown.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" * @param userInput The input provided by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" * @return A Command object representing the user\u0027s intended action.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" * @throws DukeException If there is an error in the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" public static Command parse(String userInput) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" String[] splitCommand \u003d userInput.trim().split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" switch (splitCommand[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" case \"list\":","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" case \"bye\":","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" case \"event\":","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" // Add event task into task list","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" if (!userInput.matches(\"event .*/from .* /to .*\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! The format of an event task is \"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" + \"\\\"event TASK_DESCRIPTION /from START /to END\\\"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" String description \u003d splitCommand[1].split(\"/from\")[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" String[] dateAndTime \u003d splitCommand[1].split(\"/from\")[1].split(\"/to\");","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" return new AddCommand(new Event(description, dateAndTime[0], dateAndTime[1]));","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" // Add deadline task into task list","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" return parseDeadlineCommand(splitCommand[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" case \"todo\":","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" // Add to-do task into task list","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" if (!userInput.matches(\"todo .*\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" return new AddCommand(new ToDo(splitCommand[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" case \"mark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" if (!userInput.matches(\".* \\\\d+\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" String errorMessage \u003d String.format(","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" \"OOPS!!! The format of this command is \\\"%s TASK_NUMBER\\\". \"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" + \"Task number must exist in the task list.\", splitCommand[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" int taskNumber \u003d Integer.parseInt(splitCommand[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" switch (splitCommand[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" case \"mark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" return new MarkCommand(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":" return new UnmarkCommand(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" return new DeleteCommand(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException();","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"GlendaChong"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"GlendaChong"},"content":" if (!userInput.matches(\"find .*\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! The description of a find command cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"GlendaChong"},"content":" return new FindCommand(splitCommand[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"GlendaChong"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"GlendaChong"},"content":" * Returns a command for deadline tasks for valid user inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"GlendaChong"},"content":" * Else, exception is thrown.","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"GlendaChong"},"content":" * @param stringCommand The deadline command provided by the user, excluding the task type.","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"GlendaChong"},"content":" * @return A Command object with a deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"GlendaChong"},"content":" * @throws DateTimeParseException If the date or time inputs are invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"GlendaChong"},"content":" * @throws DukeException If the deadline command has an invalid input format.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"GlendaChong"},"content":" public static Command parseDeadlineCommand(String stringCommand)","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"GlendaChong"},"content":" throws DateTimeParseException, DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"GlendaChong"},"content":" // Add deadline task into task list","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"GlendaChong"},"content":" String errorMessage \u003d \"OOPS!!! The format of a deadline task is \"","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"GlendaChong"},"content":" + \"\\\"deadline TASK_DESCRIPTION /by DD/MM/YYYY 24H_TIME\\\"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"GlendaChong"},"content":" if (!stringCommand.matches(\".*/by \\\\d{1,2}/\\\\d{1,2}/\\\\d{4} \\\\d{4}\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"GlendaChong"},"content":" String[] taskParts \u003d stringCommand.split(\" /by \");","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"GlendaChong"},"content":" if (taskParts.length !\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"GlendaChong"},"content":" String[] dateAndTime \u003d taskParts[1].split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"GlendaChong"},"content":" LocalDate date \u003d parseDate(dateAndTime[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"GlendaChong"},"content":" LocalTime time \u003d parseTime(dateAndTime[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"GlendaChong"},"content":" return new AddCommand(new Deadline(taskParts[0], date, time));","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"GlendaChong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! Invalid date or time format in deadline task.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"GlendaChong"},"content":" * Parses a date string and returns a LocalDate object.","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"GlendaChong"},"content":" * @param date The date of the deadline for the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"GlendaChong"},"content":" * @return A LocalDate object of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"GlendaChong"},"content":" public static LocalDate parseDate(String date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"GlendaChong"},"content":" return LocalDate.parse(date, DateTimeFormatter.ofPattern(\"d/MM/yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"GlendaChong"},"content":" * Parses a time string and returns a LocalTime object.","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"GlendaChong"},"content":" * @param time The time of the deadline for the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"GlendaChong"},"content":" * @return A LocalTime object of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"GlendaChong"},"content":" public static LocalTime parseTime(String time) {","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"GlendaChong"},"content":" return LocalTime.parse(time, DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":146}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" * The Storage class deals with savings tasks in the file and","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" * loading tasks from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" private final String filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" * Constructs a Storage object.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" * @param filePath The filepath of the file containing the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" * Saves the tasks into the file in hard drive.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" * @param tasks The current list of tasks to be saved into the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" * @param ui The user interface of the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" public void save(ArrayList\u003cTask\u003e tasks, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" // Create folder and file","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" f.getParentFile().mkdirs();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" // Write tasks into hard disk","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" FileWriter fileWriter \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" fileWriter.write(task.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" * Loads the tasks from the file","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" * @return The ArrayList of the tasks saved into the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" * @throws DukeException If the task type in the file is invalid, or file is not found.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"GlendaChong"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"GlendaChong"},"content":" String fullTaskCommand \u003d scanner.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"GlendaChong"},"content":" String[] taskParts \u003d fullTaskCommand.split(\"\\\\|\");","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"GlendaChong"},"content":" String taskType \u003d taskParts[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"GlendaChong"},"content":" int taskStatus \u003d Integer.parseInt(taskParts[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"GlendaChong"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"GlendaChong"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"GlendaChong"},"content":" Task todo \u003d new ToDo(taskParts[2].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"GlendaChong"},"content":" tasks.add(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"GlendaChong"},"content":" todo.markStatusFromFile(taskStatus);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"GlendaChong"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"GlendaChong"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"GlendaChong"},"content":" String datePart \u003d taskParts[3].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"GlendaChong"},"content":" String timePart \u003d taskParts[4].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"GlendaChong"},"content":" LocalDate date \u003d LocalDate.parse(datePart, DateTimeFormatter.ofPattern(\"d MMM yyyy\", Locale.US));","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"GlendaChong"},"content":" String formattedDate \u003d date.format(DateTimeFormatter.ofPattern(\"dd/MM/yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"GlendaChong"},"content":" LocalTime time \u003d LocalTime.parse(timePart, DateTimeFormatter.ofPattern(\"h.mma\", Locale.US));","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"GlendaChong"},"content":" String formattedTime \u003d time.format(DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"GlendaChong"},"content":" Task deadline \u003d new Deadline(taskParts[2].trim(), formattedDate, formattedTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"GlendaChong"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"GlendaChong"},"content":" deadline.markStatusFromFile(taskStatus);","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"GlendaChong"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"GlendaChong"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"GlendaChong"},"content":" Task event \u003d new Event(taskParts[2].trim(),","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"GlendaChong"},"content":" taskParts[3].trim().replace(\"from\", \"\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"GlendaChong"},"content":" taskParts[4].trim().replace(\"to\", \"\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"GlendaChong"},"content":" tasks.add(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"GlendaChong"},"content":" event.markStatusFromFile(taskStatus);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"GlendaChong"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"GlendaChong"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"Invalid task type in file: \" + taskType);","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"GlendaChong"},"content":" scanner.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException | FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"File not found: \" + filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"GlendaChong"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":124}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" * The Deadline class represents a task with a description,","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" * completion status, and a deadline date and time.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" protected LocalDate date;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" protected LocalTime time;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" * Constructs a Deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" * @param date LocalDate representation of the date of deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" * @param time LocalTime representation of the time of deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" public Deadline(String description, LocalDate date, LocalTime time) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" this.time \u003d time;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" * Constructs the Deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" * @param date String representation of the date of deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" * @param time String representation of the time of deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" public Deadline(String description, String date, String time) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" this.date \u003d Parser.parseDate(date);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" this.time \u003d Parser.parseTime(time);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" * Returns a formatted string representation of the deadline date.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" * @return A string representing the deadline date in the format \"d MMM yyyy\".","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" public String reformatDate() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" return this.date.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" * Returns a formatted string representation of the deadline time.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" * @return A string representing the deadline time in the format \"h.mma\".","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" public String reformatTime() {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" return this.time.format(DateTimeFormatter.ofPattern(\"h.mma\", Locale.US));","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" return \"[D]\" + super.toString() + \" (by \" + reformatDate() + \" \" + reformatTime() + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" return \"D\" + super.toFileFormat() + \" | \" + reformatDate() + \" | \" + reformatTime() + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":71}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" * The Event class represents a task with a description,","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" * completion status, and a start and end period.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" protected String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" * Constructs an Event object.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * @param from Start period of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" * @param to End period of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.from \u003d from.trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" this.to \u003d to.trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" return \"[E]\" + super.toString().trim() + \" (from \" + this.from + \" to \" + this.to + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" return \"E\" + super.toFileFormat() + \"| from \" + this.from + \" | to \" + this.to + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":33}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" * The Task class represents a task with a description and completion status.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" * Constructs a Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" * @param d Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" public Task(String d) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" description \u003d d;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" * Returns the icon representing the completion status of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" * @return \"X\" if the task is done, \" \" if the task is not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" * Marks the task as done by setting its completion status to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" * Marks the task as undone by setting its completion status to false.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" * Marks the task status based on status obtained from file.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" * @param status The status of the task saved in the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" public void markStatusFromFile(int status) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" if (status \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" markAsUndone();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" * Returns a string representation of the task, containing its","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" * completion status and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" * @return String representation of task status and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" * Returns a string representation of the task when saved in a hard disk file.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" * @return String representation of task status and description for hard disk file.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" if (isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" return \" | 0 | \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":" return \" | 1 | \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":79}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":" * The TaskList class contains the task list and all the operations","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":" * performed on the tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" * Adds the task to the current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" * @param task Task to be added into task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" * Removes the task from the current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" * @param taskNumber Task Number corresponding to the task list to be removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" public void remove(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" * Returns the number of tasks in current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" * @return number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" public int getNumberOfTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" return tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" public Task getTask(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" return tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" return this.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":52}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" * The ToDo class represents a task with a description.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * Constructs a ToDo object.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" return \"T\" + super.toFileFormat() + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":25}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" * The Ui class handles interactions with the user by displaying messages and receiving input.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" /** An indentation string used for formatting. */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" public static final String INDENT \u003d \" \".repeat(8);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /** A horizontal line used for formatting. */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" public static final String HORIZONTAL_LINE \u003d \" \".repeat(8) + \"_\".repeat(60) + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" * Displays a welcome message when the Duke application starts.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" public void showWelcomeMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" + INDENT + \"Hello! I\u0027m Glenda!\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" + INDENT + \"What can I do for you?\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" + HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" * Displays a goodbye message when the Duke application ends.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" public void showGoodbyeMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" + INDENT + \"Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" + HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" * Displays the task added and the current total number of tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" * @param numberOfTasks The number of tasks in the list currently.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" public void showAddedTask(Task task, int numberOfTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Got it. I\u0027ve added this task to the list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" System.out.println(\" \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Now you have \" + numberOfTasks + \" task(s) in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" * Displays all the tasks in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" * @param tasks The list of tasks to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" public void showAllTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" // Case where there is no tasks to be displayed","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"No tasks added. \");","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Here are the task(s) in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + (tasks.indexOf(task) + 1) + \". \" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" * Displays a message indicating the task was marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" public void showTaskMarkedAsDone(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Great! I\u0027ve completed this task!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"GlendaChong"},"content":" * Displays a message indicating the task was marked as undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"GlendaChong"},"content":" * @param task The task that was marked undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"GlendaChong"},"content":" public void showTaskMarkedAsUndone(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Okay, I have not yet completed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"GlendaChong"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"GlendaChong"},"content":" * Displays a message indicating the tasks that was deleted, and the number of tasks left in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"GlendaChong"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"GlendaChong"},"content":" * @param numberOfTasks The number of tasks left in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"GlendaChong"},"content":" public void showDeletedTask(Task task, int numberOfTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Okay, I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"GlendaChong"},"content":" System.out.println(\" \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Now you have \" + numberOfTasks + \" task(s) in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"GlendaChong"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"GlendaChong"},"content":" * @param errorMessage The error message shown to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"GlendaChong"},"content":" public void showErrorMessage(String errorMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"GlendaChong"},"content":" + INDENT + errorMessage + \"\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"GlendaChong"},"content":" + HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"GlendaChong"},"content":" * Displays the list of tasks matching the keyword search.","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"GlendaChong"},"content":" * @param tasks Tasks associated to the keyword search.","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"GlendaChong"},"content":" public void showMatchingTasksToKeyword(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"GlendaChong"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"GlendaChong"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"GlendaChong"},"content":" // Case where there is no matching tasks to be displayed","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"No matching tasks in the list. \");","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"GlendaChong"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + \"Here are the matching task(s) in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"GlendaChong"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"GlendaChong"},"content":" System.out.println(INDENT + (tasks.indexOf(task) + 1) + \". \" + task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"GlendaChong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":142}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" public void parseListCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof ListCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" public void parseByeCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof ExitCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" public void parseEventCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"event Orbital Splashdown /from 01/01/2023 1800 /to 01/01/2023 2000\");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" public void parseEventCommand_invalidInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"event Orbital Splashdown /to 01/01/2023 2000\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of an event task is \"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" + \"\\\"event TASK_DESCRIPTION /from START /to END\\\"\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" public void parseDeadlineCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" Command command1 \u003d Parser.parse(\"deadline Do CS2103T /by 01/01/2023 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" Command command2 \u003d Parser.parse(\"deadline Do CS2103T /by 1/01/2023 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command1 instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command2 instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":" public void parseDeadlineCommand_invalidInputFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parseDeadlineCommand(\"deadline Do CS2103T 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of a deadline task is \"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"GlendaChong"},"content":" + \"\\\"deadline TASK_DESCRIPTION /by DD/MM/YYYY 24H_TIME\\\"\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"GlendaChong"},"content":" public void parseDeadlineCommand_invalidDateInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parseDeadlineCommand(\"deadline Do CS2103T /by 25/25/2023 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! Invalid date or time format in deadline task.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"GlendaChong"},"content":" public void parseDeadlineCommand_invalidTimeInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parseDeadlineCommand(\"deadline Do CS2103T /by 12/12/2023 2500\");","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! Invalid date or time format in deadline task.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"GlendaChong"},"content":" public void parseToDoCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"todo read book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"GlendaChong"},"content":" public void parseToDoCommand_invalidInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"GlendaChong"},"content":" public void parseMarkCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"mark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof MarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"GlendaChong"},"content":" public void parseMarkCommand_invalidInputFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof MarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of marking a task done is \\\"mark TASK_NUMBER\\\".\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"GlendaChong"},"content":" + \"Task number must exist in the task list.\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"GlendaChong"},"content":" public void parseUnmarkCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"unmark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof UnmarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"GlendaChong"},"content":" public void parseUnmarkCommand_invalidInputFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"unmark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof UnmarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of marking a task done is \\\"unmark TASK_NUMBER\\\".\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"GlendaChong"},"content":" + \"Task number must exist in the task list.\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"GlendaChong"},"content":" public void parseDeleteCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"delete 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof DeleteCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"GlendaChong"},"content":" public void parseDeleteCommand_invalidInputFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"delete 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof DeleteCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of marking a task done is \\\"delete TASK_NUMBER\\\".\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"GlendaChong"},"content":" + \"Task number must exist in the task list.\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"GlendaChong"},"content":" public void testParseDate_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"GlendaChong"},"content":" LocalDate result \u003d Parser.parseDate(\"31/08/2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"GlendaChong"},"content":" assertEquals(LocalDate.of(2023, 8, 31), result);","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"GlendaChong"},"content":" public void testParseDate_invalidMonth_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"GlendaChong"},"content":" assertThrows(DateTimeParseException.class, () -\u003e Parser.parseDate(\"31/13/2023\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"GlendaChong"},"content":" public void testParseDate_invalidDay_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"GlendaChong"},"content":" assertThrows(DateTimeParseException.class, () -\u003e Parser.parseDate(\"32/08/2023\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"GlendaChong"},"content":" public void testParseTime_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"GlendaChong"},"content":" LocalTime result \u003d Parser.parseTime(\"1345\");","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"GlendaChong"},"content":" assertEquals(LocalTime.of(13, 45), result);","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"GlendaChong"},"content":" public void testParseTime_validInputWithLeadingZero_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"GlendaChong"},"content":" LocalTime result \u003d Parser.parseTime(\"0900\");","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"GlendaChong"},"content":" assertEquals(LocalTime.of(9, 0), result);","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"GlendaChong"},"content":" public void testParseTime_invalidHour_exceptionThrown() {","lastModifiedDate":"2023-09-04"},{"lineNumber":222,"author":{"gitId":"GlendaChong"},"content":" assertThrows(DateTimeParseException.class, () -\u003e Parser.parseTime(\"2560\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"GlendaChong"},"content":" public void testParseTime_invalidMinute_exceptionThrown() {","lastModifiedDate":"2023-09-04"},{"lineNumber":227,"author":{"gitId":"GlendaChong"},"content":" assertThrows(DateTimeParseException.class, () -\u003e Parser.parseTime(\"13160\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"GlendaChong":229}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" public void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" Deadline deadline \u003d new Deadline(\"CS2103T\", LocalDate.of(2023, 8, 31), LocalTime.of(13, 45));","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"[D][ ] CS2103T (by 31 Aug 2023 | 1.45PM)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public void testFileDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" Deadline deadline \u003d new Deadline(\"CS2103T\", LocalDate.of(2023, 8, 31), LocalTime.of(13, 45));","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"D | 1 | CS2103T | 31 Aug 2023 | 1.45PM\" + \"\\n\", deadline.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"D | 0 | CS2103T | 31 Aug 2023 | 1.45PM\" + \"\\n\", deadline.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"GlendaChong":27}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" public void testAddTask() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" Task task1 \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task1);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" assertEquals(task1, taskList.getTask(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" Task task2 \u003d new Deadline(\"CS2103T\", LocalDate.now(), LocalTime.now());","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task2);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" assertEquals(task2, taskList.getTask(2));","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" Task task3 \u003d new Event(\"SLF\", \"Aug 20\", \"Aug 22\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task3);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" assertEquals(task3, taskList.getTask(3));","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" public void testRemoveTask() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" Task task1 \u003d new ToDo(\"Read a book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" Task task2 \u003d new ToDo(\"Clean the room\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task1);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task2);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" taskList.remove(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" assertEquals(1, taskList.getNumberOfTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" assertEquals(task2, taskList.getTask(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" public void testGetTask() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" TaskList tasklist \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" Task task1 \u003d new ToDo(\"Read a book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" Task task2 \u003d new ToDo(\"Clean the room\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" tasklist.add(task1);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" tasklist.add(task2);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" assertEquals(2, tasklist.getNumberOfTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"GlendaChong":51}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" public void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"[T][ ] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"[T][X] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" public void testFileDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" ToDo todo \u003d new ToDo(\"Read a book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"T | 1 | Read a book\" + \"\\n\", todo.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"T | 0 | Read a book\" + \"\\n\", todo.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"GlendaChong":25}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"deadline return book /by 29/08/2023 1200","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"mark 4","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"unmark 1","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"delete 1","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":11}},{"path":"text-ui-test/output.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":" Hello! I\u0027m Glenda!","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":" What can I do for you?","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":" Got it. I\u0027ve added this task to the list:","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" [T][ ] borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" Now you have 1 task(s) in the list.","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" OOPS!!! The format of a deadline task is \"deadline TASK_DESCRIPTION /by DD/MM/YYYY 24H_TIME\"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" Got it. I\u0027ve added this task to the list:","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" [D][ ] return book (by 29 Aug 2023 12.00PM)","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" Now you have 2 task(s) in the list.","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" Here are the task(s) in your list:","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" 1. [T][ ] borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" 2. [D][ ] return book (by 29 Aug 2023 12.00PM)","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" Great! I\u0027ve completed this task!","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" [T][X] borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" Here are the task(s) in your list:","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" 1. [T][X] borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" 2. [D][ ] return book (by 29 Aug 2023 12.00PM)","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" Got it. I\u0027ve added this task to the list:","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" [E][ ] project meeting (from Mon 2pm to 4pm)","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" Now you have 3 task(s) in the list.","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" OOPS!!! Task 4 does not exist.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" Okay, I have not yet completed this task:","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" [T][ ] borrow book","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" Okay, I\u0027ve removed this task:","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" [T][ ] borrow book","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" Now you have 2 task(s) in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" Bye. Hope to see you again soon!","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":63}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" mainClassName \u003d \u0027duke.Duke\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"GlendaChong":22,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"T | 1 | read book","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"D | 1 | project | 12 Dec 2023 | 7.00PM","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"E | 0 | testing| from 12/12 | to 12/12","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"GlendaChong":3}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" * Duke is a personal assistant chatbot that helps","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" * to keep track of various tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" * Constructs a Duke object.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" * @param filePath The filepath for loading and saving the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" * Retrieves a welcome message for the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" * @return A welcome message to greet the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" public String getGreetings() {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" return ui.showWelcomeMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" * Generates a response to user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" * This method parses the user input, executes the corresponding command, and returns the response.","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" * @param input The user\u0027s input.","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" * @return A response generated based on the user\u0027s input.","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" return c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" return ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"GlendaChong":61,"-":3}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"GlendaChong":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.MainWindow;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" public static final String FILE_PATH \u003d \"data/duke.txt\";","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" private final Duke duke \u003d new Duke(FILE_PATH);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"GlendaChong":32}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The AddCommand class represents a command to add a new task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" private final Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * Constructs an AddCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param task Task to be added into the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" taskList.add(this.task);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" String message \u003d ui.showAddedTask(this.task, taskList.getNumberOfTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" storage.save(taskList.getList(), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" return message;","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":30}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The Command class is an abstract base class for different types of commands in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" * Executes the command, performing specific actions based on the type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" * @param tasks The TaskList containing tasks to be manipulated.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param ui The Ui instance for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" * @param storage The Storage instance for loading and saving tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" * @return A message or response string based on the command execution.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" * @throws DukeException If there is an error while executing the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" * @return true if the command is an ExitCommand, false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" return (this instanceof ExitCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":32}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The DeleteCommand class represents a command to deleted from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * Constructs a DeleteCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param taskNumber Task number corresponding to the task to be deleted from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public DeleteCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" if (taskNumber \u003e taskList.getNumberOfTasks()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! Task \" + taskNumber + \" does not exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" String message \u003d ui.showDeletedTask(taskList.getTask(taskNumber), taskList.getNumberOfTasks() - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" taskList.remove(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" storage.save(taskList.getList(), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" return message;","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":33}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" * The ExitCommand class represents a command to quit the Duke application once done.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" return ui.showGoodbyeMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":15}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" * The FindCommand class represents a command to find tasks that match a given keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" private String keyword;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" * Constructs a FindCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" * @param keyword Keyword to be searched from the list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" for (Task task: taskList.getList()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" if (task.toString().contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" return ui.showMatchingTasksToKeyword(matchingTasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"GlendaChong":37}},{"path":"src/main/java/duke/command/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The InvalidCommand class represents a command that throws an error to users","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" * when they provide an invalid user input as the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" private final DukeException error;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" public InvalidCommand(DukeException error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" this.error \u003d error;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" return ui.showErrorMessage(this.error.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":22}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The ListCommand class represents a command to list out all the tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" * in the current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" return ui.showAllTasks(taskList.getList());","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":17}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The MarkCommand class represents a command to mark the specified task in the list as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * Construcst a MarkCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param taskNumber The task number corresponding to the task, to be marked done.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public MarkCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" if (taskNumber \u003e taskList.getNumberOfTasks()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! Task \" + taskNumber + \" does not exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" String message \u003d ui.showTaskMarkedAsDone(taskList.getTask(taskNumber));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" storage.save(taskList.getList(), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" return message;","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":32}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * The UnmarkCommand class represents a command to be marked undone in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" private final int taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * Construcst an UnmarkCommand object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" * @param taskNumber The task number corresponding to the task, to be marked undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public UnmarkCommand(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" if (taskNumber \u003e taskList.getNumberOfTasks()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! Task \" + taskNumber + \" does not exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" String message \u003d ui.showTaskMarkedAsUndone(taskList.getTask(taskNumber));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" storage.save(taskList.getList(), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" return message;","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":32}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" * The DukeException class represents an exception that can be thrown by the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * Constructs a DukeException with a default error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" public DukeException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" super(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" * Constructs a DukeException with a custom error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" * @param message The custom error message explaining the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":23}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" * The Parser class deals with interpreting the user inputs","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" * and generating corresponding commands if valid.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" * Returns a command based on the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" * If the command is invalid, an exception is thrown.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" * @param userInput The input provided by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" * @return A Command object representing the user\u0027s intended action.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" * @throws DukeException If there is an error in the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" public static Command parse(String userInput) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" String[] splitCommand \u003d userInput.trim().split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" switch (splitCommand[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" case \"list\":","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" case \"bye\":","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" case \"event\":","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" // Add event task into task list","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" if (!userInput.matches(\"event .*/from .* /to .*\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! The format of an event task is \"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" + \"\\\"event TASK_DESCRIPTION /from START /to END\\\"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" String description \u003d splitCommand[1].split(\"/from\")[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" String[] dateAndTime \u003d splitCommand[1].split(\"/from\")[1].split(\"/to\");","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" return new AddCommand(new Event(description, dateAndTime[0], dateAndTime[1]));","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" // Add deadline task into task list","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" return parseDeadlineCommand(splitCommand[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" case \"todo\":","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" // Add to-do task into task list","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" if (!userInput.matches(\"todo .*\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" return new AddCommand(new ToDo(splitCommand[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" case \"mark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" if (!userInput.matches(\".* \\\\d+\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" String errorMessage \u003d String.format(","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" \"OOPS!!! The format of this command is \\\"%s TASK_NUMBER\\\". \"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" + \"Task number must exist in the task list.\", splitCommand[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" int taskNumber \u003d Integer.parseInt(splitCommand[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" switch (splitCommand[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" case \"mark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" return new MarkCommand(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":" return new UnmarkCommand(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" return new DeleteCommand(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException();","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"GlendaChong"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"GlendaChong"},"content":" if (!userInput.matches(\"find .*\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! The description of a find command cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"GlendaChong"},"content":" return new FindCommand(splitCommand[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"GlendaChong"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"GlendaChong"},"content":" * Returns a command for deadline tasks for valid user inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"GlendaChong"},"content":" * Else, exception is thrown.","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"GlendaChong"},"content":" * @param stringCommand The deadline command provided by the user, excluding the task type.","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"GlendaChong"},"content":" * @return A Command object with a deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"GlendaChong"},"content":" * @throws DateTimeParseException If the date or time inputs are invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"GlendaChong"},"content":" * @throws DukeException If the deadline command has an invalid input format.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"GlendaChong"},"content":" public static Command parseDeadlineCommand(String stringCommand)","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"GlendaChong"},"content":" throws DateTimeParseException, DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"GlendaChong"},"content":" // Add deadline task into task list","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"GlendaChong"},"content":" String errorMessage \u003d \"OOPS!!! The format of a deadline task is \"","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"GlendaChong"},"content":" + \"\\\"deadline TASK_DESCRIPTION /by DD/MM/YYYY 24H_TIME\\\"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"GlendaChong"},"content":" if (!stringCommand.matches(\".*/by \\\\d{1,2}/\\\\d{1,2}/\\\\d{4} \\\\d{4}\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"GlendaChong"},"content":" String[] taskParts \u003d stringCommand.split(\" /by \");","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"GlendaChong"},"content":" if (taskParts.length !\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"GlendaChong"},"content":" String[] dateAndTime \u003d taskParts[1].split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"GlendaChong"},"content":" LocalDate date \u003d parseDate(dateAndTime[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"GlendaChong"},"content":" LocalTime time \u003d parseTime(dateAndTime[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"GlendaChong"},"content":" return new AddCommand(new Deadline(taskParts[0], date, time));","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"GlendaChong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"OOPS!!! Invalid date or time format in deadline task.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"GlendaChong"},"content":" * Parses a date string and returns a LocalDate object.","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"GlendaChong"},"content":" * @param date The date of the deadline for the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"GlendaChong"},"content":" * @return A LocalDate object of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"GlendaChong"},"content":" public static LocalDate parseDate(String date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"GlendaChong"},"content":" return LocalDate.parse(date, DateTimeFormatter.ofPattern(\"d/MM/yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"GlendaChong"},"content":" * Parses a time string and returns a LocalTime object.","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"GlendaChong"},"content":" * @param time The time of the deadline for the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"GlendaChong"},"content":" * @return A LocalTime object of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"GlendaChong"},"content":" public static LocalTime parseTime(String time) {","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"GlendaChong"},"content":" return LocalTime.parse(time, DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":146}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" * The Storage class deals with savings tasks in the file and","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" * loading tasks from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" private final String filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" * Constructs a Storage object.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" * @param filePath The filepath of the file containing the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" * Saves the tasks into the file in hard drive.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" * @param tasks The current list of tasks to be saved into the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" * @param ui The user interface of the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" public void save(ArrayList\u003cTask\u003e tasks, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" // Create folder and file","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" f.getParentFile().mkdirs();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" // Write tasks into hard disk","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" FileWriter fileWriter \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" fileWriter.write(task.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" * Loads the tasks from the file","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" * @return The ArrayList of the tasks saved into the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" * @throws DukeException If the task type in the file is invalid, or file is not found.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"GlendaChong"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"GlendaChong"},"content":" String fullTaskCommand \u003d scanner.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"GlendaChong"},"content":" String[] taskParts \u003d fullTaskCommand.split(\"\\\\|\");","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"GlendaChong"},"content":" String taskType \u003d taskParts[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"GlendaChong"},"content":" int taskStatus \u003d Integer.parseInt(taskParts[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"GlendaChong"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"GlendaChong"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"GlendaChong"},"content":" Task todo \u003d new ToDo(taskParts[2].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"GlendaChong"},"content":" tasks.add(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"GlendaChong"},"content":" todo.markStatusFromFile(taskStatus);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"GlendaChong"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"GlendaChong"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"GlendaChong"},"content":" String datePart \u003d taskParts[3].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"GlendaChong"},"content":" String timePart \u003d taskParts[4].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"GlendaChong"},"content":" LocalDate date \u003d LocalDate.parse(datePart, DateTimeFormatter.ofPattern(\"d MMM yyyy\", Locale.US));","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"GlendaChong"},"content":" String formattedDate \u003d date.format(DateTimeFormatter.ofPattern(\"dd/MM/yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"GlendaChong"},"content":" LocalTime time \u003d LocalTime.parse(timePart, DateTimeFormatter.ofPattern(\"h.mma\", Locale.US));","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"GlendaChong"},"content":" String formattedTime \u003d time.format(DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"GlendaChong"},"content":" Task deadline \u003d new Deadline(taskParts[2].trim(), formattedDate, formattedTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"GlendaChong"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"GlendaChong"},"content":" deadline.markStatusFromFile(taskStatus);","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"GlendaChong"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"GlendaChong"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"GlendaChong"},"content":" Task event \u003d new Event(taskParts[2].trim(),","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"GlendaChong"},"content":" taskParts[3].trim().replace(\"from\", \"\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"GlendaChong"},"content":" taskParts[4].trim().replace(\"to\", \"\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"GlendaChong"},"content":" tasks.add(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"GlendaChong"},"content":" event.markStatusFromFile(taskStatus);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"GlendaChong"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"GlendaChong"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"Invalid task type in file: \" + taskType);","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"GlendaChong"},"content":" scanner.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException | FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"GlendaChong"},"content":" throw new DukeException(\"File not found: \" + filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"GlendaChong"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":124}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" * The Deadline class represents a task with a description,","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" * completion status, and a deadline date and time.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" protected LocalDate date;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" protected LocalTime time;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" * Constructs a Deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" * @param date LocalDate representation of the date of deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" * @param time LocalTime representation of the time of deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" public Deadline(String description, LocalDate date, LocalTime time) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" this.time \u003d time;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" * Constructs the Deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" * @param date String representation of the date of deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" * @param time String representation of the time of deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" public Deadline(String description, String date, String time) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" this.date \u003d Parser.parseDate(date);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" this.time \u003d Parser.parseTime(time);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" * Returns a formatted string representation of the deadline date.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" * @return A string representing the deadline date in the format \"d MMM yyyy\".","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" public String reformatDate() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" return this.date.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" * Returns a formatted string representation of the deadline time.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" * @return A string representing the deadline time in the format \"h.mma\".","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" public String reformatTime() {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" return this.time.format(DateTimeFormatter.ofPattern(\"h.mma\", Locale.US));","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" return \"[D]\" + super.toString() + \" (by \" + reformatDate() + \" \" + reformatTime() + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" return \"D\" + super.toFileFormat() + \" | \" + reformatDate() + \" | \" + reformatTime() + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":71}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" * The Event class represents a task with a description,","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" * completion status, and a start and end period.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" protected String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" * Constructs an Event object.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * @param from Start period of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" * @param to End period of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" this.from \u003d from.trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" this.to \u003d to.trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" return \"[E]\" + super.toString().trim() + \" (from \" + this.from + \" to \" + this.to + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" return \"E\" + super.toFileFormat() + \"| from \" + this.from + \" | to \" + this.to + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":33}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" * The Task class represents a task with a description and completion status.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" * Constructs a Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" * @param d Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" public Task(String d) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" description \u003d d;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" * Returns the icon representing the completion status of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" * @return \"X\" if the task is done, \" \" if the task is not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" * Marks the task as done by setting its completion status to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" * Marks the task as undone by setting its completion status to false.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" * Marks the task status based on status obtained from file.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" * @param status The status of the task saved in the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" public void markStatusFromFile(int status) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" if (status \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" markAsUndone();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" * Returns a string representation of the task, containing its","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" * completion status and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" * @return String representation of task status and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" * Returns a string representation of the task when saved in a hard disk file.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" * @return String representation of task status and description for hard disk file.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" if (isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" return \" | 0 | \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":" return \" | 1 | \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":79}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":" * The TaskList class contains the task list and all the operations","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":" * performed on the tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" * Adds the task to the current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" * @param task Task to be added into task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" * Removes the task from the current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" * @param taskNumber Task Number corresponding to the task list to be removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" public void remove(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" * Returns the number of tasks in current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" * @return number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" public int getNumberOfTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" return tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" public Task getTask(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" return tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" return this.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":52}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" * The ToDo class represents a task with a description.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" * Constructs a ToDo object.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" return \"T\" + super.toFileFormat() + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":25}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"GlendaChong":61}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" private final Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" private final Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" * Initializes the main chat window and ensures that it always scrolls down to show the latest messages.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" * This method sets up a listener on the height property of the dialog container to automatically scroll","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" * to the end whenever new content is added.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" //Scroll down to the end every time dialogContainer\u0027s height changes.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" dialogContainer.getChildren().addAll(DialogBox.getDukeDialog(duke.getGreetings(), dukeImage));","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"GlendaChong":59}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" * The Ui class handles interactions with the user by displaying messages and receiving input.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" * Displays a welcome message when the Duke application starts.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" * @return The welcome message as a string.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" public String showWelcomeMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" return \"Hello! I\u0027m Glenda!\\nWhat can I do for you?\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" * Displays a goodbye message when the Duke application ends.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" * @return The goodbye message as a string.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" public String showGoodbyeMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" return \"Bye. Hope to see you again soon!\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" * Displays the task added and the current total number of tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" * @param numberOfTasks The number of tasks in the list currently.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" * @return The message displaying the added task and the total number of tasks as a string.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" public String showAddedTask(Task task, int numberOfTasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" return \"Got it. I\u0027ve added this task to the list:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" + task.toString()","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" + \"\\nNow you have \"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" + numberOfTasks","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" + \" task(s) in the list.\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" * Displays all the tasks in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" * @param tasks The list of tasks to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" * @return The message displaying all tasks as a string.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" public String showAllTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" // Case where there are no tasks to be displayed","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" message.append(\"No tasks added. \\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" message.append(\"Here are the task(s) in your list:\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" message.append(tasks.indexOf(task) + 1).append(\". \").append(task).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":" return message.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" * Displays a message indicating the task was marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" * @return The message indicating the completed task as a string.","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" public String showTaskMarkedAsDone(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" return \"Great! I\u0027ve completed this task!\\n\" + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":" * Displays a message indicating the task was marked as undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"GlendaChong"},"content":" * @param task The task that was marked undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"GlendaChong"},"content":" * @return The message indicating the task was marked as undone as a string.","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"GlendaChong"},"content":" public String showTaskMarkedAsUndone(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"GlendaChong"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"GlendaChong"},"content":" return \"Okay, I have not yet completed this task:\\n\" + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"GlendaChong"},"content":" * Displays a message indicating the tasks that were deleted, and the number of tasks left in the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"GlendaChong"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"GlendaChong"},"content":" * @param numberOfTasks The number of tasks left in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"GlendaChong"},"content":" * @return The message indicating the deleted task and the remaining number of tasks as a string.","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"GlendaChong"},"content":" public String showDeletedTask(Task task, int numberOfTasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"GlendaChong"},"content":" return \"Okay, I\u0027ve removed this task:\\n\" + task.toString()","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"GlendaChong"},"content":" + \"\\nNow you have \" + numberOfTasks + \" task(s) in the list.\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"GlendaChong"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"GlendaChong"},"content":" * @param errorMessage The error message shown to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"GlendaChong"},"content":" * @return The error message as a string.","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"GlendaChong"},"content":" public String showErrorMessage(String errorMessage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"GlendaChong"},"content":" return errorMessage + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"GlendaChong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"GlendaChong"},"content":" * Displays the list of tasks matching the keyword search.","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"GlendaChong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"GlendaChong"},"content":" * @param tasks Tasks associated with the keyword search.","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"GlendaChong"},"content":" * @return The message displaying matching tasks as a string.","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"GlendaChong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"GlendaChong"},"content":" public String showMatchingTasksToKeyword(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"GlendaChong"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"GlendaChong"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"GlendaChong"},"content":" // Case where there are no matching tasks to be displayed","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"GlendaChong"},"content":" message.append(\"No matching tasks in the list. \\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"GlendaChong"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"GlendaChong"},"content":" message.append(\"Here are the matching task(s) in your list:\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"GlendaChong"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"GlendaChong"},"content":" message.append(tasks.indexOf(task) + 1).append(\". \").append(task.toString()).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"GlendaChong"},"content":" return message.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"GlendaChong":132}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" \u003cInsets left\u003d\"5.0\" right\u003d\"5.0\"/\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"50.0\" fitWidth\u003d\"50.0\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" \u003cclip\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" \u003cCircle radius\u003d\"25.0\" centerX\u003d\"25.0\" centerY\u003d\"25.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" \u003c/clip\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"7.0\" right\u003d\"7.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"GlendaChong":26}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" fx:controller\u003d\"duke.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"GlendaChong":24}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" public void parseListCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof ListCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" public void parseByeCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof ExitCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" public void parseEventCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"event Orbital Splashdown /from 01/01/2023 1800 /to 01/01/2023 2000\");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" public void parseEventCommand_invalidInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"event Orbital Splashdown /to 01/01/2023 2000\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of an event task is \"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" + \"\\\"event TASK_DESCRIPTION /from START /to END\\\"\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"GlendaChong"},"content":" public void parseDeadlineCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"GlendaChong"},"content":" Command command1 \u003d Parser.parse(\"deadline Do CS2103T /by 01/01/2023 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"GlendaChong"},"content":" Command command2 \u003d Parser.parse(\"deadline Do CS2103T /by 1/01/2023 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command1 instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command2 instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"GlendaChong"},"content":" public void parseDeadlineCommand_invalidInputFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parseDeadlineCommand(\"deadline Do CS2103T 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of a deadline task is \"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"GlendaChong"},"content":" + \"\\\"deadline TASK_DESCRIPTION /by DD/MM/YYYY 24H_TIME\\\"\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"GlendaChong"},"content":" public void parseDeadlineCommand_invalidDateInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parseDeadlineCommand(\"deadline Do CS2103T /by 25/25/2023 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! Invalid date or time format in deadline task.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"GlendaChong"},"content":" public void parseDeadlineCommand_invalidTimeInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parseDeadlineCommand(\"deadline Do CS2103T /by 12/12/2023 2500\");","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! Invalid date or time format in deadline task.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"GlendaChong"},"content":" public void parseToDoCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"todo read book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"GlendaChong"},"content":" public void parseToDoCommand_invalidInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"GlendaChong"},"content":" public void parseMarkCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"mark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof MarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"GlendaChong"},"content":" public void parseMarkCommand_invalidInputFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof MarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of marking a task done is \\\"mark TASK_NUMBER\\\".\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"GlendaChong"},"content":" + \"Task number must exist in the task list.\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"GlendaChong"},"content":" public void parseUnmarkCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"unmark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof UnmarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"GlendaChong"},"content":" public void parseUnmarkCommand_invalidInputFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"unmark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof UnmarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of marking a task done is \\\"unmark TASK_NUMBER\\\".\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"GlendaChong"},"content":" + \"Task number must exist in the task list.\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"GlendaChong"},"content":" public void parseDeleteCommand_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"delete 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof DeleteCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"Exception should not be thrown\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"GlendaChong"},"content":" public void parseDeleteCommand_invalidInputFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"GlendaChong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"GlendaChong"},"content":" Command command \u003d Parser.parse(\"delete 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"GlendaChong"},"content":" assertTrue(command instanceof DeleteCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"GlendaChong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"OOPS!!! The format of marking a task done is \\\"delete TASK_NUMBER\\\".\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"GlendaChong"},"content":" + \"Task number must exist in the task list.\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"GlendaChong"},"content":" public void testParseDate_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"GlendaChong"},"content":" LocalDate result \u003d Parser.parseDate(\"31/08/2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"GlendaChong"},"content":" assertEquals(LocalDate.of(2023, 8, 31), result);","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"GlendaChong"},"content":" public void testParseDate_invalidMonth_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"GlendaChong"},"content":" assertThrows(DateTimeParseException.class, () -\u003e Parser.parseDate(\"31/13/2023\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"GlendaChong"},"content":" public void testParseDate_invalidDay_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"GlendaChong"},"content":" assertThrows(DateTimeParseException.class, () -\u003e Parser.parseDate(\"32/08/2023\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"GlendaChong"},"content":" public void testParseTime_validInput_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"GlendaChong"},"content":" LocalTime result \u003d Parser.parseTime(\"1345\");","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"GlendaChong"},"content":" assertEquals(LocalTime.of(13, 45), result);","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"GlendaChong"},"content":" public void testParseTime_validInputWithLeadingZero_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"GlendaChong"},"content":" LocalTime result \u003d Parser.parseTime(\"0900\");","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"GlendaChong"},"content":" assertEquals(LocalTime.of(9, 0), result);","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"GlendaChong"},"content":" public void testParseTime_invalidHour_exceptionThrown() {","lastModifiedDate":"2023-09-04"},{"lineNumber":222,"author":{"gitId":"GlendaChong"},"content":" assertThrows(DateTimeParseException.class, () -\u003e Parser.parseTime(\"2560\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"GlendaChong"},"content":" public void testParseTime_invalidMinute_exceptionThrown() {","lastModifiedDate":"2023-09-04"},{"lineNumber":227,"author":{"gitId":"GlendaChong"},"content":" assertThrows(DateTimeParseException.class, () -\u003e Parser.parseTime(\"13160\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"GlendaChong":229}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" public void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" Deadline deadline \u003d new Deadline(\"CS2103T\", LocalDate.of(2023, 8, 31), LocalTime.of(13, 45));","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"[D][ ] CS2103T (by 31 Aug 2023 | 1.45PM)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" public void testFileDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" Deadline deadline \u003d new Deadline(\"CS2103T\", LocalDate.of(2023, 8, 31), LocalTime.of(13, 45));","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"D | 1 | CS2103T | 31 Aug 2023 | 1.45PM\" + \"\\n\", deadline.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"D | 0 | CS2103T | 31 Aug 2023 | 1.45PM\" + \"\\n\", deadline.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"GlendaChong":27}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" public void testAddTask() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" Task task1 \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task1);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" assertEquals(task1, taskList.getTask(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" Task task2 \u003d new Deadline(\"CS2103T\", LocalDate.now(), LocalTime.now());","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task2);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" assertEquals(task2, taskList.getTask(2));","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" Task task3 \u003d new Event(\"SLF\", \"Aug 20\", \"Aug 22\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task3);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" assertEquals(task3, taskList.getTask(3));","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" public void testRemoveTask() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" Task task1 \u003d new ToDo(\"Read a book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" Task task2 \u003d new ToDo(\"Clean the room\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task1);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" taskList.add(task2);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" taskList.remove(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":" assertEquals(1, taskList.getNumberOfTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" assertEquals(task2, taskList.getTask(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" public void testGetTask() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":" TaskList tasklist \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" Task task1 \u003d new ToDo(\"Read a book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" Task task2 \u003d new ToDo(\"Clean the room\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" tasklist.add(task1);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":" tasklist.add(task2);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" assertEquals(2, tasklist.getNumberOfTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"GlendaChong":51}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" public void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"[T][ ] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"[T][X] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" public void testFileDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" ToDo todo \u003d new ToDo(\"Read a book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"T | 1 | Read a book\" + \"\\n\", todo.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" assertEquals(\"T | 0 | Read a book\" + \"\\n\", todo.toFileFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"GlendaChong":25}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":"deadline return book /by 29/08/2023 1200","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":"mark 4","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":"unmark 1","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":"delete 1","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":11}},{"path":"text-ui-test/output.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"GlendaChong"},"content":" Hello! I\u0027m Glenda!","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"GlendaChong"},"content":" What can I do for you?","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"GlendaChong"},"content":" Got it. I\u0027ve added this task to the list:","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"GlendaChong"},"content":" [T][ ] borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"GlendaChong"},"content":" Now you have 1 task(s) in the list.","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"GlendaChong"},"content":" OOPS!!! The format of a deadline task is \"deadline TASK_DESCRIPTION /by DD/MM/YYYY 24H_TIME\"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"GlendaChong"},"content":" Got it. I\u0027ve added this task to the list:","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"GlendaChong"},"content":" [D][ ] return book (by 29 Aug 2023 12.00PM)","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"GlendaChong"},"content":" Now you have 2 task(s) in the list.","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"GlendaChong"},"content":" Here are the task(s) in your list:","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"GlendaChong"},"content":" 1. [T][ ] borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"GlendaChong"},"content":" 2. [D][ ] return book (by 29 Aug 2023 12.00PM)","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"GlendaChong"},"content":" Great! I\u0027ve completed this task!","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"GlendaChong"},"content":" [T][X] borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"GlendaChong"},"content":" Here are the task(s) in your list:","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"GlendaChong"},"content":" 1. [T][X] borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"GlendaChong"},"content":" 2. [D][ ] return book (by 29 Aug 2023 12.00PM)","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"GlendaChong"},"content":" Got it. I\u0027ve added this task to the list:","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"GlendaChong"},"content":" [E][ ] project meeting (from Mon 2pm to 4pm)","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"GlendaChong"},"content":" Now you have 3 task(s) in the list.","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"GlendaChong"},"content":" OOPS!!! Task 4 does not exist.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"GlendaChong"},"content":" Okay, I have not yet completed this task:","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"GlendaChong"},"content":" [T][ ] borrow book","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"GlendaChong"},"content":" Okay, I\u0027ve removed this task:","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"GlendaChong"},"content":" [T][ ] borrow book","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"GlendaChong"},"content":" Now you have 2 task(s) in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"GlendaChong"},"content":" Bye. Hope to see you again soon!","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"GlendaChong"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"GlendaChong"},"content":"","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"GlendaChong":63}}] diff --git a/GlendaChong_ip_master/commits.json b/GlendaChong_ip_master/commits.json index e065f914..7d9ff6cb 100644 --- a/GlendaChong_ip_master/commits.json +++ b/GlendaChong_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"GlendaChong":[{"date":"2023-08-21","commitResults":[{"hash":"c184e0da8f22a86760914e54e40443e97b1dd24b","isMergeCommit":false,"messageTitle":"Rename chatbot, greet user, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"ea66a184d6bc767f24be6ad61f063ed2deedb80e","isMergeCommit":false,"messageTitle":"Echo commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":9}}},{"hash":"a7a22c676000321f8c792b07c1a0288b72c4f7f3","isMergeCommit":false,"messageTitle":"Add and display tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":8}}}]},{"date":"2023-08-22","commitResults":[{"hash":"f5fe0526277534677302406d7ecc608af0da1099","isMergeCommit":false,"messageTitle":"Added mark task as done or undone feature","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":7}}},{"hash":"8f1f02d59fde38532f3271eddd65710b0889e76a","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":42}}},{"hash":"04cfa911e6ef5095fd19d014a1d0252d66cdec1b","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":56,"deletions":0},"java":{"insertions":15,"deletions":15}}},{"hash":"70125559ea89c78e8c01420fa60e4fda03734699","isMergeCommit":false,"messageTitle":"Added error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":28}}},{"hash":"e3d908d1ce59c91eab32e8ab9120e2246e9ea9df","isMergeCommit":false,"messageTitle":"Edited tasks to use ArrayList\u003c\u003e","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":15}}}]},{"date":"2023-08-23","commitResults":[{"hash":"e6835a8b1601b8cc0fcb7aba6a5a08494758554b","isMergeCommit":false,"messageTitle":"Added delete task function","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":16}}}]},{"date":"2023-08-29","commitResults":[{"hash":"168e8903bf8a19c4efa50553b903b590b75a3891","isMergeCommit":false,"messageTitle":"Add save tasks to hard disk functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":92,"deletions":34}}},{"hash":"8ed4f8290b100e6617acbef6be9889e4db056a11","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"85478892525a5ba0312b9ed069e90a48532d279a","isMergeCommit":false,"messageTitle":"Add date and time functionality for deadline tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":32,"deletions":9}}},{"hash":"3cf10fe81ea3776e46f238c0e9d60b5f6e919203","isMergeCommit":false,"messageTitle":"Update automated text-ui testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":23,"deletions":6},"java":{"insertions":2,"deletions":4}}},{"hash":"3ebc255e281e4d9f77a33f1576284e6c4640bcee","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"e5288cb7f2a3bc2aa998b70be604412153ad5578","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","tags":["A-OOP","A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":443,"deletions":195}}},{"hash":"b71c5586d7ab89bdd5c2963f7ac761c3498d6a59","isMergeCommit":false,"messageTitle":"Organise classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":7}}},{"hash":"f9d740de4eed2471c943ca700086905cca062c9b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"df98977baef7298becb5c97853cc5f2711b05354","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"476c057d5d3a16facabe977732ea55bf7328c391","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":334,"deletions":5}}},{"hash":"04d2df8f562e5259a2d1ee76283e5b35d6fb67ba","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"bbcdc3f37968477e888529f6d4eebe52a79b6bee","isMergeCommit":false,"messageTitle":"Edit build.gradle file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"83a3f6bc4f95ef595bc7391893e245d0c530aa78","isMergeCommit":false,"messageTitle":"Create a JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":1,"deletions":1}}},{"hash":"c56933853654fef5e7d240812011f7a5e6e53d1e","isMergeCommit":false,"messageTitle":"Add Javadocs to all current classes and methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":281,"deletions":6}}},{"hash":"7c4841cbdbb7777244d5390585c6e6858a8f15db","isMergeCommit":false,"messageTitle":"Follow coding standard and refactor code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":101}}},{"hash":"15333ba22f85496f5a3c742f7b80ac8d9712068a","isMergeCommit":false,"messageTitle":"Add find tasks by keyword search functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":69,"deletions":6}}},{"hash":"949bdc6048e90812c1a985ba01b40af98f1bbdeb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"5e6d25243c8c8fcc1739f1925428ee684010a0f3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"b5116454fba718e711b25fdaacc1f137b32977ff","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"a6aad2e7a53d324c161e989fa938e3a6331fc23e","isMergeCommit":false,"messageTitle":"Fix event task displays in saved file and chatbot","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":32,"deletions":8}}}]},{"date":"2023-09-04","commitResults":[{"hash":"6356dfd139248ed05f1aefbf82518dd15d36aa92","isMergeCommit":false,"messageTitle":"Update styling of codes","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1},"java":{"insertions":72,"deletions":71}}},{"hash":"f31fe8cf16fdd03ec7c5f9a7647859e88b0af323","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Checkstyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"GlendaChong":{"java":1337,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":8,"txt":77}},"authorContributionVariance":{"GlendaChong":51451.38},"authorDisplayNameMap":{"GlendaChong":"CS2103T-T17-2 GLEN..TING"}} +{"authorDailyContributionsMap":{"GlendaChong":[{"date":"2023-08-21","commitResults":[{"hash":"c184e0da8f22a86760914e54e40443e97b1dd24b","isMergeCommit":false,"messageTitle":"Rename chatbot, greet user, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"ea66a184d6bc767f24be6ad61f063ed2deedb80e","isMergeCommit":false,"messageTitle":"Echo commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":9}}},{"hash":"a7a22c676000321f8c792b07c1a0288b72c4f7f3","isMergeCommit":false,"messageTitle":"Add and display tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":8}}}]},{"date":"2023-08-22","commitResults":[{"hash":"f5fe0526277534677302406d7ecc608af0da1099","isMergeCommit":false,"messageTitle":"Added mark task as done or undone feature","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":7}}},{"hash":"8f1f02d59fde38532f3271eddd65710b0889e76a","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":42}}},{"hash":"04cfa911e6ef5095fd19d014a1d0252d66cdec1b","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":56,"deletions":0},"java":{"insertions":15,"deletions":15}}},{"hash":"70125559ea89c78e8c01420fa60e4fda03734699","isMergeCommit":false,"messageTitle":"Added error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":28}}},{"hash":"e3d908d1ce59c91eab32e8ab9120e2246e9ea9df","isMergeCommit":false,"messageTitle":"Edited tasks to use ArrayList\u003c\u003e","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":15}}}]},{"date":"2023-08-23","commitResults":[{"hash":"e6835a8b1601b8cc0fcb7aba6a5a08494758554b","isMergeCommit":false,"messageTitle":"Added delete task function","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":16}}}]},{"date":"2023-08-29","commitResults":[{"hash":"168e8903bf8a19c4efa50553b903b590b75a3891","isMergeCommit":false,"messageTitle":"Add save tasks to hard disk functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":92,"deletions":34}}},{"hash":"8ed4f8290b100e6617acbef6be9889e4db056a11","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"85478892525a5ba0312b9ed069e90a48532d279a","isMergeCommit":false,"messageTitle":"Add date and time functionality for deadline tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":32,"deletions":9}}},{"hash":"3cf10fe81ea3776e46f238c0e9d60b5f6e919203","isMergeCommit":false,"messageTitle":"Update automated text-ui testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":23,"deletions":6},"java":{"insertions":2,"deletions":4}}},{"hash":"3ebc255e281e4d9f77a33f1576284e6c4640bcee","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"e5288cb7f2a3bc2aa998b70be604412153ad5578","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","tags":["A-OOP","A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":443,"deletions":195}}},{"hash":"b71c5586d7ab89bdd5c2963f7ac761c3498d6a59","isMergeCommit":false,"messageTitle":"Organise classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":7}}},{"hash":"f9d740de4eed2471c943ca700086905cca062c9b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"df98977baef7298becb5c97853cc5f2711b05354","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"476c057d5d3a16facabe977732ea55bf7328c391","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":334,"deletions":5}}},{"hash":"04d2df8f562e5259a2d1ee76283e5b35d6fb67ba","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"bbcdc3f37968477e888529f6d4eebe52a79b6bee","isMergeCommit":false,"messageTitle":"Edit build.gradle file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"83a3f6bc4f95ef595bc7391893e245d0c530aa78","isMergeCommit":false,"messageTitle":"Create a JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":1,"deletions":1}}},{"hash":"c56933853654fef5e7d240812011f7a5e6e53d1e","isMergeCommit":false,"messageTitle":"Add Javadocs to all current classes and methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":281,"deletions":6}}},{"hash":"7c4841cbdbb7777244d5390585c6e6858a8f15db","isMergeCommit":false,"messageTitle":"Follow coding standard and refactor code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":101}}},{"hash":"15333ba22f85496f5a3c742f7b80ac8d9712068a","isMergeCommit":false,"messageTitle":"Add find tasks by keyword search functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":69,"deletions":6}}},{"hash":"949bdc6048e90812c1a985ba01b40af98f1bbdeb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"5e6d25243c8c8fcc1739f1925428ee684010a0f3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"b5116454fba718e711b25fdaacc1f137b32977ff","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"a6aad2e7a53d324c161e989fa938e3a6331fc23e","isMergeCommit":false,"messageTitle":"Fix event task displays in saved file and chatbot","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":32,"deletions":8}}}]},{"date":"2023-09-04","commitResults":[{"hash":"6356dfd139248ed05f1aefbf82518dd15d36aa92","isMergeCommit":false,"messageTitle":"Update styling of codes","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1},"java":{"insertions":72,"deletions":71}}},{"hash":"f31fe8cf16fdd03ec7c5f9a7647859e88b0af323","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Checkstyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"29f2e8b4de583956ba75ba2412ea3ad4e7a27b74","isMergeCommit":false,"messageTitle":"Add GUI to chatbot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":1},"fxml":{"insertions":50,"deletions":0},"java":{"insertions":255,"deletions":100}}},{"hash":"8bcc4ad4841b3182e320541a2bbd083689c60522","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"GlendaChong":{"java":1492,"md":0,"fxml":50,"sh":0,"bat":0,"gradle":22,"txt":77}},"authorContributionVariance":{"GlendaChong":52515.72},"authorDisplayNameMap":{"GlendaChong":"CS2103T-T17-2 GLEN..TING"}} diff --git a/HollaG_ip_master/authorship.json b/HollaG_ip_master/authorship.json index 82144556..4e2b4e98 100644 --- a/HollaG_ip_master/authorship.json +++ b/HollaG_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"# Duke.Duke project template","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"HollaG"},"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-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"HollaG":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":"HollaG"},"content":" mainClass.set(\"Duke.Duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"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":{"HollaG":1,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"T | 0 | hello","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"T | 1 | die","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"T | 0 | thrill","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"HollaG":3}},{"path":"src/main/java/Duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package Duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import Duke.Exceptions.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"import Duke.Storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"import Duke.UI.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":" * Contains the Duke Chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":" * @author Marcus Soh","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":"public class Duke {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" private static Path SAVE_FILE_LOCATION \u003d Paths.get(\"data\", \"duke.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" private TaskList listContainer \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" * Constructor for our chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" * @param filePath Specifies where the save file to store previous information is to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" this.listContainer \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":" ui \u003d new Ui(this.listContainer, this.storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" System.out.println(e.getErrorMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":" * Begins the chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":" private void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":" ui.beginLogging();","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"HollaG"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"HollaG"},"content":" new Duke(String.valueOf(SAVE_FILE_LOCATION)).run();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"HollaG":51}},{"path":"src/main/java/Duke/Exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package Duke.Exceptions;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":" * Contains the main Custom Exception for DukeBot.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":" * Constructor for the Exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":" * @param message the error message","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" * Returns the error message for this exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" * @return","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" public String getErrorMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":" return getMessage();","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"HollaG":27}},{"path":"src/main/java/Duke/Parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package Duke.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import Duke.Exceptions.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"import Duke.Storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"import java.util.List;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"import java.util.Optional;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":"import static Duke.UI.Ui.printResult;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" * Controls the parsing of commands and arguments entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" private static String UNKNOWN_COMMAND \u003d \"\\uD83D\\uDE21 This command is not something I can handle!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" private static String NAME_EMPTY \u003d \"\\uD83D\\uDE21 Your item name cannot be empty!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":" private static String DEADLINE_EMPTY \u003d \"\\uD83D\\uDE21 Missing deadline!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" private static String FROM_EMPTY \u003d \"\\uD83D\\uDE21 Missing from!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" private static String TO_EMPTY \u003d \"\\uD83D\\uDE21 Missing to!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":" private static String TIME_FORMAT_ERROR \u003d \"\\uD83D\\uDE21 Time format invalid!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" private static String INVALID_DATE_FORMAT \u003d \"\\uD83D\\uDE21 Invalid date format! Try using YYYY-MM-DD\";","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":" private static DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":" * Parses the input string by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":" * @param inputString The input string entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" * @param taskList The list of tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":" * @param storage The storage object that handles saving updates.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" * @return true if the program can continue, false if the program has to halt.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":" public static boolean parse(String inputString, TaskList taskList, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":" String inputCommandString \u003d (inputString.split(\" \")[0].toUpperCase());","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":" if (!Commands.contains(inputCommandString)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":" throw new DukeException(UNKNOWN_COMMAND);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"HollaG"},"content":" Commands inputCommand \u003d Commands.valueOf(inputCommandString);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"HollaG"},"content":" boolean canContinue;","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"HollaG"},"content":" switch (inputCommand) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"HollaG"},"content":" case BYE: {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, null, taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"HollaG"},"content":" canContinue \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"HollaG"},"content":" case LIST: {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, null, taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"HollaG"},"content":" canContinue \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"HollaG"},"content":" case MARK: {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"HollaG"},"content":" // check if is number","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"HollaG"},"content":" int index \u003d Integer.parseInt(inputString.split(\" \")[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"HollaG"},"content":" Optional\u003cTask\u003e markedTask \u003d taskList.markAsDone(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, markedTask, taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"HollaG"},"content":" canContinue \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"HollaG"},"content":" case UNMARK: {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"HollaG"},"content":" int index \u003d Integer.parseInt(inputString.split(\" \")[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"HollaG"},"content":" Optional\u003cTask\u003e unmarkedTask \u003d taskList.markAsUnDone(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, (unmarkedTask), taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"HollaG"},"content":" canContinue \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"HollaG"},"content":" case DELETE: {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"HollaG"},"content":" int index \u003d Integer.parseInt(inputString.split(\" \")[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"HollaG"},"content":" Optional\u003cTask\u003e removedTask \u003d taskList.removeFromList(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, removedTask, taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"HollaG"},"content":" canContinue \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"HollaG"},"content":" case TODO: {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"HollaG"},"content":" // add a todo","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"HollaG"},"content":" String itemName \u003d inputString.replace(\"todo \", \"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"HollaG"},"content":" if (itemName.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"HollaG"},"content":" // no item name","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"HollaG"},"content":" throw new DukeException(NAME_EMPTY);","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"HollaG"},"content":" TodoTask todoTask \u003d new TodoTask(itemName);","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"HollaG"},"content":" taskList.addToList(todoTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, Optional.of(todoTask), taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"HollaG"},"content":" canContinue \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"HollaG"},"content":" case DEADLINE: {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"HollaG"},"content":" // format of entry: \"deadline return book /by Sunday\"","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"HollaG"},"content":" String itemName \u003d inputString.replace(\"deadline \", \"\").split(\" /by \")[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"HollaG"},"content":" if (itemName.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"HollaG"},"content":" // no item name","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"HollaG"},"content":" throw new DukeException(NAME_EMPTY);","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"HollaG"},"content":" String[] inputArgs \u003d inputString.replace(\"deadline \", \"\").split(\" /by \");","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"HollaG"},"content":" if (inputArgs.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"HollaG"},"content":" // missing deadline","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"HollaG"},"content":" throw new DukeException(DEADLINE_EMPTY);","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"HollaG"},"content":" String deadline \u003d inputArgs[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"HollaG"},"content":" if (deadline.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"HollaG"},"content":" // no item name","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"HollaG"},"content":" throw new DukeException(DEADLINE_EMPTY);","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"HollaG"},"content":" // parse the deadline - should be a LocalDate format","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"HollaG"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"HollaG"},"content":" LocalDateTime deadlineDateTime \u003d LocalDateTime.parse(deadline, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"HollaG"},"content":" DeadlineTask deadlineTask \u003d new DeadlineTask(itemName, deadlineDateTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"HollaG"},"content":" taskList.addToList(deadlineTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, Optional.of(deadlineTask), taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"HollaG"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"HollaG"},"content":" throw new DukeException(INVALID_DATE_FORMAT);","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"HollaG"},"content":" canContinue \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"HollaG"},"content":" case EVENT: {","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"HollaG"},"content":" String inputArgs \u003d inputString.replace(\"event \", \"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"HollaG"},"content":" // sample format: event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"HollaG"},"content":" // get the name","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"HollaG"},"content":" String itemName \u003d inputArgs.split(\" /from \")[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"HollaG"},"content":" if (itemName.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"HollaG"},"content":" // no item name","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"HollaG"},"content":" throw new DukeException(NAME_EMPTY);","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"HollaG"},"content":" // get the \u0027from...to\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"HollaG"},"content":" // @see https://stackoverflow.com/questions/4662215/how-to-extract-a-substring-using-regex","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"HollaG"},"content":" Pattern patternFrom \u003d Pattern.compile(\"(/from )(.*?)( /to)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"HollaG"},"content":" Matcher matcherFrom \u003d patternFrom.matcher(inputArgs);","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"HollaG"},"content":" String from \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"HollaG"},"content":" if (matcherFrom.find()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"HollaG"},"content":" // yes, formatted correctly","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"HollaG"},"content":" from \u003d matcherFrom.group(2);","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"HollaG"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"HollaG"},"content":" throw new DukeException(FROM_EMPTY);","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"HollaG"},"content":" // parse the \u0027from\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"HollaG"},"content":" LocalDateTime dateTimeFrom \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"HollaG"},"content":" // get the to...","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"HollaG"},"content":" String to \u003d inputArgs.split(\"/to \")[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"HollaG"},"content":" if (to.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"HollaG"},"content":" throw new DukeException(TO_EMPTY);","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"HollaG"},"content":" // parse the \u0027to\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"HollaG"},"content":" LocalDateTime dateTimeTo \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"HollaG"},"content":" EventTask eventTask \u003d new EventTask(itemName, dateTimeFrom, dateTimeTo);","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"HollaG"},"content":" taskList.addToList(eventTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, Optional.of(eventTask), taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"HollaG"},"content":" canContinue \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"HollaG"},"content":" case FIND: {","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"HollaG"},"content":" String searchString \u003d inputString.replace(\"find \", \"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"HollaG"},"content":" ArrayList\u003cOptional\u003cTask\u003e\u003e filtered \u003d taskList.findTasksByName(searchString);","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, null, new TaskList(filtered));","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"HollaG"},"content":" canContinue \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"HollaG"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"HollaG"},"content":" throw new DukeException(UNKNOWN_COMMAND);","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"HollaG"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"HollaG"},"content":" return canContinue;","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"HollaG":213}},{"path":"src/main/java/Duke/Storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package Duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import Duke.Exceptions.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":"import java.util.Optional;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" * Controls the storage and retrieving of saved data on the hard disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" private static final String PARSE_ERROR \u003d \"Invalid file format!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" private String filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":" * Constructor for the Storage controller.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" * @param filePath The filepath of the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":" * Saves the specified list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" public void saveTasks(TaskList taskList) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":" String serialized \u003d taskList.serialize();","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":" // create file if not exists","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":" // write to file","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"HollaG"},"content":" fileWriter.write(serialized);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"HollaG"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"HollaG"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"HollaG"},"content":" throw new DukeException(\"Error saving file! \\n\" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"HollaG"},"content":" * Loads the list of tasks that a user has previously entered.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"HollaG"},"content":" * @return a list of tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"HollaG"},"content":" public ArrayList\u003cOptional\u003cTask\u003e\u003e load() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"HollaG"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"HollaG"},"content":" Path path \u003d Path.of(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"HollaG"},"content":" if (Files.notExists(path)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"HollaG"},"content":" // create the directory","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"HollaG"},"content":" System.out.println(\"Directory not present, creating...\");","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"HollaG"},"content":" Files.createDirectory(path.getParent());","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"HollaG"},"content":" if (Files.exists(path)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"HollaG"},"content":" System.out.println(\"Save file already exists, loading previous data\");","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"HollaG"},"content":" // it exists, so let\u0027s read it","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"HollaG"},"content":" Scanner sc \u003d new Scanner(path);","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"HollaG"},"content":" ArrayList\u003cOptional\u003cTask\u003e\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"HollaG"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"HollaG"},"content":" String inputLine \u003d sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"HollaG"},"content":" if (inputLine.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"HollaG"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"HollaG"},"content":" Task task \u003d parseTask(inputLine);","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"HollaG"},"content":" tasks.add(Optional.of(task));","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"HollaG"},"content":"// System.out.println(\"✅ Loaded \" + listContainer.getSize() + \" previous tasks.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"HollaG"},"content":" return tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"HollaG"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"HollaG"},"content":" File saveFile \u003d new File(String.valueOf(path));","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"HollaG"},"content":" if (saveFile.createNewFile()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"HollaG"},"content":" System.out.println(\"✅ Created save file!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"HollaG"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"HollaG"},"content":" System.out.println(\"⚠\\uFE0F Could not create save file!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"HollaG"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"HollaG"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"HollaG"},"content":" System.out.println(\"ERROR\");","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"HollaG"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"HollaG"},"content":" * Parses a task as is encoded in the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"HollaG"},"content":" * @param inputLine the string that was encoded","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"HollaG"},"content":" * @return The task that was parsed successfully","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"HollaG"},"content":" * @throws IOException","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"HollaG"},"content":" public static Task parseTask(String inputLine) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"HollaG"},"content":" String[] split \u003d inputLine.split(\" \\\\| \");","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"HollaG"},"content":" if (split.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"HollaG"},"content":" throw new DukeException(PARSE_ERROR);","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"HollaG"},"content":" String taskType \u003d split[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"HollaG"},"content":" String isDoneStr \u003d split[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"HollaG"},"content":" String taskDescription \u003d split[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"HollaG"},"content":" Boolean isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"HollaG"},"content":" if (Objects.equals(isDoneStr, \"1\") || Objects.equals(isDoneStr, \"0\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"HollaG"},"content":" isDone \u003d isDoneStr.equals(\"1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"HollaG"},"content":" Task task;","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"HollaG"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"HollaG"},"content":" case \"T\": {","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"HollaG"},"content":" task \u003d new TodoTask(taskDescription);","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"HollaG"},"content":" case \"D\": {","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"HollaG"},"content":" // get the deadline, which is 4th element","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"HollaG"},"content":" if (split.length \u003c 3) {","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"HollaG"},"content":" throw new DukeException(PARSE_ERROR);","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"HollaG"},"content":" String deadlineStr \u003d split[3];","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"HollaG"},"content":" LocalDateTime deadlineDateTime \u003d LocalDateTime.parse(deadlineStr);","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"HollaG"},"content":" task \u003d new DeadlineTask(taskDescription, deadlineDateTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"HollaG"},"content":" case \"E\": {","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"HollaG"},"content":" // get the start date, which is 4th element","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"HollaG"},"content":" // get the end date, which is 5th element","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"HollaG"},"content":" if (split.length \u003c 5) {","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"HollaG"},"content":" throw new DukeException(PARSE_ERROR);","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"HollaG"},"content":" String from \u003d split[3];","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"HollaG"},"content":" LocalDateTime dateTimeStart \u003d LocalDateTime.parse(from);","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"HollaG"},"content":" String to \u003d split[4];","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"HollaG"},"content":" LocalDateTime dateTimeEnd \u003d LocalDateTime.parse(to);","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"HollaG"},"content":" task \u003d new EventTask(taskDescription, dateTimeStart, dateTimeEnd);","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"HollaG"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"HollaG"},"content":" throw new DukeException(PARSE_ERROR);","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"HollaG"},"content":" if (isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"HollaG"},"content":" task.setDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"HollaG"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"HollaG":172}},{"path":"src/main/java/Duke/Tasks/Commands.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":" * Types of commands that DukeBot accepts.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"public enum Commands {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":" BYE,","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":" LIST,","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":" MARK,","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":" UNMARK,","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":" DELETE,","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":" TODO,","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":" DEADLINE,","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":" EVENT,","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":" FIND;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" * Tests to see if a string contains this enum.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" * @param test The test string","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" * @return true if is an enum","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" public static boolean contains(String test) {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" for (Commands c : Commands.values()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" if (c.name().equals(test)) {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" return true;","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":" return false;","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"HollaG":35}},{"path":"src/main/java/Duke/Tasks/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":" * Encapsulates a specific task of type Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":" * Stores the deadline as a LocalDateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":" private LocalDateTime deadlineDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":" * Constructor for a Deadline Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":" * @param itemName The name of the task","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" * @param deadlineDateTime The deadline","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" public DeadlineTask(String itemName, LocalDateTime deadlineDateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" super(itemName);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" this.deadlineDateTime \u003d deadlineDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" public String getTaskType() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" return \"D\";","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":" public String encodeTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" return super.encodeTask() + \" | \" + deadlineDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.deadlineDateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mm a\")) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"HollaG":40}},{"path":"src/main/java/Duke/Tasks/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":" * Encapsulates a specific task of type Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":" * Contains a start time, and an end time.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":" private LocalDateTime fromDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":" private LocalDateTime toDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":" * Constructor for an Event Task","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" * @param itemName The name of the task","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" * @param fromDateTime The time the event starts","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" * @param toDateTime The time the event ends","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":" public EventTask(String itemName, LocalDateTime fromDateTime, LocalDateTime toDateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" super(itemName);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":" this.fromDateTime \u003d fromDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" this.toDateTime \u003d toDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":" public String getTaskType() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":" return \"E\";","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" public String encodeTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":" return super.encodeTask() + \" | \" + this.fromDateTime + \" | \" + this.toDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":" return \"[E]\" + super.toString() +","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":" \" (from: \" + this.fromDateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mm a\")) +","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":" \" to: \" + this.toDateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mm a\")) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"HollaG":46}},{"path":"src/main/java/Duke/Tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":" * Encapsulates a basic Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":" private String itemName;","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":" * Generic constructor for a Task","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":" * @param itemName The name of the task","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":" public Task(String itemName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":" this.itemName \u003d itemName;","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" // If the object is compared with itself then return true","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":" return true;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" /* Check if o is an instance of Task or not","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" \"null instanceof [type]\" also returns false */","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" if (!(o instanceof Task)) {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":" return false;","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":" Task otherListItem \u003d (Task) o;","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" return otherListItem.itemName.equals(this.itemName) \u0026\u0026 otherListItem.isDone \u003d\u003d this.isDone;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":" * Marks the item as done.","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":" public boolean setDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":" * Marks the item as not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"HollaG"},"content":" public boolean setUnDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"HollaG"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"HollaG"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"HollaG"},"content":" * Gets an icon to represent the state of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"HollaG"},"content":" * @return a stringified icon","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"HollaG"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"HollaG"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"HollaG"},"content":" * Gets the task name.","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"HollaG"},"content":" * @return the task name","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"HollaG"},"content":" public String getName() {","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"HollaG"},"content":" return this.itemName;","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"HollaG"},"content":" * Gets the task type as a single character.","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"HollaG"},"content":" * T \u003d Todo","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"HollaG"},"content":" * D \u003d Deadline","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"HollaG"},"content":" * E \u003d Event","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"HollaG"},"content":" * @return encoded character","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"HollaG"},"content":" public abstract String getTaskType();","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"HollaG"},"content":" * Encodes the task into a formatted string to be stored in a database","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"HollaG"},"content":" public String encodeTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"HollaG"},"content":" return this.getTaskType() + \" | \" + (this.isDone ? \"1\" : \"0\") + \" | \" + this.itemName;","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"HollaG"},"content":" * Prints the task, formatted","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":93,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"HollaG"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"HollaG"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.itemName;","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":98,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"HollaG":98}},{"path":"src/main/java/Duke/Tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"import java.util.List;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"import java.util.Optional;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":" * Stores the list of tasks that the user has.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":" * Provides additional methods for operating on the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"public class TaskList {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":" private ArrayList\u003cOptional\u003cTask\u003e\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":" * The constructor for a basic TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" * @param tasks The default tasks (if any) this should be initialised to","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" public TaskList(ArrayList\u003cOptional\u003cTask\u003e\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" this.list \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" * Adds an item to the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" * @param task The user\u0027s task","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" public void addToList(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":" list.add(Optional.of(task));","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" * Removes an item from the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":" * Indexes start from 1, not zero","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":" * @param index the index of the task to remove.","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" * @return the task that was removed","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":" public Optional\u003cTask\u003e removeFromList(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":" Optional\u003cTask\u003e task \u003d list.get(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":" list.remove(index - 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"HollaG"},"content":" * Marks a specific task in the list as done.","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"HollaG"},"content":" * Indexes start from 1, not 0","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"HollaG"},"content":" * @param index","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"HollaG"},"content":" * @return the task that was modified","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"HollaG"},"content":" public Optional\u003cTask\u003e markAsDone(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"HollaG"},"content":" Optional\u003cTask\u003e task \u003d list.get(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"HollaG"},"content":" task.ifPresent((t) -\u003e t.setDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"HollaG"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"HollaG"},"content":" * Marks a specific task in the list as undone.","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"HollaG"},"content":" * Indexes start from 1, not 0","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"HollaG"},"content":" * @param index","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"HollaG"},"content":" * @return the task that was modified","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"HollaG"},"content":" public Optional\u003cTask\u003e markAsUnDone(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"HollaG"},"content":" Optional\u003cTask\u003e task \u003d list.get(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"HollaG"},"content":" task.ifPresent((t) -\u003e t.setUnDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"HollaG"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"HollaG"},"content":" * Gets the number of non-null tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"HollaG"},"content":" * @return integer representing the size","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"HollaG"},"content":" public int getSize() {","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"HollaG"},"content":" return this.list.stream().filter(Optional::isPresent).collect(Collectors.toList()).size();","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"HollaG"},"content":" * Encodes the current Duke. Tasks in a string, each task separated by a newline.","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"HollaG"},"content":" * @return String representation","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"HollaG"},"content":" public String serialize() {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"HollaG"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"HollaG"},"content":" for (int i \u003d 0; i \u003c this.list.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"HollaG"},"content":" Optional\u003cTask\u003e task \u003d this.list.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"HollaG"},"content":" task.ifPresent((t) -\u003e stringBuilder.append(t.encodeTask()));","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"HollaG"},"content":" stringBuilder.append(\"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"HollaG"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"HollaG"},"content":" * Finds the tasks that match the provided search string.","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"HollaG"},"content":" * @param searchString the string to match","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"HollaG"},"content":" * @return tasks whose name contains the search string.","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"HollaG"},"content":" public ArrayList\u003cOptional\u003cTask\u003e\u003e findTasksByName(String searchString) {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"HollaG"},"content":" List\u003cOptional\u003cTask\u003e\u003e filtered \u003d this.list.stream().map(Optional::get)","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"HollaG"},"content":" .map(a -\u003e a.getName().contains(searchString) ? a : null)","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"HollaG"},"content":" .map(Optional::ofNullable)","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"HollaG"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"HollaG"},"content":" return new ArrayList\u003c\u003e(filtered);","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":117,"author":{"gitId":"HollaG"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":118,"author":{"gitId":"HollaG"},"content":" StringBuilder resultMsg \u003d new StringBuilder();","lastModifiedDate":"2023-08-23"},{"lineNumber":119,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":120,"author":{"gitId":"HollaG"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-23"},{"lineNumber":121,"author":{"gitId":"HollaG"},"content":" Optional\u003cTask\u003e task \u003d list.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"HollaG"},"content":" int finalI \u003d i;","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"HollaG"},"content":" task.ifPresent((t) -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"HollaG"},"content":" resultMsg.append(finalI + 1).append(\". \").append(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":126,"author":{"gitId":"HollaG"},"content":" resultMsg.append(\"\\n\");","lastModifiedDate":"2023-08-23"},{"lineNumber":127,"author":{"gitId":"HollaG"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":130,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":131,"author":{"gitId":"HollaG"},"content":" return resultMsg.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":132,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":133,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":134,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"HollaG":134}},{"path":"src/main/java/Duke/Tasks/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":" * Encapsulates a specific task of type Todo.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":" * Does not have any special characteristics.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"public class TodoTask extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":" * Constructor for a Todo task","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":" * @param itemName The name of the Todo","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":" public TodoTask(String itemName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":" super(itemName);","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" public String getTaskType() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" return \"T\";","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"HollaG":28}},{"path":"src/main/java/Duke/UI/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package Duke.UI;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import Duke.Parser.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"import Duke.Storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"import Duke.Tasks.Commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"import Duke.Tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"import Duke.Tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"import java.util.Optional;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":" * Controls any user interaction with the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":" * Examples: text output, error messages","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" private static final String SEPARATOR_LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" * Constructor for an Ui handler.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" * @param taskList","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" public Ui(TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":" * Begins interaction with the user","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":" public void beginLogging() {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":" printDivider();","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" String entranceMsg \u003d \"Hello! I\u0027m Elon Musk.\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":" \"What can I do for you?\";","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":" System.out.println(entranceMsg);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":" printDivider();","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":" String inputString \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"HollaG"},"content":" Scanner keyboard \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"HollaG"},"content":" loop:","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"HollaG"},"content":" while (true) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"HollaG"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"HollaG"},"content":" inputString \u003d keyboard.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"HollaG"},"content":" printDivider();","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"HollaG"},"content":" boolean canContinue \u003d Parser.parse(inputString, taskList, storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"HollaG"},"content":" if (!canContinue) {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"HollaG"},"content":" printDivider();","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"HollaG"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"HollaG"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"HollaG"},"content":" * Prints feedback to the user on what and how a Task got modified,","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"HollaG"},"content":" * based on the user\u0027s command.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"HollaG"},"content":" * @param command","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"HollaG"},"content":" public static void printResult(Commands command, Optional\u003cTask\u003e task, TaskList taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"HollaG"},"content":" switch (command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"HollaG"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"HollaG"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"HollaG"},"content":" case EVENT: {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"HollaG"},"content":" task.ifPresent(t -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"HollaG"},"content":" System.out.println(\"\\uD83D\\uDE0A I\u0027ve added a new task: \" + t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"HollaG"},"content":" System.out.println(\"Now you have \" + taskList.getSize() + \" tasks!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"HollaG"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"HollaG"},"content":" case MARK: {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"HollaG"},"content":" task.ifPresent(t -\u003e System.out.println(\"Nice! I\u0027ve marked this task as done: \\n \" + t.toString()));","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"HollaG"},"content":" case UNMARK: {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"HollaG"},"content":" task.ifPresent(t -\u003e System.out.println(\"Nice! I\u0027ve marked this task as undone: \\n \" + t.toString()));","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"HollaG"},"content":" case DELETE: {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"HollaG"},"content":" task.ifPresent(t -\u003e System.out.println(\"\\uD83D\\uDE0A I\u0027ve removed this task: \" + t.toString()));","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"HollaG"},"content":" case LIST: {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"HollaG"},"content":" System.out.println(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"HollaG"},"content":" case FIND: {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"HollaG"},"content":" if (taskList.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"HollaG"},"content":" System.out.println(\"Couldn\u0027t find any matching tasks!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"HollaG"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"HollaG"},"content":" System.out.println(\"I found \" + taskList.getSize() + \" matching tasks:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"HollaG"},"content":" System.out.println(taskList.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"HollaG"},"content":" case BYE: {","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"HollaG"},"content":" String exitMsg \u003d \"Bye! Hope to see you again soon.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"HollaG"},"content":" System.out.println(exitMsg);","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"HollaG"},"content":" * Prints a simple divider line to the screen.","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"HollaG"},"content":" public static void printDivider() {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"HollaG"},"content":" System.out.println(SEPARATOR_LINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"HollaG":126}},{"path":"src/test/java/Duke/Parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package Duke.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"HollaG":8}},{"path":"src/test/java/Duke/Storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package Duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import Duke.Duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"import Duke.Exceptions.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"import Duke.Tasks.EventTask;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"import Duke.Tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"import Duke.Tasks.TodoTask;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" * Single line import","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" * @throws IOException","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" public void testParsing1() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":" String inputString \u003d \"E | 1 | hello! | 2023-01-01T09:30 | 2023-02-02T15:30\";","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" Task expectedTask \u003d new EventTask(\"hello!\",","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" LocalDateTime.parse(\"2023-01-01T09:30\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":" LocalDateTime.parse(\"2023-02-02T15:30\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" expectedTask.setDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":" Task actualTask \u003d Storage.parseTask(inputString);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":" assertEquals(expectedTask.toString(), actualTask.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" public void testParsing2() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":" String inputString \u003d \"T | 0 | hello!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":" Task expectedTask \u003d new TodoTask(\"hello!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" Task actualTask \u003d Storage.parseTask(inputString);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":" assertEquals(expectedTask.toString(), actualTask.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":" public void testParsing3() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":" String inputString \u003d \"E | 1 | hello! | 2023-01-01T09:30\";","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"HollaG"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"HollaG"},"content":" Storage.parseTask(inputString);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"HollaG"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"HollaG"},"content":" String expectedMessage \u003d \"Invalid file format!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"HollaG"},"content":" String actualMessage \u003d exception.getMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"HollaG"},"content":" assertEquals(expectedMessage, actualMessage);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"HollaG":59}},{"path":"src/test/java/Duke/UI/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package Duke.UI;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":"public class UiTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":" @BeforeEach","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" public void setUp() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" public void testPrintList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":" TaskList taskList \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":" Task task1 \u003d new TodoTask(\"Task1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" Task task2 \u003d new EventTask(\"Task2\", LocalDateTime.now(), LocalDateTime.now());","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" Task task3 \u003d new DeadlineTask(\"Task3\", LocalDateTime.now());","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":" taskList.addToList(task1);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" taskList.addToList(task2);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":" taskList.addToList(task3);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" Ui.printResult(Commands.LIST, null, taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":" assertEquals(taskList.toString().trim(), outputStreamCaptor.toString().trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":" public void testMarkDoneAndUndone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" TaskList taskList \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":" Task task1 \u003d new TodoTask(\"Task1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":" Task task2 \u003d new EventTask(\"Task2\", LocalDateTime.now(), LocalDateTime.now());","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":" Task task3 \u003d new DeadlineTask(\"Task3\", LocalDateTime.now());","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":" taskList.addToList(task1);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"HollaG"},"content":" taskList.addToList(task2);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"HollaG"},"content":" taskList.addToList(task3);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"HollaG"},"content":" taskList.markAsDone(2);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"HollaG"},"content":" taskList.markAsUnDone(2);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"HollaG"},"content":" taskList.markAsDone(3);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"HollaG"},"content":" Ui.printResult(Commands.LIST, null, taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"HollaG"},"content":" assertEquals(taskList.toString().trim(), outputStreamCaptor.toString().trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"HollaG":59}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"todo live happy","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"todo live happier","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"deadline submit chatbot /by Thursday","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"event go to CS2103T lecture /from Friday 4pm /to Friday 6pm","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":"delete 3","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"HollaG":12}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"if exist .\\text-ui-test\\ACTUAL.TXT del .\\text-ui-test\\ACTUAL.TXT","lastModifiedDate":"2023-08-23"},{"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":"HollaG"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin .\\src\\main\\java\\*.java .\\src\\main\\java\\Duke.Tasks\\*.java","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":"java -classpath ..\\bin Duke.Duke \u003c .\\text-ui-test\\input.txt \u003e .\\text-ui-test\\ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":"FC .\\text-ui-test\\ACTUAL.TXT .\\text-ui-test\\EXPECTED.TXT","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"HollaG":6,"-":17}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"# duke.duke project template","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":"3. After that, locate the `src/main/java/duke.duke.java` file, right-click it, and choose `Run duke.duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"HollaG":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":"HollaG"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":"checkstyle {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" mainClass.set(\"Duke.Duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"HollaG":6,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"T | 0 | hello","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"T | 1 | die","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"T | 0 | thrill","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"HollaG":3}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":" * Contains the Duke Chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":" * @author Marcus Soh","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":"public class Duke {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" private static final Path SAVE_FILE_LOCATION \u003d Paths.get(\"data\", \"duke.txt\");","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" private TaskList listContainer \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" * Constructor for our chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" * @param filePath Specifies where the save file to store previous information is to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" Storage storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" this.listContainer \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":" ui \u003d new Ui(this.listContainer, storage);","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" System.out.println(e.getErrorMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":" * Begins the chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":" private void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":" ui.beginLogging();","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"HollaG"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"HollaG"},"content":" new Duke(String.valueOf(SAVE_FILE_LOCATION)).run();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"HollaG":51}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":" * Contains the main Custom Exception for DukeBot.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":" * Constructor for the Exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":" * @param message the error message","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" * Returns the error message for this exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" * @return","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" public String getErrorMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":" return getMessage();","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"HollaG":27}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package duke.parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import static duke.ui.Ui.printResult;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"import java.util.Optional;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":"import duke.tasks.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":"import duke.tasks.DeadlineTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":"import duke.tasks.EventTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":"import duke.tasks.TodoTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":" * Controls the parsing of commands and arguments entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" private static final String UNKNOWN_COMMAND \u003d \"\\uD83D\\uDE21 This command is not something I can handle!\";","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" private static final String NAME_EMPTY \u003d \"\\uD83D\\uDE21 Your item name cannot be empty!\";","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":" private static final String DEADLINE_EMPTY \u003d \"\\uD83D\\uDE21 Missing deadline!\";","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" private static final String FROM_EMPTY \u003d \"\\uD83D\\uDE21 Missing from!\";","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":" private static final String TO_EMPTY \u003d \"\\uD83D\\uDE21 Missing to!\";","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":" private static final String TIME_FORMAT_ERROR \u003d \"\\uD83D\\uDE21 Time format invalid!\";","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" private static final String INVALID_DATE_FORMAT \u003d \"\\uD83D\\uDE21 Invalid date format! Try using YYYY-MM-DD\";","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" private static final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":" * Parses the input string by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":" * @param inputString The input string entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":" * @param taskList The list of tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":" * @param storage The storage object that handles saving updates.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":" * @return true if the program can continue, false if the program has to halt.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"HollaG"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"HollaG"},"content":" public static boolean parse(String inputString, TaskList taskList, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"HollaG"},"content":" String inputCommandString \u003d (inputString.split(\" \")[0].toUpperCase());","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"HollaG"},"content":" if (!Commands.contains(inputCommandString)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"HollaG"},"content":" throw new DukeException(UNKNOWN_COMMAND);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"HollaG"},"content":" Commands inputCommand \u003d Commands.valueOf(inputCommandString);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"HollaG"},"content":" boolean canContinue;","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"HollaG"},"content":" switch (inputCommand) {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"HollaG"},"content":" case BYE: {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, null, taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"HollaG"},"content":" canContinue \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"HollaG"},"content":" case LIST: {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, null, taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"HollaG"},"content":" canContinue \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"HollaG"},"content":" case MARK: {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"HollaG"},"content":" // check if is number","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"HollaG"},"content":" int index \u003d Integer.parseInt(inputString.split(\" \")[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"HollaG"},"content":" Optional\u003cTask\u003e markedTask \u003d taskList.markAsDone(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, markedTask, taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"HollaG"},"content":" canContinue \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"HollaG"},"content":" case UNMARK: {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"HollaG"},"content":" int index \u003d Integer.parseInt(inputString.split(\" \")[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"HollaG"},"content":" Optional\u003cTask\u003e unmarkedTask \u003d taskList.markAsUnDone(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, (unmarkedTask), taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"HollaG"},"content":" canContinue \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"HollaG"},"content":" case DELETE: {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"HollaG"},"content":" int index \u003d Integer.parseInt(inputString.split(\" \")[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"HollaG"},"content":" Optional\u003cTask\u003e removedTask \u003d taskList.removeFromList(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, removedTask, taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"HollaG"},"content":" canContinue \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"HollaG"},"content":" case TODO: {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"HollaG"},"content":" // add a todo","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"HollaG"},"content":" String itemName \u003d inputString.replace(\"todo \", \"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"HollaG"},"content":" if (itemName.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"HollaG"},"content":" // no item name","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"HollaG"},"content":" throw new DukeException(NAME_EMPTY);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"HollaG"},"content":" TodoTask todoTask \u003d new TodoTask(itemName);","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"HollaG"},"content":" taskList.addToList(todoTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, Optional.of(todoTask), taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"HollaG"},"content":" canContinue \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"HollaG"},"content":" case DEADLINE: {","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"HollaG"},"content":" // format of entry: \"deadline return book /by Sunday\"","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"HollaG"},"content":" String itemName \u003d inputString.replace(\"deadline \", \"\").split(\" /by \")[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"HollaG"},"content":" if (itemName.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"HollaG"},"content":" // no item name","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"HollaG"},"content":" throw new DukeException(NAME_EMPTY);","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"HollaG"},"content":" String[] inputArgs \u003d inputString.replace(\"deadline \", \"\").split(\" /by \");","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"HollaG"},"content":" if (inputArgs.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"HollaG"},"content":" // missing deadline","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"HollaG"},"content":" throw new DukeException(DEADLINE_EMPTY);","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"HollaG"},"content":" String deadline \u003d inputArgs[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"HollaG"},"content":" if (deadline.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"HollaG"},"content":" // no item name","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"HollaG"},"content":" throw new DukeException(DEADLINE_EMPTY);","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"HollaG"},"content":" // parse the deadline - should be a LocalDate format","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"HollaG"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"HollaG"},"content":" LocalDateTime deadlineDateTime \u003d LocalDateTime.parse(deadline, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"HollaG"},"content":" DeadlineTask deadlineTask \u003d new DeadlineTask(itemName, deadlineDateTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"HollaG"},"content":" taskList.addToList(deadlineTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, Optional.of(deadlineTask), taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"HollaG"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"HollaG"},"content":" throw new DukeException(INVALID_DATE_FORMAT);","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"HollaG"},"content":" canContinue \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"HollaG"},"content":" case EVENT: {","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"HollaG"},"content":" String inputArgs \u003d inputString.replace(\"event \", \"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"HollaG"},"content":" // sample format: event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"HollaG"},"content":" // get the name","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"HollaG"},"content":" String itemName \u003d inputArgs.split(\" /from \")[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"HollaG"},"content":" if (itemName.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"HollaG"},"content":" // no item name","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"HollaG"},"content":" throw new DukeException(NAME_EMPTY);","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"HollaG"},"content":" // get the \u0027from...to\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"HollaG"},"content":" // @see https://stackoverflow.com/questions/4662215/how-to-extract-a-substring-using-regex","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"HollaG"},"content":" Pattern patternFrom \u003d Pattern.compile(\"(/from )(.*?)( /to)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"HollaG"},"content":" Matcher matcherFrom \u003d patternFrom.matcher(inputArgs);","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"HollaG"},"content":" String from \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"HollaG"},"content":" if (matcherFrom.find()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"HollaG"},"content":" // yes, formatted correctly","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"HollaG"},"content":" from \u003d matcherFrom.group(2);","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"HollaG"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"HollaG"},"content":" throw new DukeException(FROM_EMPTY);","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"HollaG"},"content":" // parse the \u0027from\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"HollaG"},"content":" LocalDateTime dateTimeFrom \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"HollaG"},"content":" // get the to...","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"HollaG"},"content":" String to \u003d inputArgs.split(\"/to \")[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"HollaG"},"content":" if (to.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"HollaG"},"content":" throw new DukeException(TO_EMPTY);","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"HollaG"},"content":" // parse the \u0027to\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"HollaG"},"content":" LocalDateTime dateTimeTo \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"HollaG"},"content":" EventTask eventTask \u003d new EventTask(itemName, dateTimeFrom, dateTimeTo);","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"HollaG"},"content":" taskList.addToList(eventTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, Optional.of(eventTask), taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"HollaG"},"content":" canContinue \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"HollaG"},"content":" case FIND: {","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"HollaG"},"content":" String searchString \u003d inputString.replace(\"find \", \"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"HollaG"},"content":" ArrayList\u003cOptional\u003cTask\u003e\u003e filtered \u003d taskList.findTasksByName(searchString);","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"HollaG"},"content":" printResult(inputCommand, null, new TaskList(filtered));","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"HollaG"},"content":" canContinue \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"HollaG"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"HollaG"},"content":" throw new DukeException(UNKNOWN_COMMAND);","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"HollaG"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"HollaG"},"content":" return canContinue;","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"HollaG":219}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package duke.storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"import java.util.Optional;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":"import duke.tasks.DeadlineTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":"import duke.tasks.EventTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":"import duke.tasks.TodoTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":" * Controls the storage and retrieving of saved data on the hard disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" private static final String PARSE_ERROR \u003d \"Invalid file format!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":" private String filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":" * Constructor for the Storage controller.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":" * @param filePath The filepath of the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":" * Saves the specified list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":" public void saveTasks(TaskList taskList) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":" String serialized \u003d taskList.serialize();","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"HollaG"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"HollaG"},"content":" // create file if not exists","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"HollaG"},"content":" // write to file","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"HollaG"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"HollaG"},"content":" fileWriter.write(serialized);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"HollaG"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"HollaG"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"HollaG"},"content":" throw new DukeException(\"Error saving file! \\n\" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"HollaG"},"content":" * Loads the list of tasks that a user has previously entered.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"HollaG"},"content":" * @return a list of tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"HollaG"},"content":" public ArrayList\u003cOptional\u003cTask\u003e\u003e load() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"HollaG"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"HollaG"},"content":" Path path \u003d Path.of(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"HollaG"},"content":" if (Files.notExists(path)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"HollaG"},"content":" // create the directory","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"HollaG"},"content":" System.out.println(\"Directory not present, creating...\");","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"HollaG"},"content":" Files.createDirectory(path.getParent());","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"HollaG"},"content":" if (Files.exists(path)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"HollaG"},"content":" System.out.println(\"Save file already exists, loading previous data\");","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"HollaG"},"content":" // it exists, so let\u0027s read it","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"HollaG"},"content":" Scanner sc \u003d new Scanner(path);","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"HollaG"},"content":" ArrayList\u003cOptional\u003cTask\u003e\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"HollaG"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"HollaG"},"content":" String inputLine \u003d sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"HollaG"},"content":" if (inputLine.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"HollaG"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"HollaG"},"content":" Task task \u003d parseTask(inputLine);","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"HollaG"},"content":" tasks.add(Optional.of(task));","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"HollaG"},"content":" return tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"HollaG"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"HollaG"},"content":" File saveFile \u003d new File(String.valueOf(path));","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"HollaG"},"content":" if (saveFile.createNewFile()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"HollaG"},"content":" System.out.println(\"✅ Created save file!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"HollaG"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"HollaG"},"content":" System.out.println(\"⚠\\uFE0F Could not create save file!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"HollaG"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"HollaG"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"HollaG"},"content":" System.out.println(\"ERROR\");","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"HollaG"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"HollaG"},"content":" * Parses a task as is encoded in the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"HollaG"},"content":" * @param inputLine the string that was encoded","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"HollaG"},"content":" * @return The task that was parsed successfully","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"HollaG"},"content":" * @throws IOException","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"HollaG"},"content":" public static Task parseTask(String inputLine) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"HollaG"},"content":" String[] split \u003d inputLine.split(\" \\\\| \");","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"HollaG"},"content":" if (split.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"HollaG"},"content":" throw new DukeException(PARSE_ERROR);","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"HollaG"},"content":" String taskType \u003d split[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"HollaG"},"content":" String isDoneStr \u003d split[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"HollaG"},"content":" String taskDescription \u003d split[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"HollaG"},"content":" Boolean isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"HollaG"},"content":" if (Objects.equals(isDoneStr, \"1\") || Objects.equals(isDoneStr, \"0\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"HollaG"},"content":" isDone \u003d isDoneStr.equals(\"1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"HollaG"},"content":" Task task;","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"HollaG"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"HollaG"},"content":" case \"T\": {","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"HollaG"},"content":" task \u003d new TodoTask(taskDescription);","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"HollaG"},"content":" case \"D\": {","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"HollaG"},"content":" // get the deadline, which is 4th element","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"HollaG"},"content":" if (split.length \u003c 3) {","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"HollaG"},"content":" throw new DukeException(PARSE_ERROR);","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"HollaG"},"content":" String deadlineStr \u003d split[3];","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"HollaG"},"content":" LocalDateTime deadlineDateTime \u003d LocalDateTime.parse(deadlineStr);","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"HollaG"},"content":" task \u003d new DeadlineTask(taskDescription, deadlineDateTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"HollaG"},"content":" case \"E\": {","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"HollaG"},"content":" // get the start date, which is 4th element","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"HollaG"},"content":" // get the end date, which is 5th element","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"HollaG"},"content":" if (split.length \u003c 5) {","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"HollaG"},"content":" throw new DukeException(PARSE_ERROR);","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"HollaG"},"content":" String from \u003d split[3];","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"HollaG"},"content":" LocalDateTime dateTimeStart \u003d LocalDateTime.parse(from);","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"HollaG"},"content":" String to \u003d split[4];","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"HollaG"},"content":" LocalDateTime dateTimeEnd \u003d LocalDateTime.parse(to);","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"HollaG"},"content":" task \u003d new EventTask(taskDescription, dateTimeStart, dateTimeEnd);","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"HollaG"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"HollaG"},"content":" throw new DukeException(PARSE_ERROR);","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"HollaG"},"content":" if (isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"HollaG"},"content":" task.setDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"HollaG"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"HollaG":179}},{"path":"src/main/java/duke/tasks/Commands.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":" * Types of commands that DukeBot accepts.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"public enum Commands {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":" BYE,","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":" LIST,","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":" MARK,","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":" UNMARK,","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":" DELETE,","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":" TODO,","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":" DEADLINE,","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":" EVENT,","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":" FIND;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" * Tests to see if a string contains this enum.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" * @param test The test string","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" * @return true if is an enum","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" public static boolean contains(String test) {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" for (Commands c : Commands.values()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" if (c.name().equals(test)) {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" return true;","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":" return false;","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"HollaG":35}},{"path":"src/main/java/duke/tasks/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":" * Encapsulates a specific task of type Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":" * Stores the deadline as a LocalDateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":" private LocalDateTime deadlineDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":" * Constructor for a Deadline Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":" * @param itemName The name of the task","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" * @param deadlineDateTime The deadline","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" public DeadlineTask(String itemName, LocalDateTime deadlineDateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" super(itemName);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" this.deadlineDateTime \u003d deadlineDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" public String getTaskType() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" return \"D\";","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":" public String encodeTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" return super.encodeTask() + \" | \" + deadlineDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" return \"[D]\"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":" + super.toString()","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" + \" (by: \" + this.deadlineDateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mm a\")) + \")\";","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"HollaG":42}},{"path":"src/main/java/duke/tasks/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":" * Encapsulates a specific task of type Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":" * Contains a start time, and an end time.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":" private LocalDateTime fromDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":" private LocalDateTime toDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":" * Constructor for an Event Task","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" * @param itemName The name of the task","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" * @param fromDateTime The time the event starts","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" * @param toDateTime The time the event ends","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":" public EventTask(String itemName, LocalDateTime fromDateTime, LocalDateTime toDateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" super(itemName);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":" this.fromDateTime \u003d fromDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" this.toDateTime \u003d toDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":" public String getTaskType() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":" return \"E\";","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" public String encodeTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":" return super.encodeTask() + \" | \" + this.fromDateTime + \" | \" + this.toDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":" + \" (from: \" + this.fromDateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mm a\"))","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":" + \" to: \" + this.toDateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mm a\")) + \")\";","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"HollaG":46}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":" * Encapsulates a basic Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":" private String itemName;","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":" * Generic constructor for a Task","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":" * @param itemName The name of the task","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":" public Task(String itemName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":" this.itemName \u003d itemName;","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" // If the object is compared with itself then return true","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":" return true;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" /* Check if o is an instance of Task or not","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" \"null instanceof [type]\" also returns false */","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" if (!(o instanceof Task)) {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":" return false;","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":" Task otherListItem \u003d (Task) o;","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" return otherListItem.itemName.equals(this.itemName) \u0026\u0026 otherListItem.isDone \u003d\u003d this.isDone;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":" * Marks the item as done.","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":" public boolean setDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":" * Marks the item as not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"HollaG"},"content":" public boolean setUnDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"HollaG"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"HollaG"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"HollaG"},"content":" * Gets an icon to represent the state of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"HollaG"},"content":" * @return a stringified icon","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"HollaG"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"HollaG"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"HollaG"},"content":" * Gets the task name.","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"HollaG"},"content":" * @return the task name","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"HollaG"},"content":" public String getName() {","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"HollaG"},"content":" return this.itemName;","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"HollaG"},"content":" * Gets the task type as a single character.","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"HollaG"},"content":" * T \u003d Todo","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"HollaG"},"content":" * D \u003d Deadline","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"HollaG"},"content":" * E \u003d Event","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"HollaG"},"content":" * @return encoded character","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"HollaG"},"content":" public abstract String getTaskType();","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"HollaG"},"content":" * Encodes the task into a formatted string to be stored in a database","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"HollaG"},"content":" public String encodeTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"HollaG"},"content":" return this.getTaskType() + \" | \" + (this.isDone ? \"1\" : \"0\") + \" | \" + this.itemName;","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"HollaG"},"content":" * Prints the task, formatted","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":93,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"HollaG"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"HollaG"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.itemName;","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":98,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"HollaG":98}},{"path":"src/main/java/duke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"import java.util.List;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"import java.util.Optional;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":" * Stores the list of tasks that the user has.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":" * Provides additional methods for operating on the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"public class TaskList {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":" private ArrayList\u003cOptional\u003cTask\u003e\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":" * The constructor for a basic TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" * @param tasks The default tasks (if any) this should be initialised to","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" public TaskList(ArrayList\u003cOptional\u003cTask\u003e\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" this.list \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" * Adds an item to the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" * @param task The user\u0027s task","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" public void addToList(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":" list.add(Optional.of(task));","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" * Removes an item from the list.","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":" * Indexes start from 1, not zero","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":" * @param index the index of the task to remove.","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" * @return the task that was removed","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":" public Optional\u003cTask\u003e removeFromList(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":" Optional\u003cTask\u003e task \u003d list.get(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":" list.remove(index - 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"HollaG"},"content":" * Marks a specific task in the list as done.","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"HollaG"},"content":" * Indexes start from 1, not 0","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"HollaG"},"content":" * @param index","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"HollaG"},"content":" * @return the task that was modified","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"HollaG"},"content":" public Optional\u003cTask\u003e markAsDone(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"HollaG"},"content":" Optional\u003cTask\u003e task \u003d list.get(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"HollaG"},"content":" task.ifPresent((t) -\u003e t.setDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"HollaG"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"HollaG"},"content":" * Marks a specific task in the list as undone.","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"HollaG"},"content":" * Indexes start from 1, not 0","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"HollaG"},"content":" * @param index","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"HollaG"},"content":" * @return the task that was modified","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"HollaG"},"content":" public Optional\u003cTask\u003e markAsUnDone(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"HollaG"},"content":" Optional\u003cTask\u003e task \u003d list.get(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"HollaG"},"content":" task.ifPresent((t) -\u003e t.setUnDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"HollaG"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"HollaG"},"content":" * Gets the number of non-null tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"HollaG"},"content":" * @return integer representing the size","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"HollaG"},"content":" public int getSize() {","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"HollaG"},"content":" return this.list.stream().filter(Optional::isPresent).collect(Collectors.toList()).size();","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"HollaG"},"content":" * Encodes the current Duke. Tasks in a string, each task separated by a newline.","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"HollaG"},"content":" * @return String representation","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"HollaG"},"content":" public String serialize() {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"HollaG"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"HollaG"},"content":" for (int i \u003d 0; i \u003c this.list.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"HollaG"},"content":" Optional\u003cTask\u003e task \u003d this.list.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"HollaG"},"content":" task.ifPresent((t) -\u003e stringBuilder.append(t.encodeTask()));","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"HollaG"},"content":" stringBuilder.append(\"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"HollaG"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"HollaG"},"content":" * Finds the tasks that match the provided search string.","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"HollaG"},"content":" * @param searchString the string to match","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"HollaG"},"content":" * @return tasks whose name contains the search string.","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"HollaG"},"content":" public ArrayList\u003cOptional\u003cTask\u003e\u003e findTasksByName(String searchString) {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"HollaG"},"content":" List\u003cOptional\u003cTask\u003e\u003e filtered \u003d this.list.stream().map(Optional::get)","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"HollaG"},"content":" .map(a -\u003e a.getName().contains(searchString) ? a : null)","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"HollaG"},"content":" .map(Optional::ofNullable)","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"HollaG"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"HollaG"},"content":" return new ArrayList\u003c\u003e(filtered);","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":117,"author":{"gitId":"HollaG"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":118,"author":{"gitId":"HollaG"},"content":" StringBuilder resultMsg \u003d new StringBuilder();","lastModifiedDate":"2023-08-23"},{"lineNumber":119,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":120,"author":{"gitId":"HollaG"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-23"},{"lineNumber":121,"author":{"gitId":"HollaG"},"content":" Optional\u003cTask\u003e task \u003d list.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"HollaG"},"content":" int finalI \u003d i;","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"HollaG"},"content":" task.ifPresent((t) -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"HollaG"},"content":" resultMsg.append(finalI + 1).append(\". \").append(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":126,"author":{"gitId":"HollaG"},"content":" resultMsg.append(\"\\n\");","lastModifiedDate":"2023-08-23"},{"lineNumber":127,"author":{"gitId":"HollaG"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":130,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":131,"author":{"gitId":"HollaG"},"content":" return resultMsg.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":132,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":133,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":134,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"HollaG":134}},{"path":"src/main/java/duke/tasks/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":" * Encapsulates a specific task of type Todo.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":" * Does not have any special characteristics.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"public class TodoTask extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":" * Constructor for a Todo task","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":" * @param itemName The name of the Todo","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":" public TodoTask(String itemName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":" super(itemName);","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" public String getTaskType() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" return \"T\";","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"HollaG":28}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package duke.ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import java.util.Optional;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"import duke.tasks.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":" * Controls any user interaction with the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":" * Examples: text output, error messages","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" private static final String SEPARATOR_LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":" * Constructor for an Ui handler.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":" * @param taskList","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" public Ui(TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":" * Begins interaction with the user","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" public void beginLogging() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" printDivider();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":" String entranceMsg \u003d \"Hello! I\u0027m Elon Musk.\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" + \"What can I do for you?\";","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":" System.out.println(entranceMsg);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":" printDivider();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":" String inputString \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":" Scanner keyboard \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"HollaG"},"content":" loop:","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"HollaG"},"content":" while (true) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"HollaG"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"HollaG"},"content":" inputString \u003d keyboard.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"HollaG"},"content":" printDivider();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"HollaG"},"content":" boolean canContinue \u003d Parser.parse(inputString, taskList, storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"HollaG"},"content":" if (!canContinue) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"HollaG"},"content":" printDivider();","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"HollaG"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"HollaG"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"HollaG"},"content":" * Prints feedback to the user on what and how a Task got modified,","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"HollaG"},"content":" * based on the user\u0027s command.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"HollaG"},"content":" * @param command","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"HollaG"},"content":" public static void printResult(Commands command, Optional\u003cTask\u003e task, TaskList taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"HollaG"},"content":" switch (command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"HollaG"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"HollaG"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"HollaG"},"content":" case EVENT: {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"HollaG"},"content":" task.ifPresent(t -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"HollaG"},"content":" System.out.println(\"\\uD83D\\uDE0A I\u0027ve added a new task: \" + t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"HollaG"},"content":" System.out.println(\"Now you have \" + taskList.getSize() + \" tasks!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"HollaG"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"HollaG"},"content":" case MARK: {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"HollaG"},"content":" task.ifPresent(t -\u003e System.out.println(\"Nice! I\u0027ve marked this task as done: \\n \" + t.toString()));","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"HollaG"},"content":" case UNMARK: {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"HollaG"},"content":" task.ifPresent(t -\u003e System.out.println(\"Nice! I\u0027ve marked this task as undone: \\n \" + t.toString()));","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"HollaG"},"content":" case DELETE: {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"HollaG"},"content":" task.ifPresent(t -\u003e System.out.println(\"\\uD83D\\uDE0A I\u0027ve removed this task: \" + t.toString()));","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"HollaG"},"content":" case LIST: {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"HollaG"},"content":" System.out.println(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"HollaG"},"content":" case FIND: {","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"HollaG"},"content":" if (taskList.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"HollaG"},"content":" System.out.println(\"Couldn\u0027t find any matching tasks!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"HollaG"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"HollaG"},"content":" System.out.println(\"I found \" + taskList.getSize() + \" matching tasks:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"HollaG"},"content":" System.out.println(taskList.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"HollaG"},"content":" case BYE: {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"HollaG"},"content":" String exitMsg \u003d \"Bye! Hope to see you again soon.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"HollaG"},"content":" System.out.println(exitMsg);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"HollaG"},"content":" default: {","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"HollaG"},"content":" System.out.println(\"Unhandled enum error!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"HollaG"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"HollaG"},"content":" * Prints a simple divider line to the screen.","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"HollaG"},"content":" public static void printDivider() {","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"HollaG"},"content":" System.out.println(SEPARATOR_LINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"HollaG":130}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package duke.parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"HollaG":5}},{"path":"src/test/java/duke/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package duke.storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"import duke.tasks.EventTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":"import duke.tasks.TodoTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":" * Single line import","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":" * @throws IOException","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":" public void testParsing1() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" String inputString \u003d \"E | 1 | hello! | 2023-01-01T09:30 | 2023-02-02T15:30\";","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" Task expectedTask \u003d new EventTask(\"hello!\",","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" LocalDateTime.parse(\"2023-01-01T09:30\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" LocalDateTime.parse(\"2023-02-02T15:30\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":" expectedTask.setDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" Task actualTask \u003d Storage.parseTask(inputString);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":" assertEquals(expectedTask.toString(), actualTask.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":" public void testParsing2() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" String inputString \u003d \"T | 0 | hello!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" Task expectedTask \u003d new TodoTask(\"hello!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":" Task actualTask \u003d Storage.parseTask(inputString);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" assertEquals(expectedTask.toString(), actualTask.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":" public void testParsing3() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":" String inputString \u003d \"E | 1 | hello! | 2023-01-01T09:30\";","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":" Exception exception \u003d assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"HollaG"},"content":" Storage.parseTask(inputString);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"HollaG"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"HollaG"},"content":" String expectedMessage \u003d \"Invalid file format!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"HollaG"},"content":" String actualMessage \u003d exception.getMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"HollaG"},"content":" assertEquals(expectedMessage, actualMessage);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"HollaG":58}},{"path":"src/test/java/duke/ui/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"package duke.ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"HollaG"},"content":"import duke.tasks.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"HollaG"},"content":"import duke.tasks.DeadlineTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"HollaG"},"content":"import duke.tasks.EventTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"HollaG"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"HollaG"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"HollaG"},"content":"import duke.tasks.TodoTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":"public class UiTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"HollaG"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"HollaG"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"HollaG"},"content":" @BeforeEach","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"HollaG"},"content":" public void setUp() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"HollaG"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"HollaG"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"HollaG"},"content":" public void testPrintList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"HollaG"},"content":" TaskList taskList \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"HollaG"},"content":" Task task1 \u003d new TodoTask(\"Task1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"HollaG"},"content":" Task task2 \u003d new EventTask(\"Task2\", LocalDateTime.now(), LocalDateTime.now());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"HollaG"},"content":" Task task3 \u003d new DeadlineTask(\"Task3\", LocalDateTime.now());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"HollaG"},"content":" taskList.addToList(task1);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"HollaG"},"content":" taskList.addToList(task2);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"HollaG"},"content":" taskList.addToList(task3);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"HollaG"},"content":" Ui.printResult(Commands.LIST, null, taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"HollaG"},"content":" assertEquals(taskList.toString().trim(), outputStreamCaptor.toString().trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"HollaG"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"HollaG"},"content":" public void testMarkDoneAndUndone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"HollaG"},"content":" TaskList taskList \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"HollaG"},"content":" Task task1 \u003d new TodoTask(\"Task1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"HollaG"},"content":" Task task2 \u003d new EventTask(\"Task2\", LocalDateTime.now(), LocalDateTime.now());","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"HollaG"},"content":" Task task3 \u003d new DeadlineTask(\"Task3\", LocalDateTime.now());","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"HollaG"},"content":" taskList.addToList(task1);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"HollaG"},"content":" taskList.addToList(task2);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"HollaG"},"content":" taskList.addToList(task3);","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"HollaG"},"content":" taskList.markAsDone(2);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"HollaG"},"content":" taskList.markAsUnDone(2);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"HollaG"},"content":" taskList.markAsDone(3);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"HollaG"},"content":" Ui.printResult(Commands.LIST, null, taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"HollaG"},"content":" assertEquals(taskList.toString().trim(), outputStreamCaptor.toString().trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"HollaG"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"HollaG"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"HollaG":68}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"HollaG"},"content":"todo live happy","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"HollaG"},"content":"todo live happier","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"HollaG"},"content":"deadline submit chatbot /by Thursday","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"HollaG"},"content":"event go to CS2103T lecture /from Friday 4pm /to Friday 6pm","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"HollaG"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"HollaG"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"HollaG"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"HollaG"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"HollaG"},"content":"delete 3","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"HollaG"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"HollaG":12}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"HollaG"},"content":"if exist .\\text-ui-test\\ACTUAL.TXT del .\\text-ui-test\\ACTUAL.TXT","lastModifiedDate":"2023-08-23"},{"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":"HollaG"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin .\\src\\main\\java\\*.java .\\src\\main\\java\\duke.tasks\\*.java","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"HollaG"},"content":"java -classpath ..\\bin duke.duke \u003c .\\text-ui-test\\input.txt \u003e .\\text-ui-test\\ACTUAL.TXT","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"HollaG"},"content":"FC .\\text-ui-test\\ACTUAL.TXT .\\text-ui-test\\EXPECTED.TXT","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"HollaG"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"HollaG":6,"-":17}}] diff --git a/HollaG_ip_master/commits.json b/HollaG_ip_master/commits.json index 7719214f..84a62813 100644 --- a/HollaG_ip_master/commits.json +++ b/HollaG_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"HollaG":[{"date":"2023-08-23","commitResults":[{"hash":"c5956f76a26182900487522678124b72664e78bd","isMergeCommit":false,"messageTitle":"incr: lvl-0","messageBody":"","tags":["lvl0","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":6}}},{"hash":"ca86f3c9b00c1b09183c910aad4239c3464569a3","isMergeCommit":false,"messageTitle":"incr: lvl1 - echo","messageBody":"","tags":["lvl1","Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":1}}},{"hash":"bed54173eb217b958f28a6484eae1a9eb51de68c","isMergeCommit":false,"messageTitle":"incr: lvl2 - add, list","messageBody":"","tags":["lvl2","Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":1}}},{"hash":"2a626fcf571996398fb26595b3f66c0ecdacebb4","isMergeCommit":false,"messageTitle":"struct: refactor item to be its own class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":4}}},{"hash":"095be5d7e1f2bbada2ba988f231db9c41348ec41","isMergeCommit":false,"messageTitle":"incr: lvl-3, refactor to Task, minor changes to make it more understandable","messageBody":"","tags":["lvl3","Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":11}}},{"hash":"f084e4518d0ce338616cc43ba9280624a5123f2f","isMergeCommit":false,"messageTitle":"incr: lvl4 - add inheritance for tasks and more task types","messageBody":"","tags":["lvl4","Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":120,"deletions":7}}},{"hash":"b5a3c66d91c103d97613e36da7f8f8e0bda607d9","isMergeCommit":false,"messageTitle":"addn: text ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":5,"deletions":2},"bat":{"insertions":5,"deletions":4}}},{"hash":"5454762d1a5bcbf7552e11f9b6e6c9cec8fd1e20","isMergeCommit":false,"messageTitle":"incr: lvl 5 - error handling","messageBody":"","tags":["lvl5","Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":30}}},{"hash":"60da458ac2d049d18235fe98923dc39b90ed3c06","isMergeCommit":false,"messageTitle":"incr: lvl6","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":15,"deletions":4}}},{"hash":"144c32b1f80000eec94e34b70fd9e73f1e05f082","isMergeCommit":false,"messageTitle":"addn: edited tests","messageBody":"","tags":["lvl6","Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1}}},{"hash":"4f75af8457384ab330bdc9c4665f8abe9ff04aeb","isMergeCommit":false,"messageTitle":"addn: enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":84}}}]},{"date":"2023-09-01","commitResults":[{"hash":"34725eef1a3ec737305f1f9db122761bc499650e","isMergeCommit":false,"messageTitle":"wip: upload to cloud","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":93,"deletions":16},"bat":{"insertions":1,"deletions":0}}},{"hash":"7fa67aaf234ea1eefdd7731412995ae74bb18590","isMergeCommit":false,"messageTitle":"wip: refactor printing to be separate method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":34}}},{"hash":"66f201df17e18114939f3d177acb93d573e5a661","isMergeCommit":false,"messageTitle":"incr: lvl7 - save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":4},"java":{"insertions":105,"deletions":18}}},{"hash":"7c57b2541525d61bdecfd03410c28e2a6e98ed02","isMergeCommit":true,"messageTitle":"Merge pull request #1 from HollaG/branch-Level-7","messageBody":"Branch level 7","fileTypesAndContributionMap":{}},{"hash":"7f2e9abf2051e73ad894dc24997aeef2981a2373","isMergeCommit":false,"messageTitle":"fix: correctly handle missing file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"java":{"insertions":8,"deletions":2}}},{"hash":"1aae9e9047aee5057e9f7f8f73ef0edaa77f3fd6","isMergeCommit":true,"messageTitle":"Merge pull request #2 from HollaG/branch-Level-7","messageBody":"fix: correctly handle missing file","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c37cdee1fe55197964ab6ccb95c6ae3b38c7c209","isMergeCommit":false,"messageTitle":"wip: deadlinetask added LocalTime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":47,"deletions":8}}},{"hash":"92f5c7d4a825fedee3fa25a343542026fa44b208","isMergeCommit":false,"messageTitle":"wip: add support for event tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":38,"deletions":8}}},{"hash":"652b1e927361d2ac66afbc66f9de9d7aeed3595f","isMergeCommit":false,"messageTitle":"incr: finish level 8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":43,"deletions":53}}},{"hash":"7192466b6f586d08c51d2c06f40b755f11af845d","isMergeCommit":true,"messageTitle":"Merge pull request #3 from HollaG/branch-Level-8","messageBody":"Branch level 8","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"3b8dca0c7b905a2f6897119c85d6eea72658366f","isMergeCommit":false,"messageTitle":"wip: minimal goal","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":767,"deletions":326}}},{"hash":"c56944c34adcd2e29c20ce7dbb04bca7cb3b4719","isMergeCommit":true,"messageTitle":"Merge pull request #4 from HollaG/A-MoreOOP","messageBody":"A-MoreOOP","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"822caa19e2a85ecceb2ce601d5783fb6427ba10f","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":92,"deletions":387},"bat":{"insertions":2,"deletions":2},"md":{"insertions":2,"deletions":2}}},{"hash":"4e653a2ed6cb06fe65d20d92ca1e98fa6721915c","isMergeCommit":true,"messageTitle":"Merge pull request #5 from HollaG/A-Packages","messageBody":"A-Packages","tags":["A-Packages","1c651c9"],"fileTypesAndContributionMap":{}},{"hash":"d8aff199bfff3400af1f5d7c583747ef0c0686c8","isMergeCommit":true,"messageTitle":"Merge pull request #6 from HollaG/master","messageBody":"Bring Gradle up to date","fileTypesAndContributionMap":{}},{"hash":"1c651c983bd09e9ab3ae93cb5df7ff4deaee21b1","isMergeCommit":true,"messageTitle":"Merge pull request #7 from HollaG/add-gradle-support","messageBody":"Add gradle support","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"bb48be23806fe3d231ce69490fb48c98b3ca7013","isMergeCommit":false,"messageTitle":"incr: A-JUnit","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":1},"java":{"insertions":142,"deletions":5}}},{"hash":"6b7483142449f62c35b1263d59c899b26c4251d9","isMergeCommit":true,"messageTitle":"Merge pull request #8 from HollaG/A-JUnit","messageBody":"incr: A-JUnit","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"5a824d99d939cb9e157ac77b6d3525c3f386d44a","isMergeCommit":false,"messageTitle":"fix: change save file location","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":0,"deletions":6},"java":{"insertions":2,"deletions":2}}},{"hash":"f86dececf942cd58d231d31da72dcd95d5a9108e","isMergeCommit":true,"messageTitle":"Merge pull request #9 from HollaG/A-Jar","messageBody":"fix: change save file location","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"fde2dd62961bac63cb8ef3e94ef3cfe2081e2d27","isMergeCommit":false,"messageTitle":"wip: add find function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":14}}},{"hash":"caf9037f1aaa5f3289c5ef47654e90a1d17f0766","isMergeCommit":false,"messageTitle":"wip: change to Optional","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":42}}},{"hash":"365a83b76c117acf71bfc169051168ddcfb55a27","isMergeCommit":false,"messageTitle":"nit: javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"c29bc8cd93dc85fe395eb930340145feeeb627a4","isMergeCommit":false,"messageTitle":"incr: add javadocs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":92,"deletions":33}}},{"hash":"4d3622c59e4b4821e4ee97f741bc56972575bfa3","isMergeCommit":false,"messageTitle":"incr: coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":183,"deletions":175}}},{"hash":"0eede051213f5af3b766c92a0803d0a4c8aaa226","isMergeCommit":true,"messageTitle":"Merge pull request #10 from HollaG/Level-9","messageBody":"Level 9","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"67bd704b1871ff7fa41cc6365a3ba00ff3ddcbd7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"683a16868a6fb4a2b8986ac124d4f283fdcd501d","isMergeCommit":true,"messageTitle":"Merge pull request #12 from HollaG/A-JavaDoc","messageBody":"incr: add javadocs","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"5f706a8a9594132c6dc39d34382cf12f6f1b7e33","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f4c502e79fe58c3aedf3340669216a112b781c13","isMergeCommit":true,"messageTitle":"Merge pull request #11 from HollaG/A-CodingStandard","messageBody":"incr: coding standard","fileTypesAndContributionMap":{}},{"hash":"bb3ee3bb90d4dd658d3e221e8f4f8ed5a1671d0e","isMergeCommit":false,"messageTitle":"Revert \"incr: coding standard\"","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":185,"deletions":199}}},{"hash":"dfa54c498e5629fd2692cefd7c8221f6ff037e51","isMergeCommit":true,"messageTitle":"Merge pull request #13 from HollaG/revert-11-A-CodingStandard","messageBody":"Revert \"incr: coding standard\"","fileTypesAndContributionMap":{}},{"hash":"7bbd15e223cdbf20be93799f5891d5d00078ec7f","isMergeCommit":false,"messageTitle":"fix","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"3675f151a0a52c7af2015d61dd5f36dc39ae5610","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1bea02af0e247f4ff1986463f62b22d60f161dee","isMergeCommit":true,"messageTitle":"Merge pull request #14 from HollaG/A-CodingStandard","messageBody":"fix","fileTypesAndContributionMap":{}},{"hash":"cfe193d9b44706bbff6e204935df2aefac13761b","isMergeCommit":false,"messageTitle":"Incr: coding style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":38}}},{"hash":"8e502242990d3a75f9db758216ff77cb491b1812","isMergeCommit":false,"messageTitle":"Incr: coding style","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":146,"deletions":146}}}]}]},"authorFileTypeContributionMap":{"HollaG":{"java":1096,"md":2,"fxml":0,"sh":0,"bat":6,"gradle":1,"txt":15}},"authorContributionVariance":{"HollaG":883660.1},"authorDisplayNameMap":{"HollaG":"CS2103T-T11-3 SOH ..RCUS"}} +{"authorDailyContributionsMap":{"HollaG":[{"date":"2023-08-23","commitResults":[{"hash":"c5956f76a26182900487522678124b72664e78bd","isMergeCommit":false,"messageTitle":"incr: lvl-0","messageBody":"","tags":["lvl0","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":6}}},{"hash":"ca86f3c9b00c1b09183c910aad4239c3464569a3","isMergeCommit":false,"messageTitle":"incr: lvl1 - echo","messageBody":"","tags":["lvl1","Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":1}}},{"hash":"bed54173eb217b958f28a6484eae1a9eb51de68c","isMergeCommit":false,"messageTitle":"incr: lvl2 - add, list","messageBody":"","tags":["lvl2","Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":1}}},{"hash":"2a626fcf571996398fb26595b3f66c0ecdacebb4","isMergeCommit":false,"messageTitle":"struct: refactor item to be its own class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":4}}},{"hash":"095be5d7e1f2bbada2ba988f231db9c41348ec41","isMergeCommit":false,"messageTitle":"incr: lvl-3, refactor to Task, minor changes to make it more understandable","messageBody":"","tags":["lvl3","Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":11}}},{"hash":"f084e4518d0ce338616cc43ba9280624a5123f2f","isMergeCommit":false,"messageTitle":"incr: lvl4 - add inheritance for tasks and more task types","messageBody":"","tags":["lvl4","Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":120,"deletions":7}}},{"hash":"b5a3c66d91c103d97613e36da7f8f8e0bda607d9","isMergeCommit":false,"messageTitle":"addn: text ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":5,"deletions":2},"bat":{"insertions":5,"deletions":4}}},{"hash":"5454762d1a5bcbf7552e11f9b6e6c9cec8fd1e20","isMergeCommit":false,"messageTitle":"incr: lvl 5 - error handling","messageBody":"","tags":["lvl5","Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":30}}},{"hash":"60da458ac2d049d18235fe98923dc39b90ed3c06","isMergeCommit":false,"messageTitle":"incr: lvl6","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":15,"deletions":4}}},{"hash":"144c32b1f80000eec94e34b70fd9e73f1e05f082","isMergeCommit":false,"messageTitle":"addn: edited tests","messageBody":"","tags":["lvl6","Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1}}},{"hash":"4f75af8457384ab330bdc9c4665f8abe9ff04aeb","isMergeCommit":false,"messageTitle":"addn: enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":84}}}]},{"date":"2023-09-01","commitResults":[{"hash":"34725eef1a3ec737305f1f9db122761bc499650e","isMergeCommit":false,"messageTitle":"wip: upload to cloud","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":93,"deletions":16},"bat":{"insertions":1,"deletions":0}}},{"hash":"7fa67aaf234ea1eefdd7731412995ae74bb18590","isMergeCommit":false,"messageTitle":"wip: refactor printing to be separate method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":34}}},{"hash":"66f201df17e18114939f3d177acb93d573e5a661","isMergeCommit":false,"messageTitle":"incr: lvl7 - save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":4},"java":{"insertions":105,"deletions":18}}},{"hash":"7c57b2541525d61bdecfd03410c28e2a6e98ed02","isMergeCommit":true,"messageTitle":"Merge pull request #1 from HollaG/branch-Level-7","messageBody":"Branch level 7","fileTypesAndContributionMap":{}},{"hash":"7f2e9abf2051e73ad894dc24997aeef2981a2373","isMergeCommit":false,"messageTitle":"fix: correctly handle missing file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"java":{"insertions":8,"deletions":2}}},{"hash":"1aae9e9047aee5057e9f7f8f73ef0edaa77f3fd6","isMergeCommit":true,"messageTitle":"Merge pull request #2 from HollaG/branch-Level-7","messageBody":"fix: correctly handle missing file","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c37cdee1fe55197964ab6ccb95c6ae3b38c7c209","isMergeCommit":false,"messageTitle":"wip: deadlinetask added LocalTime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":47,"deletions":8}}},{"hash":"92f5c7d4a825fedee3fa25a343542026fa44b208","isMergeCommit":false,"messageTitle":"wip: add support for event tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":38,"deletions":8}}},{"hash":"652b1e927361d2ac66afbc66f9de9d7aeed3595f","isMergeCommit":false,"messageTitle":"incr: finish level 8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":43,"deletions":53}}},{"hash":"7192466b6f586d08c51d2c06f40b755f11af845d","isMergeCommit":true,"messageTitle":"Merge pull request #3 from HollaG/branch-Level-8","messageBody":"Branch level 8","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"3b8dca0c7b905a2f6897119c85d6eea72658366f","isMergeCommit":false,"messageTitle":"wip: minimal goal","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":767,"deletions":326}}},{"hash":"c56944c34adcd2e29c20ce7dbb04bca7cb3b4719","isMergeCommit":true,"messageTitle":"Merge pull request #4 from HollaG/A-MoreOOP","messageBody":"A-MoreOOP","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"822caa19e2a85ecceb2ce601d5783fb6427ba10f","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":92,"deletions":387},"bat":{"insertions":2,"deletions":2},"md":{"insertions":2,"deletions":2}}},{"hash":"4e653a2ed6cb06fe65d20d92ca1e98fa6721915c","isMergeCommit":true,"messageTitle":"Merge pull request #5 from HollaG/A-Packages","messageBody":"A-Packages","tags":["A-Packages","1c651c9"],"fileTypesAndContributionMap":{}},{"hash":"d8aff199bfff3400af1f5d7c583747ef0c0686c8","isMergeCommit":true,"messageTitle":"Merge pull request #6 from HollaG/master","messageBody":"Bring Gradle up to date","fileTypesAndContributionMap":{}},{"hash":"1c651c983bd09e9ab3ae93cb5df7ff4deaee21b1","isMergeCommit":true,"messageTitle":"Merge pull request #7 from HollaG/add-gradle-support","messageBody":"Add gradle support","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"bb48be23806fe3d231ce69490fb48c98b3ca7013","isMergeCommit":false,"messageTitle":"incr: A-JUnit","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":1},"java":{"insertions":142,"deletions":5}}},{"hash":"6b7483142449f62c35b1263d59c899b26c4251d9","isMergeCommit":true,"messageTitle":"Merge pull request #8 from HollaG/A-JUnit","messageBody":"incr: A-JUnit","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"5a824d99d939cb9e157ac77b6d3525c3f386d44a","isMergeCommit":false,"messageTitle":"fix: change save file location","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":0,"deletions":6},"java":{"insertions":2,"deletions":2}}},{"hash":"f86dececf942cd58d231d31da72dcd95d5a9108e","isMergeCommit":true,"messageTitle":"Merge pull request #9 from HollaG/A-Jar","messageBody":"fix: change save file location","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"fde2dd62961bac63cb8ef3e94ef3cfe2081e2d27","isMergeCommit":false,"messageTitle":"wip: add find function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":14}}},{"hash":"caf9037f1aaa5f3289c5ef47654e90a1d17f0766","isMergeCommit":false,"messageTitle":"wip: change to Optional","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":42}}},{"hash":"365a83b76c117acf71bfc169051168ddcfb55a27","isMergeCommit":false,"messageTitle":"nit: javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"c29bc8cd93dc85fe395eb930340145feeeb627a4","isMergeCommit":false,"messageTitle":"incr: add javadocs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":92,"deletions":33}}},{"hash":"4d3622c59e4b4821e4ee97f741bc56972575bfa3","isMergeCommit":false,"messageTitle":"incr: coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":183,"deletions":175}}},{"hash":"0eede051213f5af3b766c92a0803d0a4c8aaa226","isMergeCommit":true,"messageTitle":"Merge pull request #10 from HollaG/Level-9","messageBody":"Level 9","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"67bd704b1871ff7fa41cc6365a3ba00ff3ddcbd7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"683a16868a6fb4a2b8986ac124d4f283fdcd501d","isMergeCommit":true,"messageTitle":"Merge pull request #12 from HollaG/A-JavaDoc","messageBody":"incr: add javadocs","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"5f706a8a9594132c6dc39d34382cf12f6f1b7e33","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f4c502e79fe58c3aedf3340669216a112b781c13","isMergeCommit":true,"messageTitle":"Merge pull request #11 from HollaG/A-CodingStandard","messageBody":"incr: coding standard","fileTypesAndContributionMap":{}},{"hash":"bb3ee3bb90d4dd658d3e221e8f4f8ed5a1671d0e","isMergeCommit":false,"messageTitle":"Revert \"incr: coding standard\"","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":185,"deletions":199}}},{"hash":"dfa54c498e5629fd2692cefd7c8221f6ff037e51","isMergeCommit":true,"messageTitle":"Merge pull request #13 from HollaG/revert-11-A-CodingStandard","messageBody":"Revert \"incr: coding standard\"","fileTypesAndContributionMap":{}},{"hash":"7bbd15e223cdbf20be93799f5891d5d00078ec7f","isMergeCommit":false,"messageTitle":"fix","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"3675f151a0a52c7af2015d61dd5f36dc39ae5610","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1bea02af0e247f4ff1986463f62b22d60f161dee","isMergeCommit":true,"messageTitle":"Merge pull request #14 from HollaG/A-CodingStandard","messageBody":"fix","fileTypesAndContributionMap":{}},{"hash":"cfe193d9b44706bbff6e204935df2aefac13761b","isMergeCommit":false,"messageTitle":"Incr: coding style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":38}}},{"hash":"8e502242990d3a75f9db758216ff77cb491b1812","isMergeCommit":false,"messageTitle":"Incr: coding style","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":146,"deletions":146}}}]},{"date":"2023-09-06","commitResults":[{"hash":"f25daa0d64b68ae44c2b58180ab81797eda6a428","isMergeCommit":false,"messageTitle":"addn: checkstyle","messageBody":"","tags":["7a99f9a"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":101,"deletions":77},"bat":{"insertions":2,"deletions":2},"md":{"insertions":2,"deletions":2}}},{"hash":"7a99f9a7954f44f4d9725d3cf8c273c021ad5d34","isMergeCommit":true,"messageTitle":"Merge pull request #15 from HollaG/A-CheckStyle","messageBody":"addn: checkstyle","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"HollaG":{"java":1120,"md":2,"fxml":0,"sh":0,"bat":6,"gradle":6,"txt":15}},"authorContributionVariance":{"HollaG":676859.75},"authorDisplayNameMap":{"HollaG":"CS2103T-T11-3 SOH ..RCUS"}} diff --git a/Jweng88_ip_master/authorship.json b/Jweng88_ip_master/authorship.json index da8c880e..40f8e002 100644 --- a/Jweng88_ip_master/authorship.json +++ b/Jweng88_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"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":"Jweng88"},"content":" mainClassName \u003d \u0027duke.Duke\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jweng88":4,"-":41}},{"path":"src/main/java/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"D | 0 | return book | 2023-08-15T19:00:40","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"E | 0 | project meeting | 2023-08-28T16:00:49.455 | 2023-08-28T18:00:49.455","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"T | 1 | join sports club","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"Jweng88":4}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.command.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * The main class of the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" * Initializes the user interface, storage, and task list, and runs the main loop of the application.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"public class Duke {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" /** The storage for saving and loading the task list */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" /** The task list */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" /** The user interface */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * Constructs a Duke object with the given file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * Initializes the user interface, storage, and task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param filePath The file path of the storage file.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" * Runs the main loop of the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Reads user input, parses it, and executes the corresponding command.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" public void run() {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" ui.showLine(); // show the divider line (\"_______\")","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" } finally {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" * The main method of the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" * Creates a Duke object and runs the main loop of the application.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" * @param args The command line arguments (not used).","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" new Duke(\"./src/main/java/duke.txt\").run();","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":75}},{"path":"src/main/java/duke/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to add a deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The description of the deadline to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" private final String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /** The deadline of the deadline to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" private final String by;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * Constructs an AddDeadlineCommand object with the given description and deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" public AddDeadlineCommand(String description, String by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * Executes the AddDeadlineCommand by adding the deadline task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" if (description.isEmpty() || by.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"☹ OOPS!!! The format of a deadline should be: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" + \"deadline DESCRIPTION /by DATE\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" tasks.addTask(new Deadline(description, by));","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" ui.showTaskAddedMessage(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":59}},{"path":"src/main/java/duke/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to add an event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The description of the event to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" private final String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /** The start time of the event to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" private final String from;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" /** The end time of the event to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" private final String to;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * Constructs an AddEventCommand object with the given description, start time, and end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" public AddEventCommand(String description, String from, String to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" * Executes the AddEventCommand by adding the event task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" if (description.isEmpty() || from.isEmpty() || to.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"☹ OOPS!!! The format of an event should be: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" + \"event DESCRIPTION /from DATE /to DATE\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" tasks.addTask(new Event(description, from, to));","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" ui.showTaskAddedMessage(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":64}},{"path":"src/main/java/duke/command/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to add a todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"public class AddTodoCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The description of the todo to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" private final String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * Constructs an AddTodoCommand object with the given description.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" public AddTodoCommand(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * Executes the AddTodoCommand by adding the todo task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" tasks.addTask(new ToDo(description));","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" ui.showTaskAddedMessage(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":53}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents an abstract command that can be executed by the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Provides an execute method and an isExit method that must be implemented by subclasses.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Executes the command with the given task list, user interface, and storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":31}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The index of the task to delete */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * Constructs a DeleteCommand object with the given task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" public DeleteCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" this.taskIndex \u003d taskIndex - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * Executes the DeleteCommand by deleting the task from the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" Task removedTask \u003d tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" ui.showTaskRemoved(tasks, removedTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":54}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents a command to exit the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Executes the ExitCommand by displaying a goodbye message and saving the tasks to storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" ui.showGoodbyeMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":37}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to find tasks containing a specific keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" /** The keyword to search for in task descriptions */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" private final String keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" * Constructs a FindCommand object with the specified keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" * Executes the FindCommand. Searches for tasks containing the keyword in the task list","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * and displays the matching tasks or a message if no matching tasks are found.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list containing tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage object for saving tasks to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" TaskList matchingTasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" matchingTasks.addTask(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" if (matchingTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" ui.showNoMatchingTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" ui.showMatchingTasks(matchingTasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" * Returns whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" * @return False, as the FindCommand is not an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Jweng88":59}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents a command to list all tasks in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Executes the ListCommand by displaying the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" ui.showTaskList(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":36}},{"path":"src/main/java/duke/command/MarkAsDoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents a command to mark a task as done in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class MarkAsDoneCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /** The index of the task to mark as done */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * Constructs a MarkAsDoneCommand object with the given task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" public MarkAsDoneCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" this.taskIndex \u003d taskIndex - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * Executes the MarkAsDoneCommand by marking the task as done in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" tasks.markTaskAsDone(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" ui.showTaskMarkedAsDone(tasks, taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":53}},{"path":"src/main/java/duke/command/MarkAsUndoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents a command to mark a task as undone in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class MarkAsUndoneCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /** The index of the task to mark as undone */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * Constructs a MarkAsUndoneCommand object with the given task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task to be marked as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" public MarkAsUndoneCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" this.taskIndex \u003d taskIndex - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * Executes the MarkAsUndoneCommand by marking the task as undone in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" tasks.markTaskAsUndone(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" ui.showTaskMarkedAsUndone(tasks, taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":53}},{"path":"src/main/java/duke/command/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":" * Parses user input and returns the corresponding command object.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * An enumeration of all possible command types.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" public enum CommandType {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" TODO, DEADLINE, EVENT, LIST, MARK, UNMARK, DELETE, FIND, BYE","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * Parses the given user input and returns the corresponding command object.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @param fullCommand The user input to be parsed.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @return The corresponding command object.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while parsing the input.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" String[] commandParts \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" String commandTypeStr \u003d commandParts[0].toLowerCase();","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" CommandType commandType;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" commandType \u003d CommandType.valueOf(commandTypeStr.toUpperCase());","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" case TODO:","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" return new AddTodoCommand(commandParts[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" int byIndex \u003d commandParts[1].indexOf(\"/by\");","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" if (byIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"The format of a deadline should be: deadline DESCRIPTION /by DATE\");","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" String description \u003d commandParts[1].substring(0, byIndex).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" String by \u003d commandParts[1].substring(byIndex + 3).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" return new AddDeadlineCommand(description, by);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" case EVENT:","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" int fromIndex \u003d commandParts[1].indexOf(\"/from\");","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" if (fromIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"The format of an event should be: event DESCRIPTION /from DATE /to DATE\");","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" description \u003d commandParts[1].substring(0, fromIndex).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" String fromTo \u003d commandParts[1].substring(fromIndex + 6).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" if (fromTo.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"The format of an event should be: event DESCRIPTION /from DATE /to DATE\");","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" String[] fromToParts \u003d fromTo.split(\"/to\");","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" String from \u003d fromToParts[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" String to \u003d fromToParts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" return new AddEventCommand(description, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" case LIST:","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" case MARK:","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" return new MarkAsDoneCommand(Integer.parseInt(commandParts[1]));","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" case UNMARK:","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" return new MarkAsUndoneCommand(Integer.parseInt(commandParts[1]));","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" case DELETE:","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" return new DeleteCommand(Integer.parseInt(commandParts[1]));","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" case FIND:","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" return new FindCommand(commandParts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" case BYE:","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":77}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":" * Represents an exception specific to the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Exception class.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Constructs a DukeException object with the given error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" * @param message The error message associated with the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" super(message);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":17}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * Represents the storage component of the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" * Handles loading and saving of tasks to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /** The file path of the storage */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" private final String filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * Constructs a Storage object with the given file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" * @param filePath The file path of the file to be used for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * Loads tasks from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * @return An ArrayList of tasks loaded from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while loading the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" if (!line.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" Task task \u003d Task.createTaskFromFormattedString(line);","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" scanner.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Error loading tasks from file.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" * Saves tasks to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" * @param tasks The ArrayList of tasks to be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while saving the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" public void save(ArrayList\u003cTask\u003e tasks) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" FileWriter writer \u003d new FileWriter(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" writer.write(task.toFormattedString() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Error saving tasks to file.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":77}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" /** The deadline of the task */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" * Constructs a Deadline object with the given description and deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param by The deadline of the task in the format \"yyyy-MM-dd HH:mm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" this.by \u003d LocalDateTime.parse(by);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * Returns a string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * @return A string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" + by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" * Returns a formatted string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" * @return A formatted string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" public String toFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" return \"D | \" + (isDone ? \"1\" : \"0\") + \" | \"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" + description + \" | \" + by;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":47}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":" * Represents a task that starts and ends at specific times.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" /** The start time of the event */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The end time of the event */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * Constructs an Event object with the given description, start time, and end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * @param from The start time of the task in the format \"yyyy-MM-dd HH:mm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" * @param to The end time of the task in the format \"yyyy-MM-dd HH:mm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" public Event(String description, String from, String to){","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" this.from \u003d LocalDateTime.parse(from);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" this.to \u003d LocalDateTime.parse(to);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * Returns a string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" * @return A string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" + \" (from: \" + from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" + \" to: \" + to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" * Returns a formatted string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" * @return A formatted string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" public String toFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" return \"E | \" + (isDone ? \"1\" : \"0\") + \" | \"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" + description + \" | \" + from + \" | \" + to;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":53}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":" * Represents a task with a description and completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"public class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" /** Represents a task in the task list */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" protected String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" /** Indicates whether the task is done or not */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Constructs a Task object with the given description.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" * The initial completion status is set to false.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" * Marks the task as done by setting the completion status to true.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * Marks the task as not done by setting the completion status to false.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" * Returns the status icon of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" * @return The status icon of the task (\"[X]\" if done, \"[ ]\" if not done).","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" return (isDone ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" return description;","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" * Returns a string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" * @return A string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" return this.getStatusIcon() + \" \" + this.getDescription();","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" * Returns a formatted string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" * @return A formatted string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" public String toFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" return \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * Creates a Task object from a formatted string representation.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" * @param formattedString The formatted string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" * @return The Task object created from the formatted string.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" public static Task createTaskFromFormattedString(String formattedString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" String[] parts \u003d formattedString.split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"Jweng88"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Jweng88"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Jweng88"},"content":" Task todo \u003d new ToDo(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"Jweng88"},"content":" todo.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"Jweng88"},"content":" return todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"Jweng88"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Jweng88"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"Jweng88"},"content":" Task deadline \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"Jweng88"},"content":" deadline.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"Jweng88"},"content":" return deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"Jweng88"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Jweng88"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"Jweng88"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"Jweng88"},"content":" Task event \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"Jweng88"},"content":" event.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"Jweng88"},"content":" return event;","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"Jweng88"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Jweng88"},"content":" // Handle unrecognized task type","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"Jweng88"},"content":" return null;","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":109}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" /** The tasks in the task list */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" * Constructs a TaskList object with the given list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" * Constructs an empty TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" public int size() {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" return tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" * Deletes a task from the list at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" * @return The deleted task.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If the index is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" public Task deleteTask(int index) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number. Please provide a valid task number.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" return tasks.remove(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" * Marks a task in the list as done at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" tasks.get(index).markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" * Marks a task in the list as not done at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" * @param index The index of the task to be marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" public void markTaskAsUndone (int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" tasks.get(index).markAsNotDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" * Returns the task at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":" * @param index The index of the task to be returned.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If the index is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Jweng88"},"content":" public Task get(int index) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Jweng88"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number. Please provide a valid task number.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Jweng88"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Jweng88"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Jweng88"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Jweng88"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"Jweng88"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":105}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":" * Represents a todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Constructs a ToDo object with the given description.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * Returns a string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @return A string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * Returns a formatted string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @return A formatted string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" public String toFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" return \"T | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":37}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents the user interface of the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Displays a welcome message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" System.out.println(\"Hello! I\u0027m Bob\");","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" * Reads a command entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" * @return The command entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" * Displays a horizontal line separator.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public void showLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" * @param errorMessage The error message to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" System.out.println(\"☹ \" + errorMessage);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" * Displays a goodbye message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" public void showGoodbyeMessage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating matching tasks found based on the keyword search.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" * @param matchingTasks The list of matching tasks to display.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" public void showMatchingTasks(TaskList matchingTasks) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" System.out.println((i + 1) + \".\" + matchingTasks.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating no matching tasks were found based on the keyword search.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" public void showNoMatchingTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" System.out.println(\"No matching tasks found.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * Displays the list of tasks to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while displaying the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" public void showTaskList(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":" System.out.println((i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating that a task has been added to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while displaying the message.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Jweng88"},"content":" public void showTaskAddedMessage(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Jweng88"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"Jweng88"},"content":" System.out.println(tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"Jweng88"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating that a task has been marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task that has been marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while displaying the message.","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Jweng88"},"content":" public void showTaskMarkedAsDone(TaskList tasks, int taskIndex) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Jweng88"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"Jweng88"},"content":" System.out.println(tasks.get(taskIndex));","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating that a task has been marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task that has been marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while displaying the message.","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Jweng88"},"content":" public void showTaskMarkedAsUndone(TaskList tasks, int taskIndex) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Jweng88"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"Jweng88"},"content":" System.out.println(tasks.get(taskIndex));","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating that a task has been removed from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"Jweng88"},"content":" * @param removedTask The task that has been removed from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"Jweng88"},"content":" public void showTaskRemoved(TaskList tasks, Task removedTask) {","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"Jweng88"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"Jweng88"},"content":" System.out.println(removedTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"Jweng88"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Jweng88"},"content":" * Displays an error message indicating that tasks could not be loaded from a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"Jweng88"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"Jweng88"},"content":" System.out.println(\"Error loading tasks from file.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":143}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * A JUnit test class for the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * Sets up the test fixture.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * Creates a new TaskList object with an empty ArrayList.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" @BeforeEach","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" public void setup() {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" taskList \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * Tests the addTask method of the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * Adds a new task to the task list and checks if the size of the task list is 1.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" public void testAddTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" Task task \u003d new ToDo(\"Test Task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" assertEquals(1, taskList.getTasks().size());","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" * Tests the deleteTask method of the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" * Adds a new task to the task list, deletes it, and checks if the size of the task list is 0.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while deleting the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" public void testDeleteTask() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" Task task \u003d new ToDo(\"Test Task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" assertEquals(0, taskList.getTasks().size());","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" * Tests the deleteTask method of the TaskList class with an invalid task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" * Expects a DukeException to be thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" public void testDeleteInvalidTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" assertThrows(DukeException.class, () -\u003e taskList.deleteTask(0));","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" * Tests the get method of the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" * Adds a new task to the task list, retrieves it, and checks if its string representation is correct.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while retrieving the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" public void testGetTask() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" Task task \u003d new ToDo(\"Test Task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" Task retrievedTask \u003d taskList.get(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][ ] Test Task\", retrievedTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" * Tests the get method of the TaskList class with an invalid task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * Expects a DukeException to be thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" public void testGetInvalidTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" assertThrows(DukeException.class, () -\u003e taskList.get(0));","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jweng88":83}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":" * A JUnit test class for the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" * Tests the toString method of the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" public void testToString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][ ] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * Tests the markAsDone method of the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" public void testMarkAsDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][X] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * Tests the markAsNotDone method of the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" public void testMarkAsNotDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" todo.markAsNotDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][ ] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" * Tests the createTaskFromFormattedString method of the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" public void testCreateTaskFromFormattedString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" String formattedString \u003d \"T | 1 | Buy groceries\";","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" Task task \u003d Task.createTaskFromFormattedString(formattedString);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][X] Buy groceries\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jweng88":50}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"todo read book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"unmark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Jweng88":8}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"checkstyle {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" mainClassName \u003d \u0027duke.Duke\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jweng88":24,"-":41}},{"path":"src/main/java/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"D | 0 | return book | 2023-08-15T19:00:40","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"E | 0 | project meeting | 2023-08-28T16:00:49.455 | 2023-08-28T18:00:49.455","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"T | 1 | join sports club","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"Jweng88":4}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.command.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * The main class of the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" * Initializes the user interface, storage, and task list,","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * and runs the main loop of the application.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":"public class Duke {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /** The storage for saving and loading the task list */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" /** The task list */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" /** The user interface for interacting with the user */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /** Flag indicating whether the application should exit */","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" private boolean isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * Constructs a Duke object with the given file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * Initializes the user interface, storage, and task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" public Duke() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" storage \u003d new Storage(\"./src/main/java/duke.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Displays the welcome message for Duke.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * @return The welcome message as a string.","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" public String initialise() {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" return ui.getCurrentStatus();","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" * Runs the main loop of the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" * Reads user input, parses it, and executes the corresponding command.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" * @param input The user\u0027s input text.","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" public void run(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" ui.showLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" } finally {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" * Generates a response to user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" * @param input The user\u0027s input text.","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * @return A response generated by Duke based on the user\u0027s input.","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" run(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" return ui.getCurrentStatus();","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":84}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":" * The Launcher class serves as the entry point for the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":" * It uses JavaFX\u0027s Application.launch method to launch the application by","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * starting the Main class.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * This class is primarily used to work around classpath issues that can","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * occur when launching JavaFX applications.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Launches the Duke application by invoking JavaFX\u0027s Application.launch","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" * method with the Main class and any command-line arguments.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" * The main method of the Launcher class.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param args Command-line arguments passed to the application.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":24}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.ui.MainWindow;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * The Main class serves as the entry point for the Duke GUI application.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" * It initializes the Duke logic, loads the FXML-based user interface, and","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * starts the JavaFX application.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" /** The Duke instance that handles the application\u0027s logic */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" private final Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" * Loads the main window using FXML, sets up the user interface,","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" * and displays the application\u0027s primary stage.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * The start method of the JavaFX application.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * @param stage The primary stage for the JavaFX application.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":44}},{"path":"src/main/java/duke/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to add a deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The description of the deadline to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" private final String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /** The deadline of the deadline to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" private final String by;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * Constructs an AddDeadlineCommand object with the given description and deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" public AddDeadlineCommand(String description, String by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * Executes the AddDeadlineCommand by adding the deadline task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" if (description.isEmpty() || by.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"☹ OOPS!!! The format of a deadline should be: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" + \"deadline DESCRIPTION /by DATE\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" tasks.addTask(new Deadline(description, by));","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" ui.showTaskAddedMessage(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":59}},{"path":"src/main/java/duke/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to add an event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The description of the event to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" private final String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /** The start time of the event to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" private final String from;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" /** The end time of the event to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" private final String to;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * Constructs an AddEventCommand object with the given description, start time, and end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" public AddEventCommand(String description, String from, String to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" * Executes the AddEventCommand by adding the event task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" if (description.isEmpty() || from.isEmpty() || to.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"☹ OOPS!!! The format of an event should be: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" + \"event DESCRIPTION /from DATE /to DATE\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" tasks.addTask(new Event(description, from, to));","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" ui.showTaskAddedMessage(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":64}},{"path":"src/main/java/duke/command/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to add a todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"public class AddTodoCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The description of the todo to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" private final String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * Constructs an AddTodoCommand object with the given description.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" public AddTodoCommand(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * Executes the AddTodoCommand by adding the todo task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" tasks.addTask(new ToDo(description));","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" ui.showTaskAddedMessage(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":53}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents an abstract command that can be executed by the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Provides an execute method and an isExit method that must be implemented by subclasses.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Executes the command with the given task list, user interface, and storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":31}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The index of the task to delete */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * Constructs a DeleteCommand object with the given task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" public DeleteCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" this.taskIndex \u003d taskIndex - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * Executes the DeleteCommand by deleting the task from the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" Task removedTask \u003d tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" ui.showTaskRemoved(tasks, removedTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":54}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents a command to exit the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Executes the ExitCommand by displaying a goodbye message and saving the tasks to storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" ui.showGoodbyeMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":37}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to find tasks containing a specific keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /** The keyword to search for in task descriptions */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" private final String keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * Constructs a FindCommand object with the specified keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * Executes the FindCommand. Searches for tasks containing the keyword in the task list","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * and displays the matching tasks or a message if no matching tasks are found.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list containing tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage object for saving tasks to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" TaskList matchingTasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" matchingTasks.addTask(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" if (matchingTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" ui.showNoMatchingTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" ui.showMatchingTasks(matchingTasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" * Returns whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" * @return False, as the FindCommand is not an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Jweng88":60}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents a command to list all tasks in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Executes the ListCommand by displaying the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" ui.showTaskList(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":36}},{"path":"src/main/java/duke/command/MarkAsDoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents a command to mark a task as done in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class MarkAsDoneCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /** The index of the task to mark as done */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * Constructs a MarkAsDoneCommand object with the given task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" public MarkAsDoneCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" this.taskIndex \u003d taskIndex - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * Executes the MarkAsDoneCommand by marking the task as done in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" tasks.markTaskAsDone(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" ui.showTaskMarkedAsDone(tasks, taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":53}},{"path":"src/main/java/duke/command/MarkAsUndoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents a command to mark a task as undone in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class MarkAsUndoneCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /** The index of the task to mark as undone */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * Constructs a MarkAsUndoneCommand object with the given task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task to be marked as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" public MarkAsUndoneCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" this.taskIndex \u003d taskIndex - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * Executes the MarkAsUndoneCommand by marking the task as undone in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" tasks.markTaskAsUndone(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" ui.showTaskMarkedAsUndone(tasks, taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":53}},{"path":"src/main/java/duke/command/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":" * Parses user input and returns the corresponding command object.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * An enumeration of all possible command types.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" public enum CommandType {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" TODO, DEADLINE, EVENT, LIST, MARK, UNMARK, DELETE, FIND, BYE","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * Parses the given user input and returns the corresponding command object.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @param fullCommand The user input to be parsed.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @return The corresponding command object.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while parsing the input.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" String[] commandParts \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" String commandTypeStr \u003d commandParts[0].toLowerCase();","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" CommandType commandType;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" commandType \u003d CommandType.valueOf(commandTypeStr.toUpperCase());","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" case TODO:","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" return new AddTodoCommand(commandParts[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" int byIndex \u003d commandParts[1].indexOf(\"/by\");","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" if (byIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"The format of a deadline should be: deadline DESCRIPTION /by DATE\");","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" String description \u003d commandParts[1].substring(0, byIndex).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" String by \u003d commandParts[1].substring(byIndex + 3).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" return new AddDeadlineCommand(description, by);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" case EVENT:","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" int fromIndex \u003d commandParts[1].indexOf(\"/from\");","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" if (fromIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"The format of an event should be: event DESCRIPTION /from DATE /to DATE\");","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" description \u003d commandParts[1].substring(0, fromIndex).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" String fromTo \u003d commandParts[1].substring(fromIndex + 6).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" if (fromTo.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"The format of an event should be: event DESCRIPTION /from DATE /to DATE\");","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" String[] fromToParts \u003d fromTo.split(\"/to\");","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" String from \u003d fromToParts[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" String to \u003d fromToParts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" return new AddEventCommand(description, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" case LIST:","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" case MARK:","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" return new MarkAsDoneCommand(Integer.parseInt(commandParts[1]));","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" case UNMARK:","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" return new MarkAsUndoneCommand(Integer.parseInt(commandParts[1]));","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" case DELETE:","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" return new DeleteCommand(Integer.parseInt(commandParts[1]));","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" case FIND:","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" return new FindCommand(commandParts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" case BYE:","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":77}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":" * Represents an exception specific to the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Exception class.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Constructs a DukeException object with the given error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" * @param message The error message associated with the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" super(message);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":17}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * Represents the storage component of the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" * Handles loading and saving of tasks to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /** The file path of the storage */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" private final String filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * Constructs a Storage object with the given file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" * @param filePath The file path of the file to be used for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * Loads tasks from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * @return An ArrayList of tasks loaded from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while loading the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" if (!line.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" Task task \u003d Task.createTaskFromFormattedString(line);","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" scanner.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Error loading tasks from file.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" * Saves tasks to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" * @param tasks The ArrayList of tasks to be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while saving the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" public void save(ArrayList\u003cTask\u003e tasks) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" FileWriter writer \u003d new FileWriter(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" writer.write(task.toFormattedString() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Error saving tasks to file.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":77}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" /** The deadline of the task */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" * Constructs a Deadline object with the given description and deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param by The deadline of the task in the format \"yyyy-MM-dd HH:mm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" this.by \u003d LocalDateTime.parse(by);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * Returns a string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * @return A string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" + by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" * Returns a formatted string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" * @return A formatted string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" public String toFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" return \"D | \" + (isDone ? \"1\" : \"0\") + \" | \"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" + description + \" | \" + by;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":47}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":" * Represents a task that starts and ends at specific times.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" /** The start time of the event */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The end time of the event */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * Constructs an Event object with the given description, start time, and end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * @param from The start time of the task in the format \"yyyy-MM-dd HH:mm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" * @param to The end time of the task in the format \"yyyy-MM-dd HH:mm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" this.from \u003d LocalDateTime.parse(from);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" this.to \u003d LocalDateTime.parse(to);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * Returns a string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" * @return A string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" + \" (from: \" + from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" + \" to: \" + to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" * Returns a formatted string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" * @return A formatted string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" public String toFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" return \"E | \" + (isDone ? \"1\" : \"0\") + \" | \"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" + description + \" | \" + from + \" | \" + to;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":53}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":" * Represents a task with a description and completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"public class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" /** Represents a task in the task list */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" protected String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" /** Indicates whether the task is done or not */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Constructs a Task object with the given description.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" * The initial completion status is set to false.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" * Marks the task as done by setting the completion status to true.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * Marks the task as not done by setting the completion status to false.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" * Returns the status icon of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" * @return The status icon of the task (\"[X]\" if done, \"[ ]\" if not done).","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" return (isDone ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" return description;","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" * Returns a string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" * @return A string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" return this.getStatusIcon() + \" \" + this.getDescription();","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" * Returns a formatted string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" * @return A formatted string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" public String toFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" return \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * Creates a Task object from a formatted string representation.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" * @param formattedString The formatted string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" * @return The Task object created from the formatted string.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" public static Task createTaskFromFormattedString(String formattedString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" String[] parts \u003d formattedString.split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"Jweng88"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Jweng88"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Jweng88"},"content":" Task todo \u003d new ToDo(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"Jweng88"},"content":" todo.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"Jweng88"},"content":" return todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"Jweng88"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Jweng88"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"Jweng88"},"content":" Task deadline \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"Jweng88"},"content":" deadline.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"Jweng88"},"content":" return deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"Jweng88"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Jweng88"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"Jweng88"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"Jweng88"},"content":" Task event \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"Jweng88"},"content":" event.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"Jweng88"},"content":" return event;","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"Jweng88"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Jweng88"},"content":" // Handle unrecognized task type","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"Jweng88"},"content":" return null;","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":109}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" /** The tasks in the task list */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" * Constructs a TaskList object with the given list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * Constructs an empty TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public int size() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" return tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" * Deletes a task from the list at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" * @return The deleted task.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If the index is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" public Task deleteTask(int index) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number. Please provide a valid task number.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" return tasks.remove(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" * Marks a task in the list as done at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" tasks.get(index).markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" * Marks a task in the list as not done at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" * @param index The index of the task to be marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" public void markTaskAsUndone(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" tasks.get(index).markAsNotDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" * Returns the task at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" * @param index The index of the task to be returned.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If the index is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Jweng88"},"content":" public Task get(int index) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Jweng88"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number. Please provide a valid task number.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Jweng88"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Jweng88"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Jweng88"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Jweng88"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"Jweng88"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":104}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":" * Represents a todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Constructs a ToDo object with the given description.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * Returns a string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @return A string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * Returns a formatted string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @return A formatted string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" public String toFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" return \"T | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":37}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * A custom control class representing a dialog box with an ImageView for the speaker\u0027s face","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * and a label containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" /** The label for displaying text from the speaker. */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /** The ImageView for displaying the speaker\u0027s face. */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * Constructs a `DialogBox` with the specified text and image.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * This private constructor is used internally to create `DialogBox` instances.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" * @param text The text to display in the dialog box.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" * @param img The image to display as the speaker\u0027s face.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" * Creates a user dialog box with the specified text and image.","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" * @param text The text to display in the user dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" * @param img The image to display as the user\u0027s face.","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" * @return A `DialogBox` instance representing the user\u0027s dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" * Creates a Duke dialog box with the specified text and image.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" * @param text The text to display in Duke\u0027s dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * @param img The image to display as Duke\u0027s face.","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" * @return A `DialogBox` instance representing Duke\u0027s dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":86}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * The `MainWindow` class serves as the controller for the main window of the Duke GUI.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" * It provides the layout and functionality for the user interface components, such as the","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * input field, message display area, and send button.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" /** The scroll pane component for displaying the chat messages and enabling scrolling. */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" /** The container for displaying dialog boxes containing user and Duke messages. */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /** The input field where the user enters text messages. */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" /** The button for sending user messages or interacting with the application. */","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" /** The Duke instance that handles the application\u0027s logic. */","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" /** The user\u0027s avatar image. */","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" private final Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" /** Duke\u0027s avatar image. */","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" private final Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Initializes the `MainWindow` controller after the FXML has been loaded.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" * It binds the scroll pane\u0027s vertical value to the dialog container\u0027s height,","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * ensuring automatic scrolling as messages are added.","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" * Sets the Duke instance for the controller to enable communication with the Duke logic.","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" * @param d The Duke instance that handles the application\u0027s logic.","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" DialogBox.getDukeDialog(duke.initialise(), dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" * and then appends them to the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":82}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * Represents the user interface of the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" /** The current status or messages displayed to the user */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" private String currentStatus \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" * Changes the current status by appending a message.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param status The message to append to the current status.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" private void changeStatus(String status) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" currentStatus +\u003d status + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * Displays a welcome message to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Hello! I\u0027m Bob\");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"What can I do for you?\");","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" showLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" * Displays a horizontal line separator.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public void showLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"\");","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" * @param errorMessage The error message to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"☹ \" + errorMessage);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" * Displays a goodbye message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" public void showGoodbyeMessage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating matching tasks found based on the keyword search.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" * @param matchingTasks The list of matching tasks to display.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" public void showMatchingTasks(TaskList matchingTasks) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" changeStatus((i + 1) + \".\" + matchingTasks.get(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating no matching tasks were found based on the keyword search.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" public void showNoMatchingTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"No matching tasks found.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * Displays the list of tasks to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while displaying the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" public void showTaskList(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":" changeStatus((i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating that a task has been added to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while displaying the message.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Jweng88"},"content":" public void showTaskAddedMessage(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"Jweng88"},"content":" changeStatus(tasks.get(tasks.size() - 1).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating that a task has been marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task that has been marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while displaying the message.","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Jweng88"},"content":" public void showTaskMarkedAsDone(TaskList tasks, int taskIndex) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"Jweng88"},"content":" changeStatus(tasks.get(taskIndex).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating that a task has been marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task that has been marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while displaying the message.","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Jweng88"},"content":" public void showTaskMarkedAsUndone(TaskList tasks, int taskIndex) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"Jweng88"},"content":" changeStatus(tasks.get(taskIndex).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating that a task has been removed from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"Jweng88"},"content":" * @param removedTask The task that has been removed from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"Jweng88"},"content":" public void showTaskRemoved(TaskList tasks, Task removedTask) {","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"Jweng88"},"content":" changeStatus(removedTask.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Jweng88"},"content":" * Displays an error message indicating that tasks could not be loaded from a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"Jweng88"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Error loading tasks from file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"Jweng88"},"content":" * Gets the current status or messages displayed to the user and clears the status.","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"Jweng88"},"content":" * @return The current status or messages displayed to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"Jweng88"},"content":" public String getCurrentStatus() {","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"Jweng88"},"content":" String tmp \u003d currentStatus;","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"Jweng88"},"content":" this.currentStatus \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"Jweng88"},"content":" return tmp;","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":154}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"\u003c!-- FXML document for the DialogBox user interface --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Children elements within the DialogBox --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Label for displaying text content --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" \u003c!-- ImageView for displaying an image --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Padding settings for the DialogBox --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":29}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"\u003c!-- FXML document for the MainWindow user interface --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" \u003c!-- User input text field --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Send button --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Scroll pane for dialog container --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Dialog container for displaying messages --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":34}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" * A JUnit test class for the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * Sets up the test fixture.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * Creates a new TaskList object with an empty ArrayList.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" @BeforeEach","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" public void setup() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" taskList \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * Tests the addTask method of the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * Adds a new task to the task list and checks if the size of the task list is 1.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" public void testAddTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" Task task \u003d new ToDo(\"Test Task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" assertEquals(1, taskList.getTasks().size());","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" * Tests the deleteTask method of the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" * Adds a new task to the task list, deletes it, and checks if the size of the task list is 0.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while deleting the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" public void testDeleteTask() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" Task task \u003d new ToDo(\"Test Task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" assertEquals(0, taskList.getTasks().size());","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" * Tests the deleteTask method of the TaskList class with an invalid task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" * Expects a DukeException to be thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" public void testDeleteInvalidTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" assertThrows(DukeException.class, () -\u003e taskList.deleteTask(0));","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" * Tests the get method of the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" * Adds a new task to the task list, retrieves it, and checks if its string representation is correct.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while retrieving the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" public void testGetTask() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" Task task \u003d new ToDo(\"Test Task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" Task retrievedTask \u003d taskList.get(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][ ] Test Task\", retrievedTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * Tests the get method of the TaskList class with an invalid task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" * Expects a DukeException to be thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" public void testGetInvalidTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" assertThrows(DukeException.class, () -\u003e taskList.get(0));","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jweng88":84}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * A JUnit test class for the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * Tests the toString method of the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" public void testToString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][ ] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * Tests the markAsDone method of the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" public void testMarkAsDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][X] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * Tests the markAsNotDone method of the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void testMarkAsNotDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" todo.markAsNotDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][ ] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" * Tests the createTaskFromFormattedString method of the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" public void testCreateTaskFromFormattedString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" String formattedString \u003d \"T | 1 | Buy groceries\";","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" Task task \u003d Task.createTaskFromFormattedString(formattedString);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][X] Buy groceries\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jweng88":51}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"todo read book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"unmark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Jweng88":8}}] diff --git a/Jweng88_ip_master/commits.json b/Jweng88_ip_master/commits.json index db7cbc65..c85976db 100644 --- a/Jweng88_ip_master/commits.json +++ b/Jweng88_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Jweng88":[{"date":"2023-08-21","commitResults":[{"hash":"dac1aa2ac9c29351993b65715a21714a95d6ad26","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"2f45a14ce7e1f0656392bb462d239c216d73282d","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":2}}},{"hash":"18c5329e08bd4a402b6ac0e5a1362529a8340a33","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":2}}},{"hash":"95d56e2d798ef8485b371b83acf4797f17194a19","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":4}}}]},{"date":"2023-08-22","commitResults":[{"hash":"841c201595091aa3235988646148148400b65526","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":7}}},{"hash":"0e99208124afad1c71ae17c5751d495a817d64ef","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"7ee68268880869d730501b793a7f5e5e1f93d3d1","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":47}}},{"hash":"0e7d2b128acd43f6f11654834e9ac32f1857a149","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":30}}}]},{"date":"2023-08-26","commitResults":[{"hash":"8c7679b1fd7c7c6710ae17a37225d713134e13b0","isMergeCommit":false,"messageTitle":"Save tasks and load data from hard disk","messageBody":"The code now allows:\n* saving of tasks in hard disk automatically\n* loading of data from hard disk when chatbot starts up\n","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":87,"deletions":0}}},{"hash":"6ef43b7b8adc265fee980167ab4472c205cd50b2","isMergeCommit":false,"messageTitle":"Teach the chatbot to understand dates and times","messageBody":"The code will allow the chatbot to understand:\n\n* store deadline dates and times as a java.time.LocalDateTime in the task object\n* store start and end of event dates and times as java.time.LocalDateTime in the task object\n","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":12,"deletions":8}}}]},{"date":"2023-08-27","commitResults":[{"hash":"766be71e9c6189abd838e5623717a1a34947846b","isMergeCommit":false,"messageTitle":"Make the code more OOP","messageBody":"The code has been refactored to extract out closely related code as\n\nclasses which includes:\n\n* Abstract class: Command\n* Classes extending Command class: AddDeadlineCommand, AddEventCommand,\n\nAddTodoCommand, DeleteCommand, ExitCommand, ListCommand,\n\nMarkAsDoneCommand, MarkAsUndoneCommand\n\n* Classes: Ui, Storage, Parser, TaskList, Duke\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":402,"deletions":149}}},{"hash":"367caa0671c8f06925154d8e2328d54a03aee75f","isMergeCommit":false,"messageTitle":"Organise the classes into suitable java packages","messageBody":"The code has been organised into suitable java packages as followed:\n\n* An overall duke package\n* Packages in duke: command, exception, storage, task, ui\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":266,"deletions":167}}}]},{"date":"2023-08-28","commitResults":[{"hash":"cc988bb10d26bad1877c6f9a668b7f11bddbcc1d","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"c19aa75878a3ced6dcf85bc7d54f0a9577df331d","isMergeCommit":false,"messageTitle":"Add JUnit tests to test behaviour of the code","messageBody":"The code has two added test classes:\n\n* TaskListTest class -- tests for addTask, deleteTask, get,\ngetting and deleting invalid task\n\n* ToDoTest class -- tests for toString, markAsDone, markAsNotDone,\n\ncreateTaskFromFormattedString\n","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":7}}},{"hash":"1e4c3f28582ae48b9e6383adb17058b43b7d62cf","isMergeCommit":false,"messageTitle":"Package the App as a JAR file","messageBody":"Edited on the build.gradle file to successfully package the app\nto an executable JAR file.\n","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"8283ae90449348fd57f3eef24a5816168a0e6719","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to the code","messageBody":"Added header comments to all non-private classes/methods,\nand non-trivial private methods.\n","fileTypesAndContributionMap":{"java":{"insertions":510,"deletions":2}}},{"hash":"f716de49b063cf08435572c019ca3df0851ad922","isMergeCommit":false,"messageTitle":"Tweak the code to comply with the coding standard","messageBody":"The code now complies with the given coding standard.\n","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":50}}},{"hash":"d87c5ef9974cbac8298486a30cedfdd77c4ace17","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to the code","messageBody":"Added additional header comments to all class-level members.\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}},{"hash":"66bee48c1879f4d1ce3ea6b9139efbfb0b8fd105","isMergeCommit":false,"messageTitle":"Allows users to find tasks with a keyword","messageBody":"The code now allows the user to find a task by searching for a keyword.\n","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":1}}},{"hash":"78e6dcf9746ea5e6c6ca4fbab9849d6cd6fdb33c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"df4b56c0a85f78ebc635a1b43294efa462f1fc07","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Jweng88":{"java":1372,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":4,"txt":12}},"authorContributionVariance":{"Jweng88":94771.59},"authorDisplayNameMap":{"Jweng88":"CS2103T-T17-3 JOSH.. HAO"}} +{"authorDailyContributionsMap":{"Jweng88":[{"date":"2023-08-21","commitResults":[{"hash":"dac1aa2ac9c29351993b65715a21714a95d6ad26","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"2f45a14ce7e1f0656392bb462d239c216d73282d","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":2}}},{"hash":"18c5329e08bd4a402b6ac0e5a1362529a8340a33","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":2}}},{"hash":"95d56e2d798ef8485b371b83acf4797f17194a19","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":4}}}]},{"date":"2023-08-22","commitResults":[{"hash":"841c201595091aa3235988646148148400b65526","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":7}}},{"hash":"0e99208124afad1c71ae17c5751d495a817d64ef","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"7ee68268880869d730501b793a7f5e5e1f93d3d1","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":47}}},{"hash":"0e7d2b128acd43f6f11654834e9ac32f1857a149","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":30}}}]},{"date":"2023-08-26","commitResults":[{"hash":"8c7679b1fd7c7c6710ae17a37225d713134e13b0","isMergeCommit":false,"messageTitle":"Save tasks and load data from hard disk","messageBody":"The code now allows:\n* saving of tasks in hard disk automatically\n* loading of data from hard disk when chatbot starts up\n","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":87,"deletions":0}}},{"hash":"6ef43b7b8adc265fee980167ab4472c205cd50b2","isMergeCommit":false,"messageTitle":"Teach the chatbot to understand dates and times","messageBody":"The code will allow the chatbot to understand:\n\n* store deadline dates and times as a java.time.LocalDateTime in the task object\n* store start and end of event dates and times as java.time.LocalDateTime in the task object\n","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":12,"deletions":8}}}]},{"date":"2023-08-27","commitResults":[{"hash":"766be71e9c6189abd838e5623717a1a34947846b","isMergeCommit":false,"messageTitle":"Make the code more OOP","messageBody":"The code has been refactored to extract out closely related code as\n\nclasses which includes:\n\n* Abstract class: Command\n* Classes extending Command class: AddDeadlineCommand, AddEventCommand,\n\nAddTodoCommand, DeleteCommand, ExitCommand, ListCommand,\n\nMarkAsDoneCommand, MarkAsUndoneCommand\n\n* Classes: Ui, Storage, Parser, TaskList, Duke\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":402,"deletions":149}}},{"hash":"367caa0671c8f06925154d8e2328d54a03aee75f","isMergeCommit":false,"messageTitle":"Organise the classes into suitable java packages","messageBody":"The code has been organised into suitable java packages as followed:\n\n* An overall duke package\n* Packages in duke: command, exception, storage, task, ui\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":266,"deletions":167}}}]},{"date":"2023-08-28","commitResults":[{"hash":"cc988bb10d26bad1877c6f9a668b7f11bddbcc1d","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"c19aa75878a3ced6dcf85bc7d54f0a9577df331d","isMergeCommit":false,"messageTitle":"Add JUnit tests to test behaviour of the code","messageBody":"The code has two added test classes:\n\n* TaskListTest class -- tests for addTask, deleteTask, get,\ngetting and deleting invalid task\n\n* ToDoTest class -- tests for toString, markAsDone, markAsNotDone,\n\ncreateTaskFromFormattedString\n","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":7}}},{"hash":"1e4c3f28582ae48b9e6383adb17058b43b7d62cf","isMergeCommit":false,"messageTitle":"Package the App as a JAR file","messageBody":"Edited on the build.gradle file to successfully package the app\nto an executable JAR file.\n","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"8283ae90449348fd57f3eef24a5816168a0e6719","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to the code","messageBody":"Added header comments to all non-private classes/methods,\nand non-trivial private methods.\n","fileTypesAndContributionMap":{"java":{"insertions":510,"deletions":2}}},{"hash":"f716de49b063cf08435572c019ca3df0851ad922","isMergeCommit":false,"messageTitle":"Tweak the code to comply with the coding standard","messageBody":"The code now complies with the given coding standard.\n","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":50}}},{"hash":"d87c5ef9974cbac8298486a30cedfdd77c4ace17","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to the code","messageBody":"Added additional header comments to all class-level members.\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}},{"hash":"66bee48c1879f4d1ce3ea6b9139efbfb0b8fd105","isMergeCommit":false,"messageTitle":"Allows users to find tasks with a keyword","messageBody":"The code now allows the user to find a task by searching for a keyword.\n","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":1}}},{"hash":"78e6dcf9746ea5e6c6ca4fbab9849d6cd6fdb33c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"df4b56c0a85f78ebc635a1b43294efa462f1fc07","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"e6d4ffdc7260c50d2c42f78494326613767319cb","isMergeCommit":false,"messageTitle":"Add a GUI to the chatbot","messageBody":"The code uses the JavaFX technology to implement the GUI.\n\nUsers can now interact with the chatbot using the GUI\nrather than the text-based UI.\n","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":63,"deletions":0},"java":{"insertions":317,"deletions":60}}},{"hash":"182565f2664f7a234b9bdd2aaec734289ef109bd","isMergeCommit":false,"messageTitle":"Use checkStyle to detect coding style violations","messageBody":"The code now follows the coding style guidelines.\n","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":22,"deletions":21}}}]},{"date":"2023-09-06","commitResults":[{"hash":"7db9ebe5c46e68b6d571c16f0baf73d2abcc4b20","isMergeCommit":false,"messageTitle":"Use checkStyle to detect coding style violations","messageBody":"In the previous commit,\nthe code had some violations in the coding style.\n\nThe code now follows coding style guidelines\nwhile adding GUI to the chatbot.\n","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":20,"deletions":18}}},{"hash":"560526547c32e37fe9c2b4aed93f44d50fb47407","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Jweng88":{"java":1630,"md":0,"fxml":63,"sh":0,"bat":0,"gradle":24,"txt":12}},"authorContributionVariance":{"Jweng88":74661.125},"authorDisplayNameMap":{"Jweng88":"CS2103T-T17-3 JOSH.. HAO"}} diff --git a/Kokseng1_ip_master/authorship.json b/Kokseng1_ip_master/authorship.json index 90830bcd..3fe39f26 100644 --- a/Kokseng1_ip_master/authorship.json +++ b/Kokseng1_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" implementation \u0027org.junit.jupiter:junit-jupiter-api:5.10.0\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" implementation \u0027org.junit.jupiter:junit-jupiter:5.10.0\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Kokseng1":4,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.TaskParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * main program, responsible for running everything and connecting components together","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" * types of task","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" public enum TaskType {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" BYE,","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" LIST,","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" MARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" UNMARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" DELETE,","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" EVENT,","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" TODO,","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" DEADLINE","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * keeps reading commands and responding accordingly, until command is \"bye\"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" public static void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" Ui.printGreeting();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" String inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" TaskType taskType \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" while (taskType !\u003d TaskType.BYE) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" taskType \u003d Parser.parseType(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" taskList.updateFromStorage(); //load tasks from hard drive if it is available, into taskList","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" case LIST: {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" taskList.printList();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" case MARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getMarkIndex(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" taskList.markTask(tasknum);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" case UNMARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getUnmarkIndex(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" taskList.unmarkTask(tasknum);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" case TODO:","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" case EVENT:","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d Parser.parseTask(inputString, taskType);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" taskList.addTask(nextTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" case DELETE: {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" taskList.deleteTask(Parser.getDeleteIndex(inputString));","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"I can\u0027t identify your command!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" taskList.saveList();","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" taskType \u003d Parser.parseType(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" Ui.print(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" } catch (TaskParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" Ui.print(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" Duke.run();","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":90,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Kokseng1":87,"-":3}},{"path":"src/main/java/duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.TaskParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"public class DukeTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" public void parseTypeTest() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" Duke.TaskType result \u003d Parser.parseType(\"Todo make\");","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" assertEquals(Duke.TaskType.TODO, result);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" } catch (TaskParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" public void parseTaskTest() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" Task expected \u003d new Deadline(false, \"deadline return book /by 2019-12-02\");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" Task result \u003d Parser.parseTask(\"deadline return book /by 2019-12-02\", Duke.TaskType.DEADLINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" assertEquals(expected.toString(), result.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" public void markTasFromTaskListTest(){","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" Task expected \u003d new Todo(true, \"todo mark\");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" list.addTask(new Todo(false, \"todo mark\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" list.markTask(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" Task result \u003d list.getTask(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" assertEquals(result.toString(), expected.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Kokseng1":53}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.TaskParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * parser to make sense of user commands, parsing from command to action","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * if command is delete, use this method to get the index of task user wants to delete","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" * @param text original command","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" * @return Integer representing the index of task to be deleted","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" public static Integer getDeleteIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * if command is mark, use this method to get the index of task user wants to mark","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * @param text original command","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * @return Integer representing the index of task to be marked","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" public static Integer getMarkIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" * if command is unmark, use this method to get the index of task user wants to unmark","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" * @param text original command","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" * @return Integer representing the index of task to be unmarked","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" public static Integer getUnmarkIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" * given a TaskType, parses a text into a task of that type","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" * @param text original user input","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" * @param type type of task that user specified","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" * @return task constructed according to user input","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" public static Task parseTask(String text, Duke.TaskType type) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" switch (type) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" case TODO: {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" return new Todo(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" case DEADLINE: {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/by\") || text.length() \u003c\u003d text.indexOf(\"/by\") + 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the deadline ends!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" return new Deadline(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" case EVENT: {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/from\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the event starts!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/to\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the event ends!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" return new Event(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Not a task!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" * make sense of what TaskType the user is trying to create from the first word of their input","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" * @param text user input","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" * @return TaskType according to user input","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException Some components of the command may be missing for certain tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" * @throws TaskParseException unable to understand what TaskType the user is trying to create","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" public static Duke.TaskType parseType(String text) throws DukeException, TaskParseException {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" String[] textParts \u003d text.split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" String firstWord \u003d textParts[0].toLowerCase();","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" if (textParts.length \u003c\u003d 1 \u0026\u0026 !firstWord.equals(\"list\") \u0026\u0026 !firstWord.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to write the task\");","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" switch (textParts[0].toLowerCase()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" case \"list\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.LIST;","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.MARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.UNMARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" case \"deadline\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.DEADLINE;","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" case \"event\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.EVENT;","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Kokseng1"},"content":" case \"todo\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.TODO;","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Kokseng1"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.DELETE;","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Kokseng1"},"content":" case \"bye\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.BYE;","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"Kokseng1"},"content":" throw new TaskParseException(\"Not a TaskType\");","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":125}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" * Saves and loads tasks to hard drive in String form","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":"class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * name of file and path which the data is to be stored","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" static final String FILE_NAME \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" * check if file that is to be written to and loaded from exists, if","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" * it does not, create one","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" static void checkFileExists() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" Path path \u003d Paths.get(FILE_NAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"data file not found, creating a new one\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" Path dirPath \u003d Paths.get(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" Files.createDirectories(dirPath);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" File file \u003d new File(FILE_NAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" * wipes file and save tasks given in param to hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" * @param tasks ArrayList of tasks to be saved","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" public static void saveTask(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" checkFileExists();","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" try (FileWriter fileWriter \u003d new FileWriter(FILE_NAME)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" String text \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.getisDone()","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"T|\" + done + \"|\" + desc;","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.getisDone()","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" LocalDate from \u003d ((Event) task).getFrom();","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" LocalDate to \u003d ((Event) task).getTo();","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"E|\" + done + \"|\" + desc + \"|\" + from + \"|\" + to;","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.getisDone()","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" LocalDate by \u003d ((Deadline) task).getBy();","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"D|\" + done + \"|\" + desc + \"|\" + by;","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" fileWriter.write(text + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" * loads task from hard drive and returns it","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" * @return ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if there are no tasks in the hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" public static ArrayList\u003cTask\u003e loadTasks() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" checkFileExists();","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" Scanner sc \u003d new Scanner(new File(FILE_NAME));","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" String next \u003d sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d Task.parse(next);","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" tasks.add(nextTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks\");","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":104}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * contains the list of tasks, and provides methods to edit the list and interact with storage/hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"public class TaskList {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" * ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" private ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" * constructor","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" public TaskList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * saves current tasks to hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" public void saveList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" Storage.saveTask(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" * loads tasks from hard drive into tasks, prints a message if there","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" * are no tasks found","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" public void updateFromStorage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" tasks \u003d Storage.loadTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"No tasks found in storage, starting new list\");","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" * prints the list of task in their string format,","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" * each task starts on a new line","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if there are no tasks in the list","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" public void printList() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks yet\");","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" Ui.print((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" * add a task to the current list","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" * @param task task to be added","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Got it. I\u0027ve added this task: \\n\" + task + \"\\nnow you have \"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" * deletes a task from the list","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task which is to be deleted","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if index is out of range or there are no tasks to delete","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" public void deleteTask(int i) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" if (tasks.size() \u003c\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks to delete\");","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" } else if (tasks.size() \u003c i) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task.Task index out of range\");","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" Task deleted \u003d tasks.remove(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Noted. I\u0027ve removed this task:\\n\" + deleted + \"\\nNow you have \"","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" * marks a task at an index as done","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task to be marked as done","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is already done","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" public void markTask(int i) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" tasks.get(i).mark();","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" * unmarks task at an index as undone","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task which is to be marked undone","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is still undone","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" public void unmarkTask(int i) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" tasks.get(i).unmark();","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" * getter for task from list","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task to be gotten","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" * @return task at index i","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" public Task getTask(int i) {","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" return tasks.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":107}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" * responsible for printing messages and recieving commands","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * scanner to read input","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" private static final Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * read and returns command","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" * @return String of user input","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" public static String readCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * prints a message to the user","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * @param message String message to be printed","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" public static void print(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" * greeting to be printed at start of program","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" public static void printGreeting() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" String name \u003d \"Chaty\";","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\"Hello! I\u0027m \" + name + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" + \"What can I do for you?\" + \"\\n\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":39}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" * Represents a Duke exclusive error, not including parsing between String and Task","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * public onstructor, returns a \u003ccode\u003eDukeException\u003c/code\u003e instance","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * @param message message that is to be displayed","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":14}},{"path":"src/main/java/duke/exceptions/TaskParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" * Represents a parsing error between String and Task","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"public class TaskParseException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * public onstructor, returns a \u003ccode\u003eTaskParseException\u003c/code\u003e instance","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * @param message message that is to be displayed","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" public TaskParseException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":14}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * Represents a Task of Deadline type, has a \u003ccode\u003eby\u003c/code\u003e that indicates when the task should be done","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * by. \u003ccode\u003eby\u003c/code\u003e is stored in \u003ccode\u003eLocalDate\u003c/code\u003e format.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * indicates when the task should be done","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" private final LocalDate by;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" * Constructor, returns a \u003ccode\u003eDeadline\u003c/code\u003e instance","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the task is done or not","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * @param desc description or name of the task, and when the task must be done by, in","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * \"YYYY-MM-DD\" format","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException error if incorrect format is used for by date and is unable to be parsed","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" public Deadline(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(9, desc.indexOf(\"/by\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" String byString \u003d desc.substring(desc.indexOf(\"/by\") + 4).replace(\" \", \"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" this.by \u003d LocalDate.parse(byString);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Incorrect date format! Use eg.2019-12-02\");","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" * getter for \u003ccode\u003eby\u003c/code\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" * @return LocalDate by","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" public LocalDate getBy() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" return this.by;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" * String representation of Deadline, including task type, if task is done, by date and task name","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" * @return String representation of Deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" return \"[D]\" + super.toString() + \"(by: \" + this.by.format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":53}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * Represents a Task of Event type, has a \u003ccode\u003eto\u003c/code\u003e and \u003ccode\u003efrom\u003c/code\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * \u003ccode\u003eto\u003c/code\u003e and \u003ccode\u003efrom\u003c/code\u003e is stored in \u003ccode\u003eLocalDate\u003c/code\u003e format.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * when the event starts","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" private final LocalDate from;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" * when the event ends","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" private final LocalDate to;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * constructor for Event, returns an Event","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the event is done or over","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" * @param desc name of the event, when is it from, indicated by /from and when is it to","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" * , indicated by \u003ccode\u003eto\u003c/code\u003e. Both must be in YYYY-MM-DD format","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException throws an error if the date is unable to be parsed, likely due","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" * to wrong format","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" public Event(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(6, desc.indexOf(\"/from\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" int fromIndex \u003d desc.indexOf(\"/from\");","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" int toIndex \u003d desc.indexOf(\"/to\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" String fromString \u003d desc.substring(fromIndex + 6, toIndex).replace(\" \", \"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" String toString \u003d desc.substring(toIndex + 4).replace(\" \", \"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" this.from \u003d LocalDate.parse(fromString);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" this.to \u003d LocalDate.parse(toString);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You didn\u0027t enter the event in the correct format!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Incorrect date format! Use eg.2019-12-02\");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" * getter for from date","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" * @return LocalDate from","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" public LocalDate getFrom() {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" return this.from;","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" * getter for to date","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" * @return LocalDate to","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" public LocalDate getTo() {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" return this.to;","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" * String representation of Event, including task type, if task is done, from and to date, and task name","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" * @return String representation of Deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" return \"[E]\" + super.toString() + \"(from: \" + this.from.format(formatter)","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" + \" to: \" + this.to.format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":73}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" * Represents a Task, a supertype of Event, Deadline and Todo","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * \u003ccode\u003eisDone\u003c/code\u003e shows whether the task is completed","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" * name of task","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" private final String description;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" * whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" * constructor, should not be used because this is an abstract class. For initialising description","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" * and isDone only","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * @param description name of task","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" public Task(boolean done, String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d done;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" * getter for boolean isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" * @return boolean isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" public boolean getisDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" return this.isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" * getter for descriptions","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" * @return","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" return this.description;","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" * marks the task as done, if it is undone","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is already done","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" public void mark() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task already done\");","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Nice! I\u0027ve marked this task as done:\\n\" + toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" * unmarks the task as undone, if it is done","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is still undone","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" public void unmark() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" if (!this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task still undone\");","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"OK, I\u0027ve marked this task as not done yet:\\n\" + toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" * get String representation of whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" * @return \u003ccode\u003e\"X\"\u003c/code\u003e for done, \" \" for undone","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" * String representation of task, including whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" * @return string representation of task","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" return (\"[\" + this.getStatusIcon() + \"] \" + this.description);","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" * converts hard drive\u0027s String format of a task into an actual task item","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" * @param text String from hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" * @return task item","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if string cannot be recognised and cannot be parsed into a task","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" public static Task parse(String text) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" String[] parts \u003d text.split(\"\\\\|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" String first \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" Task task;","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" boolean done \u003d parts[1].equals(\"1\"); // 1 \u003d done, 0 \u003d undone","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" switch (first) {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Todo(done, \"todo \" + description);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Event(done, \"event \" + description + \" /from \" + from + \" /to \" + to);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Kokseng1"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Kokseng1"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Deadline(done, \"deadline \" + description + \" /by \" + by);","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Kokseng1"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Unable to parse from hard drive\");","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Kokseng1"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":118}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" * Represents a task of Todo type","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * constructor, returns a todo instance","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" * @param desc name of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" public Todo(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(5));","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" if (desc.substring(5).isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to enter the task!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * String representation of item, including indication of tasktype (todo)","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * @return string representation of todo","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":30}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"todo read book","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"todo","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"deadline return book /by 2019-12-02","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"deadline return book","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"event project meeting /from 2019-12-02 /to 2019-12-03","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"delete 3","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Kokseng1":15}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java*.java","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Kokseng1":2,"-":19}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" implementation \u0027org.junit.jupiter:junit-jupiter-api:5.10.0\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" implementation \u0027org.junit.jupiter:junit-jupiter:5.10.0\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Kokseng1":4,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.TaskParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * main program, responsible for running everything and connecting components together","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" * types of task","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" public enum TaskType {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" BYE,","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" LIST,","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" MARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" UNMARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" DELETE,","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" EVENT,","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" TODO,","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" DEADLINE,","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" FIND","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" * keeps reading commands and responding accordingly, until command is \"bye\"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" public static void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" Ui.printGreeting();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" String inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" TaskType taskType \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" while (taskType !\u003d TaskType.BYE) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" taskType \u003d Parser.parseType(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" taskList.updateFromStorage(); //load tasks from hard drive if it is available, into taskList","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" case LIST: {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" taskList.printList();","lastModifiedDate":"2023-09-03"},{"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":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" case MARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getMarkIndex(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" taskList.markTask(tasknum);","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-08-28"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" case UNMARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getUnmarkIndex(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" taskList.unmarkTask(tasknum);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" case TODO:","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" case EVENT:","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d Parser.parseTask(inputString, taskType);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" taskList.addTask(nextTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" case DELETE: {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" taskList.deleteTask(Parser.getDeleteIndex(inputString));","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" case FIND: {","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" ArrayList\u003cTask\u003e list \u003d taskList.find(inputString);","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" if (list.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"there are no matching tasks!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" Ui.printArrayList(list);","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"I can\u0027t identify your command!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" taskList.saveList();","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" taskType \u003d Parser.parseType(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" Ui.print(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" } catch (TaskParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" Ui.print(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" Duke.run();","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":105,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Kokseng1":102,"-":3}},{"path":"src/main/java/duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.TaskParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"public class DukeTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" public void parseTypeTest() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" Duke.TaskType result \u003d Parser.parseType(\"Todo make\");","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" assertEquals(Duke.TaskType.TODO, result);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" } catch (TaskParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" public void parseTaskTest() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" Task expected \u003d new Deadline(false, \"deadline return book /by 2019-12-02\");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" Task result \u003d Parser.parseTask(\"deadline return book /by 2019-12-02\", Duke.TaskType.DEADLINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" assertEquals(expected.toString(), result.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" public void markTasFromTaskListTest(){","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" Task expected \u003d new Todo(true, \"todo mark\");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" list.addTask(new Todo(false, \"todo mark\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" list.markTask(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" Task result \u003d list.getTask(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" assertEquals(result.toString(), expected.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Kokseng1":53}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.TaskParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * parser to make sense of user commands, parsing from command to action","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * if command is delete, use this method to get the index of task user wants to delete","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" * @param text original command","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" * @return Integer representing the index of task to be deleted","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" public static Integer getDeleteIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * if command is mark, use this method to get the index of task user wants to mark","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * @param text original command","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * @return Integer representing the index of task to be marked","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" public static Integer getMarkIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" * if command is unmark, use this method to get the index of task user wants to unmark","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" * @param text original command","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" * @return Integer representing the index of task to be unmarked","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" public static Integer getUnmarkIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" * given a TaskType, parses a text into a task of that type","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" * @param text original user input","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" * @param type type of task that user specified","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" * @return task constructed according to user input","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" public static Task parseTask(String text, Duke.TaskType type) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" switch (type) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" case TODO: {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" return new Todo(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" case DEADLINE: {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/by\") || text.length() \u003c\u003d text.indexOf(\"/by\") + 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the deadline ends!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" return new Deadline(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" case EVENT: {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/from\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the event starts!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/to\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the event ends!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" return new Event(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Not a task!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" * make sense of what TaskType the user is trying to create from the first word of their input","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" * @param text user input","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" * @return TaskType according to user input","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException Some components of the command may be missing for certain tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" * @throws TaskParseException unable to understand what TaskType the user is trying to create","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" public static Duke.TaskType parseType(String text) throws DukeException, TaskParseException {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" String[] textParts \u003d text.split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" String firstWord \u003d textParts[0].toLowerCase();","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" if (textParts.length \u003c\u003d 1 \u0026\u0026 !firstWord.equals(\"list\") \u0026\u0026 !firstWord.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to write the task\");","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" switch (textParts[0].toLowerCase()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" case \"list\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.LIST;","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.MARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.UNMARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" case \"deadline\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.DEADLINE;","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" case \"event\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.EVENT;","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Kokseng1"},"content":" case \"todo\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.TODO;","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Kokseng1"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.DELETE;","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Kokseng1"},"content":" case \"bye\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.BYE;","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"Kokseng1"},"content":" case \"find\": {","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.FIND;","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":123,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":124,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Kokseng1"},"content":" throw new TaskParseException(\"Not a TaskType\");","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":129}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" * Saves and loads tasks to hard drive in String form","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":"class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * name of file and path which the data is to be stored","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" static final String FILE_NAME \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" * check if file that is to be written to and loaded from exists, if","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" * it does not, create one","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" static void checkFileExists() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" Path path \u003d Paths.get(FILE_NAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"data file not found, creating a new one\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" Path dirPath \u003d Paths.get(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" Files.createDirectories(dirPath);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" File file \u003d new File(FILE_NAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" * wipes file and save tasks given in param to hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" * @param tasks ArrayList of tasks to be saved","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" public static void saveTask(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" checkFileExists();","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" try (FileWriter fileWriter \u003d new FileWriter(FILE_NAME)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" String text \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.getisDone()","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"T|\" + done + \"|\" + desc;","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.getisDone()","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" LocalDate from \u003d ((Event) task).getFrom();","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" LocalDate to \u003d ((Event) task).getTo();","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"E|\" + done + \"|\" + desc + \"|\" + from + \"|\" + to;","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.getisDone()","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" LocalDate by \u003d ((Deadline) task).getBy();","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"D|\" + done + \"|\" + desc + \"|\" + by;","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" fileWriter.write(text + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" * loads task from hard drive and returns it","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" * @return ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if there are no tasks in the hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" public static ArrayList\u003cTask\u003e loadTasks() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" checkFileExists();","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" Scanner sc \u003d new Scanner(new File(FILE_NAME));","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" String next \u003d sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d Task.parse(next);","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" tasks.add(nextTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks\");","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":104}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * contains the list of tasks, and provides methods to edit the list and interact with storage/hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"public class TaskList {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" * ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" private ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" * constructor","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" public TaskList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * saves current tasks to hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" public void saveList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" Storage.saveTask(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" * loads tasks from hard drive into tasks, prints a message if there","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" * are no tasks found","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" public void updateFromStorage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" tasks \u003d Storage.loadTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"No tasks found in storage, starting new list\");","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" * prints the list of task in their string format,","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" * each task starts on a new line","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if there are no tasks in the list","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" public void printList() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks yet\");","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" Ui.printArrayList(tasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" * add a task to the current list","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" * @param task task to be added","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Got it. I\u0027ve added this task: \\n\" + task + \"\\nnow you have \"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" * deletes a task from the list","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task which is to be deleted","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if index is out of range or there are no tasks to delete","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" public void deleteTask(int i) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" if (tasks.size() \u003c\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks to delete\");","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" } else if (tasks.size() \u003c i) {","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task.Task index out of range\");","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" Task deleted \u003d tasks.remove(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Noted. I\u0027ve removed this task:\\n\" + deleted + \"\\nNow you have \"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" * marks a task at an index as done","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task to be marked as done","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is already done","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" public void markTask(int i) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" tasks.get(i).mark();","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" * unmarks task at an index as undone","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task which is to be marked undone","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is still undone","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" public void unmarkTask(int i) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" tasks.get(i).unmark();","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" * getter for task from list","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task to be gotten","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" * @return task at index i","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" public Task getTask(int i) {","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" return tasks.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":" * find tasks containing a certain word","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"Kokseng1"},"content":" * @param word word to look for","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"Kokseng1"},"content":" * @return ArrayList of Tasks containing the word","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"Kokseng1"},"content":" public ArrayList\u003cTask\u003e find(String word) {","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"Kokseng1"},"content":" String wordToFind \u003d word.split(\" \")[1];","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"Kokseng1"},"content":" ArrayList\u003cTask\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"Kokseng1"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"Kokseng1"},"content":" if (task.getDescription().contains(wordToFind)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"Kokseng1"},"content":" result.add(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"Kokseng1"},"content":" return result;","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":121}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * responsible for printing messages and recieving commands","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" * scanner to read input","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" private static final Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" * read and returns command","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" * @return String of user input","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" public static String readCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * prints a message to the user","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" * @param message String message to be printed","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" public static void print(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" * greeting to be printed at start of program","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" public static void printGreeting() {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" String name \u003d \"Chaty\";","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\"Hello! I\u0027m \" + name + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" + \"What can I do for you?\" + \"\\n\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" public static void printArrayList(ArrayList list) {","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" Ui.print((i + 1) + \".\" + list.get(i));","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":48}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" * Represents a Duke exclusive error, not including parsing between String and Task","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * public onstructor, returns a \u003ccode\u003eDukeException\u003c/code\u003e instance","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * @param message message that is to be displayed","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":14}},{"path":"src/main/java/duke/exceptions/TaskParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" * Represents a parsing error between String and Task","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"public class TaskParseException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * public onstructor, returns a \u003ccode\u003eTaskParseException\u003c/code\u003e instance","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * @param message message that is to be displayed","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" public TaskParseException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":14}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * Represents a Task of Deadline type, has a \u003ccode\u003eby\u003c/code\u003e that indicates when the task should be done","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * by. \u003ccode\u003eby\u003c/code\u003e is stored in \u003ccode\u003eLocalDate\u003c/code\u003e format.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * indicates when the task should be done","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" private final LocalDate by;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" * Constructor, returns a \u003ccode\u003eDeadline\u003c/code\u003e instance","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the task is done or not","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * @param desc description or name of the task, and when the task must be done by, in","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * \"YYYY-MM-DD\" format","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException error if incorrect format is used for by date and is unable to be parsed","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" public Deadline(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(9, desc.indexOf(\"/by\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" String byString \u003d desc.substring(desc.indexOf(\"/by\") + 4).replace(\" \", \"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" this.by \u003d LocalDate.parse(byString);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Incorrect date format! Use eg.2019-12-02\");","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" * getter for \u003ccode\u003eby\u003c/code\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" * @return LocalDate by","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" public LocalDate getBy() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" return this.by;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" * String representation of Deadline, including task type, if task is done, by date and task name","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" * @return String representation of Deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" return \"[D]\" + super.toString() + \"(by: \" + this.by.format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":53}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * Represents a Task of Event type, has a \u003ccode\u003eto\u003c/code\u003e and \u003ccode\u003efrom\u003c/code\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * \u003ccode\u003eto\u003c/code\u003e and \u003ccode\u003efrom\u003c/code\u003e is stored in \u003ccode\u003eLocalDate\u003c/code\u003e format.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * when the event starts","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" private final LocalDate from;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" * when the event ends","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" private final LocalDate to;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * constructor for Event, returns an Event","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the event is done or over","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" * @param desc name of the event, when is it from, indicated by /from and when is it to","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" * , indicated by \u003ccode\u003eto\u003c/code\u003e. Both must be in YYYY-MM-DD format","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException throws an error if the date is unable to be parsed, likely due","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" * to wrong format","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" public Event(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(6, desc.indexOf(\"/from\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" int fromIndex \u003d desc.indexOf(\"/from\");","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" int toIndex \u003d desc.indexOf(\"/to\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" String fromString \u003d desc.substring(fromIndex + 6, toIndex).replace(\" \", \"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" String toString \u003d desc.substring(toIndex + 4).replace(\" \", \"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" this.from \u003d LocalDate.parse(fromString);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" this.to \u003d LocalDate.parse(toString);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You didn\u0027t enter the event in the correct format!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Incorrect date format! Use eg.2019-12-02\");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" * getter for from date","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" * @return LocalDate from","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" public LocalDate getFrom() {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" return this.from;","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" * getter for to date","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" * @return LocalDate to","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" public LocalDate getTo() {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" return this.to;","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" * String representation of Event, including task type, if task is done, from and to date, and task name","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" * @return String representation of Deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" return \"[E]\" + super.toString() + \"(from: \" + this.from.format(formatter)","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" + \" to: \" + this.to.format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":73}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" * Represents a Task, a supertype of Event, Deadline and Todo","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * \u003ccode\u003eisDone\u003c/code\u003e shows whether the task is completed","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" * name of task","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" private final String description;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" * whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" * constructor, should not be used because this is an abstract class. For initialising description","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" * and isDone only","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * @param description name of task","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" public Task(boolean done, String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d done;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" * getter for boolean isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" * @return boolean isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" public boolean getisDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" return this.isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" * getter for descriptions","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" * @return","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" return this.description;","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" * marks the task as done, if it is undone","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is already done","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" public void mark() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task already done\");","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Nice! I\u0027ve marked this task as done:\\n\" + toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" * unmarks the task as undone, if it is done","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is still undone","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" public void unmark() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" if (!this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task still undone\");","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"OK, I\u0027ve marked this task as not done yet:\\n\" + toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" * get String representation of whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" * @return \u003ccode\u003e\"X\"\u003c/code\u003e for done, \" \" for undone","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" * String representation of task, including whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" * @return string representation of task","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" return (\"[\" + this.getStatusIcon() + \"] \" + this.description);","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" * converts hard drive\u0027s String format of a task into an actual task item","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" * @param text String from hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" * @return task item","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if string cannot be recognised and cannot be parsed into a task","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" public static Task parse(String text) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" String[] parts \u003d text.split(\"\\\\|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" String first \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" Task task;","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" boolean done \u003d parts[1].equals(\"1\"); // 1 \u003d done, 0 \u003d undone","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" switch (first) {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Todo(done, \"todo \" + description);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Event(done, \"event \" + description + \" /from \" + from + \" /to \" + to);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Kokseng1"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Kokseng1"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Deadline(done, \"deadline \" + description + \" /by \" + by);","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Kokseng1"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Unable to parse from hard drive\");","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Kokseng1"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":118}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" * Represents a task of Todo type","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * constructor, returns a todo instance","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" * @param desc name of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" public Todo(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(5));","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" if (desc.substring(5).isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to enter the task!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * String representation of item, including indication of tasktype (todo)","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * @return string representation of todo","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":30}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"todo read book","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"todo","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"deadline return book /by 2019-12-02","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"deadline return book","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"event project meeting /from 2019-12-02 /to 2019-12-03","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"delete 3","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Kokseng1":15}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java*.java","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Kokseng1":2,"-":19}}] diff --git a/Kokseng1_ip_master/commits.json b/Kokseng1_ip_master/commits.json index 8096e51a..15d32e1b 100644 --- a/Kokseng1_ip_master/commits.json +++ b/Kokseng1_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Kokseng1":[{"date":"2023-08-23","commitResults":[{"hash":"5437d9a251d312b0c589135871c0925aad4ed482","isMergeCommit":false,"messageTitle":"lvl0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"5e8695955e97d167b6ad020761fd92a88503a944","isMergeCommit":false,"messageTitle":"lvl1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":2}}},{"hash":"5e7db755627af945303b5a36167afa5402cac3f8","isMergeCommit":false,"messageTitle":"lvl2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"e6ea6dc8966cda93d1c27acea70d7e3a4296c4e0","isMergeCommit":false,"messageTitle":"lvl3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":4}}},{"hash":"b8beb55918337818df99ebb1c29c19480a822b7b","isMergeCommit":false,"messageTitle":"lvl4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":4}}},{"hash":"83b988fb28add0a26169e11c33267a66fe644c11","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"ef2a2e6dbb28c8ac310224790069914f7c80748d","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"3ee355ea6900f7dbd9e475a6393ff08c54f3b186","isMergeCommit":false,"messageTitle":"lvl6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":33,"deletions":24}}}]},{"date":"2023-08-28","commitResults":[{"hash":"2bc16fc54b63c437edbe68306a3217788a995eaa","isMergeCommit":false,"messageTitle":"add taskfile","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":174,"deletions":134},"bat":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"8b1fd67baa65d3eb7421d9c5d16126331a3af11a","isMergeCommit":false,"messageTitle":"lvl 7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":24}}},{"hash":"07c02e8afd9cda034bcf72489f7b785cdd91b6f7","isMergeCommit":false,"messageTitle":"change if else statement to switch in Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":58}}},{"hash":"e199ebc6ec21b2b212ff5631c16d22b49917c780","isMergeCommit":false,"messageTitle":"lvl 8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":42,"deletions":18}}}]},{"date":"2023-09-03","commitResults":[{"hash":"0a721863d7afb1018a6870f03021a1a8fd4f6cb8","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":10},"java":{"insertions":272,"deletions":130}}}]},{"date":"2023-09-04","commitResults":[{"hash":"9cab895397e0a23e34a0f01843414cbd2ef313cd","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":457,"deletions":149},"bat":{"insertions":1,"deletions":1}}},{"hash":"bece3551aa2dc04b47d52e5ffd7be5f06b335361","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"47d8d2d4804d7abc96657add5f6460ff611d3877","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"d1725d6ac2f1b885d0f2432423a6c4b5547da4a2","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":1},"java":{"insertions":62,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"Kokseng1":{"java":817,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":4,"txt":15}},"authorContributionVariance":{"Kokseng1":30626.846},"authorDisplayNameMap":{"Kokseng1":"CS2103T-W13-1 NG K..SENG"}} +{"authorDailyContributionsMap":{"Kokseng1":[{"date":"2023-08-23","commitResults":[{"hash":"5437d9a251d312b0c589135871c0925aad4ed482","isMergeCommit":false,"messageTitle":"lvl0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"5e8695955e97d167b6ad020761fd92a88503a944","isMergeCommit":false,"messageTitle":"lvl1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":2}}},{"hash":"5e7db755627af945303b5a36167afa5402cac3f8","isMergeCommit":false,"messageTitle":"lvl2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"e6ea6dc8966cda93d1c27acea70d7e3a4296c4e0","isMergeCommit":false,"messageTitle":"lvl3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":4}}},{"hash":"b8beb55918337818df99ebb1c29c19480a822b7b","isMergeCommit":false,"messageTitle":"lvl4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":4}}},{"hash":"83b988fb28add0a26169e11c33267a66fe644c11","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"ef2a2e6dbb28c8ac310224790069914f7c80748d","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"3ee355ea6900f7dbd9e475a6393ff08c54f3b186","isMergeCommit":false,"messageTitle":"lvl6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":33,"deletions":24}}}]},{"date":"2023-08-28","commitResults":[{"hash":"2bc16fc54b63c437edbe68306a3217788a995eaa","isMergeCommit":false,"messageTitle":"add taskfile","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":174,"deletions":134},"bat":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"8b1fd67baa65d3eb7421d9c5d16126331a3af11a","isMergeCommit":false,"messageTitle":"lvl 7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":24}}},{"hash":"07c02e8afd9cda034bcf72489f7b785cdd91b6f7","isMergeCommit":false,"messageTitle":"change if else statement to switch in Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":58}}},{"hash":"e199ebc6ec21b2b212ff5631c16d22b49917c780","isMergeCommit":false,"messageTitle":"lvl 8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":42,"deletions":18}}}]},{"date":"2023-09-03","commitResults":[{"hash":"0a721863d7afb1018a6870f03021a1a8fd4f6cb8","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":10},"java":{"insertions":272,"deletions":130}}}]},{"date":"2023-09-04","commitResults":[{"hash":"9cab895397e0a23e34a0f01843414cbd2ef313cd","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":457,"deletions":149},"bat":{"insertions":1,"deletions":1}}},{"hash":"bece3551aa2dc04b47d52e5ffd7be5f06b335361","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"47d8d2d4804d7abc96657add5f6460ff611d3877","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"d1725d6ac2f1b885d0f2432423a6c4b5547da4a2","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JavaDoc","A-Jar","A-JUnit","A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":1},"java":{"insertions":62,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"eb2d8449c97ac45097e4b09eb66244646d960867","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":4}}}]}]},"authorFileTypeContributionMap":{"Kokseng1":{"java":859,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":4,"txt":15}},"authorContributionVariance":{"Kokseng1":29235.64},"authorDisplayNameMap":{"Kokseng1":"CS2103T-W13-1 NG K..SENG"}} diff --git a/LHeng1_ip_master/authorship.json b/LHeng1_ip_master/authorship.json index e90c66af..4bb56746 100644 --- a/LHeng1_ip_master/authorship.json +++ b/LHeng1_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/data/Avalon.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"D | 0 | read book | 2002-05-18 1200","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"E | 1 | gym | 2002-05-19 2000 | 2002-05-19 2200","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"LHeng1":2}},{"path":"src/main/java/Avalon.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"import java.io.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"import java.util.List;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":"public class Avalon {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" List\u003cTask\u003e tasks \u003d loadTasks();","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" int taskCount \u003d tasks.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":" //greet","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" System.out.println(","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":" \" Hello! I\u0027m Arthur Pendragon.\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":" \" What can I do for you?\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":" );","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"LHeng1"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"LHeng1"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"LHeng1"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"LHeng1"},"content":" //exit","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"LHeng1"},"content":" if (userInput.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"LHeng1"},"content":" System.out.println(","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"LHeng1"},"content":" \" Farewell. We will meet again!\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"LHeng1"},"content":" );","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"LHeng1"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"LHeng1"},"content":" //display list","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"LHeng1"},"content":" if (taskCount \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"LHeng1"},"content":" System.out.println(","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"LHeng1"},"content":" \" You haven\u0027t added anything, my sire.\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"LHeng1"},"content":" \" ____________________________________________________________\"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"LHeng1"},"content":" );","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"LHeng1"},"content":" \" Here are the quests in thy list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"LHeng1"},"content":" for (int i \u003d 0; i \u003c taskCount; i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" \" + (i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"LHeng1"},"content":" //mark task","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"mark \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"LHeng1"},"content":" int taskIndex \u003d Integer.parseInt(userInput.substring(5)) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"LHeng1"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c taskCount) {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"LHeng1"},"content":" tasks.get(taskIndex).markDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"LHeng1"},"content":" \" Very well. I have marked this task as accomplished:\\n \" + \" \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"LHeng1"},"content":" tasks.get(taskIndex).getStatusIcon() + \" \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"LHeng1"},"content":" tasks.get(taskIndex).description +","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"LHeng1"},"content":" \"\\n ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Invalid task number to be marked.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"LHeng1"},"content":" //unmark task","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"unmark \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"LHeng1"},"content":" int taskIndex \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"LHeng1"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c taskCount) {","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"LHeng1"},"content":" tasks.get(taskIndex).markNotDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"LHeng1"},"content":" \" By the heavens! I have declared this task as yet to be completed:\\n \" + \" \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"LHeng1"},"content":" tasks.get(taskIndex).getStatusIcon() + \" \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"LHeng1"},"content":" tasks.get(taskIndex).description +","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"LHeng1"},"content":" \"\\n ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Invalid task number to be unmarked.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"LHeng1"},"content":" //create activity","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"todo \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"LHeng1"},"content":" String description \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"LHeng1"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"LHeng1"},"content":" ToDo todo \u003d new ToDo(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"LHeng1"},"content":" tasks.add(todo);","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"LHeng1"},"content":" taskCount++;","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"LHeng1"},"content":" \" Understood. I have included this quest:\\n \" + \" \" + tasks.get(taskCount - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Now you have \" + taskCount + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"deadline \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"LHeng1"},"content":" String[] parts \u003d userInput.substring(9).split(\" /by \");","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"LHeng1"},"content":" if (parts.length !\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Please provide a description and a deadline (use /by).\");","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"LHeng1"},"content":" String description \u003d parts[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"LHeng1"},"content":" String by \u003d parts[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"LHeng1"},"content":" Deadline deadline \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"LHeng1"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"LHeng1"},"content":" taskCount++;","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"LHeng1"},"content":" \" Understood. I have included this quest:\\n \" + \" \" + tasks.get(taskCount - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Now you have \" + taskCount + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"event \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"LHeng1"},"content":" String[] parts \u003d userInput.substring(6).split(\" /from | /to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"LHeng1"},"content":" if (parts.length !\u003d 3) {","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Please provide a description, a starting time, and an ending time (use /from and /to).\");","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"LHeng1"},"content":" String description \u003d parts[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"LHeng1"},"content":" String from \u003d parts[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"LHeng1"},"content":" String to \u003d parts[2];","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"LHeng1"},"content":" Event event \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"LHeng1"},"content":" tasks.add(event);","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"LHeng1"},"content":" taskCount++;","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"LHeng1"},"content":" \" Understood. I have included this quest:\\n \" + \" \" + tasks.get(taskCount - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Now you have \" + taskCount + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"LHeng1"},"content":" } else if (userInput.toLowerCase().startsWith(\"delete \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"LHeng1"},"content":" int taskIndex \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"LHeng1"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c taskCount) {","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"LHeng1"},"content":" Task deletedTask \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"LHeng1"},"content":" tasks.remove(taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"LHeng1"},"content":" taskCount--;","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":131,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Noted. I\u0027ve removed this quest:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" \" + deletedTask);","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Now you have \" + taskCount + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":136,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Invalid task number to be deleted.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":138,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":139,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"I humbly apologize, but thy words remain a mystery to me...\");","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"LHeng1"},"content":" } catch(IllegalArgumentException e){","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"LHeng1"},"content":" System.out.println(\"☹ OOPS!!! \" + e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":144,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":146,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":147,"author":{"gitId":"LHeng1"},"content":" scanner.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"LHeng1"},"content":" saveTasks(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"LHeng1"},"content":" private static List\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"LHeng1"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"LHeng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"LHeng1"},"content":" File file \u003d new File(\"src/main/data/Avalon.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"LHeng1"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"LHeng1"},"content":" System.out.println(\"Loading...\");","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"LHeng1"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"LHeng1"},"content":" String description \u003d scanner.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"LHeng1"},"content":" Task task \u003d TaskParser.parse(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"LHeng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"LHeng1"},"content":" scanner.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"LHeng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"LHeng1"},"content":" // Handle the case where the file doesn\u0027t exist or other IO errors","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"LHeng1"},"content":" System.out.println(\"No existing tasks file found. Starting with an empty list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"LHeng1"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"LHeng1"},"content":" private static void saveTasks(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"LHeng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"LHeng1"},"content":" FileWriter writer \u003d new FileWriter(\"src/main/data/Avalon.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"LHeng1"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"LHeng1"},"content":" String taskData \u003d TaskParser.serialize(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"LHeng1"},"content":" writer.write(taskData + \"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"LHeng1"},"content":" writer.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"LHeng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"LHeng1"},"content":" System.out.println(\"An error occurred while saving tasks to the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":182,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":183,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":183}},{"path":"src/main/java/DateTimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":"public class DateTimeParser {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" public static LocalDateTime stringToDateTime(String inputDateTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" try{","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" return LocalDateTime.parse(inputDateTime, formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" } catch (DateTimeParseException e){","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" System.out.println(\"Invalid date format. Please follow the format: YYYY-MM-DD hhmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":" return null;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":" public static String dateTimeToString(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":" String formattedDateTimeString \u003d dateTime.format(formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":" return formattedDateTimeString;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"LHeng1"},"content":" public static String printDateTimeToString(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"LHeng1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"LHeng1"},"content":" String formattedDateTimeString \u003d dateTime.format(formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"LHeng1"},"content":" return formattedDateTimeString;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"LHeng1":27}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" this.by \u003d DateTimeParser.stringToDateTime(by);","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":" return \"[D]\" + super.toString() + \" (by: \" + DateTimeParser.printDateTimeToString(by) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":15}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" this.from \u003d DateTimeParser.stringToDateTime(from);","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" this.to \u003d DateTimeParser.stringToDateTime(to);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":" return \"[E]\" + super.toString() + \" (from: \" + DateTimeParser.printDateTimeToString(from)","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":" + \" to: \" + DateTimeParser.printDateTimeToString(to) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":18}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":" enum TaskType {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":" return (isDone ? \"[X] \" : \"[ ] \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":" public void markDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"LHeng1"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"LHeng1"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"LHeng1"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"LHeng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"LHeng1"},"content":" return getStatusIcon() + \" \" + description;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":30}},{"path":"src/main/java/TaskParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"public class TaskParser {","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":" public static Task parse(String line) {","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" task \u003d new ToDo(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":" task \u003d new Deadline(description, parts[3]);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" } else if (type.equals(\"E\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":" task \u003d new Event(description, parts[3], parts[4]);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":" if (isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":" task.markDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"LHeng1"},"content":" return task;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"LHeng1"},"content":" // Serialize a Task object to a string for saving to the file","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"LHeng1"},"content":" public static String serialize(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"LHeng1"},"content":" String doneStatus \u003d task.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"LHeng1"},"content":" if (task instanceof ToDo) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"LHeng1"},"content":" return \"T | \" + doneStatus + \" | \" + task.description;","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"LHeng1"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"LHeng1"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"LHeng1"},"content":" return \"D | \" + doneStatus + \" | \" + task.description + \" | \" + DateTimeParser.dateTimeToString(deadline.by);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"LHeng1"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"LHeng1"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"LHeng1"},"content":" return \"E | \" + doneStatus + \" | \" + task.description + \" | \" + DateTimeParser.dateTimeToString(event.from)","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"LHeng1"},"content":" + \" | \" + DateTimeParser.dateTimeToString(event.to);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"LHeng1"},"content":" return \"Wrong formatting\";","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"LHeng1":43}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":10}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":"mark 5","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":"todo ","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":"deadline ","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":"event ","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":"ajhsf","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":"mark 8","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":"unmark 6","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":"delete 12","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":20}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":"java -classpath ..\\bin Avalon \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"LHeng1":1,"-":20}}] +[{"path":"src/main/data/Avalon.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"D | 1 | return boook | 2019-08-18 2000","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"E | 0 | meeting | 2019-08-19 2000 | 2019-08-19 2200","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"T | 0 | read book","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"LHeng1":3}},{"path":"src/main/java/Avalon.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"public class Avalon {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":" private Ui ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":" private Storage storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" public Avalon(String filePath) {","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" storage.loadTasks(this.tasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" public void run() {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":" int taskIndex;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":" String description;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":" String[] parts;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":" ui.greetMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"LHeng1"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"LHeng1"},"content":" String userInput \u003d ui.getUserInput();","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"LHeng1"},"content":" String[] inputStr \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"LHeng1"},"content":" String command \u003d inputStr[0];","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"LHeng1"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"LHeng1"},"content":" switch (command) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"LHeng1"},"content":" case \"bye\":","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"LHeng1"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"LHeng1"},"content":" ui.byeMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"LHeng1"},"content":" return;","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"LHeng1"},"content":" case \"list\":","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"LHeng1"},"content":" ui.showTasksList(tasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"LHeng1"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"LHeng1"},"content":" case \"mark\":","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"LHeng1"},"content":" taskIndex \u003d Integer.parseInt(userInput.substring(5)) - 1;","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"LHeng1"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"LHeng1"},"content":" tasks.get(taskIndex).markDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"LHeng1"},"content":" ui.showMarkMessage(tasks, taskIndex);","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Invalid task number to be marked.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"LHeng1"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"LHeng1"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"LHeng1"},"content":" taskIndex \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"LHeng1"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"LHeng1"},"content":" tasks.get(taskIndex).markNotDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"LHeng1"},"content":" ui.showUnmarkMessage(tasks, taskIndex);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Invalid task number to be unmarked.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"LHeng1"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"LHeng1"},"content":" case \"todo\":","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"LHeng1"},"content":" description \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"LHeng1"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"LHeng1"},"content":" ToDo todo \u003d new ToDo(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"LHeng1"},"content":" tasks.addTask(todo);","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"LHeng1"},"content":" ui.showAddTaskMessage(tasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"LHeng1"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"LHeng1"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"LHeng1"},"content":" parts \u003d userInput.substring(9).split(\" /by \");","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"LHeng1"},"content":" if (parts.length !\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Please provide a description and a deadline (use /by).\");","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"LHeng1"},"content":" description \u003d parts[0];","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"LHeng1"},"content":" String by \u003d parts[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"LHeng1"},"content":" Deadline deadline \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"LHeng1"},"content":" tasks.addTask(deadline);","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"LHeng1"},"content":" ui.showAddTaskMessage(tasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"LHeng1"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"LHeng1"},"content":" case \"event\":","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"LHeng1"},"content":" parts \u003d userInput.substring(6).split(\" /from | /to \");","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"LHeng1"},"content":" if (parts.length !\u003d 3) {","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Please provide a description, a starting time, and an ending time (use /from and /to).\");","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"LHeng1"},"content":" description \u003d parts[0];","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"LHeng1"},"content":" String from \u003d parts[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"LHeng1"},"content":" String to \u003d parts[2];","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"LHeng1"},"content":" Event event \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"LHeng1"},"content":" tasks.addTask(event);","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"LHeng1"},"content":" ui.showAddTaskMessage(tasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"LHeng1"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"LHeng1"},"content":" case \"delete\":","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"LHeng1"},"content":" taskIndex \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"LHeng1"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"LHeng1"},"content":" Task deletedTask \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"LHeng1"},"content":" tasks.removeTask(taskIndex);","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"LHeng1"},"content":" ui.showDeleteTaskMessage(tasks, deletedTask);","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"Invalid task number to be deleted.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"LHeng1"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"LHeng1"},"content":" default:","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"LHeng1"},"content":" throw new IllegalArgumentException(\"I humbly apologize, but thy words remain a mystery to me...\");","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"LHeng1"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"LHeng1"},"content":" System.out.println(\"☹ OOPS!!! \" + e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"LHeng1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"LHeng1"},"content":" new Avalon(\"src/main/data/Avalon.txt\").run();","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":112}},{"path":"src/main/java/DateTimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":"public class DateTimeParser {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" public static LocalDateTime stringToDateTime(String inputDateTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" try{","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" return LocalDateTime.parse(inputDateTime, formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" } catch (DateTimeParseException e){","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" System.out.println(\"Invalid date format. Please follow the format: YYYY-MM-DD hhmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":" return null;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":" public static String dateTimeToString(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":" String formattedDateTimeString \u003d dateTime.format(formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":" return formattedDateTimeString;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"LHeng1"},"content":" public static String printDateTimeToString(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"LHeng1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"LHeng1"},"content":" String formattedDateTimeString \u003d dateTime.format(formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"LHeng1"},"content":" return formattedDateTimeString;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"LHeng1":27}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" this.by \u003d DateTimeParser.stringToDateTime(by);","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":" return \"[D]\" + super.toString() + \" (by: \" + DateTimeParser.printDateTimeToString(by) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":15}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" this.from \u003d DateTimeParser.stringToDateTime(from);","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" this.to \u003d DateTimeParser.stringToDateTime(to);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":" return \"[E]\" + super.toString() + \" (from: \" + DateTimeParser.printDateTimeToString(from)","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":" + \" to: \" + DateTimeParser.printDateTimeToString(to) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":18}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" private String filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":" public TaskList loadTasks(TaskList taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":" System.out.print(\"Loading...\");","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":" String description \u003d scanner.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":" Task task \u003d TaskParser.parse(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"LHeng1"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"LHeng1"},"content":" scanner.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"LHeng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"LHeng1"},"content":" // Handle the case where the file doesn\u0027t exist or other IO errors","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"LHeng1"},"content":" System.out.println(\"No existing tasks file found. Starting with an empty list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"LHeng1"},"content":" System.exit(1);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"LHeng1"},"content":" System.out.println(\"Tasks loaded successfully!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"LHeng1"},"content":" return taskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"LHeng1"},"content":" public void saveTasks(TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"LHeng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"LHeng1"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"LHeng1"},"content":" for (Task task : taskList.tasks()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"LHeng1"},"content":" String taskData \u003d TaskParser.serialize(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"LHeng1"},"content":" writer.write(taskData + \"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"LHeng1"},"content":" writer.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"LHeng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"LHeng1"},"content":" System.out.println(\"An error occurred while saving tasks to the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"LHeng1":46}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":" enum TaskType {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":" return (isDone ? \"[X] \" : \"[ ] \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":" public void markDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"LHeng1"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"LHeng1"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"LHeng1"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"LHeng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"LHeng1"},"content":" return getStatusIcon() + \" \" + description;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":30}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"import java.lang.reflect.Array;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"import java.util.List;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":"public class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" public TaskList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" public ArrayList\u003cTask\u003e tasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" return (ArrayList)tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":" return tasks.isEmpty();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":" public int size() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":" return tasks.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"LHeng1"},"content":" public Task get(int i) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"LHeng1"},"content":" return tasks.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"LHeng1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"LHeng1"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"LHeng1"},"content":" public void removeTask(int i) {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"LHeng1"},"content":" this.tasks.remove(i);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"LHeng1":34}},{"path":"src/main/java/TaskParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"public class TaskParser {","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":" public static Task parse(String line) {","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" task \u003d new ToDo(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":" task \u003d new Deadline(description, parts[3]);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" } else if (type.equals(\"E\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":" task \u003d new Event(description, parts[3], parts[4]);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":" if (isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":" task.markDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"LHeng1"},"content":" return task;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"LHeng1"},"content":" // Serialize a Task object to a string for saving to the file","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"LHeng1"},"content":" public static String serialize(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"LHeng1"},"content":" String doneStatus \u003d task.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"LHeng1"},"content":" if (task instanceof ToDo) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"LHeng1"},"content":" return \"T | \" + doneStatus + \" | \" + task.description;","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"LHeng1"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"LHeng1"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"LHeng1"},"content":" return \"D | \" + doneStatus + \" | \" + task.description + \" | \" + DateTimeParser.dateTimeToString(deadline.by);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"LHeng1"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"LHeng1"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"LHeng1"},"content":" return \"E | \" + doneStatus + \" | \" + task.description + \" | \" + DateTimeParser.dateTimeToString(event.from)","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"LHeng1"},"content":" + \" | \" + DateTimeParser.dateTimeToString(event.to);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"LHeng1"},"content":" return \"Wrong formatting\";","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"LHeng1":43}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":10}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":" public Ui() {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":" public String getUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":" public void linePrint() {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":" System.out.print(\" _________________________________________________________________________________\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":" public void styleMessage(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":" linePrint();","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":" System.out.print(message);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":" linePrint();","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"LHeng1"},"content":" public void greetMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"LHeng1"},"content":" styleMessage(\" Hello! I\u0027m Arthur Pendragon.\\n What can I do for you?\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"LHeng1"},"content":" public void byeMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"LHeng1"},"content":" styleMessage(\" Farewell. We will meet again!\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"LHeng1"},"content":" public void showTasksList(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"LHeng1"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"LHeng1"},"content":" styleMessage(\" You haven\u0027t added anything, my sire.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"LHeng1"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"LHeng1"},"content":" linePrint();","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Here are the quests in thy list:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"LHeng1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" \" + (i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"LHeng1"},"content":" linePrint();","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"LHeng1"},"content":" public void showMarkMessage(TaskList tasks, int taskIndex) {","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"LHeng1"},"content":" linePrint();","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Very well. I have marked this task as accomplished:\\n \" + \" \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"LHeng1"},"content":" tasks.get(taskIndex).getStatusIcon() + \" \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"LHeng1"},"content":" tasks.get(taskIndex).description);","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"LHeng1"},"content":" linePrint();","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"LHeng1"},"content":" public void showUnmarkMessage(TaskList tasks, int taskIndex) {","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"LHeng1"},"content":" linePrint();","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" By the heavens! I have declared this task as yet to be completed:\\n \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"LHeng1"},"content":" \" \" + tasks.get(taskIndex).getStatusIcon() +","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"LHeng1"},"content":" \" \" + tasks.get(taskIndex).description);","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"LHeng1"},"content":" linePrint();","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"LHeng1"},"content":" public void showAddTaskMessage(TaskList tasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"LHeng1"},"content":" linePrint();","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Understood. I have included this quest:\\n \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"LHeng1"},"content":" \" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"LHeng1"},"content":" linePrint();","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"LHeng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"LHeng1"},"content":" public void showDeleteTaskMessage(TaskList tasks, Task deletedTask) {","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"LHeng1"},"content":" linePrint();","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Noted. I\u0027ve removed this quest:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" \" + deletedTask);","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"LHeng1"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"LHeng1"},"content":" linePrint();","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"LHeng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"LHeng1"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"LHeng1":74}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LHeng1"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LHeng1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LHeng1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LHeng1"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LHeng1"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LHeng1"},"content":"mark 5","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LHeng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LHeng1"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LHeng1"},"content":"todo ","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LHeng1"},"content":"deadline ","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LHeng1"},"content":"event ","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"LHeng1"},"content":"ajhsf","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"LHeng1"},"content":"mark 8","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":"unmark 6","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"LHeng1"},"content":"delete 12","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"LHeng1"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LHeng1":20}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"LHeng1"},"content":"java -classpath ..\\bin Avalon \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"LHeng1":1,"-":20}}] diff --git a/LHeng1_ip_master/commits.json b/LHeng1_ip_master/commits.json index ce6c72d8..254e0d6a 100644 --- a/LHeng1_ip_master/commits.json +++ b/LHeng1_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"LHeng1":[{"date":"2023-08-24","commitResults":[{"hash":"5dbae6174ddeb44f5987f86ffb2273381f88f17d","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"5d6c6b56f73e4dbdd4f92152790fd5958aec4f49","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":6}}},{"hash":"1b477e50bee2570b76826c73f99542c3e06ad7df","isMergeCommit":false,"messageTitle":"Level-2-Add-List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":17}}},{"hash":"c9c78f57fc153628d3c139391943fb46ae95a027","isMergeCommit":false,"messageTitle":"Level-3-MarkAsDone","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":6}}},{"hash":"ab578116d973c6e835f761eb989a7bfbd99377d9","isMergeCommit":false,"messageTitle":"Level-4-ToDo-Event-Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":12}}},{"hash":"f999a9101158881d9580c6de4ce3c7e3d52c4608","isMergeCommit":false,"messageTitle":"TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"437f0fbb55eeb56a270aca0ce9e5c2da5845a751","isMergeCommit":false,"messageTitle":"Level-5-HandleErrors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":1},"java":{"insertions":89,"deletions":81}}},{"hash":"c088aacc692ad5a8e341fa627ec21a4e74e20e34","isMergeCommit":false,"messageTitle":"Level-6-Delete-WO-Collections","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":20,"deletions":2}}},{"hash":"0c1126ae57cfb47941d41fa41a85b61dc6269326","isMergeCommit":false,"messageTitle":"A-Enums-UseEnums-Changeable","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"9f21b1d20b08e1b35a3ff6d82b608238207bc5a1","isMergeCommit":false,"messageTitle":"Change of Directory","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":0,"deletions":0},"bat":{"insertions":0,"deletions":0},"sh":{"insertions":0,"deletions":0},"md":{"insertions":0,"deletions":0}}},{"hash":"56afa711f1d397af2e51ddf47384222053d5a240","isMergeCommit":false,"messageTitle":"Change of directory","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":0,"deletions":0},"bat":{"insertions":0,"deletions":0},"sh":{"insertions":0,"deletions":0},"md":{"insertions":0,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"fb8801fc28e421d40b69ad1ffda3f410ab97f350","isMergeCommit":false,"messageTitle":"Add save function \u0026 optimize collections","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":113,"deletions":24}}},{"hash":"0da5567b3cf697955368c70f9953040e0da11460","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"6808edb52301dee9e3ca249a9254c2fd6a2a1c92","isMergeCommit":false,"messageTitle":"Teach chatbot date and time","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":47,"deletions":14}}},{"hash":"eb796c444477c4fe1a4f69f26d93912a4b977895","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"LHeng1":{"java":326,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":22}},"authorContributionVariance":{"LHeng1":12340.764},"authorDisplayNameMap":{"LHeng1":"CS2103T-W10-1 LIM ..G YI"}} +{"authorDailyContributionsMap":{"LHeng1":[{"date":"2023-08-24","commitResults":[{"hash":"5dbae6174ddeb44f5987f86ffb2273381f88f17d","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"5d6c6b56f73e4dbdd4f92152790fd5958aec4f49","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":6}}},{"hash":"1b477e50bee2570b76826c73f99542c3e06ad7df","isMergeCommit":false,"messageTitle":"Level-2-Add-List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":17}}},{"hash":"c9c78f57fc153628d3c139391943fb46ae95a027","isMergeCommit":false,"messageTitle":"Level-3-MarkAsDone","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":6}}},{"hash":"ab578116d973c6e835f761eb989a7bfbd99377d9","isMergeCommit":false,"messageTitle":"Level-4-ToDo-Event-Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":12}}},{"hash":"f999a9101158881d9580c6de4ce3c7e3d52c4608","isMergeCommit":false,"messageTitle":"TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"437f0fbb55eeb56a270aca0ce9e5c2da5845a751","isMergeCommit":false,"messageTitle":"Level-5-HandleErrors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":1},"java":{"insertions":89,"deletions":81}}},{"hash":"c088aacc692ad5a8e341fa627ec21a4e74e20e34","isMergeCommit":false,"messageTitle":"Level-6-Delete-WO-Collections","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":20,"deletions":2}}},{"hash":"0c1126ae57cfb47941d41fa41a85b61dc6269326","isMergeCommit":false,"messageTitle":"A-Enums-UseEnums-Changeable","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"9f21b1d20b08e1b35a3ff6d82b608238207bc5a1","isMergeCommit":false,"messageTitle":"Change of Directory","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":0,"deletions":0},"bat":{"insertions":0,"deletions":0},"sh":{"insertions":0,"deletions":0},"md":{"insertions":0,"deletions":0}}},{"hash":"56afa711f1d397af2e51ddf47384222053d5a240","isMergeCommit":false,"messageTitle":"Change of directory","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":0,"deletions":0},"bat":{"insertions":0,"deletions":0},"sh":{"insertions":0,"deletions":0},"md":{"insertions":0,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"fb8801fc28e421d40b69ad1ffda3f410ab97f350","isMergeCommit":false,"messageTitle":"Add save function \u0026 optimize collections","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":113,"deletions":24}}},{"hash":"0da5567b3cf697955368c70f9953040e0da11460","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"6808edb52301dee9e3ca249a9254c2fd6a2a1c92","isMergeCommit":false,"messageTitle":"Teach chatbot date and time","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":47,"deletions":14}}},{"hash":"eb796c444477c4fe1a4f69f26d93912a4b977895","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"8a8f669494d514c722f1dd80d2c88cad52505a04","isMergeCommit":false,"messageTitle":"Setup ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":2}}},{"hash":"b8b61e8b5c83ab99b2b76d2a3093b9ebd245cae2","isMergeCommit":false,"messageTitle":"Setup storage class and improve tasklist class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":1}}}]},{"date":"2023-09-06","commitResults":[{"hash":"2d29c222df5b5e33a496001cfb24a7db5e194443","isMergeCommit":false,"messageTitle":"Refactor code to be more OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":136,"deletions":174}}},{"hash":"7547cc6d930b85177d3edf7b02c2684e13dde84d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"LHeng1":{"java":409,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":23}},"authorContributionVariance":{"LHeng1":18150.85},"authorDisplayNameMap":{"LHeng1":"CS2103T-W10-1 LIM ..G YI"}} diff --git a/Nixx162_ip_master/authorship.json b/Nixx162_ip_master/authorship.json index 8fb2a439..2f281e26 100644 --- a/Nixx162_ip_master/authorship.json +++ b/Nixx162_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Pardiyem.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"import pardiyem.parser.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import pardiyem.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import pardiyem.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import pardiyem.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":" ","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"public class Pardiyem {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" public Pardiyem() throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" tasks \u003d storage.load();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" public void run() throws IOException, NoSuchMethodException {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" ui.showGreeting();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" ui.showDivider(); // show the divider line (\"_______\")","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" Command c \u003d Parser.parseCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" ui.showDivider();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" public static void main(String[] args) throws IOException, NoSuchMethodException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" new Pardiyem().run();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Nixx162":41}},{"path":"src/main/java/pardiyem/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import pardiyem.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":"import pardiyem.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" private Task toAdd;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" public AddCommand(String desc, int type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" super(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" switch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" case 1:","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" toAdd \u003d new Todo(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" case 2: {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" ArrayList\u003cString\u003e args \u003d Deadline.parseDesc(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" toAdd \u003d new Deadline(args.get(0), args.get(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" case 3: {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" ArrayList\u003cString\u003e args \u003d Event.parseDesc(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" toAdd \u003d new Event(args.get(0), args.get(1), args.get(2));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":" taskList.add(toAdd);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":" ui.showOutput(String.format(\"Got it. I\u0027ve added this task:\\n%s\\nNow you have %d task(s) in the list\",","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Nixx162"},"content":" toAdd.toString(), taskList.size()));","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Nixx162"},"content":" storage.save(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Nixx162"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":47}},{"path":"src/main/java/pardiyem/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import pardiyem.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import pardiyem.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":" public ByeCommand(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":" super(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" if (!this.desc.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(String","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" .format(\"You used \\\"%s\\\" as an argument. A bye command shouldn\u0027t have any arguments\", desc));","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" ui.showOutput(\"Ciao! See you again!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":24}},{"path":"src/main/java/pardiyem/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import pardiyem.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import pardiyem.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":" protected String desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" public Command(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" this.desc\u003d desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage) throws IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":19}},{"path":"src/main/java/pardiyem/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import pardiyem.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import pardiyem.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" public DeleteCommand(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" super(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" ui.showOutput(taskList.delete(desc));","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" storage.save(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":24}},{"path":"src/main/java/pardiyem/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import pardiyem.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import pardiyem.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":" public ListCommand(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":" super(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":" if (!this.desc.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(String","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" .format(\"You used \\\"%s\\\" as an argument. A bye command shouldn\u0027t have any arguments\", desc));","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" ui.showOutput(taskList.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":23}},{"path":"src/main/java/pardiyem/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import pardiyem.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import pardiyem.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" public MarkCommand(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" super(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" int i \u003d Integer.parseInt(desc) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" if (i \u003c 0 || i \u003e\u003d taskList.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" throw new ArrayIndexOutOfBoundsException(","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" \"Whoops, that number is not an index in the list. Please select a valid index\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" ui.showOutput(String.format(\"%s\\n%s\", ","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" taskList.getTask(i).markAsDone(), ","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" taskList.getTask(i).toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" throw new NumberFormatException(\"Whoops, you need to type in a valid integer\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" storage.save(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":34}},{"path":"src/main/java/pardiyem/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import pardiyem.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import pardiyem.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" public UnmarkCommand(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" super(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" int i \u003d Integer.parseInt(desc) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" if (i \u003c 0 || i \u003e\u003d taskList.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" throw new ArrayIndexOutOfBoundsException(","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" \"Whoops, that number is not an index in the list. Please select a valid index\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" ui.showOutput(String.format(\"%s\\n%s\", ","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" taskList.getTask(i).markAsUndone(), ","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" taskList.getTask(i).toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" throw new NumberFormatException(\"Whoops, you need to type in a valid integer\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" storage.save(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":35}},{"path":"src/main/java/pardiyem/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.parser;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import pardiyem.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"import pardiyem.command.ByeCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import pardiyem.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import pardiyem.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import pardiyem.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"import pardiyem.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"import pardiyem.command.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":"public class Parser {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" private static final String SPACE \u003d \" \";","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" public static Command parseCommand(String in) throws NoSuchMethodException {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" int x \u003d in.indexOf(SPACE);","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" String command;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" if (x \u003d\u003d -1) {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" command \u003d in;","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" command \u003d in.substring(0, x);","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" switch (command) {","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" case \"bye\":","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" return new ByeCommand(in.substring(3).trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" case \"list\":","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" return new ListCommand(in.substring(4).trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" case \"mark\":","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" return new MarkCommand(in.substring(4).trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" return new UnmarkCommand(in.substring(6).trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" case \"todo\":","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" return new AddCommand(in.substring(4).trim(), 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" return new AddCommand(in.substring(8).trim(), 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" case \"event\":","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" return new AddCommand(in.substring(5).trim(), 3);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" case \"delete\":","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" return new DeleteCommand(in.substring(6).trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" throw new NoSuchMethodException(\"Whoops, I do not recognize that command\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Nixx162":43}},{"path":"src/main/java/pardiyem/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" static final String DEFAULT_PATH \u003d \"./data/storagefile.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" File f;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" public Storage() throws IOException{","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" f \u003d new File(DEFAULT_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" f.getParentFile().mkdirs();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" public void save(TaskList tl) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" ArrayList\u003cTask\u003e curr \u003d tl.getList();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" FileWriter fw \u003d new FileWriter(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" StringBuilder toWrite \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" for (int i \u003d 0; i \u003c curr.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" if (i !\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" toWrite.append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" toWrite.append(curr.get(i).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" fw.write(toWrite.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":" public TaskList load() throws FileNotFoundException, IOException{","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":" ArrayList\u003cTask\u003e out \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Nixx162"},"content":" BufferedReader br \u003d new BufferedReader(new FileReader(f));","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Nixx162"},"content":" String line \u003d br.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Nixx162"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Nixx162"},"content":" out.add(parseLine(line));","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Nixx162"},"content":" line \u003d br.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Nixx162"},"content":" br.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Nixx162"},"content":" return new TaskList(out);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Nixx162"},"content":" private Task parseLine(String line) throws IllegalArgumentException {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Nixx162"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Nixx162"},"content":" boolean isDone \u003d (line.charAt(4) \u003d\u003d \u0027X\u0027);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Nixx162"},"content":" switch (line.charAt(1)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Nixx162"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Nixx162"},"content":" return new Todo(line.substring(7), isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Nixx162"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Nixx162"},"content":" int indFrom \u003d line.indexOf(\"from:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Nixx162"},"content":" int indTo \u003d line.indexOf(\"to:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Nixx162"},"content":" return new Event(line.substring(7, indFrom - 2), ","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Nixx162"},"content":" line.substring(indFrom + 6, indTo - 1),","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Nixx162"},"content":" line.substring(indTo + 4, line.length() - 1),","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Nixx162"},"content":" isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Nixx162"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Nixx162"},"content":" int indBy \u003d line.indexOf(\"by:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Nixx162"},"content":" return new Deadline(line.substring(7, indBy - 2),","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Nixx162"},"content":" line.substring(indBy + 4, line.length() - 1),","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Nixx162"},"content":" isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Nixx162"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Whoops, I can\u0027t read this text file\");","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":80}},{"path":"src/main/java/pardiyem/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":" protected LocalTime doByTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" protected LocalDate doByDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" public Deadline(String description, String doBy, boolean isDone) throws IllegalArgumentException {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" if (doBy.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Whoops, a deadline needs to have a non-empty do by description\");","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" int ind \u003d doBy.indexOf(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" if (ind \u003d\u003d -1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" this.doByDate \u003d LocalDate.parse(doBy);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" this.doByDate \u003d LocalDate.parse(doBy.substring(0, ind));","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" this.doByTime \u003d LocalTime.parse(doBy.substring(ind+1));","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Please input your time in the format of either \\\"YYYY-MM-DD\\\" or \\\"YYYY-MM-DD HH:MM:SS\\\"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" public Deadline(String description, String doBy) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" this(description, doBy, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" return String.format(\"[D]%s (by: %s%s)\",","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" super.toString(), ","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" doByDate.toString(), ","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" doByTime !\u003d null ? \" \" + doByTime.toString() : \"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":" public static ArrayList\u003cString\u003e parseDesc(String desc) throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Nixx162"},"content":" int i \u003d desc.indexOf(\"/by\");","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Nixx162"},"content":" if (i \u003d\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Whoops, you forgot to indicate the deadline by using \\\"/by *insert deadline*\\\"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Nixx162"},"content":" ArrayList\u003cString\u003e out \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Nixx162"},"content":" out.add(i \u003d\u003d 0 ? \"\" : desc.substring(0, i - 1));","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Nixx162"},"content":" out.add(desc.substring(i + 4));","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Nixx162"},"content":" return out;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Nixx162":54}},{"path":"src/main/java/pardiyem/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":" protected LocalDate fromDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" protected LocalTime fromTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" protected LocalDate toDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" protected LocalTime toTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" public Event(String description, String from, String to, boolean isDone) throws IllegalArgumentException {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" if (to.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Whoops, an event need to have a non-empty ending time\");","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" if (from.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Whoops, an event need to have a non-empty starting time\");","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" int ind1 \u003d from.indexOf(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" int ind2 \u003d to.indexOf(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" if (ind1 \u003d\u003d -1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" this.fromDate \u003d LocalDate.parse(from);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" this.fromDate \u003d LocalDate.parse(from.substring(0, ind1));","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" this.fromTime \u003d LocalTime.parse(from.substring(ind1 + 1));","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" if (ind2 \u003d\u003d -1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" this.toDate \u003d LocalDate.parse(to);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" this.toDate \u003d LocalDate.parse(to.substring(0, ind2));","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" this.toTime \u003d LocalTime.parse(to.substring(ind2 + 1));","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Please input your time in the format of either \\\"YYYY-MM-DD\\\" or \\\"YYYY-MM-DD HH:MM:SS\\\"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Nixx162"},"content":" public Event(String description, String from, String to) throws IllegalArgumentException {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Nixx162"},"content":" this(description, from, to, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Nixx162"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Nixx162"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Nixx162"},"content":" return String.format(\"[E]%s (from: %s%s to: %s%s)\", ","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Nixx162"},"content":" super.toString(), ","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Nixx162"},"content":" fromDate.toString(),","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Nixx162"},"content":" fromTime !\u003d null ? \" \" + fromTime.toString() : \"\", ","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Nixx162"},"content":" toDate.toString(),","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Nixx162"},"content":" toTime !\u003d null ? \" \" + toTime.toString() : \"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Nixx162"},"content":" public static ArrayList\u003cString\u003e parseDesc(String desc) throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Nixx162"},"content":" int i \u003d desc.indexOf(\"/from\");","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Nixx162"},"content":" if (i \u003d\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Whoops, you forgot to indicate the starting time by using \\\"/from *insert starting time*\\\"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Nixx162"},"content":" int j \u003d desc.indexOf(\"/to\");","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Nixx162"},"content":" if (j \u003d\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Whoops, you forgot to indicate the ending time by using \\\"/to *insert ending time*\\\"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Nixx162"},"content":" ArrayList\u003cString\u003e out \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Nixx162"},"content":" if (j \u003e i) {","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Nixx162"},"content":" out.add(i \u003d\u003d 0 ? \"\" : desc.substring(0, i - 1));","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Nixx162"},"content":" out.add(desc.substring(i + 6, j - 1));","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Nixx162"},"content":" out.add(desc.substring(j + 4));","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Nixx162"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Nixx162"},"content":" out.add(j \u003d\u003d 0 ? \"\" : desc.substring(0, j - 1));","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"Nixx162"},"content":" out.add(desc.substring(i + 6));","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"Nixx162"},"content":" out.add(desc.substring(j + 4, i - 1));","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"Nixx162"},"content":" return out;","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Nixx162":82}},{"path":"src/main/java/pardiyem/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.task;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Whoops, a task needs to have a non-empty description!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" public Task(String description) throws IllegalArgumentException {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" this(description, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" public String markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" return \"Hey, just letting you know that the task has already been done previously :)\";","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" return \"Bellisimo! I\u0027ve marked this task as done!\";","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" public String markAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" if (!this.isDone) {","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" return \"Hey, just letting you know that the task has already been marked as undone previously:)\";","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":" return \"Va bene, I\u0027ve marked this task as undone\";","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Nixx162":45}},{"path":"src/main/java/pardiyem/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":" protected final ArrayList\u003cTask\u003e tasklist;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":" tasklist \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" public TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" tasklist \u003d list;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" return tasklist;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" public Task getTask(int i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" return tasklist.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" public void add(Task newTask) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" tasklist.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" public int size() {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" return tasklist.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" public String delete(String ind) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" ind \u003d ind.trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" int i \u003d Integer.parseInt(ind) - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" if (i \u003c 0 || i \u003e\u003d tasklist.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" throw new ArrayIndexOutOfBoundsException(\"Whoops, that number is not an index in the list. Please select a valid index\");","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" Task curr \u003d tasklist.get(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" tasklist.remove(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n%s\\nNow you have %d task(s) on the list\", curr.toString(), tasklist.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":" throw new NumberFormatException(\"Whoops, you need to type in a valid integer\");","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Nixx162"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Nixx162"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Nixx162"},"content":" StringBuilder out \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Nixx162"},"content":" for (int i \u003d 0; i \u003c tasklist.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Nixx162"},"content":" if (i !\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Nixx162"},"content":" out.append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Nixx162"},"content":" out.append(String.format(\"%d.%s\", i + 1, tasklist.get(i).toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Nixx162"},"content":" return out.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Nixx162":58}},{"path":"src/main/java/pardiyem/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"public class Todo extends Task{","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":" this(description, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Nixx162":17}},{"path":"src/main/java/pardiyem/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":" static final String WELCOME \u003d \"Salve, I\u0027m Pardi\\nWhat can I do for you?\";","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":" static final String BYE \u003d \"Ciao! See you again!\";","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":" Scanner scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" public Ui() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" public void showGreeting() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" showDivider();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" System.out.println(WELCOME);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" showDivider();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" public void showFarewell() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" System.out.println(BYE);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" public void showDivider() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" System.out.println(\"-------------------------\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" public void showOutput(String s) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" System.out.println(s);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" public String readCommand() throws IllegalArgumentException{","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" if (!scanner.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Out of commands, are we?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" public void showException(Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":43}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"todo","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"todo hahaha","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"deadline /by 12","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"deadline hahaha","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"deadline hahaha /by 12","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"list aaaa","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"event /from 12 /to 13","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"event /to 13 /from 12","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"event hahaha /from 12","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":"event hahaha /to 13","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":"event hahaha /from 12 /to 13","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":"event hihihi /to 14 /from 13","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":"bye","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":14}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\Pardiyem.java","lastModifiedDate":"2023-08-27"},{"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":"Nixx162"},"content":"java -classpath ..\\bin Pardiyem \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":19,"Nixx162":2}},{"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":"Nixx162"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/Pardiyem.java","lastModifiedDate":"2023-08-27"},{"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":"Nixx162"},"content":"java -classpath ../bin Pardiyem \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":36,"Nixx162":2}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" mainClass.set(\"Pardiyem\")","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"Nixx162":6}},{"path":"src/main/java/Pardiyem.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"import pardiyem.parser.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import pardiyem.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import pardiyem.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import pardiyem.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":" ","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"public class Pardiyem {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" public Pardiyem() throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" tasks \u003d storage.load();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" public void run() throws IOException, NoSuchMethodException {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" ui.showGreeting();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" ui.showDivider(); // show the divider line (\"_______\")","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" Command c \u003d Parser.parseCommand(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" ui.showDivider();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" public static void main(String[] args) throws IOException, NoSuchMethodException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" new Pardiyem().run();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Nixx162":41}},{"path":"src/main/java/pardiyem/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import pardiyem.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":"import pardiyem.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" private Task toAdd;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" public AddCommand(String desc, int type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" super(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" switch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" case 1:","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" toAdd \u003d new Todo(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" case 2: {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" toAdd \u003d new Deadline(desc);","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" case 3: {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" toAdd \u003d new Event(desc);","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" taskList.add(toAdd);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":" ui.showOutput(String.format(\"Got it. I\u0027ve added this task:\\n%s\\nNow you have %d task(s) in the list\",","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":" toAdd.toString(), taskList.size()));","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":" storage.save(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Nixx162"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Nixx162"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"Nixx162"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"Nixx162"},"content":" boolean result \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"Nixx162"},"content":" if (obj instanceof AddCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"Nixx162"},"content":" result \u003d this.toAdd.equals(((AddCommand) obj).toAdd);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Nixx162"},"content":" return result;","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":53}},{"path":"src/main/java/pardiyem/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import pardiyem.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import pardiyem.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":" public ByeCommand(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":" super(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" if (!this.desc.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(String","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" .format(\"You used \\\"%s\\\" as an argument. A bye command shouldn\u0027t have any arguments\", desc));","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" ui.showOutput(\"Ciao! See you again!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" return obj instanceof ByeCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":28}},{"path":"src/main/java/pardiyem/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import pardiyem.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import pardiyem.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":" protected String desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" public Command(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" this.desc\u003d desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage) throws IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":19}},{"path":"src/main/java/pardiyem/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import pardiyem.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import pardiyem.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" public DeleteCommand(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" super(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" ui.showOutput(taskList.delete(desc));","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" storage.save(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" boolean result \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" if (obj instanceof DeleteCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" result \u003d this.desc.equals(((DeleteCommand) obj).desc);","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" return result;","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":32}},{"path":"src/main/java/pardiyem/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import pardiyem.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import pardiyem.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":" public ListCommand(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":" super(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":" if (!this.desc.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(String","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" .format(\"You used \\\"%s\\\" as an argument. A bye command shouldn\u0027t have any arguments\", desc));","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" ui.showOutput(taskList.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" return obj instanceof ListCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":27}},{"path":"src/main/java/pardiyem/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import pardiyem.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import pardiyem.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" public MarkCommand(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" super(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" int i \u003d Integer.parseInt(desc) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" if (i \u003c 0 || i \u003e\u003d taskList.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" throw new ArrayIndexOutOfBoundsException(","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" \"Whoops, that number is not an index in the list. Please select a valid index\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" ui.showOutput(String.format(\"%s\\n%s\", ","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" taskList.getTask(i).markAsDone(), ","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" taskList.getTask(i).toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" throw new NumberFormatException(\"Whoops, you need to type in a valid integer\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" storage.save(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" boolean result \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" if (obj instanceof MarkCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" result \u003d this.desc.equals(((MarkCommand) obj).desc);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" return result;","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":42}},{"path":"src/main/java/pardiyem/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import pardiyem.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import pardiyem.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" public UnmarkCommand(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" super(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" int i \u003d Integer.parseInt(desc) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" if (i \u003c 0 || i \u003e\u003d taskList.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" throw new ArrayIndexOutOfBoundsException(","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" \"Whoops, that number is not an index in the list. Please select a valid index\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" ui.showOutput(String.format(\"%s\\n%s\", ","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" taskList.getTask(i).markAsUndone(), ","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" taskList.getTask(i).toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" throw new NumberFormatException(\"Whoops, you need to type in a valid integer\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" storage.save(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" boolean result \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" if (obj instanceof UnmarkCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" result \u003d this.desc.equals(((UnmarkCommand) obj).desc);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" return result;","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":43}},{"path":"src/main/java/pardiyem/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.parser;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import pardiyem.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"import pardiyem.command.ByeCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import pardiyem.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import pardiyem.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import pardiyem.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"import pardiyem.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"import pardiyem.command.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":"public class Parser {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" private static final String SPACE \u003d \" \";","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" public static Command parseCommand(String in) throws NoSuchMethodException {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" int x \u003d in.indexOf(SPACE);","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" String command;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" if (x \u003d\u003d -1) {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" command \u003d in;","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" command \u003d in.substring(0, x);","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" switch (command) {","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" case \"bye\":","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" return new ByeCommand(in.substring(3).trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" case \"list\":","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" return new ListCommand(in.substring(4).trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" case \"mark\":","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" return new MarkCommand(in.substring(4).trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" return new UnmarkCommand(in.substring(6).trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" case \"todo\":","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" return new AddCommand(in.substring(4).trim(), 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" return new AddCommand(in.substring(8).trim(), 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" case \"event\":","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" return new AddCommand(in.substring(5).trim(), 3);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" case \"delete\":","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" return new DeleteCommand(in.substring(6).trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" throw new NoSuchMethodException(\"Whoops, I do not recognize that command\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Nixx162":43}},{"path":"src/main/java/pardiyem/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" static final String DEFAULT_PATH \u003d \"./data/storagefile.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" File f;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" public Storage() throws IOException{","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" f \u003d new File(DEFAULT_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" f.getParentFile().mkdirs();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" public void save(TaskList tl) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" ArrayList\u003cTask\u003e curr \u003d tl.getList();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" FileWriter fw \u003d new FileWriter(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" StringBuilder toWrite \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" for (int i \u003d 0; i \u003c curr.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" if (i !\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" toWrite.append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" toWrite.append(curr.get(i).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" fw.write(toWrite.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":" public TaskList load() throws FileNotFoundException, IOException{","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":" ArrayList\u003cTask\u003e out \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Nixx162"},"content":" BufferedReader br \u003d new BufferedReader(new FileReader(f));","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Nixx162"},"content":" String line \u003d br.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Nixx162"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Nixx162"},"content":" out.add(parseLine(line));","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Nixx162"},"content":" line \u003d br.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Nixx162"},"content":" br.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Nixx162"},"content":" return new TaskList(out);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Nixx162"},"content":" private Task parseLine(String line) throws IllegalArgumentException {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Nixx162"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Nixx162"},"content":" boolean isDone \u003d (line.charAt(4) \u003d\u003d \u0027X\u0027);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Nixx162"},"content":" switch (line.charAt(1)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Nixx162"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Nixx162"},"content":" return new Todo(line.substring(7), isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Nixx162"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Nixx162"},"content":" int indFrom \u003d line.indexOf(\"from:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Nixx162"},"content":" int indTo \u003d line.indexOf(\"to:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Nixx162"},"content":" return new Event(line.substring(7, indFrom - 2), ","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Nixx162"},"content":" line.substring(indFrom + 6, indTo - 1),","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Nixx162"},"content":" line.substring(indTo + 4, line.length() - 1),","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Nixx162"},"content":" isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Nixx162"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Nixx162"},"content":" int indBy \u003d line.indexOf(\"by:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Nixx162"},"content":" return new Deadline(line.substring(7, indBy - 2),","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Nixx162"},"content":" line.substring(indBy + 4, line.length() - 1),","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Nixx162"},"content":" isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Nixx162"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Whoops, I can\u0027t read this text file\");","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":80}},{"path":"src/main/java/pardiyem/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":" protected LocalTime doByTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" protected LocalDate doByDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" public Deadline(String description, String doBy, boolean isDone) throws IllegalArgumentException {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" if (doBy.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Whoops, a deadline needs to have a non-empty do by description\");","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" int ind \u003d doBy.indexOf(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" if (ind \u003d\u003d -1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" this.doByDate \u003d LocalDate.parse(doBy);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" this.doByDate \u003d LocalDate.parse(doBy.substring(0, ind));","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" this.doByTime \u003d LocalTime.parse(doBy.substring(ind+1));","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Please input your time in the format of either \\\"YYYY-MM-DD\\\" or \\\"YYYY-MM-DD HH:MM:SS\\\"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" public Deadline(String description, String doBy) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" this(description, doBy, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" public Deadline(String command) {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" this(parseDesc(command).get(0), parseDesc(command).get(1));","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":" return String.format(\"[D]%s (by: %s%s)\",","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":" super.toString(), ","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":" doByDate.toString(), ","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Nixx162"},"content":" doByTime !\u003d null ? \" \" + doByTime.toString() : \"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Nixx162"},"content":" private static ArrayList\u003cString\u003e parseDesc(String desc) throws IllegalArgumentException {","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"Nixx162"},"content":" int i \u003d desc.indexOf(\"/by\");","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Nixx162"},"content":" if (i \u003d\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Whoops, you forgot to indicate the deadline by using \\\"/by *insert deadline*\\\"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Nixx162"},"content":" ArrayList\u003cString\u003e out \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Nixx162"},"content":" out.add(i \u003d\u003d 0 ? \"\" : desc.substring(0, i - 1));","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Nixx162"},"content":" out.add(desc.substring(i + 4));","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Nixx162"},"content":" return out;","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Nixx162":58}},{"path":"src/main/java/pardiyem/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":" protected LocalDate fromDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" protected LocalTime fromTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" protected LocalDate toDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" protected LocalTime toTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" public Event(String description, String from, String to, boolean isDone) throws IllegalArgumentException {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" if (to.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Whoops, an event need to have a non-empty ending time\");","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" if (from.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Whoops, an event need to have a non-empty starting time\");","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" int ind1 \u003d from.indexOf(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" int ind2 \u003d to.indexOf(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" if (ind1 \u003d\u003d -1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" this.fromDate \u003d LocalDate.parse(from);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" this.fromDate \u003d LocalDate.parse(from.substring(0, ind1));","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" this.fromTime \u003d LocalTime.parse(from.substring(ind1 + 1));","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" if (ind2 \u003d\u003d -1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" this.toDate \u003d LocalDate.parse(to);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" this.toDate \u003d LocalDate.parse(to.substring(0, ind2));","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" this.toTime \u003d LocalTime.parse(to.substring(ind2 + 1));","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Please input your time in the format of either \\\"YYYY-MM-DD\\\" or \\\"YYYY-MM-DD HH:MM:SS\\\"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Nixx162"},"content":" public Event(String description, String from, String to) throws IllegalArgumentException {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Nixx162"},"content":" this(description, from, to, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Nixx162"},"content":" public Event(String command) {","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Nixx162"},"content":" this(parseDesc(command).get(0), parseDesc(command).get(1), parseDesc(command).get(2));","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"Nixx162"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Nixx162"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Nixx162"},"content":" return String.format(\"[E]%s (from: %s%s to: %s%s)\", ","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Nixx162"},"content":" super.toString(), ","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Nixx162"},"content":" fromDate.toString(),","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Nixx162"},"content":" fromTime !\u003d null ? \" \" + fromTime.toString() : \"\", ","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Nixx162"},"content":" toDate.toString(),","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Nixx162"},"content":" toTime !\u003d null ? \" \" + toTime.toString() : \"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Nixx162"},"content":" private static ArrayList\u003cString\u003e parseDesc(String desc) throws IllegalArgumentException {","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"Nixx162"},"content":" int i \u003d desc.indexOf(\"/from\");","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Nixx162"},"content":" if (i \u003d\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Whoops, you forgot to indicate the starting time by using \\\"/from *insert starting time*\\\"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Nixx162"},"content":" int j \u003d desc.indexOf(\"/to\");","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Nixx162"},"content":" if (j \u003d\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Whoops, you forgot to indicate the ending time by using \\\"/to *insert ending time*\\\"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Nixx162"},"content":" ArrayList\u003cString\u003e out \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Nixx162"},"content":" if (j \u003e i) {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"Nixx162"},"content":" out.add(i \u003d\u003d 0 ? \"\" : desc.substring(0, i - 1));","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"Nixx162"},"content":" out.add(desc.substring(i + 6, j - 1));","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"Nixx162"},"content":" out.add(desc.substring(j + 4));","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"Nixx162"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"Nixx162"},"content":" out.add(j \u003d\u003d 0 ? \"\" : desc.substring(0, j - 1));","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"Nixx162"},"content":" out.add(desc.substring(i + 6));","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"Nixx162"},"content":" out.add(desc.substring(j + 4, i - 1));","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"Nixx162"},"content":" return out;","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Nixx162":87}},{"path":"src/main/java/pardiyem/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.task;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Whoops, a task needs to have a non-empty description!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" public Task(String description) throws IllegalArgumentException {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" this(description, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" public String markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" return \"Hey, just letting you know that the task has already been done previously :)\";","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" return \"Bellisimo! I\u0027ve marked this task as done!\";","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" public String markAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" if (!this.isDone) {","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" return \"Hey, just letting you know that the task has already been marked as undone previously:)\";","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":" return \"Va bene, I\u0027ve marked this task as undone\";","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"Nixx162"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"Nixx162"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"Nixx162"},"content":" boolean result \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"Nixx162"},"content":" if (obj instanceof Task) {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"Nixx162"},"content":" result \u003d this.toString().equals(obj.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Nixx162"},"content":" return result;","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Nixx162":53}},{"path":"src/main/java/pardiyem/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":" protected final ArrayList\u003cTask\u003e tasklist;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":" tasklist \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" public TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" tasklist \u003d list;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" return tasklist;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" public Task getTask(int i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" return tasklist.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" public void add(Task newTask) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" tasklist.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" public int size() {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" return tasklist.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" public String delete(String ind) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" ind \u003d ind.trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" int i \u003d Integer.parseInt(ind) - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" if (i \u003c 0 || i \u003e\u003d tasklist.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" throw new ArrayIndexOutOfBoundsException(\"Whoops, that number is not an index in the list. Please select a valid index\");","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" Task curr \u003d tasklist.get(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" tasklist.remove(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n%s\\nNow you have %d task(s) on the list\", curr.toString(), tasklist.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":" throw new NumberFormatException(\"Whoops, you need to type in a valid integer\");","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Nixx162"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Nixx162"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Nixx162"},"content":" StringBuilder out \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Nixx162"},"content":" for (int i \u003d 0; i \u003c tasklist.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Nixx162"},"content":" if (i !\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Nixx162"},"content":" out.append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Nixx162"},"content":" out.append(String.format(\"%d.%s\", i + 1, tasklist.get(i).toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Nixx162"},"content":" return out.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Nixx162":58}},{"path":"src/main/java/pardiyem/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"public class Todo extends Task{","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":" this(description, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Nixx162":17}},{"path":"src/main/java/pardiyem/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":" static final String WELCOME \u003d \"Salve, I\u0027m Pardi\\nWhat can I do for you?\";","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":" static final String BYE \u003d \"Ciao! See you again!\";","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":" Scanner scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" public Ui() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" public void showGreeting() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" showDivider();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" System.out.println(WELCOME);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" showDivider();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" public void showFarewell() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" System.out.println(BYE);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" public void showDivider() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" System.out.println(\"-------------------------\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" public void showOutput(String s) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" System.out.println(s);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" public String readCommand() throws IllegalArgumentException{","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" if (!scanner.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" throw new IllegalArgumentException(\"Out of commands, are we?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" public void showException(Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":43}},{"path":"src/test/java/pardiyem/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"import pardiyem.command.AddCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":" public void parseTest1() throws NoSuchMethodException {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":" assertEquals(new AddCommand(\"hahahahaha\", 1), Parser.parseCommand(\"todo hahahahaha\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" public void parseTest2() throws NoSuchMethodException {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" assertEquals(new AddCommand(\"hahahahaha /by 2015-02-23\", 2), Parser.parseCommand(\"deadline hahahahaha /by 2015-02-23\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" public void parseTest3() {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":" Parser.parseCommand(\"bye hahahaha\");","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" assertEquals(\"You used \\\"hahahaha\\\" as an argument. A bye command shouldn\u0027t have any arguments\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" public void parseTest4() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" Parser.parseCommand(\"list hahahaha\");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" assertEquals(\"You used \\\"hahahaha\\\" as an argument. A bye command shouldn\u0027t have any arguments\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" public void parseTest5() {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":" Parser.parseCommand(\"hahahaha\");","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Nixx162"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Nixx162"},"content":" assertEquals(\"Whoops, I do not recognize that command\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Nixx162":48}},{"path":"src/test/java/pardiyem/test/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"package pardiyem.test;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"import pardiyem.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":" public void deadlineTest1() {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Nixx162"},"content":" assertEquals(new Deadline(\"Joni\", \"2015-01-23\", true).toString(), \"[D][X] Joni (by: 2015-01-23)\");","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Nixx162"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Nixx162"},"content":" public void deadlineTest2() {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Nixx162"},"content":" assertEquals(new Deadline(\"Joni\", \"2015-01-23\", false).toString(), \"[D][ ] Joni (by: 2015-01-23)\");","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Nixx162"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Nixx162"},"content":" public void deadlineTest3() {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Nixx162"},"content":" new Deadline(\"Joni\", \"20353-01-23\", true);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Nixx162"},"content":" fail();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Nixx162"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Nixx162"},"content":" assertEquals(e.getMessage(), \"Please input your time in the format of either \\\"YYYY-MM-DD\\\" or \\\"YYYY-MM-DD HH:MM:SS\\\"\");","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Nixx162"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Nixx162"},"content":" public void deadlineTest4() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Nixx162"},"content":" new Deadline(\"Joni\", \"\", true);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Nixx162"},"content":" fail();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Nixx162"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Nixx162"},"content":" assertEquals(e.getMessage(), \"Whoops, a deadline needs to have a non-empty do by description\");","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Nixx162"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Nixx162"},"content":" public void parseDeadlineTest1() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Nixx162"},"content":" assertEquals(Deadline.parseDesc(\"Joni /by 2015-01-23\"), new ArrayList\u003cString\u003e(Arrays.asList(\"Joni\", \"2015-01-23\")));","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Nixx162"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Nixx162"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Nixx162"},"content":" public void parseDeadlineTest2() {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Nixx162"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Nixx162"},"content":" Deadline.parseDesc(\"Joni\");","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Nixx162"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Nixx162"},"content":" assertEquals(e.getMessage(), \"Whoops, you forgot to indicate the deadline by using \\\"/by *insert deadline*\\\"\");","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Nixx162"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Nixx162"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Nixx162":55}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Nixx162"},"content":"todo","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Nixx162"},"content":"todo hahaha","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Nixx162"},"content":"deadline /by 12","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Nixx162"},"content":"deadline hahaha","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Nixx162"},"content":"deadline hahaha /by 12","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Nixx162"},"content":"list aaaa","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Nixx162"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Nixx162"},"content":"event /from 12 /to 13","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Nixx162"},"content":"event /to 13 /from 12","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"event hahaha /from 12","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Nixx162"},"content":"event hahaha /to 13","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Nixx162"},"content":"event hahaha /from 12 /to 13","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Nixx162"},"content":"event hihihi /to 14 /from 13","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Nixx162"},"content":"bye","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Nixx162":14}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"Nixx162"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\Pardiyem.java","lastModifiedDate":"2023-08-27"},{"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":"Nixx162"},"content":"java -classpath ..\\bin Pardiyem \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":19,"Nixx162":2}},{"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":"Nixx162"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/Pardiyem.java","lastModifiedDate":"2023-08-27"},{"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":"Nixx162"},"content":"java -classpath ../bin Pardiyem \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":36,"Nixx162":2}}] diff --git a/Nixx162_ip_master/commits.json b/Nixx162_ip_master/commits.json index 23ca29a2..7d85a270 100644 --- a/Nixx162_ip_master/commits.json +++ b/Nixx162_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Nixx162":[{"date":"2023-08-21","commitResults":[{"hash":"88d691c00cb9d9394e48a8897a56b6868e7c89c2","isMergeCommit":false,"messageTitle":"feat: add welcome and exit message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":10}}},{"hash":"d4563e6b83c69665e349d278ebe0cbedde469643","isMergeCommit":false,"messageTitle":"feat: add echo feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":2}}}]},{"date":"2023-08-22","commitResults":[{"hash":"3e09bf67254ad68420dea6c76ecdf485c769382e","isMergeCommit":false,"messageTitle":"feat: add tasklist feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"29f472c6850cd7a35f2193a50e460ce7eca94fec","isMergeCommit":false,"messageTitle":"refactor: implement Parser class for commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":9}}},{"hash":"113a9ac2c69ef25333fa7505f4ba132249252d64","isMergeCommit":false,"messageTitle":"feat: add marking as done feature","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":13}}},{"hash":"794266d14017c365d708813c86940835fb7df8d4","isMergeCommit":false,"messageTitle":"style: add some Italian flair","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-27","commitResults":[{"hash":"0fc1130840236929fa9d626cfabf4d864a038c86","isMergeCommit":false,"messageTitle":"feat: add diferent task types and error messages","messageBody":"","tags":["Level-5","Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":220,"deletions":31}}},{"hash":"efc463824a539034ce2081b328f34d24cb0614a2","isMergeCommit":false,"messageTitle":"feat: add delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"014d4a7d53050297e2106f1ee3c72cc4db075def","isMergeCommit":false,"messageTitle":"fix: fix a parsing bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"3082faa50a2bbcf26575c901ece975b704017401","isMergeCommit":false,"messageTitle":"test: add test script and some test cases","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"bat":{"insertions":2,"deletions":2},"sh":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-31","commitResults":[{"hash":"947f87d5dffd18eba32893494cad3f9ed2be9193","isMergeCommit":false,"messageTitle":"feat: add list storage capability","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":1},"java":{"insertions":428,"deletions":160}}},{"hash":"784eed80317c00fd26973ad1eed689c5da00ea47","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7","A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"eec3250c7e85f9e2951e7e575a66d3927112180a","isMergeCommit":false,"messageTitle":"feat: Add support for date and time","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"java":{"insertions":60,"deletions":14}}},{"hash":"1ddf5358e2b8b9c299b3579fd64865d090d6cde2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Nixx162":{"java":669,"md":0,"fxml":0,"sh":2,"bat":2,"gradle":0,"txt":14}},"authorContributionVariance":{"Nixx162":25698.514},"authorDisplayNameMap":{"Nixx162":"CS2103T-W16-1 NICH..LDEN"}} +{"authorDailyContributionsMap":{"Nixx162":[{"date":"2023-08-21","commitResults":[{"hash":"88d691c00cb9d9394e48a8897a56b6868e7c89c2","isMergeCommit":false,"messageTitle":"feat: add welcome and exit message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":10}}},{"hash":"d4563e6b83c69665e349d278ebe0cbedde469643","isMergeCommit":false,"messageTitle":"feat: add echo feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":2}}}]},{"date":"2023-08-22","commitResults":[{"hash":"3e09bf67254ad68420dea6c76ecdf485c769382e","isMergeCommit":false,"messageTitle":"feat: add tasklist feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"29f472c6850cd7a35f2193a50e460ce7eca94fec","isMergeCommit":false,"messageTitle":"refactor: implement Parser class for commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":9}}},{"hash":"113a9ac2c69ef25333fa7505f4ba132249252d64","isMergeCommit":false,"messageTitle":"feat: add marking as done feature","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":13}}},{"hash":"794266d14017c365d708813c86940835fb7df8d4","isMergeCommit":false,"messageTitle":"style: add some Italian flair","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-27","commitResults":[{"hash":"0fc1130840236929fa9d626cfabf4d864a038c86","isMergeCommit":false,"messageTitle":"feat: add diferent task types and error messages","messageBody":"","tags":["Level-5","Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":220,"deletions":31}}},{"hash":"efc463824a539034ce2081b328f34d24cb0614a2","isMergeCommit":false,"messageTitle":"feat: add delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"014d4a7d53050297e2106f1ee3c72cc4db075def","isMergeCommit":false,"messageTitle":"fix: fix a parsing bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"3082faa50a2bbcf26575c901ece975b704017401","isMergeCommit":false,"messageTitle":"test: add test script and some test cases","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"bat":{"insertions":2,"deletions":2},"sh":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-31","commitResults":[{"hash":"947f87d5dffd18eba32893494cad3f9ed2be9193","isMergeCommit":false,"messageTitle":"feat: add list storage capability","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":1},"java":{"insertions":428,"deletions":160}}},{"hash":"784eed80317c00fd26973ad1eed689c5da00ea47","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7","A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"eec3250c7e85f9e2951e7e575a66d3927112180a","isMergeCommit":false,"messageTitle":"feat: Add support for date and time","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"java":{"insertions":60,"deletions":14}}},{"hash":"1ddf5358e2b8b9c299b3579fd64865d090d6cde2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"3778091ad9b6c1c13b532720dc2bed9eb6faa696","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"7db0ed16a0d919987b57e73e6da032bef4bc724c","isMergeCommit":false,"messageTitle":"test: Add several JUnit test classes","messageBody":"","tags":["A-Packages","A-JUnit","A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":0}}},{"hash":"95a1155945fc1daecb3e77d01003ecc7e7bc24af","isMergeCommit":false,"messageTitle":"chore: Update gradle for checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1}}}]},{"date":"2023-09-06","commitResults":[{"hash":"7d1e3e4d82ea9e58323b9aa4f39e3fc5b4f97f63","isMergeCommit":false,"messageTitle":"test: Add equals method to classes to facilitate testing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":0}}},{"hash":"6da0f6eb2fb65562e37825c36e77748f5a252731","isMergeCommit":false,"messageTitle":"refactor: Add new constructor to Deadline and Event class for better abstraction","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":6}}}]}]},"authorFileTypeContributionMap":{"Nixx162":{"java":827,"md":0,"fxml":0,"sh":2,"bat":2,"gradle":6,"txt":14}},"authorContributionVariance":{"Nixx162":20144.3},"authorDisplayNameMap":{"Nixx162":"CS2103T-W16-1 NICH..LDEN"}} diff --git a/PearlynnT_ip_master/authorship.json b/PearlynnT_ip_master/authorship.json index 33641e5c..78192374 100644 --- a/PearlynnT_ip_master/authorship.json +++ b/PearlynnT_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"PearlynnT":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":"mainClassName \u003d \u0027duke.Launcher\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":"checkstyle {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"PearlynnT":25,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"D | 0 | return book | 2023-06-06 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"E | 0 | project meeting | 2023-08-06 1400 - 2023-08-06 1600","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"T | 1 | join sports club","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":4}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"//import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"//import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * duke.Duke class that encapsulates a personal assistant chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" private static boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" private static Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" private static Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" private final String pathname \u003d \"data/duke.txt\";","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" private Scene scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.Duke class.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" public Duke() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" Duke.ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" Duke.ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" Duke.storage \u003d new Storage(this.pathname);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" if (Duke.storage.getHasFile()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList(Duke.storage.loadData());","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.Duke class.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" * @param pathname The pathname of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" public Duke(String pathname) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" Duke.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" //Duke.ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" Duke.storage \u003d new Storage(pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" //Duke.taskList \u003d new TaskList(Duke.storage.loadData());","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" if (Duke.storage.getHasFile()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList(Duke.storage.loadData());","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" * Sets the exit status of the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" * @param isExit The boolean value.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" public static void setExit(boolean isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" Duke.isExit \u003d isExit;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" * Gets the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" * @return The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" public static Storage getStorage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" return Duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" * Gets the taskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" * @return The taskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" public static TaskList getTaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" return Duke.taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" * Gets the UI.","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" * @return The UI.","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" public static Ui getUi() {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" return Duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" * Starts the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" private void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" Duke.ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-21"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" while (!Duke.isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-08-21"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" Parser.parse(command, Duke.taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" //new Duke().run();","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" return Parser.parse(input, Duke.taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" //Step 1. Setting up required components","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"PearlynnT"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"PearlynnT"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"PearlynnT"},"content":" //Step 2. Formatting the window to look as expected","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"PearlynnT"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"PearlynnT"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"PearlynnT"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"PearlynnT"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"PearlynnT"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"PearlynnT"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"PearlynnT"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"PearlynnT"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"PearlynnT"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":182,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":183,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":184,"author":{"gitId":"PearlynnT"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-05"},{"lineNumber":185,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":186,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"PearlynnT":184,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":30}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":52}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.DukeException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.DukeException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param errorMessage The error message of the exception.","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/exception/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.EmptyDescriptionException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.EmptyDescriptionException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param task The task with the empty description.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public EmptyDescriptionException(String task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! The description of a \" + task + \" cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/exception/EmptyKeywordException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.EmptyKeywordException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class EmptyKeywordException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.EmptyKeywordException class","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" public EmptyKeywordException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! The search keyword cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":17}},{"path":"src/main/java/duke/exception/EmptyTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.EmptyTaskException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class EmptyTaskException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.EmptyTaskException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param command The command with the empty task.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public EmptyTaskException(String command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! Pls select a task to \" + command + \".\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/exception/NoSpaceAfterException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.NoSpaceAfterException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class NoSpaceAfterException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.NoSpaceAfterException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param word The word without a space after.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public NoSpaceAfterException(String word) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! Pls add a space after typing \" + word + \".\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/exception/NoSpaceBeforeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.NoSpaceBeforeException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class NoSpaceBeforeException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.NoSpaceBeforeException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param word The word without a space before.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public NoSpaceBeforeException(String word) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! Pls add a space before typing \" + word + \".\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" * Represents a deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" /** The deadline of the task. */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Deadline class.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" this.by \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Deadline class.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" public Deadline(String description, boolean isDone, String by) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" this.by \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the deadline in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the deadline in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" public String taskStringify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" int status \u003d super.isDone ? 1 : 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" String byFormat \u003d this.by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" return \"D | \" + status + \" | \" + super.description + \" | \" + byFormat;","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" String byFormat \u003d this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byFormat + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":64}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" * Represents an event.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" /** The start date/time of the event. */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" /** The end date/time of the event. */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Event class.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" * @param from The start date/time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" * @param to The end date/time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" this.from \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" this.to \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Event class.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * @param from The start date/time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" * @param to The end date/time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" public Event(String description, boolean isDone, String from, String to) {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" this.from \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" this.to \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the event in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the event in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" public String taskStringify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" int status \u003d super.isDone ? 1 : 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" String fromFormat \u003d this.from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" String toFormat \u003d this.to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" return \"E | \" + status + \" | \" + super.description + \" | \" + fromFormat + \" - \" + toFormat;","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" String fromFormat \u003d this.from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" String toFormat \u003d this.to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" return \"[E]\" + super.toString() + \" (from: \" + fromFormat + \" to: \" + toFormat + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":73}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a task.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /** The description of the task. */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" /** The status of the task. */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" return this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" * Returns the status of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" * @return \"X\" to mark the task as done, or \" \" if otherwise.","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the task in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the task in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" public abstract String taskStringify();","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":86}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.EmptyKeywordException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.EmptyTaskException;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.NoSpaceAfterException;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.NoSpaceBeforeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" * duke.task.TaskList class that contains the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.TaskList class.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" public TaskList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" this.list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" * @param list The array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" public TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" * Returns the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" * @return An array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" return this.list;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" * Returns the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" * @return The task at the index.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" private Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" return getList().get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" * Adds a task to the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" private void addTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" this.list.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" * Deletes a task from the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" private void deleteTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" this.list.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" * Returns the length of the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" * @return The length of the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" private int getLength() {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" return this.list.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" * @return The message after marking the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" public String mark(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" if (result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"mark \") \u0026\u0026 command.length() \u003e 4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(5));","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" t.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printMarkTask(t);","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" * @return The message after unmarking the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" public String unmark(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" if (result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"unmark \") \u0026\u0026 command.length() \u003e 6) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"unmark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"unmark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(7));","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" t.markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printUnmarkTask(t);","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" * Adds a todo to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" * @return The message after adding a todo.","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" public String todo(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":" if ((result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"todo \") \u0026\u0026 command.length() \u003e 4)","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":" || (result.length \u003e 1 \u0026\u0026 !command.startsWith(\"todo \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"PearlynnT"},"content":" Todo todo \u003d new Todo(command.substring(5));","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"PearlynnT"},"content":" addTask(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printAddTask(todo, getLength());","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"PearlynnT"},"content":" * Adds a deadline to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"PearlynnT"},"content":" * @return The message after adding a deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"PearlynnT"},"content":" public String deadline(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"PearlynnT"},"content":" String[] result1 \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"PearlynnT"},"content":" String[] result2 \u003d command.split(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"PearlynnT"},"content":" if ((result1.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"deadline \") \u0026\u0026 command.length() \u003e 8)","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"PearlynnT"},"content":" || (result1.length \u003e 1 \u0026\u0026 !command.startsWith(\"deadline \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"PearlynnT"},"content":" } else if (result1.length \u003d\u003d 1","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"PearlynnT"},"content":" || (command.contains(\"/by\")","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"deadline\", \"/by\").isBlank())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide a date/time for the deadline.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"PearlynnT"},"content":" } else if (result2.length \u003d\u003d 1 || result2[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The date/time for the deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/by \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"PearlynnT"},"content":" Deadline deadline \u003d new Deadline(command.substring(9, command.indexOf(\"/\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/by\") + 4));","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"PearlynnT"},"content":" addTask(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printAddTask(deadline, getLength());","lastModifiedDate":"2023-09-05"},{"lineNumber":188,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printDateTimeParseException();","lastModifiedDate":"2023-09-05"},{"lineNumber":190,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException | NoSpaceBeforeException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":192,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"PearlynnT"},"content":" * Adds an event to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"PearlynnT"},"content":" * @return The message after adding an event.","lastModifiedDate":"2023-09-05"},{"lineNumber":200,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"PearlynnT"},"content":" public String event(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":202,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"PearlynnT"},"content":" String[] result1 \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"PearlynnT"},"content":" String[] result2 \u003d command.split(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"PearlynnT"},"content":" if ((result1.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"event \") \u0026\u0026 command.length() \u003e 5)","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"PearlynnT"},"content":" || (result1.length \u003e 1 \u0026\u0026 !command.startsWith(\"event \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"PearlynnT"},"content":" } else if (result1.length \u003d\u003d 1","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"PearlynnT"},"content":" || (command.contains(\"/from\")","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"event\", \"/from\").isBlank())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide a start date/time for the event.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide an end date/time for the event.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"PearlynnT"},"content":" } else if (command.contains(\"/from \") \u0026\u0026 command.contains(\"/to\")","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"/from\", \"/to\").isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The start date/time for the event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/from \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"PearlynnT"},"content":" } else if (result2.length \u003d\u003d 1 || result2[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The end date/time for the event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/to \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"PearlynnT"},"content":" Event event \u003d new Event(command.substring(6, command.indexOf(\"/\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/from\") + 6, command.indexOf(\"/to\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/to\") + 4));","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"PearlynnT"},"content":" addTask(event);","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printAddTask(event, getLength());","lastModifiedDate":"2023-09-05"},{"lineNumber":235,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printDateTimeParseException();","lastModifiedDate":"2023-09-05"},{"lineNumber":237,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException | NoSpaceBeforeException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":238,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":239,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":240,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"PearlynnT"},"content":" * Deletes the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"PearlynnT"},"content":" * @return The message after deleting the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":247,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":248,"author":{"gitId":"PearlynnT"},"content":" public String delete(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":249,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":250,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":251,"author":{"gitId":"PearlynnT"},"content":" if (result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"delete \") \u0026\u0026 command.length() \u003e 6) {","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"delete\");","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"delete\");","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(7));","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"PearlynnT"},"content":" deleteTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printDeleteTask(t, getLength());","lastModifiedDate":"2023-09-05"},{"lineNumber":260,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-09-05"},{"lineNumber":262,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":263,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":264,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":267,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"PearlynnT"},"content":" * Finds the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"PearlynnT"},"content":" * @return The message after finding the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":272,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"PearlynnT"},"content":" public String find(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":274,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"PearlynnT"},"content":" if (result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"find \") \u0026\u0026 command.length() \u003e 4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":277,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"find\");","lastModifiedDate":"2023-08-30"},{"lineNumber":278,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":279,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyKeywordException();","lastModifiedDate":"2023-08-30"},{"lineNumber":280,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":281,"author":{"gitId":"PearlynnT"},"content":" String keyword \u003d command.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"PearlynnT"},"content":" ArrayList\u003cTask\u003e matchList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"PearlynnT"},"content":" for (Task t : this.list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"PearlynnT"},"content":" if (t.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"PearlynnT"},"content":" matchList.add(t);","lastModifiedDate":"2023-08-30"},{"lineNumber":286,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":287,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":288,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printFindTask(matchList);","lastModifiedDate":"2023-09-05"},{"lineNumber":289,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyKeywordException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":290,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":291,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":292,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":293,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":294,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":295,"author":{"gitId":"PearlynnT"},"content":" * Returns a substring between two words.","lastModifiedDate":"2023-08-30"},{"lineNumber":296,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":297,"author":{"gitId":"PearlynnT"},"content":" * @param text The text to get the substring from.","lastModifiedDate":"2023-08-30"},{"lineNumber":298,"author":{"gitId":"PearlynnT"},"content":" * @param first The word before the substring.","lastModifiedDate":"2023-08-30"},{"lineNumber":299,"author":{"gitId":"PearlynnT"},"content":" * @param second The word after the substring.","lastModifiedDate":"2023-08-30"},{"lineNumber":300,"author":{"gitId":"PearlynnT"},"content":" * @return The substring between two words.","lastModifiedDate":"2023-08-30"},{"lineNumber":301,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":302,"author":{"gitId":"PearlynnT"},"content":" private String textBtwnWords(String text, String first, String second) {","lastModifiedDate":"2023-08-30"},{"lineNumber":303,"author":{"gitId":"PearlynnT"},"content":" return text.substring(text.indexOf(first) + first.length() + 1, text.indexOf(second));","lastModifiedDate":"2023-08-30"},{"lineNumber":304,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":305,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":305}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Todo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the todo.","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Todo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the todo in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the todo in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" public String taskStringify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" int status \u003d super.isDone ? 1 : 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" return \"T | \" + status + \" | \" + super.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the todo.","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":50}},{"path":"src/main/java/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" * duke.util.Parser class that deals with making sense of the user command.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" * Parses the user command.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" * @return The result of parsing the user command.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" public static String parse(String command, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" Duke.setExit(true);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" Duke.getStorage().saveData(Duke.getTaskList().getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().showExit();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printList(taskList.getList());","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" return taskList.mark(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" return taskList.unmark(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" return taskList.todo(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" return taskList.deadline(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" return taskList.event(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" return taskList.delete(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" return taskList.find(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":49}},{"path":"src/main/java/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * duke.util.Storage class that deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" private final String pathname;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" private boolean hasFile;","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.util.Storage class.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" * @param pathname The pathname of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" public Storage(String pathname) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" this.pathname \u003d pathname;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" File f \u003d new File(pathname);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" this.hasFile \u003d !f.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"IOException: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" * Checks the existence of the file.","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" public void checkFile() {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" Path path \u003d Paths.get(this.pathname);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" String directory \u003d path.getParent().toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" String filename \u003d path.getFileName().toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" File dir \u003d new File(directory);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" File file \u003d new File(filename);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" dir.mkdirs();","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"IOException: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" * Loads data from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" * @return An array list of the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" public ArrayList\u003cTask\u003e loadData() {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" checkFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" File file \u003d new File(this.pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" Scanner sc \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" String data \u003d sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" list.add(readData(data));","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" sc.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"No file found.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" return list;","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" * Reads data from each line of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" * @param line The line in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" * @return A Task that the line represents.","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" private Task readData(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" String[] data \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" String taskType \u003d data[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" boolean isDone \u003d Integer.parseInt(data[1]) \u003d\u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" String description \u003d data[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Todo(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Deadline(description, isDone, data[3]);","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" String[] time \u003d data[3].split(\" - \");","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Event(description, isDone, time[0], time[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Invalid task type\");","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" System.out.println(Duke.getUi().printDateTimeParseException());","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" * Saves data to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" * @param list The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":" public void saveData(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":" FileWriter fileWriter \u003d new FileWriter(this.pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" for (Task t : list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" String str \u003d t.taskStringify();","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":" fileWriter.write(str + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"IOException: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":" * Returns true if the file exists, false if otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":" * @return true if the file exists, false if otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" public boolean getHasFile() {","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":" return this.hasFile;","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":149}},{"path":"src/main/java/duke/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" * duke.util.Ui class that deals with interactions with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" private static final String LINE \u003d \"\\t____________________________________________________________\";","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" * Shows the welcome message.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Hello! I\u0027m Violet\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t What can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" //return line + \"\\n\\t Hello! I\u0027m Violet\" + \"\\n\\t What can I do for you?\\n\" + line;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" * Returns the exit message.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" * @return The exit message.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" public String showExit() {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" * Returns the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * @param list The array list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" * @return The task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" public String printList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" StringBuilder tasks \u003d new StringBuilder(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" tasks.append(\"\\n \").append(i + 1).append(\".\").append(list.get(i).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" * Returns the message when the task marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" * @param task The task marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" * @return The marked task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" public String printMarkTask(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" * Returns the message when the task marked as undone.","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" * @param task The task marked as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" * @return The unmarked task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" public String printUnmarkTask(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" private String printNumTasks(int num) {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" if (num \u003d\u003d 1 || num \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" return \"\\nNow you have \" + num + \" task in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" return \"\\nNow you have \" + num + \" tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" * Returns the task added to the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" * @param task The task added.","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" * @return The added task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" public String printAddTask(Task task, int num) {","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + task.toString() + printNumTasks(num);","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" * Returns the task deleted from the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" * @param task The task deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" * @return The deleted task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" public String printDeleteTask(Task task, int num) {","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" return \"Noted. I\u0027ve removed this task:\\n\" + task.toString() + printNumTasks(num);","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" * Returns the task list containing the tasks with the keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" * @param list The array list containing the tasks with the keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" * @return The task list containing the tasks with the keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" public String printFindTask(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" StringBuilder tasks \u003d new StringBuilder(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" tasks.append(\"\\n \").append(i + 1).append(\".\").append(list.get(i).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" * Returns the error message when an IndexOutOfBoundsException occurs.","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" * @param list The array list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" * @return The error message when an IndexOutOfBoundsException occurs.","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" public String printIndexOutOfBoundsException(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" if (list.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":" return \"☹ OOPS!!! You don\u0027t have any task in your list. Pls add a task.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" } else if (list.size() \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":" return \"☹ OOPS!!! You only have one task in your list. Pls select 1.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" return \"☹ OOPS!!! Pls select a task number between 1 and \" + list.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":" * Returns the error message when a DateTimeParseException occurs.","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" * @return The error message when a DateTimeParseException occurs.","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" public String printDateTimeParseException() {","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":" return \"☹ OOPS!!! Invalid date format. Pls provide a date in the format yyyy-MM-dd HHmm.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":144}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":24}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" public void testTaskStringify() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"D | 0 | return book | 2023-06-06 1800\",","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", false, \"2023-06-06 1800\").taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"D | 1 | return book | 2023-06-06 1800\",","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", true, \"2023-06-06 1800\").taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" // isDone not given","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[D][ ] return book (by: Jun 06 2023 1800)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", \"2023-06-06 1800\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[D][ ] return book (by: Jun 06 2023 1800)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", false, \"2023-06-06 1800\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[D][X] return book (by: Jun 06 2023 1800)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", true, \"2023-06-06 1800\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":34}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"public class EventTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" public void testTaskStringify() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"E | 0 | project meeting | 2023-08-06 1400 - 2023-08-06 1600\",","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", false, \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" .taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"E | 1 | project meeting | 2023-08-06 1400 - 2023-08-06 1600\",","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", true, \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" .taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" // isDone not given","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[E][ ] project meeting (from: Aug 06 2023 1400 to: Aug 06 2023 1600)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", \"2023-08-06 1400\", \"2023-08-06 1600\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[E][ ] project meeting (from: Aug 06 2023 1400 to: Aug 06 2023 1600)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", false, \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" .toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[E][X] project meeting (from: Aug 06 2023 1400 to: Aug 06 2023 1600)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", true, \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" .toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":38}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" public void testGetDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" // todo task","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"borrow book\", new Todo(\"borrow book\").getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" // deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"return book\",","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", \"2023-06-06 1800\").getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" // event task","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"project meeting\",","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" .getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" public void testGetStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" // not done","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\" \", new Todo(\"borrow book\", false).getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" // done","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"X\", new Todo(\"borrow book\", true).getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":32}},{"path":"src/test/java/duke/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" public void testTaskStringify() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"T | 0 | borrow book\", new Todo(\"borrow book\", false).taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"T | 1 | borrow book\", new Todo(\"borrow book\", true).taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" // isDone not given","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[T][ ] borrow book\", new Todo(\"borrow book\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[T][ ] borrow book\", new Todo(\"borrow book\", false).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[T][X] borrow book\", new Todo(\"borrow book\", true).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":29}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"todo read book","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"deadline return book /by 2023-09-01 1200","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"mark","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"mark1","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"mark 10","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"event project meeting /from 2023-08-30 1400 /to 2023-08-30 1600","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"unmark","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"unmark3","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"unmark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"todorun","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":"todobuy bread","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":"deadline","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"deadlinemath hw","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":"deadline math hw","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"deadline math hw/by","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":"deadline math hw /by","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":"deadline math hw /by2023-08-28 1000","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"deadline math hw /by 2023-08-28 1000","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"event","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":"eventbday dinner","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":"event bday dinner","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":"event bday dinner/from","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from /to","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from2023-09-02 1900 /to","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from 2023-09-02 1900/to","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from 2023-09-02 1900 /to","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from 2023-09-02 1900 /to2023-09-02 2000","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from 2023-09-02 1900 /to 2023-09-02 2000","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":"blah","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":"delete","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":"delete5","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":"delete 5","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":"deadline proposal /by 30/8/23 1000","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":47}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"PearlynnT":1,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/duke/*.java","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"PearlynnT":1,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"PearlynnT":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":"mainClassName \u003d \u0027duke.Launcher\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":"checkstyle {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"PearlynnT":25,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"D | 0 | return book | 2023-06-06 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"E | 0 | project meeting | 2023-08-06 1400 - 2023-08-06 1600","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"T | 1 | join sports club","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":4}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"//import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"//import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * duke.Duke class that encapsulates a personal assistant chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" private static boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" private static Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" private static Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" private final String pathname \u003d \"data/duke.txt\";","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" private Scene scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.Duke class.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" public Duke() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" Duke.ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" Duke.ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" Duke.storage \u003d new Storage(this.pathname);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" if (Duke.storage.getHasFile()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList(Duke.storage.loadData());","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.Duke class.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" * @param pathname The pathname of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" public Duke(String pathname) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" Duke.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" //Duke.ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" Duke.storage \u003d new Storage(pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" //Duke.taskList \u003d new TaskList(Duke.storage.loadData());","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" if (Duke.storage.getHasFile()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList(Duke.storage.loadData());","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" * Sets the exit status of the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" * @param isExit The boolean value.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" public static void setExit(boolean isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" Duke.isExit \u003d isExit;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" * Gets the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" * @return The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" public static Storage getStorage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" return Duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" * Gets the taskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" * @return The taskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" public static TaskList getTaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" return Duke.taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" * Gets the UI.","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" * @return The UI.","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" public static Ui getUi() {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" return Duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" * Starts the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" private void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" Duke.ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-21"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" while (!Duke.isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-08-21"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" Parser.parse(command, Duke.taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" //new Duke().run();","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" return Parser.parse(input, Duke.taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" //Step 1. Setting up required components","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"PearlynnT"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"PearlynnT"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"PearlynnT"},"content":" //Step 2. Formatting the window to look as expected","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"PearlynnT"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"PearlynnT"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"PearlynnT"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"PearlynnT"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"PearlynnT"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"PearlynnT"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"PearlynnT"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"PearlynnT"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"PearlynnT"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"PearlynnT"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":182,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-05"},{"lineNumber":183,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":184,"author":{"gitId":"PearlynnT"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-05"},{"lineNumber":185,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":186,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"PearlynnT":184,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":30}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":52}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.DukeException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.DukeException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param errorMessage The error message of the exception.","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/exception/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.EmptyDescriptionException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.EmptyDescriptionException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param task The task with the empty description.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public EmptyDescriptionException(String task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! The description of a \" + task + \" cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/exception/EmptyKeywordException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.EmptyKeywordException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class EmptyKeywordException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.EmptyKeywordException class","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" public EmptyKeywordException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! The search keyword cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":17}},{"path":"src/main/java/duke/exception/EmptyTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.EmptyTaskException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class EmptyTaskException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.EmptyTaskException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param command The command with the empty task.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public EmptyTaskException(String command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! Pls select a task to \" + command + \".\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/exception/NoSpaceAfterException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.NoSpaceAfterException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class NoSpaceAfterException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.NoSpaceAfterException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param word The word without a space after.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public NoSpaceAfterException(String word) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! Pls add a space after typing \" + word + \".\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/exception/NoSpaceBeforeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a duke.exception.NoSpaceBeforeException.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class NoSpaceBeforeException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.exception.NoSpaceBeforeException class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param word The word without a space before.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public NoSpaceBeforeException(String word) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(\"☹ OOPS!!! Pls add a space before typing \" + word + \".\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"PearlynnT":19}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" * Represents a deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" /** The deadline of the task. */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Deadline class.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" this.by \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Deadline class.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" public Deadline(String description, boolean isDone, String by) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" this.by \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the deadline in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the deadline in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" public String taskStringify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" int status \u003d super.isDone ? 1 : 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" String byFormat \u003d this.by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" return \"D | \" + status + \" | \" + super.description + \" | \" + byFormat;","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" String byFormat \u003d this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byFormat + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":64}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" * Represents an event.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" /** The start date/time of the event. */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" /** The end date/time of the event. */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Event class.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" * @param from The start date/time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" * @param to The end date/time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" this.from \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" this.to \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Event class.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * @param from The start date/time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" * @param to The end date/time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" public Event(String description, boolean isDone, String from, String to) {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" this.from \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" this.to \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the event in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the event in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" public String taskStringify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" int status \u003d super.isDone ? 1 : 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" String fromFormat \u003d this.from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" String toFormat \u003d this.to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" return \"E | \" + status + \" | \" + super.description + \" | \" + fromFormat + \" - \" + toFormat;","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" String fromFormat \u003d this.from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" String toFormat \u003d this.to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" return \"[E]\" + super.toString() + \" (from: \" + fromFormat + \" to: \" + toFormat + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":73}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a task.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /** The description of the task. */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" /** The status of the task. */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" return this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" * Returns the status of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" * @return \"X\" to mark the task as done, or \" \" if otherwise.","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the task in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the task in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" public abstract String taskStringify();","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":86}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.EmptyKeywordException;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.EmptyTaskException;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.NoSpaceAfterException;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.NoSpaceBeforeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" * duke.task.TaskList class that contains the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" private final ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" * @param list The array of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" public TaskList(Task... list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" this.list.addAll(Arrays.asList(list));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" * Returns the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" * @return An array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" return this.list;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" * Returns the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" * @return The task at the index.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" private Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" return getList().get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" * Adds a task to the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" private void addTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" this.list.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" * Deletes a task from the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" private void deleteTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" this.list.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" * Returns the length of the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" * @return The length of the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" private int getLength() {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" return this.list.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" * @return The message after marking the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" public String mark(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" if (result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"mark \") \u0026\u0026 command.length() \u003e 4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(5));","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" t.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printMarkTask(t);","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" * @return The message after unmarking the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" public String unmark(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" if (result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"unmark \") \u0026\u0026 command.length() \u003e 6) {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"unmark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"unmark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(7));","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" t.markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printUnmarkTask(t);","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":" * Adds a todo to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":" * @return The message after adding a todo.","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":" public String todo(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" if ((result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"todo \") \u0026\u0026 command.length() \u003e 4)","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" || (result.length \u003e 1 \u0026\u0026 !command.startsWith(\"todo \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":" Todo todo \u003d new Todo(command.substring(5));","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":" addTask(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printAddTask(todo, getLength());","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"PearlynnT"},"content":" * Adds a deadline to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"PearlynnT"},"content":" * @return The message after adding a deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"PearlynnT"},"content":" public String deadline(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"PearlynnT"},"content":" String[] result1 \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"PearlynnT"},"content":" String[] result2 \u003d command.split(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"PearlynnT"},"content":" if ((result1.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"deadline \") \u0026\u0026 command.length() \u003e 8)","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"PearlynnT"},"content":" || (result1.length \u003e 1 \u0026\u0026 !command.startsWith(\"deadline \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"PearlynnT"},"content":" } else if (result1.length \u003d\u003d 1","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"PearlynnT"},"content":" || (command.contains(\"/by\")","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"deadline\", \"/by\").isBlank())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide a date/time for the deadline.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"PearlynnT"},"content":" } else if (result2.length \u003d\u003d 1 || result2[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The date/time for the deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/by \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"PearlynnT"},"content":" Deadline deadline \u003d new Deadline(command.substring(9, command.indexOf(\"/\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/by\") + 4));","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"PearlynnT"},"content":" addTask(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printAddTask(deadline, getLength());","lastModifiedDate":"2023-09-05"},{"lineNumber":182,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printDateTimeParseException();","lastModifiedDate":"2023-09-05"},{"lineNumber":184,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException | NoSpaceBeforeException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":186,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"PearlynnT"},"content":" * Adds an event to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"PearlynnT"},"content":" * @return The message after adding an event.","lastModifiedDate":"2023-09-05"},{"lineNumber":194,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"PearlynnT"},"content":" public String event(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":196,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"PearlynnT"},"content":" String[] result1 \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"PearlynnT"},"content":" String[] result2 \u003d command.split(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"PearlynnT"},"content":" if ((result1.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"event \") \u0026\u0026 command.length() \u003e 5)","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"PearlynnT"},"content":" || (result1.length \u003e 1 \u0026\u0026 !command.startsWith(\"event \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"PearlynnT"},"content":" } else if (result1.length \u003d\u003d 1","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"PearlynnT"},"content":" || (command.contains(\"/from\")","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"event\", \"/from\").isBlank())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide a start date/time for the event.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide an end date/time for the event.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"PearlynnT"},"content":" } else if (command.contains(\"/from \") \u0026\u0026 command.contains(\"/to\")","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"/from\", \"/to\").isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The start date/time for the event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/from \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"PearlynnT"},"content":" } else if (result2.length \u003d\u003d 1 || result2[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The end date/time for the event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/to \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"PearlynnT"},"content":" Event event \u003d new Event(command.substring(6, command.indexOf(\"/\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/from\") + 6, command.indexOf(\"/to\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/to\") + 4));","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"PearlynnT"},"content":" addTask(event);","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printAddTask(event, getLength());","lastModifiedDate":"2023-09-05"},{"lineNumber":229,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printDateTimeParseException();","lastModifiedDate":"2023-09-05"},{"lineNumber":231,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException | NoSpaceBeforeException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":233,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":235,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":237,"author":{"gitId":"PearlynnT"},"content":" * Deletes the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":238,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":239,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":240,"author":{"gitId":"PearlynnT"},"content":" * @return The message after deleting the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":241,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"PearlynnT"},"content":" public String delete(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":243,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"PearlynnT"},"content":" if (result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"delete \") \u0026\u0026 command.length() \u003e 6) {","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"delete\");","lastModifiedDate":"2023-08-30"},{"lineNumber":247,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":248,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"delete\");","lastModifiedDate":"2023-08-30"},{"lineNumber":249,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":250,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(7));","lastModifiedDate":"2023-08-30"},{"lineNumber":251,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"PearlynnT"},"content":" deleteTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printDeleteTask(t, getLength());","lastModifiedDate":"2023-09-05"},{"lineNumber":254,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-09-05"},{"lineNumber":256,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":258,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":260,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":262,"author":{"gitId":"PearlynnT"},"content":" * Finds the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":263,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":264,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"PearlynnT"},"content":" * @return The message after finding the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":266,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":267,"author":{"gitId":"PearlynnT"},"content":" public String find(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":268,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"PearlynnT"},"content":" if (result.length \u003d\u003d 1 \u0026\u0026 !command.startsWith(\"find \") \u0026\u0026 command.length() \u003e 4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"find\");","lastModifiedDate":"2023-08-30"},{"lineNumber":272,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyKeywordException();","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"PearlynnT"},"content":" String keyword \u003d command.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"PearlynnT"},"content":" ArrayList\u003cTask\u003e matchList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":277,"author":{"gitId":"PearlynnT"},"content":" for (Task t : this.list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":278,"author":{"gitId":"PearlynnT"},"content":" if (t.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":279,"author":{"gitId":"PearlynnT"},"content":" matchList.add(t);","lastModifiedDate":"2023-08-30"},{"lineNumber":280,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":281,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printFindTask(matchList);","lastModifiedDate":"2023-09-05"},{"lineNumber":283,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyKeywordException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":285,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":286,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":287,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":288,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":289,"author":{"gitId":"PearlynnT"},"content":" * Returns a substring between two words.","lastModifiedDate":"2023-08-30"},{"lineNumber":290,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":291,"author":{"gitId":"PearlynnT"},"content":" * @param text The text to get the substring from.","lastModifiedDate":"2023-08-30"},{"lineNumber":292,"author":{"gitId":"PearlynnT"},"content":" * @param first The word before the substring.","lastModifiedDate":"2023-08-30"},{"lineNumber":293,"author":{"gitId":"PearlynnT"},"content":" * @param second The word after the substring.","lastModifiedDate":"2023-08-30"},{"lineNumber":294,"author":{"gitId":"PearlynnT"},"content":" * @return The substring between two words.","lastModifiedDate":"2023-08-30"},{"lineNumber":295,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":296,"author":{"gitId":"PearlynnT"},"content":" private String textBtwnWords(String text, String first, String second) {","lastModifiedDate":"2023-08-30"},{"lineNumber":297,"author":{"gitId":"PearlynnT"},"content":" return text.substring(text.indexOf(first) + first.length() + 1, text.indexOf(second));","lastModifiedDate":"2023-08-30"},{"lineNumber":298,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":299,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":299}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":" * Represents a todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Todo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the todo.","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Todo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the todo in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the todo in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" public String taskStringify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" int status \u003d super.isDone ? 1 : 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" return \"T | \" + status + \" | \" + super.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the todo.","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":50}},{"path":"src/main/java/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" * duke.util.Parser class that deals with making sense of the user command.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" * Parses the user command.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" * @return The result of parsing the user command.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" public static String parse(String command, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" Duke.setExit(true);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" Duke.getStorage().saveData(Duke.getTaskList().getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().showExit();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" return Duke.getUi().printList(taskList.getList());","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" return taskList.mark(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" return taskList.unmark(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" return taskList.todo(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" return taskList.deadline(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" return taskList.event(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" return taskList.delete(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" return taskList.find(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":49}},{"path":"src/main/java/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * duke.util.Storage class that deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" private final String pathname;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" private boolean hasFile;","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.util.Storage class.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" * @param pathname The pathname of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" public Storage(String pathname) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" this.pathname \u003d pathname;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" File f \u003d new File(pathname);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" this.hasFile \u003d !f.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"IOException: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" * Checks the existence of the file.","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" public void checkFile() {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" Path path \u003d Paths.get(this.pathname);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" String directory \u003d path.getParent().toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" String filename \u003d path.getFileName().toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" File dir \u003d new File(directory);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" File file \u003d new File(filename);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" dir.mkdirs();","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"IOException: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" * Loads data from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" * @return An array of the tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" public Task[] loadData() {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" checkFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" File file \u003d new File(this.pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" Scanner sc \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" String data \u003d sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" list.add(readData(data));","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" sc.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"No file found.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" return list.toArray(new Task[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" * Reads data from each line of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" * @param line The line in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" * @return A Task that the line represents.","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" private Task readData(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" String[] data \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" String taskType \u003d data[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" boolean isDone \u003d Integer.parseInt(data[1]) \u003d\u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" String description \u003d data[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Todo(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Deadline(description, isDone, data[3]);","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" String[] time \u003d data[3].split(\" - \");","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Event(description, isDone, time[0], time[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Invalid task type\");","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" System.out.println(Duke.getUi().printDateTimeParseException());","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" * Saves data to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" * @param list The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":" public void saveData(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":" FileWriter fileWriter \u003d new FileWriter(this.pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" for (Task t : list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" String str \u003d t.taskStringify();","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":" fileWriter.write(str + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"IOException: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":" * Returns true if the file exists, false if otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":" * @return true if the file exists, false if otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" public boolean getHasFile() {","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":" return this.hasFile;","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":149}},{"path":"src/main/java/duke/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":" * duke.util.Ui class that deals with interactions with the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" private static final String LINE \u003d \"\\t____________________________________________________________\";","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" * Shows the welcome message.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Hello! I\u0027m Violet\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t What can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" //return line + \"\\n\\t Hello! I\u0027m Violet\" + \"\\n\\t What can I do for you?\\n\" + line;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" * Returns the exit message.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" * @return The exit message.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" public String showExit() {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" * Returns the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * @param list The array list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" * @return The task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" public String printList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" StringBuilder tasks \u003d new StringBuilder(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" tasks.append(\"\\n \").append(i + 1).append(\".\").append(list.get(i).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" * Returns the message when the task marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" * @param task The task marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" * @return The marked task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" public String printMarkTask(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" * Returns the message when the task marked as undone.","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" * @param task The task marked as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" * @return The unmarked task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" public String printUnmarkTask(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" private String printNumTasks(int num) {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" if (num \u003d\u003d 1 || num \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" return \"\\nNow you have \" + num + \" task in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" return \"\\nNow you have \" + num + \" tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" * Returns the task added to the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" * @param task The task added.","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" * @return The added task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" public String printAddTask(Task task, int num) {","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + task.toString() + printNumTasks(num);","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" * Returns the task deleted from the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" * @param task The task deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" * @return The deleted task message.","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" public String printDeleteTask(Task task, int num) {","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" return \"Noted. I\u0027ve removed this task:\\n\" + task.toString() + printNumTasks(num);","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" * Returns the task list containing the tasks with the keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" * @param list The array list containing the tasks with the keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" * @return The task list containing the tasks with the keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" public String printFindTask(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" StringBuilder tasks \u003d new StringBuilder(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" tasks.append(\"\\n \").append(i + 1).append(\".\").append(list.get(i).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" * Returns the error message when an IndexOutOfBoundsException occurs.","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" * @param list The array list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" * @return The error message when an IndexOutOfBoundsException occurs.","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" public String printIndexOutOfBoundsException(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" if (list.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":" return \"☹ OOPS!!! You don\u0027t have any task in your list. Pls add a task.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" } else if (list.size() \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":" return \"☹ OOPS!!! You only have one task in your list. Pls select 1.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" return \"☹ OOPS!!! Pls select a task number between 1 and \" + list.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":" * Returns the error message when a DateTimeParseException occurs.","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" * @return The error message when a DateTimeParseException occurs.","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" public String printDateTimeParseException() {","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":" return \"☹ OOPS!!! Invalid date format. Pls provide a date in the format yyyy-MM-dd HHmm.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":144}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"PearlynnT":24}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" public void testTaskStringify() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"D | 0 | return book | 2023-06-06 1800\",","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", false, \"2023-06-06 1800\").taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"D | 1 | return book | 2023-06-06 1800\",","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", true, \"2023-06-06 1800\").taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" // isDone not given","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[D][ ] return book (by: Jun 06 2023 1800)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", \"2023-06-06 1800\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[D][ ] return book (by: Jun 06 2023 1800)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", false, \"2023-06-06 1800\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[D][X] return book (by: Jun 06 2023 1800)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", true, \"2023-06-06 1800\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":34}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"public class EventTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" public void testTaskStringify() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"E | 0 | project meeting | 2023-08-06 1400 - 2023-08-06 1600\",","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", false, \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" .taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"E | 1 | project meeting | 2023-08-06 1400 - 2023-08-06 1600\",","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", true, \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" .taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" // isDone not given","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[E][ ] project meeting (from: Aug 06 2023 1400 to: Aug 06 2023 1600)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", \"2023-08-06 1400\", \"2023-08-06 1600\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[E][ ] project meeting (from: Aug 06 2023 1400 to: Aug 06 2023 1600)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", false, \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" .toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[E][X] project meeting (from: Aug 06 2023 1400 to: Aug 06 2023 1600)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", true, \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" .toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":38}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" public void testGetDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" // todo task","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"borrow book\", new Todo(\"borrow book\").getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" // deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"return book\",","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" new Deadline(\"return book\", \"2023-06-06 1800\").getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" // event task","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"project meeting\",","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" new Event(\"project meeting\", \"2023-08-06 1400\", \"2023-08-06 1600\")","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" .getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" public void testGetStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" // not done","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\" \", new Todo(\"borrow book\", false).getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" // done","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"X\", new Todo(\"borrow book\", true).getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":32}},{"path":"src/test/java/duke/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":" public void testTaskStringify() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"T | 0 | borrow book\", new Todo(\"borrow book\", false).taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"T | 1 | borrow book\", new Todo(\"borrow book\", true).taskStringify());","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" // isDone not given","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[T][ ] borrow book\", new Todo(\"borrow book\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" // isDone is false","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[T][ ] borrow book\", new Todo(\"borrow book\", false).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" // isDone is true","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" assertEquals(\"[T][X] borrow book\", new Todo(\"borrow book\", true).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":29}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"PearlynnT"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"PearlynnT"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"PearlynnT"},"content":"todo read book","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"deadline return book /by 2023-09-01 1200","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"mark","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"PearlynnT"},"content":"mark1","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"mark 10","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"event project meeting /from 2023-08-30 1400 /to 2023-08-30 1600","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"unmark","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"unmark3","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"unmark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"todorun","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":"todobuy bread","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":"deadline","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"deadlinemath hw","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":"deadline math hw","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":"deadline math hw/by","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":"deadline math hw /by","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":"deadline math hw /by2023-08-28 1000","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":"deadline math hw /by 2023-08-28 1000","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":"event","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":"eventbday dinner","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":"event bday dinner","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":"event bday dinner/from","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from /to","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from2023-09-02 1900 /to","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from 2023-09-02 1900/to","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from 2023-09-02 1900 /to","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from 2023-09-02 1900 /to2023-09-02 2000","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":"event bday dinner /from 2023-09-02 1900 /to 2023-09-02 2000","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":"blah","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":"delete","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":"delete5","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":"delete 5","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":"deadline proposal /by 30/8/23 1000","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":47}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"PearlynnT":1,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/duke/*.java","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"PearlynnT":1,"-":37}}] diff --git a/PearlynnT_ip_master/commits.json b/PearlynnT_ip_master/commits.json index 29b00dd6..0d39e2ba 100644 --- a/PearlynnT_ip_master/commits.json +++ b/PearlynnT_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"PearlynnT":[{"date":"2023-08-21","commitResults":[{"hash":"19e3bbf801008a00e1ff036825f080f21c902ac3","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"1f276dcaf74bdcb7ec0c03f300a4cc69e7573666","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"edce9ed30859b0672cd9461cbd7a0074b76c142e","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"25c48ca930d9b9a406e661ced303506ea914d82f","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"144e7eeaa8a38c86171c1c75ebda1bd5c477dbad","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":13}}},{"hash":"ae423649a70c14fb1dc30450a92d7f831ab0dfb1","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":0}}},{"hash":"a98486322ffbf51301a49a0238f163c44024d9a4","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-08-22","commitResults":[{"hash":"6d64553341a06af0799ec3b47d2e5051919f2523","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":50}}},{"hash":"2d26cbb6b07fc924035b176a45dedb8f3c9d9b64","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":22,"deletions":0},"java":{"insertions":4,"deletions":0}}},{"hash":"61158ac89d42e3d606ac068de2171ab0df4cce66","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":34,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"657f618b5c5edce045696de3fe9c4b6b800cd566","isMergeCommit":false,"messageTitle":"doc","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"2740e6be5ae77ebb71f4bb3d8752d957a825868b","isMergeCommit":false,"messageTitle":"Add exception classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":100,"deletions":29}}},{"hash":"ee5810a2378adca3410eb3e59917c9d0796f48c3","isMergeCommit":false,"messageTitle":"Add Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":147,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"a3e0dd10ab548c3a887378cbab2ddaa56b659b16","isMergeCommit":false,"messageTitle":"Add list method","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":8,"deletions":4}}},{"hash":"347f2d136ef246d1119453825a862b907604de3a","isMergeCommit":true,"messageTitle":"Merge branch-Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c06f373c5aeea876ae6634ccd066b1d1709235af","isMergeCommit":false,"messageTitle":"Add Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":11},"java":{"insertions":52,"deletions":29}}},{"hash":"36e685b4b377d5271e15e224b64afa24d51d96b7","isMergeCommit":true,"messageTitle":"Merge branch-Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"33b8fbd126d6d0bae3cea1c8d8fcbbb43531c61c","isMergeCommit":false,"messageTitle":"Add A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":541,"deletions":225}}},{"hash":"4907af06af8af77ef8b367054b2a67634e55c057","isMergeCommit":true,"messageTitle":"Merge branch-A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"c07bdbf9d4de5888df4693f5cb5b20436c24994e","isMergeCommit":false,"messageTitle":"Add A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":29},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3a9800086258a6c2ccfcd369d1e424af6a53d4f2","isMergeCommit":true,"messageTitle":"Merge branch-A-packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"f42fa8d1fdc0f0cd53db4098aeaae777a2b5194f","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"0a20d639ae9b533c01fc48af8d84926e9a2a76d9","isMergeCommit":true,"messageTitle":"Merge add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"81989a509a64917e183c7342707e1a556288e9bb","isMergeCommit":false,"messageTitle":"Add A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":118,"deletions":85},"sh":{"insertions":1,"deletions":1}}},{"hash":"eb075afc727a6416afa9aea9e12aee1bbf256254","isMergeCommit":false,"messageTitle":"Add A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":0}}},{"hash":"3289678987a850e16526abd5cbd373cd3a2e4581","isMergeCommit":false,"messageTitle":"Add A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0}}},{"hash":"c9607dbd5656b064b70e171c01f39b8453ff4abd","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"274b3ef3051e5dcab5cfe013cae7afca8260ba16","isMergeCommit":false,"messageTitle":"Tweak code to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"605f30743bc619f5cbaabe064b08d2b382b17dea","isMergeCommit":false,"messageTitle":"Add Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"7c9e8aba9849c35aff9e634c4ba85a9dba27b8bc","isMergeCommit":false,"messageTitle":"Add Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":4}}},{"hash":"7625a67fda82dca88c5b952583aebc551d8d2a7f","isMergeCommit":true,"messageTitle":"Merge branch-A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"d361bae27ff1563a2bc5ea47f24da1bb95cb0f26","isMergeCommit":true,"messageTitle":"branch-A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"a95e746e8dba2d56d1042a075030781161a37d1b","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"54672678d74125a4b0d3227eacd0093e2837ae56","isMergeCommit":false,"messageTitle":"Change import order","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"729d7e751aa33f928f9384755628273a839f3c17","isMergeCommit":true,"messageTitle":"Merge branch-A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"ca7c13196421128ae3be6644a555ee52c5a92c3c","isMergeCommit":false,"messageTitle":"Add Level-10","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":2},"fxml":{"insertions":41,"deletions":0},"java":{"insertions":416,"deletions":109}}},{"hash":"0a783a783df0b86611b4f77b10d6baaa580ba3eb","isMergeCommit":false,"messageTitle":"Edit javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":19}}},{"hash":"dbaaee02d8f42ea3be92ceaac6271ff8ee018967","isMergeCommit":true,"messageTitle":"Merge branch-Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"PearlynnT":{"java":1504,"md":2,"fxml":41,"sh":1,"bat":1,"gradle":25,"txt":51}},"authorContributionVariance":{"PearlynnT":100856.12},"authorDisplayNameMap":{"PearlynnT":"CS2103T-F12-2 PEAR..YING"}} +{"authorDailyContributionsMap":{"PearlynnT":[{"date":"2023-08-21","commitResults":[{"hash":"19e3bbf801008a00e1ff036825f080f21c902ac3","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"1f276dcaf74bdcb7ec0c03f300a4cc69e7573666","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"edce9ed30859b0672cd9461cbd7a0074b76c142e","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"25c48ca930d9b9a406e661ced303506ea914d82f","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"144e7eeaa8a38c86171c1c75ebda1bd5c477dbad","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":13}}},{"hash":"ae423649a70c14fb1dc30450a92d7f831ab0dfb1","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":0}}},{"hash":"a98486322ffbf51301a49a0238f163c44024d9a4","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-08-22","commitResults":[{"hash":"6d64553341a06af0799ec3b47d2e5051919f2523","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":50}}},{"hash":"2d26cbb6b07fc924035b176a45dedb8f3c9d9b64","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":22,"deletions":0},"java":{"insertions":4,"deletions":0}}},{"hash":"61158ac89d42e3d606ac068de2171ab0df4cce66","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":34,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"657f618b5c5edce045696de3fe9c4b6b800cd566","isMergeCommit":false,"messageTitle":"doc","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"2740e6be5ae77ebb71f4bb3d8752d957a825868b","isMergeCommit":false,"messageTitle":"Add exception classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":100,"deletions":29}}},{"hash":"ee5810a2378adca3410eb3e59917c9d0796f48c3","isMergeCommit":false,"messageTitle":"Add Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":147,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"a3e0dd10ab548c3a887378cbab2ddaa56b659b16","isMergeCommit":false,"messageTitle":"Add list method","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":8,"deletions":4}}},{"hash":"347f2d136ef246d1119453825a862b907604de3a","isMergeCommit":true,"messageTitle":"Merge branch-Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c06f373c5aeea876ae6634ccd066b1d1709235af","isMergeCommit":false,"messageTitle":"Add Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":11},"java":{"insertions":52,"deletions":29}}},{"hash":"36e685b4b377d5271e15e224b64afa24d51d96b7","isMergeCommit":true,"messageTitle":"Merge branch-Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"33b8fbd126d6d0bae3cea1c8d8fcbbb43531c61c","isMergeCommit":false,"messageTitle":"Add A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":541,"deletions":225}}},{"hash":"4907af06af8af77ef8b367054b2a67634e55c057","isMergeCommit":true,"messageTitle":"Merge branch-A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"c07bdbf9d4de5888df4693f5cb5b20436c24994e","isMergeCommit":false,"messageTitle":"Add A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":29},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3a9800086258a6c2ccfcd369d1e424af6a53d4f2","isMergeCommit":true,"messageTitle":"Merge branch-A-packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"f42fa8d1fdc0f0cd53db4098aeaae777a2b5194f","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"0a20d639ae9b533c01fc48af8d84926e9a2a76d9","isMergeCommit":true,"messageTitle":"Merge add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"81989a509a64917e183c7342707e1a556288e9bb","isMergeCommit":false,"messageTitle":"Add A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":118,"deletions":85},"sh":{"insertions":1,"deletions":1}}},{"hash":"eb075afc727a6416afa9aea9e12aee1bbf256254","isMergeCommit":false,"messageTitle":"Add A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":0}}},{"hash":"3289678987a850e16526abd5cbd373cd3a2e4581","isMergeCommit":false,"messageTitle":"Add A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0}}},{"hash":"c9607dbd5656b064b70e171c01f39b8453ff4abd","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"274b3ef3051e5dcab5cfe013cae7afca8260ba16","isMergeCommit":false,"messageTitle":"Tweak code to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"605f30743bc619f5cbaabe064b08d2b382b17dea","isMergeCommit":false,"messageTitle":"Add Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"7c9e8aba9849c35aff9e634c4ba85a9dba27b8bc","isMergeCommit":false,"messageTitle":"Add Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":4}}},{"hash":"7625a67fda82dca88c5b952583aebc551d8d2a7f","isMergeCommit":true,"messageTitle":"Merge branch-A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"d361bae27ff1563a2bc5ea47f24da1bb95cb0f26","isMergeCommit":true,"messageTitle":"branch-A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"a95e746e8dba2d56d1042a075030781161a37d1b","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"54672678d74125a4b0d3227eacd0093e2837ae56","isMergeCommit":false,"messageTitle":"Change import order","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"729d7e751aa33f928f9384755628273a839f3c17","isMergeCommit":true,"messageTitle":"Merge branch-A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"ca7c13196421128ae3be6644a555ee52c5a92c3c","isMergeCommit":false,"messageTitle":"Add Level-10","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":2},"fxml":{"insertions":41,"deletions":0},"java":{"insertions":416,"deletions":109}}},{"hash":"0a783a783df0b86611b4f77b10d6baaa580ba3eb","isMergeCommit":false,"messageTitle":"Edit javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":19}}},{"hash":"dbaaee02d8f42ea3be92ceaac6271ff8ee018967","isMergeCommit":true,"messageTitle":"Merge branch-Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"db9e28ba3d56866736de1af8cf4c5602147963d1","isMergeCommit":false,"messageTitle":"Add varargs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":14}}},{"hash":"3da1fec6f2d8d94db14073705fc8ee28d087fab4","isMergeCommit":true,"messageTitle":"Merge branch-A-Varargs","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"PearlynnT":{"java":1498,"md":2,"fxml":41,"sh":1,"bat":1,"gradle":25,"txt":51}},"authorContributionVariance":{"PearlynnT":101937.82},"authorDisplayNameMap":{"PearlynnT":"CS2103T-F12-2 PEAR..YING"}} diff --git a/RSXIX_ip_master/authorship.json b/RSXIX_ip_master/authorship.json index 939a4a0e..fcfd9dff 100644 --- a/RSXIX_ip_master/authorship.json +++ b/RSXIX_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"[E] | [X] | hw | Dec 13 2023 0100 - Dec 13 2023 0100","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"RSXIX":1}},{"path":"src/main/java/Duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" Ui.printWelcome();","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" Ui iu \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" Parser her \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" boolean running \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" while (running) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" String entry \u003d sc.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" running \u003d her.inputs(entry, tasks, iu);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":18,"-":2}},{"path":"src/main/java/Duke/Exceptions/IncompleteInput.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"public class IncompleteInput extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" public IncompleteInput(String x) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" super(x);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":7}},{"path":"src/main/java/Duke/Exceptions/InvalidInput.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"public class InvalidInput extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" public InvalidInput(String x) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" super(x);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":7}},{"path":"src/main/java/Duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" public Parser() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" public boolean inputs(String input, TaskList tasks, Ui iu) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" String[] listOfWords \u003d input.split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" String prefix \u003d listOfWords[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" boolean future \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" Storage.saveTasks(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" Ui.printBye();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" future \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" iu.printList(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" } else if (prefix.equals(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(listOfWords[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" if (index \u003c 1 || index \u003e tasks.numOfItems()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"False Index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" tasks.checkItem(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" iu.printMarked(tasks, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" } else if (prefix.equals(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(listOfWords[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" if (index \u003c 1 || index \u003e tasks.numOfItems()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"False Index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" tasks.notDoneItem(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" iu.printUnmarked(tasks, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" } else if (prefix.equals(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(listOfWords[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" if (index \u003c 1 || index \u003e tasks.numOfItems()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"False Index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" iu.printDelete(tasks, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" tasks.deleteIndex(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":" boolean exceptionOccured \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" tasks.input(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" } catch (IncompleteInput e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":" exceptionOccured \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" iu.printTaskWithoutDescription();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" } catch (InvalidInput e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" exceptionOccured \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" iu.printNonsense();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":" if (!exceptionOccured) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" iu.printAddedToList(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" } catch (InvalidInput e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" iu.printWrongIndex();","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":" return future;","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":" public String formatTime(String time) throws DateTimeParseException {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"RSXIX"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(time, formatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"RSXIX"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"RSXIX"},"content":" String formattedStringOutput \u003d dateTime.format(outputFormatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"RSXIX"},"content":" return formattedStringOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"RSXIX"},"content":" public static String dateToString(String time) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"RSXIX"},"content":" Parser dud \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"RSXIX"},"content":" String formattedStringOutput \u003d dud.formatTime(time);","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"RSXIX"},"content":" return formattedStringOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"RSXIX"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"RSXIX"},"content":" return time;","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":98}},{"path":"src/main/java/Duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.io.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" private static final String path \u003d \"./data/data.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" public static void saveTasks(TaskList x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" PrintWriter writer \u003d new PrintWriter(new FileWriter(file));","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" x.saveToFile(writer);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" writer.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"IO\");","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" public static ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(path));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" String line \u003d reader.readLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" List\u003cString\u003e splitsy \u003d new ArrayList\u003c\u003e(Arrays.asList(line.split(\"\\\\| \")));","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" if (splitsy.size() \u003c 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" splitsy.add(\"hi\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" tasks.add(Storage.correctTask(splitsy.get(0), splitsy.get(1), splitsy.get(2), splitsy.get(3)));","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" line \u003d reader.readLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"File\");","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"IO\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" public static Task correctTask(String type, String completion, String item, String deadline) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" if (type.equals(\"[T] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new ToDoTask(item);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" } else if (type.equals(\"[E] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" String from \u003d deadline.split(\"-\")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" String to \u003d deadline.split(\"-\")[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new EventTask(item.trim() + \" /from \" + from.trim() + \" /to \" + to.trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new DeadlineTask(item.trim() + \" /by \" + deadline.trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":84}},{"path":"src/main/java/Duke/Tasks/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import Duke.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" private String by;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" String str;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" String deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" public DeadlineTask(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" String[] strArr \u003d task.split(\"/\");","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" str \u003d strArr[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" deadline \u003d strArr[1].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" return String.format(\"[D] | %s | %s | %s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" this.isDone() ? \"[X]\" : \"[ ]\",","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" str, Parser.dateToString(deadline));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":26}},{"path":"src/main/java/Duke/Tasks/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import Duke.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" private String event;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" private String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" private String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" public EventTask(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" String[] splitsy \u003d task.split(\"/\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" event \u003d splitsy[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" from \u003d splitsy[1].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" to \u003d splitsy[2].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" return String.format(\"[E] | %s | %s | %s - %s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" this.isDone() ? \"[X]\" : \"[ ]\",","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" event, Parser.dateToString(from.trim()), Parser.dateToString(to.trim()));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":24}},{"path":"src/main/java/Duke/Tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" private Boolean done \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" private String task;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" public Task(String input) {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" task \u003d input;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" private String type;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" private String desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" private String checkBox;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" private String deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" public void markDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" done \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" protected boolean isDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" return done;","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" if (done) {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" return \"[X] \" + \"| \" + task;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" return \"[ ] \" +\"| \" + task;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":44}},{"path":"src/main/java/Duke/Tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.io.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"import Duke.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" private ArrayList\u003cTask\u003e storagePile;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" storagePile \u003d Storage.loadTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" public TaskList(String test) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" storagePile \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" int leng \u003d storagePile.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" String listed \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" for (int i \u003d 1; i \u003c\u003d leng; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" listed +\u003d String.format(\"%s - %s\",","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" i, storagePile.get(i-1)) +\" \\n\" ;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" return listed;","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 checkItem(int x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" storagePile.get(x-1).markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" public void notDoneItem(int x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" storagePile.get(x-1).markUndone();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" public void deleteIndex(int x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" storagePile.remove(x-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":" public Task getTask(int x) { return storagePile.get(x-1); }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" public int numOfItems() {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":" return storagePile.size();","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 input(String item) throws InvalidInput, IncompleteInput {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" String firstWord \u003d item.split(\" \")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" if (item.split(\" \").length \u003d\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" if (firstWord.equals(\"todo\") || firstWord.equals(\"deadline\") || firstWord.equals(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" throw new IncompleteInput(\"Not finished\");","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"Invalid\");","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" } else if (firstWord.equals(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new ToDoTask(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" } else if (firstWord.equals(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new DeadlineTask(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new EventTask(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" public void saveToFile(PrintWriter pw) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" for (Task item : storagePile) {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" String str \u003d item.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":" pw.println(str);","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":78}},{"path":"src/main/java/Duke/Tasks/ToDoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"public class ToDoTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" public ToDoTask(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" return \"[T] \" + \"| \" + super.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":12}},{"path":"src/main/java/Duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" private final String upper \u003d \"_______________ \\n\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" private final String lower \u003d \"_______________ \\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" public static void printWelcome() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" String logo \u003d \"_______________ \\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" + \"Eh, I\u0027m Scarlet \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" + \"No, I don\u0027t really want to know who you are \\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" + \"_______________ \\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" System.out.println(logo);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" public static void printBye() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" String logo \u003d \"_______________ \\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" + \"finally. \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" + \"_______________ \\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" System.out.println(logo);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" public void printList(TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" String condemn \u003d upper","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" + \"What a terrible day to be alive. \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" + String.format(\"%s \\n_______________ \\n\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" System.out.println(condemn);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" public void printMarked(TaskList tasks, int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" System.out.println( upper","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" + \"A proud moment of your life I am sure... \\n \"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(index) + \" \\n\" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" public void printUnmarked(TaskList tasks, int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" + \"I\u0027m not juding at all... \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(index) + \" \\n\" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" public void printDelete(TaskList tasks, int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" System.out.println( upper","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" + \"Not another mistake I hope... \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(index) + \" \\n\\n\" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" public void printTaskWithoutDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper +","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" \"Come on now... don\u0027t be shy, go on \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" public void printNonsense() {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper +","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" \"Someone should have paid attention in school... try again \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" public void printAddedToList(TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" + \"I\u0027m totally not judging... \"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(tasks.numOfItems())","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" + \" ... added to the list \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" + \"I wonder how you\u0027ll mess up this... \" + tasks.numOfItems() + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" public void printWrongIndex() {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":" + \"1 mama and 1 papa made 2 dummies \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":84}},{"path":"src/test/java/Duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import Duke.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" public void testIncorrectInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" TaskList tasks \u003d new TaskList(\"empty\");","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" boolean correctness \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" tasks.input(\"nonsense\");","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" } catch (IncompleteInput e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" correctness \u003d true;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" } catch (InvalidInput e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" } finally {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" assertEquals(true, correctness);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"RSXIX":31}},{"path":"src/test/java/Duke/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import Duke.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"public class UiTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" public void testPrintList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" TaskList tasks \u003d new TaskList(\"empty\");","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" tasks.input(\"todo nothing\");","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" tasks.input(\"deadline nothing /by tonight\");","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" } catch (IncompleteInput e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"Won\u0027t happen\");","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" } catch (InvalidInput e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"Won\u0027t happen\");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" } finally {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" // Capture the output of the printList method","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" ui.printList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" // Restore the original System.out","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" // Convert the captured output to a string","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" String printedOutput \u003d outputStream.toString().trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" String expectedOutput \u003d \"_______________ \\n\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" \"What a terrible day to be alive. \\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" \"1 - [T] | [ ] | nothing \\n\" + \"2 - [D] | [ ] | nothing | tonight \\n \\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" \"_______________\";","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":" assertEquals(expectedOutput, printedOutput);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"RSXIX":52}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":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":"RSXIX"},"content":" mainClass.set(\"Duke.Duke\")","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" archiveFileName \u003d \u0027Duke.jar\u0027","lastModifiedDate":"2023-09-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":{"RSXIX":3,"-":41}},{"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":"[T] | [X] | ur mom","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"[D] | [ ] | ur mom | tomorrow","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"[D] | [ ] | tomorrow | ur mom","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"RSXIX":4}},{"path":"src/main/java/Duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" * The Duke class is the main class that serves as the entry point to the Duke application.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" * The main method that starts the Duke application.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" * @param args The command-line arguments (not used in this application).","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" Ui.printWelcome();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" Ui iu \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" Parser her \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" boolean running \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" while (running) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" String entry \u003d sc.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" running \u003d her.inputs(entry, tasks, iu);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":25,"-":2}},{"path":"src/main/java/Duke/Exceptions/IncompleteInput.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" * The IncompleteInput class represents an exception thrown when the user input is incomplete.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"public class IncompleteInput extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" public IncompleteInput(String x) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" super(x);","lastModifiedDate":"2023-08-24"},{"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/Duke/Exceptions/InvalidInput.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" * The InvalidInput class represents an exception thrown when the user input is invalid i.e not recognized.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"public class InvalidInput extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" public InvalidInput(String x) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" super(x);","lastModifiedDate":"2023-08-24"},{"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/Duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.IncompleteInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.InvalidInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" * The Parser class is responsible for parsing user input, processing commands, and formatting date and time.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" public Parser() {","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":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" * Process user input and perform corresponding actions on the task list and user interface.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" * @param input The user\u0027s input.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" * @param tasks The TaskList object to manage tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" * @param iu The Ui object to interact with the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" * @return True if the application should continue running; false if it should exit.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" public boolean inputs(String input, TaskList tasks, Ui iu) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" String[] listOfWords \u003d input.split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" String prefix \u003d listOfWords[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" //future has been used as the boolean which determines when to terminate program","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" boolean future \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" Storage.saveTasks(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" Ui.printBye();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" future \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" iu.printList(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" } else if (prefix.equals(\"find\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" iu.printMatchingTasks(tasks, input.split(\" \",2)[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" } else if (prefix.equals(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(listOfWords[1]);","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":" tasks.checkItem(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" iu.printMarked(tasks, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" } else if (prefix.equals(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(listOfWords[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" if (index \u003c 1 || index \u003e tasks.numOfItems()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"False Index\");","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":" tasks.notDoneItem(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" iu.printUnmarked(tasks, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" } else if (prefix.equals(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(listOfWords[1]);","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":" if (index \u003c 1 || index \u003e tasks.numOfItems()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"False Index\");","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":" iu.printDelete(tasks, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" tasks.deleteIndex(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":" boolean exceptionOccured \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" tasks.input(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" } catch (IncompleteInput e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":" exceptionOccured \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":" iu.printTaskWithoutDescription();","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" } catch (InvalidInput e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":" exceptionOccured \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":" iu.printNonsense();","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"RSXIX"},"content":" if (!exceptionOccured) {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"RSXIX"},"content":" iu.printAddedToList(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"RSXIX"},"content":" } catch (InvalidInput e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"RSXIX"},"content":" iu.printWrongIndex();","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"RSXIX"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"RSXIX"},"content":" return future;","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"},{"lineNumber":92,"author":{"gitId":"RSXIX"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"RSXIX"},"content":" * Formats a date and time string into a specific output format.","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"RSXIX"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"RSXIX"},"content":" * @param time The input date and time string in \"yyyy-MM-dd HHmm\" format.","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"RSXIX"},"content":" * @return The formatted date and time string in \"MMM d yyyy HHmm\" format, or the original input if parsing fails.","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"RSXIX"},"content":" * @throws DateTimeParseException If the input string is not in the expected format.","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"RSXIX"},"content":" public String formatTime(String time) throws DateTimeParseException {","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"RSXIX"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"RSXIX"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(time, formatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"RSXIX"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"RSXIX"},"content":" String formattedStringOutput \u003d dateTime.format(outputFormatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"RSXIX"},"content":" return formattedStringOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"RSXIX"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"RSXIX"},"content":" * Converts a date and time string using the formatTime method, handling any exceptions that may occur.","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"RSXIX"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"RSXIX"},"content":" * @param time The input date and time string.","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"RSXIX"},"content":" * @return The formatted date and time string or the original input if parsing fails.","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"RSXIX"},"content":" public static String dateToString(String time) {","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"RSXIX"},"content":" Parser dud \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"RSXIX"},"content":" String formattedStringOutput \u003d dud.formatTime(time);","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"RSXIX"},"content":" return formattedStringOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"RSXIX"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"RSXIX"},"content":" return time;","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":125}},{"path":"src/main/java/Duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.io.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.DeadlineTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.EventTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.ToDoTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" * The Storage class is responsible for saving tasks to and loading tasks from a data file.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" * Saves tasks from a TaskList to a data file.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" * @param x The TaskList containing tasks to be saved.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" private static final String path \u003d \"./data/data.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" public static void saveTasks(TaskList x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" PrintWriter writer \u003d new PrintWriter(new FileWriter(file));","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" x.saveToFile(writer);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" writer.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"IO\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" * Loads tasks from a data file into an ArrayList of Task objects.","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" * @return An ArrayList containing the loaded tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" public static ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(path));","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" String line \u003d reader.readLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":" List\u003cString\u003e splitsy \u003d new ArrayList\u003c\u003e(Arrays.asList(line.split(\"\\\\| \")));","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" if (splitsy.size() \u003c 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" splitsy.add(\"hi\");","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"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":65,"author":{"gitId":"RSXIX"},"content":" line \u003d reader.readLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"File\");","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":" Storage.createEmptyFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"IO\");","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":" return tasks;","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-06"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":" * Creates an empty data file if it does not exist.","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"RSXIX"},"content":" public static void createEmptyFile() {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"RSXIX"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"RSXIX"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"RSXIX"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"New file created at path: \" + path);","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"RSXIX"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"Error creating the file: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"RSXIX"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"RSXIX"},"content":" * Reads the file where the tasks are saved and recreates them by breaking it down to components.","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"RSXIX"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"RSXIX"},"content":" * @param type The task type as a string (e.g., \"[T] \").","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"RSXIX"},"content":" * @param completion The task\u0027s completion status as a string (e.g., \"[X] \" for completed, \"[ ] \" for not completed).","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"RSXIX"},"content":" * @param item The description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"RSXIX"},"content":" * @param deadline The deadline or additional information associated with the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"RSXIX"},"content":" * @return A Task object representing the parsed task.","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"RSXIX"},"content":" public static Task correctTask(String type, String completion, String item, String deadline) {","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"RSXIX"},"content":" if (type.equals(\"[T] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new ToDoTask(item);","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"RSXIX"},"content":" } else if (type.equals(\"[E] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"RSXIX"},"content":" String from \u003d deadline.split(\"-\")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"RSXIX"},"content":" String to \u003d deadline.split(\"-\")[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new EventTask(item.trim() + \" /from \" + from.trim() + \" /to \" + to.trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new DeadlineTask(item.trim() + \" /by \" + deadline.trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":133}},{"path":"src/main/java/Duke/Tasks/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import Duke.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" String str;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" String deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" public DeadlineTask(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" String[] strArr \u003d task.split(\"/\");","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" str \u003d strArr[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" deadline \u003d strArr[1].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" return String.format(\"[D] | %s | %s | %s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" this.isDone() ? \"[X]\" : \"[ ]\",","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" str, Parser.dateToString(deadline));","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":24}},{"path":"src/main/java/Duke/Tasks/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import Duke.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" private String event;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" private String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" private String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" public EventTask(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" //Splitsy has been used as the result of the array to separate the words","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" String[] splitsy \u003d task.split(\"/\");","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" event \u003d splitsy[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" from \u003d splitsy[1].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" to \u003d splitsy[2].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" return String.format(\"[E] | %s | %s | %s - %s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" this.isDone() ? \"[X]\" : \"[ ]\",","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" event, Parser.dateToString(from.trim()), Parser.dateToString(to.trim()));","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":25}},{"path":"src/main/java/Duke/Tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" * The Task class represents a basic task with a description and completion status.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" private Boolean done \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" private String task;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" public Task(String input) {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" task \u003d input;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" public void markDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" done \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" * Checks if the task matches a given description.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" * @param desc The description to compare.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" * @return True if the task\u0027s description matches the given description; otherwise, false.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" public boolean filterMatchDesc(String desc) {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" String[] splitsy \u003d this.toString().split(\" \\\\| \");","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" return splitsy[2].trim().equals(desc.trim());","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" done \u003d false;","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":" protected boolean isDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" return done;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" if (done) {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" return \"[X] \" + \"| \" + task;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" return \"[ ] \" +\"| \" + task;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":47}},{"path":"src/main/java/Duke/Tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.io.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import Duke.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.InvalidInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.IncompleteInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" private ArrayList\u003cTask\u003e storagePile;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" * Constructs a TaskList and loads tasks from storage.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" storagePile \u003d Storage.loadTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" * @param test just to set it off.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" public TaskList(String test) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" storagePile \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" int leng \u003d storagePile.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" String listed \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" for (int i \u003d 1; i \u003c\u003d leng; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" listed +\u003d String.format(\"%s - %s\",","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" i, storagePile.get(i-1)) +\" \\n\" ;","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" return listed;","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" public void checkItem(int x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" storagePile.get(x-1).markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" public void notDoneItem(int x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" storagePile.get(x-1).markUndone();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":" public void deleteIndex(int x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":" storagePile.remove(x-1);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" public Task getTask(int x) { return storagePile.get(x-1); }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" public int numOfItems() {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" return storagePile.size();","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":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" * Adds a task to the TaskList based on user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":" * @param item The user input representing a task.","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" * @throws InvalidInput If the input is invalid.","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" * @throws IncompleteInput If the input is incomplete.","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" public void input(String item) throws InvalidInput, IncompleteInput {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" String firstWord \u003d item.split(\" \")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" if (item.split(\" \").length \u003d\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" if (firstWord.equals(\"todo\") || firstWord.equals(\"deadline\") || firstWord.equals(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" throw new IncompleteInput(\"Not finished\");","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"Invalid\");","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" } else if (firstWord.equals(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new ToDoTask(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" } else if (firstWord.equals(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new DeadlineTask(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new EventTask(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"RSXIX"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"RSXIX"},"content":" * Filters the TaskList and returns a new TaskList containing tasks with descriptions that match the provided description.","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"RSXIX"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"RSXIX"},"content":" * @param desc The description to filter tasks by.","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"RSXIX"},"content":" * @return A filtered TaskList containing matching tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"RSXIX"},"content":" public TaskList filterTaskList(String desc) {","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"RSXIX"},"content":" TaskList filtered \u003d new TaskList(\"empty\");","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"RSXIX"},"content":" for (Task task : this.storagePile) {","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"RSXIX"},"content":" if (task.filterMatchDesc(desc.trim())) {","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"RSXIX"},"content":" filtered.storagePile.add(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"RSXIX"},"content":" return filtered;","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"RSXIX"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"RSXIX"},"content":" * Saves the tasks in the TaskList to a PrintWriter.","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"RSXIX"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"RSXIX"},"content":" * @param pw The PrintWriter to write tasks to.","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"RSXIX"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"RSXIX"},"content":" public void saveToFile(PrintWriter pw) {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"RSXIX"},"content":" for (Task item : storagePile) {","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"RSXIX"},"content":" String str \u003d item.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"RSXIX"},"content":" pw.println(str);","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":114}},{"path":"src/main/java/Duke/Tasks/ToDoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"public class ToDoTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" public ToDoTask(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" return \"[T] \" + \"| \" + super.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":12}},{"path":"src/main/java/Duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" public Ui() {","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":" private final String upper \u003d \"_______________ \\n\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" private final String lower \u003d \"_______________ \\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" public static void printWelcome() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" String logo \u003d \"_______________ \\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" + \"Eh, I\u0027m Scarlet \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" + \"No, I don\u0027t really want to know who you are \\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" + \"_______________ \\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" System.out.println(logo);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" public static void printBye() {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" String logo \u003d \"_______________ \\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" + \"finally. \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" + \"_______________ \\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" System.out.println(logo);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" public void printMatchingTasks(TaskList tasks, String desc) {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" String condemn \u003d upper","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" + \"Let\u0027s say what you\u0027ve cooked, if you could. \\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" + String.format(\"%s \\n_______________ \\n\", tasks.filterTaskList(desc.trim()));","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" System.out.println(condemn);","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" public void printList(TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" String condemn \u003d upper","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" + \"What a terrible day to be alive. \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" + String.format(\"%s \\n_______________ \\n\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" System.out.println(condemn);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" public void printMarked(TaskList tasks, int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" System.out.println( upper","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" + \"A proud moment of your life I am sure... \\n \"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(index) + \" \\n\" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" public void printUnmarked(TaskList tasks, int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" + \"I\u0027m not juding at all... \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(index) + \" \\n\" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" public void printDelete(TaskList tasks, int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":" System.out.println( upper","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" + \"Not another mistake I hope... \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(index) + \" \\n\\n\" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" public void printTaskWithoutDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper +","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" \"Come on now... don\u0027t be shy, go on \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" public void printNonsense() {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper +","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" \"Someone should have paid attention in school... try again \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":" lower);","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 void printAddedToList(TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":" + \"I\u0027m totally not judging... \"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(tasks.numOfItems())","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":" + \" ... added to the list \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":" + \"I wonder how you\u0027ll mess up this... \" + tasks.numOfItems() + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"RSXIX"},"content":" public void printWrongIndex() {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"RSXIX"},"content":" + \"1 mama and 1 papa made 2 dummies \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"RSXIX"},"content":" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"RSXIX"},"content":" }","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"}],"authorContributionMap":{"RSXIX":90}},{"path":"src/test/java/Duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import Duke.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" public void testIncorrectInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" TaskList tasks \u003d new TaskList(\"empty\");","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" boolean correctness \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" tasks.input(\"nonsense\");","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" } catch (IncompleteInput e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" correctness \u003d true;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" } catch (InvalidInput e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" } finally {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" assertEquals(true, correctness);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"RSXIX":31}},{"path":"src/test/java/Duke/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"package Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import Duke.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import Duke.Tasks.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"import Duke.Exceptions.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"public class UiTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" public void testPrintList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" TaskList tasks \u003d new TaskList(\"empty\");","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" tasks.input(\"todo nothing\");","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" tasks.input(\"deadline nothing /by tonight\");","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" } catch (IncompleteInput e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"Won\u0027t happen\");","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" } catch (InvalidInput e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"Won\u0027t happen\");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" } finally {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" // Capture the output of the printList method","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" ui.printList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" // Restore the original System.out","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" // Convert the captured output to a string","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" String printedOutput \u003d outputStream.toString().trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" String expectedOutput \u003d \"_______________ \\n\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" \"What a terrible day to be alive. \\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" \"1 - [T] | [ ] | nothing \\n\" + \"2 - [D] | [ ] | nothing | tonight \\n \\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" \"_______________\";","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":" assertEquals(expectedOutput, printedOutput);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"RSXIX":52}},{"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 14c66235..ccef5105 100644 --- a/RSXIX_ip_master/commits.json +++ b/RSXIX_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"RSXIX":[{"date":"2023-08-24","commitResults":[{"hash":"9e71e15ea7a2140d0a8952b731b749afeb1b197d","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"2f16bcfcb77a8bb8ac93bf4d0832a60f59aac9ad","isMergeCommit":false,"messageTitle":"Completed Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":4}}},{"hash":"34da41e81236a8c024a38f2f8b52fa9926b7e56d","isMergeCommit":false,"messageTitle":"Completed Level-2","messageBody":"","tags":["List-2","Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":7}}},{"hash":"fbb31c32d0b5214fe3858b9a3f77be0dbe248e06","isMergeCommit":false,"messageTitle":"Completed Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":4}}},{"hash":"9155d05b58ef4bb9b5b5b5866c886cf402851643","isMergeCommit":false,"messageTitle":"Completed Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":13}}},{"hash":"f09c6d482d8eadbe853c614a40788ee676c2c4c5","isMergeCommit":false,"messageTitle":"Completed Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":67,"deletions":31}}},{"hash":"e6273cab7af97fe7507a0dfb59bad2946e6425bd","isMergeCommit":false,"messageTitle":"Completed Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"baafd366496e4341bb94a408811e58d6b8370909","isMergeCommit":false,"messageTitle":"Logically seems fine to me but not saving yet....","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":10}}},{"hash":"b44b6eabd1dae880049b2ccfb4f23579874589a9","isMergeCommit":false,"messageTitle":"Finished Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":28}}},{"hash":"f0982afb694c6c27fbc24b7c50d20b0fcdaa3e29","isMergeCommit":false,"messageTitle":"Merged with Level-7 Branch having Completed Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"7e1e7e241228c3cbacb05da9fd65abe6a7821f3a","isMergeCommit":false,"messageTitle":"Revert \"Merged with Level-7 Branch having Completed Level-7\"","messageBody":"This reverts commit f0982afb694c6c27fbc24b7c50d20b0fcdaa3e29.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3}}}]},{"date":"2023-09-01","commitResults":[{"hash":"36685defb34d2880bbb721fcf07a63f40f917afc","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Merged with Level-7 Branch having Completed Level-7\"\"","messageBody":"This reverts commit 7e1e7e241228c3cbacb05da9fd65abe6a7821f3a.\n\nMade a mistake\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"ca411b2d804038e501e723f2c4b02c2d0b7598f8","isMergeCommit":true,"messageTitle":"Before Merge","messageBody":"","tags":["“Level-7”"],"fileTypesAndContributionMap":{}},{"hash":"7ca9565bfaaeb5e2808cc42065232b692ae9066b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-7","messageBody":"Seemed to be an issue\n","fileTypesAndContributionMap":{}},{"hash":"785e258ecb31c30a70d8a39341f75a4479d15768","isMergeCommit":false,"messageTitle":"Completed Level-8","messageBody":"","tags":["Merge-Level-8","Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":25,"deletions":4}}}]},{"date":"2023-09-03","commitResults":[{"hash":"70f02a214db05a8b5f7cc0512e9f6c3de5422f03","isMergeCommit":false,"messageTitle":"Completed A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":326,"deletions":228}}},{"hash":"d5d5edc2d3fe132cafa4f6efe01110678b68c551","isMergeCommit":false,"messageTitle":"Completed A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":45,"deletions":2}}}]},{"date":"2023-09-04","commitResults":[{"hash":"5ba8eb518f8ec547b7878808eab9f9aa1f5b0705","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into A-Gradle","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"59318fe803b7b016f27a746bb4258d1b0b2da916","isMergeCommit":false,"messageTitle":"Added JUnit File Structure","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"03a4240878969bc7ba62769c4c6ebce7efccbebd","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":3,"deletions":0},"java":{"insertions":76,"deletions":0}}},{"hash":"d3b38d6a85489f80b3475ebc0f386495c60a28b0","isMergeCommit":false,"messageTitle":"Revert \"A-Gradle\"","messageBody":"This reverts commit 03a4240878969bc7ba62769c4c6ebce7efccbebd.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":0,"deletions":3},"java":{"insertions":0,"deletions":76}}},{"hash":"dbbd1c8ff2c587d6d8f36cbb390fe556e8b57bb8","isMergeCommit":false,"messageTitle":"Completed A-JUnit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"RSXIX":{"java":565,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":2}},"authorContributionVariance":{"RSXIX":25003.812},"authorDisplayNameMap":{"RSXIX":"CS2103T-W16-3 ROHA..APRA"}} +{"authorDailyContributionsMap":{"RSXIX":[{"date":"2023-08-24","commitResults":[{"hash":"9e71e15ea7a2140d0a8952b731b749afeb1b197d","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"2f16bcfcb77a8bb8ac93bf4d0832a60f59aac9ad","isMergeCommit":false,"messageTitle":"Completed Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":4}}},{"hash":"34da41e81236a8c024a38f2f8b52fa9926b7e56d","isMergeCommit":false,"messageTitle":"Completed Level-2","messageBody":"","tags":["List-2","Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":7}}},{"hash":"fbb31c32d0b5214fe3858b9a3f77be0dbe248e06","isMergeCommit":false,"messageTitle":"Completed Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":4}}},{"hash":"9155d05b58ef4bb9b5b5b5866c886cf402851643","isMergeCommit":false,"messageTitle":"Completed Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":13}}},{"hash":"f09c6d482d8eadbe853c614a40788ee676c2c4c5","isMergeCommit":false,"messageTitle":"Completed Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":67,"deletions":31}}},{"hash":"e6273cab7af97fe7507a0dfb59bad2946e6425bd","isMergeCommit":false,"messageTitle":"Completed Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"baafd366496e4341bb94a408811e58d6b8370909","isMergeCommit":false,"messageTitle":"Logically seems fine to me but not saving yet....","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":10}}},{"hash":"b44b6eabd1dae880049b2ccfb4f23579874589a9","isMergeCommit":false,"messageTitle":"Finished Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":28}}},{"hash":"f0982afb694c6c27fbc24b7c50d20b0fcdaa3e29","isMergeCommit":false,"messageTitle":"Merged with Level-7 Branch having Completed Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"7e1e7e241228c3cbacb05da9fd65abe6a7821f3a","isMergeCommit":false,"messageTitle":"Revert \"Merged with Level-7 Branch having Completed Level-7\"","messageBody":"This reverts commit f0982afb694c6c27fbc24b7c50d20b0fcdaa3e29.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3}}}]},{"date":"2023-09-01","commitResults":[{"hash":"36685defb34d2880bbb721fcf07a63f40f917afc","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Merged with Level-7 Branch having Completed Level-7\"\"","messageBody":"This reverts commit 7e1e7e241228c3cbacb05da9fd65abe6a7821f3a.\n\nMade a mistake\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"ca411b2d804038e501e723f2c4b02c2d0b7598f8","isMergeCommit":true,"messageTitle":"Before Merge","messageBody":"","tags":["“Level-7”"],"fileTypesAndContributionMap":{}},{"hash":"7ca9565bfaaeb5e2808cc42065232b692ae9066b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-7","messageBody":"Seemed to be an issue\n","fileTypesAndContributionMap":{}},{"hash":"785e258ecb31c30a70d8a39341f75a4479d15768","isMergeCommit":false,"messageTitle":"Completed Level-8","messageBody":"","tags":["Merge-Level-8","Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":25,"deletions":4}}}]},{"date":"2023-09-03","commitResults":[{"hash":"70f02a214db05a8b5f7cc0512e9f6c3de5422f03","isMergeCommit":false,"messageTitle":"Completed A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":326,"deletions":228}}},{"hash":"d5d5edc2d3fe132cafa4f6efe01110678b68c551","isMergeCommit":false,"messageTitle":"Completed A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":45,"deletions":2}}}]},{"date":"2023-09-04","commitResults":[{"hash":"5ba8eb518f8ec547b7878808eab9f9aa1f5b0705","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into A-Gradle","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"59318fe803b7b016f27a746bb4258d1b0b2da916","isMergeCommit":false,"messageTitle":"Added JUnit File Structure","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"03a4240878969bc7ba62769c4c6ebce7efccbebd","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":3,"deletions":0},"java":{"insertions":76,"deletions":0}}},{"hash":"d3b38d6a85489f80b3475ebc0f386495c60a28b0","isMergeCommit":false,"messageTitle":"Revert \"A-Gradle\"","messageBody":"This reverts commit 03a4240878969bc7ba62769c4c6ebce7efccbebd.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":0,"deletions":3},"java":{"insertions":0,"deletions":76}}},{"hash":"dbbd1c8ff2c587d6d8f36cbb390fe556e8b57bb8","isMergeCommit":false,"messageTitle":"Completed A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":1}}},{"hash":"0378d11d6b1f07a27281732c64828e72eac0150e","isMergeCommit":false,"messageTitle":"Completed A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":1},"java":{"insertions":22,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"00e0b1fbefeca5a5e314213b3e6b7649d13d679a","isMergeCommit":false,"messageTitle":"Completed A-Find","messageBody":"","tags":["A-Find"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":25,"deletions":0}}},{"hash":"52890a7be5de9993075d16e56a567a3faf7ff6be","isMergeCommit":false,"messageTitle":"Did Java Docs for the inner packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":0}}},{"hash":"ae1c49d0d13b517c9b5904684819d0b86f623370","isMergeCommit":false,"messageTitle":"Finished A-JavaDocs","messageBody":"","tags":["JavaDocs"],"fileTypesAndContributionMap":{"java":{"insertions":120,"deletions":6}}},{"hash":"a75020e5cfefba85b67dd1fc296d59fe4d721496","isMergeCommit":false,"messageTitle":"Completed A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":26}}},{"hash":"c97e690baa3a660ab939f7508c8b17d5535fe90b","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JavaDocs\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7ead88c3f4c7dcfe95e53c7a5665eaa489c43489","isMergeCommit":true,"messageTitle":"Finished Merging Parallel Branches","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"RSXIX":{"java":698,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":3,"txt":5}},"authorContributionVariance":{"RSXIX":25510.988},"authorDisplayNameMap":{"RSXIX":"CS2103T-W16-3 ROHA..APRA"}} diff --git a/RiyaMehta2211_ip_master/authorship.json b/RiyaMehta2211_ip_master/authorship.json index 8fee5a3f..5d17645b 100644 --- a/RiyaMehta2211_ip_master/authorship.json +++ b/RiyaMehta2211_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"RiyaMehta2211":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" testImplementation(group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api-Test\u0027, version: \u00275.10.0\u0027)","lastModifiedDate":"2023-09-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":"RiyaMehta2211"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" archiveFileName \u003d \"duke.jar\"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"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":{"RiyaMehta2211":3,"-":40}},{"path":"src/main/java/duke/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" Deadline test \u003d new Deadline(\"assignment submission\", LocalDateTime.parse(\"2023-09-11 2359\", formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" void testTaskString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" assert test.taskString().equals(\"[D][ ] assignment submission (by: Sep 11 2023 2359)\");","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" void testMarkAsDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" test.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" assert test.taskString().equals(\"[D][X] assignment submission (by: Sep 11 2023 2359)\");","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" void testNotMarkAsDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" test.markAsNotDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" assert test.taskString().equals(\"[D][ ] assignment submission (by: Sep 11 2023 2359)\");","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" void testGetTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" assert test.getTask().equals(\"assignment submission\");","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"RiyaMehta2211":32}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"//This class has a chatbot which will generate a list based on a set of tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"//that have been input by the user. These tasks include deadlines, events and ToDos","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"//The user input will be parsed to extract the date and time of the events and deadlines","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" //System.out.println(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printHello();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList tasks \u003d storage.loadTasks(\"src/data/Duke.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" while (!str.equals(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" parser.chat(str, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" str \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" storage.saveTasks(\"src/data/Duke.txt\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" scanner.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printBye();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":29,"-":3}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.exception.DeadlineCommandUseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.exception.EventCommandUseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.exception.InvalidInputException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.exception.ToDoCommandUseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" public Parser() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" //empty constructor to initialize class objects","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" public void chat(String str, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" if (str.startsWith(\"mark \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1; //index for task list","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.markDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" Task done \u003d tasks.getTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printDone(done);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"unmark \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(7);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1; //index for task list","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.markNotDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" Task notDone \u003d tasks.getTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printNotDone(notDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"delete \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(7);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" Task toBeDeleted \u003d tasks.removeTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printDelete(toBeDeleted, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" if (str.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" String todo \u003d str.substring(4);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" //remove any leading and trailing whitespace characters and","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" //check whether there is a task after the instruction","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" if (todo.trim().isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" //this would mean the instruction is incomplete","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" throw new ToDoCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" String string \u003d str.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new ToDo(string);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.contains(\"/by \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" throw new DeadlineCommandUseException(str); //needs to check for /by","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" String byWhen \u003d \"/by \";","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d str.indexOf(byWhen);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":" String deadline \u003d str.substring(index + 4); //remove /by from the substring","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":" if (deadline.trim().isEmpty()) { //needs to check whether there is anything after /by","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" throw new DeadlineCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":" String workToDo \u003d str.substring(9, index - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new Deadline(workToDo, LocalDateTime.parse(deadline, formatter));","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.contains(\"from\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"RiyaMehta2211"},"content":" String fromMarker \u003d \"/from \"; //mark the /from index of the string","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"RiyaMehta2211"},"content":" int firstIndex \u003d str.indexOf(fromMarker);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"RiyaMehta2211"},"content":" int secondIndex;","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"RiyaMehta2211"},"content":" String fromWhen;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"RiyaMehta2211"},"content":" String toWhen;","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"RiyaMehta2211"},"content":" String workToDo \u003d str.substring(6, firstIndex - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"RiyaMehta2211"},"content":" String afterFirstIndex \u003d str.substring(firstIndex + 6);","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"RiyaMehta2211"},"content":" if (!afterFirstIndex.contains(\"/to \")) { //to check the input of /to after /from","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"RiyaMehta2211"},"content":" String toMarker \u003d \"/to \"; //mark the /to index of the string","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"RiyaMehta2211"},"content":" secondIndex \u003d afterFirstIndex.indexOf(toMarker); //to make sure we get the /to after the /from","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"RiyaMehta2211"},"content":" fromWhen \u003d afterFirstIndex.substring(0, secondIndex).trim(); //get the from timing","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"RiyaMehta2211"},"content":" toWhen \u003d afterFirstIndex.substring(secondIndex + 3).trim(); //get the to timing","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"RiyaMehta2211"},"content":" if (fromWhen.trim().isEmpty() ||","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"RiyaMehta2211"},"content":" toWhen.trim().isEmpty()) { //needs to check whether there is anything after /by","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new Event(workToDo, LocalDateTime.parse(fromWhen, formatter),","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime.parse(toWhen, formatter));","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"RiyaMehta2211"},"content":" ui.listTasks(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (java.time.format.DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"RiyaMehta2211"},"content":" //detect inputs that don\u0027t follow the yyyy-MM-dd HHmm format","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printException();","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (InvalidInputException | EventCommandUseException |","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"RiyaMehta2211"},"content":" DeadlineCommandUseException | ToDoCommandUseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printException(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RiyaMehta2211":124}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.FileSystems;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"//The duke.Storage class is in charge of writing and reading the tasklists","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"//from the duke.Duke.txt file","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":"public class Storage{","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" public void saveTasks(String filePath, TaskList tasks) throws FileNotFoundException{","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" createDirectoryIfNotExists(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d tasks.getTask(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" String taskData \u003d formatTaskData(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.write(taskData);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.close(); // Don\u0027t forget to close the FileWriter when done.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" String formatTaskData(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" // Customize this method based on your Task class structure.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d task.saveTaskString();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" return str;","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" public TaskList loadTasks(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" createDirectoryIfNotExists(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(filePath));","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" String line;","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" String[] components \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" String taskType \u003d components[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" boolean isDone \u003d components[1].equals(\"1\");","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" String description \u003d components[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" case \"T\":","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new ToDo(description, isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" case \"D\":","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime by \u003d LocalDateTime.parse(components[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new Deadline(description, isDone, by));","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" case \"E\":","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime from \u003d LocalDateTime.parse(components[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime to \u003d LocalDateTime.parse(components[4]);","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new Event(description, isDone, from, to));","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" reader.close(); // Close the reader when done.","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"File not found: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"Error loading tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":" return taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"RiyaMehta2211"},"content":" private void createDirectoryIfNotExists(String filePath) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"RiyaMehta2211"},"content":" Path path \u003d FileSystems.getDefault().getPath(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"RiyaMehta2211"},"content":" Path parentDir \u003d path.getParent();","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"RiyaMehta2211"},"content":" if (parentDir !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"RiyaMehta2211"},"content":" if (!Files.exists(parentDir)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"RiyaMehta2211"},"content":" Files.createDirectories(parentDir);","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"RiyaMehta2211"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"RiyaMehta2211"},"content":" Files.createFile(path);","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":96}},{"path":"src/main/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" void testSaveAndLoadTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(new ToDo(\"go on a holiday\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" storage.saveTasks(\"src/data/newFile.txt\", tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList loadedTasks \u003d storage.loadTasks(\"src/data/newFile.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" assert loadedTasks.getTask(i).taskString()","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" .equals(tasks.getTask(i).taskString());","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" //assert storage.loadTasks(\"src/data/newFile.txt\").equals(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" } catch(FileNotFoundException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"RiyaMehta2211":29}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"public class TaskList{","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" private List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" public TaskList(){","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" public void addTask(Task task){","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" public Task removeTask(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" return this.tasks.remove(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" public Task getTask(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" public void markDone(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" public void markNotDone(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.get(index).markAsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" public int getSize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" return tasks.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":32}},{"path":"src/main/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" Task todo \u003d new ToDo(\"todo go on a hike\");","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" Task deadline \u003d new Deadline(\"assignment submission\",","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime.parse(\"2023-09-11 2359\", formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" public void testGetTask(){","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(todo);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" int initialLen \u003d tasks.getSize();","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" assert this.tasks.getTask(tasks.getSize() - 1).taskString()","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" .equals(todo.taskString());","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" //to check that the length of the list is not changes by the get method","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" assertEquals(initialLen, this.tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" public void testAddTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" int initialLen \u003d tasks.getSize();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" assertEquals(initialLen + 1, this.tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" public void testRemoveTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" int initialLen \u003d tasks.getSize();","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.removeTask(tasks.getSize() - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" assertEquals(initialLen - 1, this.tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" public void testMarkDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.getTask(tasks.getSize() - 1).markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" assert this.tasks.getTask(tasks.getSize() - 1).taskString()","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" .equals(deadline.taskString());","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" public void testNotMarkDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.getTask(tasks.getSize() - 1).markAsNotDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" assert this.tasks.getTask(tasks.getSize() - 1).taskString()","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" .equals(deadline.taskString());","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" public void testGetTaskSize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" int initialLen \u003d tasks.getSize();","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(todo);","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" assertEquals(initialLen + 2, tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"RiyaMehta2211":66}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"public class Ui{","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" String name \u003d \"Harry Potter\";","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" String question \u003d \"Introducing the Wizarding World Organizer: Your Trusted Guide\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" \" to Efficient \u0026 Effective Magical Planning\";","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" String hello \u003d \"Hello muggle! I\u0027m \" + name + \"\\n\" + question;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" String bye \u003d \"\\t\" + \"Expelliarmus! Hope to see you again muggle! :D\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" public void printHello() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(hello);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" public void printBye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(bye);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" public void printDone(Task done) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"\\t\" + \"Nice! I\u0027ve marked this task \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" \"as done:\" + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\t \" + done.taskString());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" public void printNotDone(Task notDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"\\t\" + \"OK, I\u0027ve marked this task \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" \"as not done yet:\" + \"\\n\" + \"\\t\" + \" \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" notDone.taskString());","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" public void printDelete(Task toBeDeleted, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"\\tNoted. I\u0027ve removed this task:\\n\\t \" + toBeDeleted.taskString()","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" + \"\\n\\tNow you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" public void printAddTask(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" int len \u003d tasks.getSize();","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d \"\\tGot it. I\u0027ve added this task:\\n\\t\\t\"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" + task.taskString();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" String listLength \u003d len \u003d\u003d 1 ? \"Now you have \" + len + \" task in the list.\" :","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" \"Now you have \" + len + \" tasks in the list.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(output","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" + \"\\n\\t\" + listLength);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" public void printException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" public void printException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"Accio error! I don\u0027t understand what the input means D:\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" \" Please input a valid date in the format yyyy-MM-dd HHmm \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" \"(the time in the 24-hour format).\");","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" public void listTasks(TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.print(\"\\tHere are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" for (int j \u003d 0; j \u003c tasks.getSize(); j++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println();","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.print(\"\\t\" + i + \".\" + tasks.getTask(j).taskString());","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" i++;","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println();","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RiyaMehta2211":71}},{"path":"src/main/java/duke/exception/DeadlineCommandUseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"public class DeadlineCommandUseException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" public DeadlineCommandUseException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \" Accio error! deadline must be followed by a task to be added to the list \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" \"and a time specified after \u0027/by\u0027 \");","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":8}},{"path":"src/main/java/duke/exception/EventCommandUseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"public class EventCommandUseException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" public EventCommandUseException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \" Accio error! Invalid input as when the event starts \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" \"must be specified after \u0027/from\u0027. When the event ends must also be specified after \u0027/to\u0027.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":8}},{"path":"src/main/java/duke/exception/EventDateTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"public class EventDateTimeException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" public EventDateTimeException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \"\\n\\tAccio error! I don\u0027t know what that means D: Please provide valid date inputs for events\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" \"in the yyyy-MM-dd HHmm format, and ensure that the start date \u0026 time of the \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" \"event does not occur after the end date \u0026 time of the event.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"RiyaMehta2211":9}},{"path":"src/main/java/duke/exception/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"public class InvalidInputException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" public InvalidInputException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \"\\n\\tAccio error! I don\u0027t know what the input means D: Please enter valid inputs. Below are the valid\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" \" inputs I can take\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\t1. list \\n\\t2. todo \\n\\t3. deadline \" +","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\n\\t4. event \\n\\t5. mark \\n\\t6. unmark \\n\\t7. bye\");","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":11}},{"path":"src/main/java/duke/exception/ToDoCommandUseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"public class ToDoCommandUseException extends Exception{","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDoCommandUseException(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \" Accio error! todo must be followed by a task to be added to the list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":7}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" protected LocalDateTime date;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" //included serialVersionUID indicated as the Task implements Serializable Interface","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" public Deadline(String description, LocalDateTime date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" public Deadline(String description, boolean isDone, LocalDateTime date) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" return \"[D]\" + super.taskString() + \" (by: \" + date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\")) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" return \"D\" + \"|\" + status + \"|\" + this.description","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" + \"|\" + this.date;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":28}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" //Introducing LocalDateTime to parse the string inputs given by the user","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" //for the relevant date and time","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" public Event(String description, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" public Event(String description, boolean isDone, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" return \"[E]\" + super.taskString() + \" (from: \" + startDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" + \" to: \" + endDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\")) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" return \"E\" + \"|\" + status + \"|\" + this.description","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" + \"|\" + this.startDate + \"|\" + this.endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":33}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"//The duke.task.Task class is in charge of creating task objects","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"//which can be of different types: ToDos, Deadlines and Events","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"public abstract class Task{","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" public String getTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d this.isDone ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d str + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" return output;","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" public abstract String saveTaskString();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":34}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDo(String todo) {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" super(todo);","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDo(String todo, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" super(todo, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d \"[T]\" + super.taskString();","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" return output;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" return \"T\" + \"|\" + status + \"|\" + this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":25}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"todo go to Mount Everest","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"deadline 2103T Assignment /by tonight","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"deadline 2100 Lab /by next week\u0027s lab","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"todo apply for internships on TalentConnect","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"event CCA Tryouts /from tomorrow 7.30pm /to tomorrow 9.30pm","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"deadline CS2105 Assignment 1 /by week 4","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"event presentation rehearsal /from tonight 10pm /to tonight 11.15pm","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"mark 7","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"unmark 7","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":15}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"RiyaMehta2211":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"RiyaMehta2211":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" archiveFileName \u003d \u0027Duke.jar\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"RiyaMehta2211":3,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" * The Duke class represents a chatbot that generates a list of tasks based on user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" * These tasks can include deadlines, events, and ToDos. The user input is parsed to extract","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * dates and times for events and deadlines.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printHello();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList tasks \u003d storage.loadTasks(\"src/data/Duke.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" while (!str.equals(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" parser.chat(str, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" str \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" } try {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" storage.saveTasks(\"src/data/Duke.txt\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" scanner.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printBye();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":30,"-":3}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.exception.DeadlineCommandUseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.exception.EventCommandUseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.exception.InvalidInputException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.exception.ToDoCommandUseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" * The Parser class is responsible for parsing user input and executing commands to manage tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" * It handles various command types such as adding ToDos, Deadlines, and Events, marking tasks as done,","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" * deleting tasks, and listing tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" * Default constructor to initialize the Parser class.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" public Parser() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" //empty constructor to initialize class objects","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" * Parses user input and executes various instructions to manage tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" * @param str The user input string.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list to which tasks are added or manipulated.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" public void chat(String str, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" if (str.startsWith(\"mark \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1; //index for task list","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.markDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" Task done \u003d tasks.getTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printDone(done);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"unmark \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(7);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1; //index for task list","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.markNotDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" Task notDone \u003d tasks.getTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printNotDone(notDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"delete \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(7);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" Task toBeDeleted \u003d tasks.removeTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printDelete(toBeDeleted, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"find \")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" String keyword \u003d str.substring(5);","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList matchingTasks \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" if (tasks.getTask(i).getTask().contains(keyword)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":" matchingTasks.addTask(tasks.getTask(i));","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printMatchingTasks(matchingTasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"RiyaMehta2211"},"content":" if (str.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"RiyaMehta2211"},"content":" String todo \u003d str.substring(4);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"RiyaMehta2211"},"content":" //remove any leading and trailing whitespace characters and","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"RiyaMehta2211"},"content":" //check whether there is a task after the instruction","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"RiyaMehta2211"},"content":" if (todo.trim().isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"RiyaMehta2211"},"content":" //this would mean the instruction is incomplete","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"RiyaMehta2211"},"content":" throw new ToDoCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"RiyaMehta2211"},"content":" String string \u003d str.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new ToDo(string);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.contains(\"/by \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"RiyaMehta2211"},"content":" throw new DeadlineCommandUseException(str); //needs to check for /by","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"RiyaMehta2211"},"content":" String byWhen \u003d \"/by \";","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d str.indexOf(byWhen);","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"RiyaMehta2211"},"content":" String deadline \u003d str.substring(index + 4); //remove /by from the substring","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"RiyaMehta2211"},"content":" if (deadline.trim().isEmpty()) { //needs to check whether there is anything after /by","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"RiyaMehta2211"},"content":" throw new DeadlineCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"RiyaMehta2211"},"content":" String workToDo \u003d str.substring(9, index - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new Deadline(workToDo, LocalDateTime.parse(deadline, formatter));","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.contains(\"/from\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"RiyaMehta2211"},"content":" String fromMarker \u003d \"/from \"; //mark the /from index of the string","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"RiyaMehta2211"},"content":" int firstIndex \u003d str.indexOf(fromMarker);","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"RiyaMehta2211"},"content":" int secondIndex;","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"RiyaMehta2211"},"content":" String fromWhen;","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"RiyaMehta2211"},"content":" String toWhen;","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"RiyaMehta2211"},"content":" String workToDo \u003d str.substring(6, firstIndex - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"RiyaMehta2211"},"content":" String afterFirstIndex \u003d str.substring(firstIndex + 6);","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"RiyaMehta2211"},"content":" if (!afterFirstIndex.contains(\"/to \")) { //to check the input of /to after /from","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"RiyaMehta2211"},"content":" String toMarker \u003d \"/to \"; //mark the /to index of the string","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"RiyaMehta2211"},"content":" secondIndex \u003d afterFirstIndex.indexOf(toMarker); //to make sure we get the /to after the /from","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"RiyaMehta2211"},"content":" fromWhen \u003d afterFirstIndex.substring(0, secondIndex).trim(); //get the from timing","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"RiyaMehta2211"},"content":" toWhen \u003d afterFirstIndex.substring(secondIndex + 3).trim(); //get the to timing","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"RiyaMehta2211"},"content":" if (fromWhen.trim().isEmpty() ||","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"RiyaMehta2211"},"content":" toWhen.trim().isEmpty()) { //needs to check whether there is anything after /by","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new Event(workToDo, LocalDateTime.parse(fromWhen, formatter),","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime.parse(toWhen, formatter));","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"RiyaMehta2211"},"content":" ui.listTasks(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (java.time.format.DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"RiyaMehta2211"},"content":" //detect inputs that don\u0027t follow the yyyy-MM-dd HHmm format","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printException();","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (InvalidInputException | EventCommandUseException |","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"RiyaMehta2211"},"content":" DeadlineCommandUseException | ToDoCommandUseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printException(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RiyaMehta2211":150}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.FileSystems;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" * The Storage class is responsible for reading and writing tasklists","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" * to and from the Duke.txt file.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":"public class Storage{","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" * Saves the tasks in the task list to the specified file path.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" * @param filePath The path to the file where tasks will be saved.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list to be saved.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" * @throws FileNotFoundException If the specified file is not found.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" public void saveTasks(String filePath, TaskList tasks) throws FileNotFoundException{","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" createDirectoryIfNotExists(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d tasks.getTask(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" String taskData \u003d formatTaskData(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.write(taskData);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.close(); // Don\u0027t forget to close the FileWriter when done.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" * Formats a task into a string representation suitable for saving to a file.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" * @param task The task to be formatted.","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A formatted string representation of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" String formatTaskData(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" // Customize this method based on your Task class structure.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d task.saveTaskString();","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" return str;","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" * Loads tasks from the specified file path and returns them as a TaskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" * @param filePath The path to the file from which tasks will be loaded.","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A TaskList containing the loaded tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" public TaskList loadTasks(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" createDirectoryIfNotExists(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(filePath));","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" String line;","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":" String[] components \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" String taskType \u003d components[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":" boolean isDone \u003d components[1].equals(\"1\");","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":" String description \u003d components[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RiyaMehta2211"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"RiyaMehta2211"},"content":" case \"T\":","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new ToDo(description, isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"RiyaMehta2211"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"RiyaMehta2211"},"content":" case \"D\":","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime by \u003d LocalDateTime.parse(components[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new Deadline(description, isDone, by));","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"RiyaMehta2211"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"RiyaMehta2211"},"content":" case \"E\":","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime from \u003d LocalDateTime.parse(components[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime to \u003d LocalDateTime.parse(components[4]);","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new Event(description, isDone, from, to));","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"RiyaMehta2211"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"RiyaMehta2211"},"content":" reader.close(); // Close the reader when done.","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"File not found: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"Error loading tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"RiyaMehta2211"},"content":" return taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"RiyaMehta2211"},"content":" * Creates the necessary directory and file if they do not exist.","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"RiyaMehta2211"},"content":" * @param filePath The path to the file to be created.","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"RiyaMehta2211"},"content":" * @throws IOException If an error occurs during directory or file creation.","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"RiyaMehta2211"},"content":" private void createDirectoryIfNotExists(String filePath) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"RiyaMehta2211"},"content":" Path path \u003d FileSystems.getDefault().getPath(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"RiyaMehta2211"},"content":" Path parentDir \u003d path.getParent();","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"RiyaMehta2211"},"content":" if (parentDir !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"RiyaMehta2211"},"content":" if (!Files.exists(parentDir)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"RiyaMehta2211"},"content":" Files.createDirectories(parentDir);","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"RiyaMehta2211"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"RiyaMehta2211"},"content":" Files.createFile(path);","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":126}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" * The TaskList class represents a list of tasks in Duke.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * It provides methods for adding, removing, and retrieving tasks from the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"public class TaskList{","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" private List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" * Default constructor to initialize an empty TaskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" public void addTask(Task task){","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" * Removes a task from the task list at the specified index.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" * @return The removed task.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" public Task removeTask(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" return this.tasks.remove(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" * Retrieves a task from the task list at the specified index.","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" * @param index The index of the task to be retrieved.","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" * @return The retrieved task.","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" public Task getTask(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" * Marks a task in the task list as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" public void markDone(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" * Marks a task in the task list as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" * @param index The index of the task to be marked as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" public void markNotDone(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.get(index).markAsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns the size of the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" * @return The number of tasks in the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":" public int getSize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":" return tasks.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":76}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" * The Ui class is responsible for user interaction and displaying messages to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"public class Ui{","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" String name \u003d \"Harry Potter\";","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" String question \u003d \"Introducing the Wizarding World Organizer: Your Trusted Guide\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" \" to Efficient \u0026 Effective Magical Planning\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" String hello \u003d \"Hello muggle! I\u0027m \" + name + \"\\n\" + question;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" String bye \u003d \"\\t\" + \"Expelliarmus! Hope to see you again muggle! :D\";","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" * Default constructor to initialize the Ui class.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" * Displays a welcome message to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" public void printHello() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(hello);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" * Displays a goodbye essage to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" public void printBye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(bye);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a message when a task is marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" * @param done The task that was marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" public void printDone(Task done) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"\\t\" + \"Nice! I\u0027ve marked this task \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" \"as done:\" + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\t \" + done.taskString());","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a message when a task is marked as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" * @param notDone The task that was marked as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" public void printNotDone(Task notDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"\\t\" + \"OK, I\u0027ve marked this task \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" \"as not done yet:\" + \"\\n\" + \"\\t\" + \" \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" notDone.taskString());","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a message when a task is deleted from the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" * @param toBeDeleted The task that was deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" public void printDelete(Task toBeDeleted, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"\\tNoted. I\u0027ve removed this task:\\n\\t \" + toBeDeleted.taskString()","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" + \"\\n\\tNow you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a message when a task is added to the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" public void printAddTask(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":" int len \u003d tasks.getSize();","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d \"\\tGot it. I\u0027ve added this task:\\n\\t\\t\"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"RiyaMehta2211"},"content":" + task.taskString();","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"RiyaMehta2211"},"content":" String listLength \u003d len \u003d\u003d 1 ? \"Now you have \" + len + \" task in the list.\" :","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"RiyaMehta2211"},"content":" \"Now you have \" + len + \" tasks in the list.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(output","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"RiyaMehta2211"},"content":" + \"\\n\\t\" + listLength);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a custom message for an exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"RiyaMehta2211"},"content":" * @param message The custom exception message.","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"RiyaMehta2211"},"content":" public void printException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a default exception message for EventDateTime Exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"RiyaMehta2211"},"content":" public void printException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"Accio error! I don\u0027t understand what the input means D:\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"RiyaMehta2211"},"content":" \" Please input a valid date in the format yyyy-MM-dd HHmm \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"RiyaMehta2211"},"content":" \"(the time in the 24-hour format).\");","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"RiyaMehta2211"},"content":" * Lists the tasks in the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list to be printed.","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"RiyaMehta2211"},"content":" public void listTasks(TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"RiyaMehta2211"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.print(\"\\tHere are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"RiyaMehta2211"},"content":" for (int j \u003d 0; j \u003c tasks.getSize(); j++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println();","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.print(\"\\t\" + i + \".\" + tasks.getTask(j).taskString());","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"RiyaMehta2211"},"content":" i++;","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println();","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"RiyaMehta2211"},"content":" * Lists the tasks in the task list","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"RiyaMehta2211"},"content":" * containing tasks with matching keywords","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list to be printed.","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":123,"author":{"gitId":"RiyaMehta2211"},"content":" public void printMatchingTasks(TaskList tasks){","lastModifiedDate":"2023-09-06"},{"lineNumber":124,"author":{"gitId":"RiyaMehta2211"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-06"},{"lineNumber":125,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.print(\"\\tHere are the tasks in your list:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"RiyaMehta2211"},"content":" for (int j \u003d 0; j \u003c tasks.getSize(); j++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println();","lastModifiedDate":"2023-09-06"},{"lineNumber":128,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.print(\"\\t\" + i + \".\" + tasks.getTask(j).taskString());","lastModifiedDate":"2023-09-06"},{"lineNumber":129,"author":{"gitId":"RiyaMehta2211"},"content":" i++;","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":131,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println();","lastModifiedDate":"2023-09-06"},{"lineNumber":132,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":133,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RiyaMehta2211":133}},{"path":"src/main/java/duke/exception/DeadlineCommandUseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * Represents an exception that occurs when the user input for a deadline command is invalid.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" * This exception is thrown when the \u0027/by\u0027 part of the deadline command is missing or not followed","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" * by a valid date and time.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"public class DeadlineCommandUseException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructs a DeadlineCommandUseException with a custom error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" * @param message The error message indicating the issue with the deadline command input.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" public DeadlineCommandUseException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \" Accio error! deadline must be followed by a task to be added to the list \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" \"and a time specified after \u0027/by\u0027 \");","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":19}},{"path":"src/main/java/duke/exception/EventCommandUseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * Represents an exception that occurs when the user input for an event command is invalid.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" * This exception is thrown when the \u0027/from\u0027 or \u0027/to\u0027 parts of the event command are missing or","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" * not followed by valid date and time.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"public class EventCommandUseException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructs an EventCommandUseException with a custom error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" * @param message The error message indicating the issue with the event command input.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" public EventCommandUseException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \" Accio error! Invalid input as when the event starts \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" \"must be specified after \u0027/from\u0027. When the event ends must also be specified after \u0027/to\u0027.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":19}},{"path":"src/main/java/duke/exception/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * Represents an exception that occurs when the user input is invalid or not recognized.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" * This exception is thrown when the user provides an input that does not match any of the valid instructions.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"public class InvalidInputException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructs an InvalidInputException with a custom error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" * @param message The error message indicating that the input provided is invalid.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" public InvalidInputException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \"\\n\\tAccio error! I don\u0027t know what the input means D: \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" \"Please enter valid inputs. \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" \"Below are the valid\" + \" inputs I can take\\n\" +","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\t1. list \\n\\t2. todo \\n\\t3. deadline \" +","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\n\\t4. event \\n\\t5. mark \\n\\t6. unmark \\n\\t7. find \\n\\t8. bye\");","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":22}},{"path":"src/main/java/duke/exception/ToDoCommandUseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * Represents an exception that occurs when the user input for a todo instruction is invalid.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" * This exception is thrown when the todo command is not followed by a task description to be added to the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"public class ToDoCommandUseException extends Exception{","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructs a ToDoCommandUseException with a custom error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" * @param message The error message indicating the issue with the todo command input.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDoCommandUseException(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \" Accio error! todo must be followed by a task to be added to the list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":15}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" * This class inherits from the Task class and represents a Deadline task type","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" * with a description, a deadline and completion status","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" protected LocalDateTime date;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructor to build a Deadline Task Object with the task description and date","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Deadline Task","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" * @param date The deadline by which the Deadline Task is due","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" public Deadline(String description, LocalDateTime date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" * Overloaded constructor to build a Deadline Task Object read from the tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" * saved in the txt file with the task description, completion status and date","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Deadline Task","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" * @param isDone represents the completion status of the task","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" * @param date The deadline by which the Deadline Task is due","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" public Deadline(String description, boolean isDone, LocalDateTime date) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a formatted string representation of the Deadline Task, including","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" * its type, completion status, description, and due date/time.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string representing the Deadline Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" return \"[D]\" + super.taskString() + \" (by: \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\")) + \")\";","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a string representation of the Deadline Task that can be used for","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" * saving the deadline tasks to a txt file, including its type, completion status,","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" * description, and due date.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string suitable for saving the Deadline Task to a text file.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" return \"D\" + \"|\" + status + \"|\" + this.description","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" + \"|\" + this.date;","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":59}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" * This class inherits from the Task class and represents an Event task type","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" * with a description, a start and end date \u0026 time and completion status","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" //Introducing LocalDateTime to parse the string inputs given by the user","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" //for the relevant date and time","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructor to build an Event Task Object with the task description,","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" * start date, and end date \u0026 time.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Event Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" * @param startDate The start date and time of the Event.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" * @param endDate The end date and time of the Event.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" public Event(String description, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" * Overloaded constructor to build an Event Task Object read from the tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" * saved in the txt file with the task description, completion status,","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" * start date and end date \u0026 time.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Event Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" * @param isDone Represents the completion status of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" * @param startDate The start date and time of the Event.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" * @param endDate The end date and time of the Event.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" public Event(String description, boolean isDone, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a formatted string representation of the Event Task, including","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" * its type, description, start date, and end date \u0026 time.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string representing the Event Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" return \"[E]\" + super.taskString() + \" (from: \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" startDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\")) +","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" \" to: \" + endDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\")) + \")\";","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a string representation of the Event Task that can be used for","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" * saving the event tasks to a txt file, including its type, completion status,","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" * description, start date, and end date \u0026 time.","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string suitable for saving the Event Task to a text file.","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" return \"E\" + \"|\" + status + \"|\" + this.description","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" + \"|\" + this.startDate + \"|\" + this.endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":70}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":" * The Task class is the base class for creating task objects in Duke. Task objects","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * can be of different types, including ToDos, Deadlines, and Events.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"public abstract class Task{","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructor to build a Task Object with the task description.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" * Overloaded constructor to build a Task Object with the task description and completion status.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" * @param isDone Represents the completion status of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" * Marks the task as done by setting the completion status to true.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" * Marks the task as not done by setting the completion status to false.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" * Gets the description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" * @return The description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" public String getTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a formatted string representation of the Task, including its completion","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" * status and description.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string representing the Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d this.isDone ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d str + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" return output;","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" * Abstract method for saving the task to a text file. Subclasses will override","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" * and implement this method.","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string suitable for saving the Task to a text file.","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" public abstract String saveTaskString();","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":71}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * This class inherits from the Task class and represents a ToDo task type","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" * with a description and completion status","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructor to build a ToDo Task Object with the task description.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" * @param todo The description of the ToDo Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDo(String todo) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" super(todo);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" * Overloaded constructor to build a ToDo Task Object read from the tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" * saved in the txt file with the task description and completion status.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" * @param todo The description of the ToDo Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" * @param isDone Represents the completion status of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDo(String todo, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" super(todo, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a formatted string representation of the ToDo Task, including","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" * its type and description.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string representing the ToDo Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d \"[T]\" + super.taskString();","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" return output;","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a string representation of the ToDo Task that can be used for","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" * saving the task to a txt file, including its type, completion status,","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" * and description.","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string suitable for saving the ToDo Task to a text file.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" return \"T\" + \"|\" + status + \"|\" + this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":54}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" * This class contains JUnit test cases to verify the functionality of the Storage class.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * It tests the saving and loading of tasks to and from a txt file.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" void testSaveAndLoadTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(new ToDo(\"go on a holiday\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" storage.saveTasks(\"src/data/newFile.txt\", tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList loadedTasks \u003d storage.loadTasks(\"src/data/newFile.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" assert loadedTasks.getTask(i).taskString()","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" .equals(tasks.getTask(i).taskString());","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" //assert storage.loadTasks(\"src/data/newFile.txt\").equals(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" } catch(FileNotFoundException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"RiyaMehta2211":31}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" * This class contains JUnit test cases to verify the functionality of the TaskList class.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" * It tests various methods of the TaskList class, such as adding, removing,","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" * and marking tasks from the list of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" Task todo \u003d new ToDo(\"todo go on a hike\");","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" Task deadline \u003d new Deadline(\"assignment submission\",","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime.parse(\"2023-09-11 2359\", formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" public void testGetTask(){","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(todo);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" int initialLen \u003d tasks.getSize();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" assert this.tasks.getTask(tasks.getSize() - 1).taskString()","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" .equals(todo.taskString());","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" //to check that the length of the list is not changes by the get method","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" assertEquals(initialLen, this.tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" public void testAddTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" int initialLen \u003d tasks.getSize();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" assertEquals(initialLen + 1, this.tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" public void testRemoveTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" int initialLen \u003d tasks.getSize();","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.removeTask(tasks.getSize() - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" assertEquals(initialLen - 1, this.tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" public void testMarkDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.getTask(tasks.getSize() - 1).markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" assert this.tasks.getTask(tasks.getSize() - 1).taskString()","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" .equals(deadline.taskString());","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" public void testNotMarkDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.getTask(tasks.getSize() - 1).markAsNotDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" assert this.tasks.getTask(tasks.getSize() - 1).taskString()","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" .equals(deadline.taskString());","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" public void testGetTaskSize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" int initialLen \u003d tasks.getSize();","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(todo);","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" assertEquals(initialLen + 2, tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"RiyaMehta2211":71}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" * This class contains JUnit test cases to verify the functionality of the Deadline class.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" * It tests various methods of the Deadline class, such as taskString(), markAsDone(), markAsNotDone(),","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * and getTask().","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" Deadline test \u003d new Deadline(\"assignment submission\", LocalDateTime.parse(\"2023-09-11 2359\", formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" void testTaskString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" assert test.taskString().equals(\"[D][ ] assignment submission (by: Sep 11 2023 2359)\");","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" void testMarkAsDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" test.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" assert test.taskString().equals(\"[D][X] assignment submission (by: Sep 11 2023 2359)\");","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" void testNotMarkAsDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" test.markAsNotDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" assert test.taskString().equals(\"[D][ ] assignment submission (by: Sep 11 2023 2359)\");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" void testGetTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" assert test.getTask().equals(\"assignment submission\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"RiyaMehta2211":36}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"todo go to Mount Everest","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"deadline 2103T Assignment /by tonight","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"deadline 2100 Lab /by next week\u0027s lab","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"todo apply for internships on TalentConnect","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"event CCA Tryouts /from tomorrow 7.30pm /to tomorrow 9.30pm","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"deadline CS2105 Assignment 1 /by week 4","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"event presentation rehearsal /from tonight 10pm /to tonight 11.15pm","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"mark 7","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"unmark 7","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":15}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"RiyaMehta2211":1,"-":20}}] diff --git a/RiyaMehta2211_ip_master/commits.json b/RiyaMehta2211_ip_master/commits.json index 4c289998..de0cf920 100644 --- a/RiyaMehta2211_ip_master/commits.json +++ b/RiyaMehta2211_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"RiyaMehta2211":[{"date":"2023-08-23","commitResults":[{"hash":"cee5ef0e681036be72f4817998d6f35f59706d31","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"a2a1d2816bcae2c3f1bef7cb0ef935130104e3bf","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"dad6511aebb23581b6595f739d28aa2b5782fef4","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":8}}},{"hash":"5d0deb105af142219223671cbb9565da579f0324","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"25b761a7bac82c249d51933c344ec6fec241d9f3","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":8}}},{"hash":"df7e6690fd9c0dbc4088a9cba726b54efb14b58b","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"5eb7dc37a8f56dacc21553e69b0a1dd82fe21804","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":7}}},{"hash":"92957ecb8918a149686a2d2fd6f4ebdd8ee12a39","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"0dbf37b58d04286786745f5294533c8b78f9c893","isMergeCommit":false,"messageTitle":"commit message 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":7}}},{"hash":"2fc4a9b21d1f8a6b839c7d5d47c41a2ad4f4998d","isMergeCommit":false,"messageTitle":"ip - Riya Mehta","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"54e1c5a54931607684676c5cc0baa3ddc341ad7f","isMergeCommit":false,"messageTitle":"ip - Riya Mehta","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}},{"hash":"4c4321364fad0274772a02fb83b8edaab30a8cd5","isMergeCommit":false,"messageTitle":"Committing Level 1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"020940783469bf6fca6354ad0814950d0d2fedb5","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":4}}},{"hash":"1024554e46d994cf465742175b99c00451ebcc96","isMergeCommit":false,"messageTitle":"Committing Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"843b949ff53a3c339060f23575b204bec81a76b7","isMergeCommit":false,"messageTitle":"Committing Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"8570478f754871ccc584b11f3d7c12e651d6c65f","isMergeCommit":false,"messageTitle":"Committing Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"c8c810027001663f7c246c2d00fe26f5f5d1f58c","isMergeCommit":false,"messageTitle":"Tagging Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"070a09a2b07c481d1f84e7db79a50095dfb4e2d4","isMergeCommit":false,"messageTitle":"Tagging Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"367172154a1841c4c9340310e9145936da762b7b","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":12}}},{"hash":"715ce88a25b9d75a73208fb98a5beeadae811a60","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"8b830596cea7341b1581398362da4c5fb4101e3c","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"b6ef51f07df21202ed9279f201a437ae3fac78c7","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"bc9248e9ae20849af864f3e289ea301ccef32633","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"0a186be5633c054ce40437716e01276e87c0f2c0","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"51138a0aea849541b74f589d9d343cad1e68c253","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"d92d6baa6565ef01bb8e8090bc5079df17c4ddba","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":8}}},{"hash":"44ca44432a62566b833c174c3ce05c31f26583b0","isMergeCommit":false,"messageTitle":"Committing Level 4","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":4}}},{"hash":"c8d30445458ff7207d42fb173a85408825e6bef5","isMergeCommit":false,"messageTitle":"Committing Level 4","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"69d9b79674f428afd5b8715f8fda7b60a977fd72","isMergeCommit":false,"messageTitle":"Committing text-ui-test","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":16,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"198334a595afaa06f4f1e2e0867c0c07d26b2c0e","isMergeCommit":false,"messageTitle":"Committing Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":5}}},{"hash":"bb49d9e7cd1bd5c9367132950a88b3cdcfb80cb3","isMergeCommit":false,"messageTitle":"Committing Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":128,"deletions":75}}},{"hash":"8aab7cbd13c38c9df72ad659608c0c1ea0822d23","isMergeCommit":false,"messageTitle":"Committing Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":9}}}]},{"date":"2023-09-01","commitResults":[{"hash":"c63c221342d8030fc37093a3f1e937ad6c3f1147","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-16 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":13}}},{"hash":"ad3a198bebe8db708d95e617c64c9eb9055127fe","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-16 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"e02da591a691e32aa6b34d06a601eaf576cc5298","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":24}}},{"hash":"840b1ff79bf4e09b5d44cb18f91609de58ed1107","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"698b2ca51779ccf55694576e023759d4405dd99e","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}},{"hash":"d5890789b34d776bbdf06574fc303ead47134e91","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}},{"hash":"a13da369a4e4c67eef854dda0509e3f5c48a8f62","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":12}}},{"hash":"f0a837ad005259ae604cc20360168e68652abec2","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"75c7865710f0b2e37a3ede1b6f24bcbaaf31a997","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":27}}},{"hash":"a0704e1bae161d5e4fae465fe600202a7ea30b15","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"637bfeff15bb6589e12f6585cbae3df1d4c906c6","isMergeCommit":false,"messageTitle":"The deadline and event tasks now require a concrete dd-MM-yyyy HHmm format input, and will output in MMM d yyyy HHmm format (time in the 24 hours format) as part of Level 8.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":15}}},{"hash":"0d460fbc974a67092335a021ee6dd898f1ad013e","isMergeCommit":false,"messageTitle":"The deadline and event tasks now require a concrete dd-MM-yyyy HHmm format input, and will output in MMM d yyyy HHmm format (time in the 24 hours format) as part of Level 8.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"2861c63a7dcff160e015c3b920851ef0522f1abb","isMergeCommit":false,"messageTitle":"Revert \"The deadline and event tasks now require a concrete dd-MM-yyyy HHmm format input, and will output in MMM d yyyy HHmm format (time in the 24 hours format) as part of Level 8.\"","messageBody":"This reverts commit 0d460fbc974a67092335a021ee6dd898f1ad013e.\n","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"a5460d9564ac7e949280d28a458a4f60f37564f6","isMergeCommit":false,"messageTitle":"Revert \"Revert \"The deadline and event tasks now require a concrete dd-MM-yyyy HHmm format input, and will output in MMM d yyyy HHmm format (time in the 24 hours format) as part of Level 8.\"\"","messageBody":"This reverts commit 2861c63a7dcff160e015c3b920851ef0522f1abb.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"ca1cfcdba55b1f0de7be329f834c6f7599034d90","isMergeCommit":false,"messageTitle":"Import LocalDateTime to parse user inputs for date and time of tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"baef718d45ce73a5c2a61f870ba3228963ac5a4c","isMergeCommit":false,"messageTitle":"Merge branch-Level-8 with master","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"cb13a4dcb15c2fd30bf695b50bb65a9cbd60e6a3","isMergeCommit":false,"messageTitle":"Add the header comment of the Task Class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"7641e6b1061e253b1cb5e0084af0c992ad764f74","isMergeCommit":false,"messageTitle":"merge branch-Level-7 with master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"c4a120c17cf542e1498cb23e2c31d3f56153726c","isMergeCommit":false,"messageTitle":"merge branch-Level-8 with master","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":9}}},{"hash":"85a2f0f765decd28df5b9337eefc0c69958821cb","isMergeCommit":false,"messageTitle":"Fix minor string formatting issues in the Deadline Class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"f55e28ccd37734fc1e0a8affc8c36f1e56ea1a1d","isMergeCommit":false,"messageTitle":"create Ui class for the chatBot which interacts with users","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":6}}},{"hash":"de7ed2b37e0a372e4e3a0c31bc4571cb76a6a899","isMergeCommit":false,"messageTitle":"create Storage class for the chatBot to load and save tasks in the file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":52}}},{"hash":"4602d3092be668d1c71e49323dde8b1a4a23d7b5","isMergeCommit":false,"messageTitle":"create Parser class for the chatBot to accept and read user inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":7}}},{"hash":"7fc79a8fae282b8d785d29309beacc3072814dec","isMergeCommit":false,"messageTitle":"create Parser class for the chatBot to parse and read user inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":143}}},{"hash":"8c96f3209dabe6f7706f3aecdf0f8cf7ea0e0301","isMergeCommit":false,"messageTitle":"create Ui class for the chatBot to interact with user inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":34}}}]},{"date":"2023-09-03","commitResults":[{"hash":"51863b417e62ae02da1c44d5c5b46864cd766e20","isMergeCommit":false,"messageTitle":"create TaskList class for the chatBot to handle the tasklists created","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":179,"deletions":98}}},{"hash":"634b93edf3dc734b76cca20c77fb3769fa5a6b96","isMergeCommit":false,"messageTitle":"create packages - duke, task and exception to categorize the classes in suitable packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":58,"deletions":10},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-04","commitResults":[{"hash":"f8cd1e6df29941b97902a91c9eb2c04070d50edb","isMergeCommit":true,"messageTitle":"merge add-gradle-support into master","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"eb16eff168c08d5f6d341be6c26dd57d1a82946e","isMergeCommit":false,"messageTitle":"set up gradle and merge add-gradle-support with master","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":16,"deletions":8}}},{"hash":"82636ff30406894479c69ec46f746a4a14e9858b","isMergeCommit":false,"messageTitle":"Add JUnit tests for Storage, TaskList and Deadline classes","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":191,"deletions":50}}},{"hash":"4894c7d25f086c06d48a9064b26633fc5dff7d0f","isMergeCommit":false,"messageTitle":"Troubleshoot issues associated with JUnit and gradlew jar files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2},"java":{"insertions":4,"deletions":8}}},{"hash":"228e5e152070298db9444392786d37915a1bb70d","isMergeCommit":false,"messageTitle":"Troubleshoot issues associated with JUnit and gradlew jar files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"c891d68850fb542fd42ddaa8bfea67c13003b6d6","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"RiyaMehta2211":{"java":642,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":3,"txt":15}},"authorContributionVariance":{"RiyaMehta2211":32436.244},"authorDisplayNameMap":{"RiyaMehta2211":"CS2103T-T14-2 MEHT..BHAI"}} +{"authorDailyContributionsMap":{"RiyaMehta2211":[{"date":"2023-08-23","commitResults":[{"hash":"cee5ef0e681036be72f4817998d6f35f59706d31","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"a2a1d2816bcae2c3f1bef7cb0ef935130104e3bf","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"dad6511aebb23581b6595f739d28aa2b5782fef4","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":8}}},{"hash":"5d0deb105af142219223671cbb9565da579f0324","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"25b761a7bac82c249d51933c344ec6fec241d9f3","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":8}}},{"hash":"df7e6690fd9c0dbc4088a9cba726b54efb14b58b","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"5eb7dc37a8f56dacc21553e69b0a1dd82fe21804","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":7}}},{"hash":"92957ecb8918a149686a2d2fd6f4ebdd8ee12a39","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"0dbf37b58d04286786745f5294533c8b78f9c893","isMergeCommit":false,"messageTitle":"commit message 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":7}}},{"hash":"2fc4a9b21d1f8a6b839c7d5d47c41a2ad4f4998d","isMergeCommit":false,"messageTitle":"ip - Riya Mehta","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"54e1c5a54931607684676c5cc0baa3ddc341ad7f","isMergeCommit":false,"messageTitle":"ip - Riya Mehta","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}},{"hash":"4c4321364fad0274772a02fb83b8edaab30a8cd5","isMergeCommit":false,"messageTitle":"Committing Level 1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"020940783469bf6fca6354ad0814950d0d2fedb5","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":4}}},{"hash":"1024554e46d994cf465742175b99c00451ebcc96","isMergeCommit":false,"messageTitle":"Committing Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"843b949ff53a3c339060f23575b204bec81a76b7","isMergeCommit":false,"messageTitle":"Committing Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"8570478f754871ccc584b11f3d7c12e651d6c65f","isMergeCommit":false,"messageTitle":"Committing Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"c8c810027001663f7c246c2d00fe26f5f5d1f58c","isMergeCommit":false,"messageTitle":"Tagging Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"070a09a2b07c481d1f84e7db79a50095dfb4e2d4","isMergeCommit":false,"messageTitle":"Tagging Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"367172154a1841c4c9340310e9145936da762b7b","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":12}}},{"hash":"715ce88a25b9d75a73208fb98a5beeadae811a60","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"8b830596cea7341b1581398362da4c5fb4101e3c","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"b6ef51f07df21202ed9279f201a437ae3fac78c7","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"bc9248e9ae20849af864f3e289ea301ccef32633","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"0a186be5633c054ce40437716e01276e87c0f2c0","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"51138a0aea849541b74f589d9d343cad1e68c253","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"d92d6baa6565ef01bb8e8090bc5079df17c4ddba","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":8}}},{"hash":"44ca44432a62566b833c174c3ce05c31f26583b0","isMergeCommit":false,"messageTitle":"Committing Level 4","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":4}}},{"hash":"c8d30445458ff7207d42fb173a85408825e6bef5","isMergeCommit":false,"messageTitle":"Committing Level 4","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"69d9b79674f428afd5b8715f8fda7b60a977fd72","isMergeCommit":false,"messageTitle":"Committing text-ui-test","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":16,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"198334a595afaa06f4f1e2e0867c0c07d26b2c0e","isMergeCommit":false,"messageTitle":"Committing Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":5}}},{"hash":"bb49d9e7cd1bd5c9367132950a88b3cdcfb80cb3","isMergeCommit":false,"messageTitle":"Committing Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":128,"deletions":75}}},{"hash":"8aab7cbd13c38c9df72ad659608c0c1ea0822d23","isMergeCommit":false,"messageTitle":"Committing Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":9}}}]},{"date":"2023-09-01","commitResults":[{"hash":"c63c221342d8030fc37093a3f1e937ad6c3f1147","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-16 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":13}}},{"hash":"ad3a198bebe8db708d95e617c64c9eb9055127fe","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-16 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"e02da591a691e32aa6b34d06a601eaf576cc5298","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":24}}},{"hash":"840b1ff79bf4e09b5d44cb18f91609de58ed1107","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"698b2ca51779ccf55694576e023759d4405dd99e","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}},{"hash":"d5890789b34d776bbdf06574fc303ead47134e91","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}},{"hash":"a13da369a4e4c67eef854dda0509e3f5c48a8f62","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":12}}},{"hash":"f0a837ad005259ae604cc20360168e68652abec2","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"75c7865710f0b2e37a3ede1b6f24bcbaaf31a997","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":27}}},{"hash":"a0704e1bae161d5e4fae465fe600202a7ea30b15","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"637bfeff15bb6589e12f6585cbae3df1d4c906c6","isMergeCommit":false,"messageTitle":"The deadline and event tasks now require a concrete dd-MM-yyyy HHmm format input, and will output in MMM d yyyy HHmm format (time in the 24 hours format) as part of Level 8.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":15}}},{"hash":"0d460fbc974a67092335a021ee6dd898f1ad013e","isMergeCommit":false,"messageTitle":"The deadline and event tasks now require a concrete dd-MM-yyyy HHmm format input, and will output in MMM d yyyy HHmm format (time in the 24 hours format) as part of Level 8.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"2861c63a7dcff160e015c3b920851ef0522f1abb","isMergeCommit":false,"messageTitle":"Revert \"The deadline and event tasks now require a concrete dd-MM-yyyy HHmm format input, and will output in MMM d yyyy HHmm format (time in the 24 hours format) as part of Level 8.\"","messageBody":"This reverts commit 0d460fbc974a67092335a021ee6dd898f1ad013e.\n","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"a5460d9564ac7e949280d28a458a4f60f37564f6","isMergeCommit":false,"messageTitle":"Revert \"Revert \"The deadline and event tasks now require a concrete dd-MM-yyyy HHmm format input, and will output in MMM d yyyy HHmm format (time in the 24 hours format) as part of Level 8.\"\"","messageBody":"This reverts commit 2861c63a7dcff160e015c3b920851ef0522f1abb.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"ca1cfcdba55b1f0de7be329f834c6f7599034d90","isMergeCommit":false,"messageTitle":"Import LocalDateTime to parse user inputs for date and time of tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"baef718d45ce73a5c2a61f870ba3228963ac5a4c","isMergeCommit":false,"messageTitle":"Merge branch-Level-8 with master","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"cb13a4dcb15c2fd30bf695b50bb65a9cbd60e6a3","isMergeCommit":false,"messageTitle":"Add the header comment of the Task Class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"7641e6b1061e253b1cb5e0084af0c992ad764f74","isMergeCommit":false,"messageTitle":"merge branch-Level-7 with master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"c4a120c17cf542e1498cb23e2c31d3f56153726c","isMergeCommit":false,"messageTitle":"merge branch-Level-8 with master","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":9}}},{"hash":"85a2f0f765decd28df5b9337eefc0c69958821cb","isMergeCommit":false,"messageTitle":"Fix minor string formatting issues in the Deadline Class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"f55e28ccd37734fc1e0a8affc8c36f1e56ea1a1d","isMergeCommit":false,"messageTitle":"create Ui class for the chatBot which interacts with users","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":6}}},{"hash":"de7ed2b37e0a372e4e3a0c31bc4571cb76a6a899","isMergeCommit":false,"messageTitle":"create Storage class for the chatBot to load and save tasks in the file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":52}}},{"hash":"4602d3092be668d1c71e49323dde8b1a4a23d7b5","isMergeCommit":false,"messageTitle":"create Parser class for the chatBot to accept and read user inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":7}}},{"hash":"7fc79a8fae282b8d785d29309beacc3072814dec","isMergeCommit":false,"messageTitle":"create Parser class for the chatBot to parse and read user inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":143}}},{"hash":"8c96f3209dabe6f7706f3aecdf0f8cf7ea0e0301","isMergeCommit":false,"messageTitle":"create Ui class for the chatBot to interact with user inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":34}}}]},{"date":"2023-09-03","commitResults":[{"hash":"51863b417e62ae02da1c44d5c5b46864cd766e20","isMergeCommit":false,"messageTitle":"create TaskList class for the chatBot to handle the tasklists created","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":179,"deletions":98}}},{"hash":"634b93edf3dc734b76cca20c77fb3769fa5a6b96","isMergeCommit":false,"messageTitle":"create packages - duke, task and exception to categorize the classes in suitable packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":58,"deletions":10},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-04","commitResults":[{"hash":"f8cd1e6df29941b97902a91c9eb2c04070d50edb","isMergeCommit":true,"messageTitle":"merge add-gradle-support into master","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"eb16eff168c08d5f6d341be6c26dd57d1a82946e","isMergeCommit":false,"messageTitle":"set up gradle and merge add-gradle-support with master","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":16,"deletions":8}}},{"hash":"82636ff30406894479c69ec46f746a4a14e9858b","isMergeCommit":false,"messageTitle":"Add JUnit tests for Storage, TaskList and Deadline classes","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":191,"deletions":50}}},{"hash":"4894c7d25f086c06d48a9064b26633fc5dff7d0f","isMergeCommit":false,"messageTitle":"Troubleshoot issues associated with JUnit and gradlew jar files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2},"java":{"insertions":4,"deletions":8}}},{"hash":"228e5e152070298db9444392786d37915a1bb70d","isMergeCommit":false,"messageTitle":"Troubleshoot issues associated with JUnit and gradlew jar files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"c891d68850fb542fd42ddaa8bfea67c13003b6d6","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"282ec093ffc8becdc2461a4daef0a7fa9d4c9ee8","isMergeCommit":false,"messageTitle":"Troubleshoot issues associated with JUnit and gradlew jar files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":13,"deletions":8}}},{"hash":"b784562b2217368427600852f61ff0c0debc6073","isMergeCommit":true,"messageTitle":"Troubleshoot issues associated with JUnit and gradlew jar","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"c6b86b2d863afc5d521a92c5a64962d857e679c5","isMergeCommit":false,"messageTitle":"Troubleshoot issues associated with JUnit and gradle jar","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":7}}},{"hash":"90eff4d2004aa05f7403ae3d08342d81f2e64a40","isMergeCommit":false,"messageTitle":"create a Duke.jar file with JUnit tests for Storage, TaskList and Deadline Classes","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":3},"java":{"insertions":1,"deletions":0}}},{"hash":"da6359d9a3250d5fb9c50379d691ff395bc38985","isMergeCommit":false,"messageTitle":"Add JavaDocs to the Java classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":339,"deletions":27}}},{"hash":"2c836ec5db6be42dc67fda082bbe8774187fe7a3","isMergeCommit":false,"messageTitle":"Improve Coding Standards across the Java files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":18}}},{"hash":"2b6dded29d4eee39854c776057b16fa696725a73","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"* branch-A-CodingStandard:\n Improve Coding Standards across the Java files\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"3f8da3c34bd1e74937350fdb35144acd54c9c13b","isMergeCommit":false,"messageTitle":"Add Find instruction for chatBot to find matching results","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":55}}},{"hash":"466c99e5cfa0fdd7df7861211bb77f7828fe7edc","isMergeCommit":false,"messageTitle":"merge branch-Level-9 into master","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"RiyaMehta2211":{"java":982,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":3,"txt":15}},"authorContributionVariance":{"RiyaMehta2211":40705.14},"authorDisplayNameMap":{"RiyaMehta2211":"CS2103T-T14-2 MEHT..BHAI"}} diff --git a/Sebtey_ip_master/authorship.json b/Sebtey_ip_master/authorship.json index 12fcf3d9..50345921 100644 --- a/Sebtey_ip_master/authorship.json +++ b/Sebtey_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" mainClass.set(\"seedo.duke.Duke\")","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" archiveBaseName \u003d \"Veda\"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" archiveVersion \u003d \"V0.1\"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" archiveFileName \u003d \"Veda.jar\"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Sebtey":9,"-":40}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import 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":"","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-03"},{"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":" } else if (args.equals(\"find\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" //User wishes to find a task by a keyword","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" return 6;","lastModifiedDate":"2023-09-03"},{"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":" return -1;","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" * Returns the index of the task given in the command line argument args.","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" * @param args","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" * @return an integer corresponding to the index of the task that we want.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" * @throws NumberFormatException","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" * @throws NoDescriptionException when the user did not input any additional arguments.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" * @throws ExcessiveArgumentException when the user input more arguments than required.","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" public static int getTargetIndex(String args)","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" throws NumberFormatException, NoDescriptionException, ExcessiveArgumentException, IncorrectInputException {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" if (args.split(\" \").length \u003c 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"There is no given task index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" } else if (args.split(\" \").length \u003e 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" throw new ExcessiveArgumentException(\"There are too many arguments.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" int targetIndex \u003d Integer.parseInt(args.toLowerCase().split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" if (targetIndex \u003c 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" throw new IncorrectInputException(\"Index of task must be greater than 0.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" return targetIndex;","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" }","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":" * Returns a new task based on the command line argument args.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" * @param args","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" * @return a Task from the given args.","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" * @throws NoDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" public static Task getTask(String args) throws NoDescriptionException {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" String type \u003d args.split(\" \")[0].toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" String[] descriptions \u003d null; //For multiple arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" switch (type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"todo \", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":" newTask \u003d new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" //Expected CL input: deadline \u003cDescription\u003e /by \u003cDue date in dd/MM/yyyy HHmm\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" //TODO add error handling for no \"/by\" keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" \"Please input the right order: deadline \u003cDescription\u003e /by \u003cdue date\u003e\");","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"deadline \", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" descriptions \u003d description.split(\" /by \");","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" if (descriptions.length \u003c 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" throw new IncorrectInputException(","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" \"Please input the right order: deadline \u003cDescription\u003e /by \u003cdue date\u003e\");","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":" newTask \u003d new Deadline(descriptions[0], descriptions[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" //Expected CL input: event \u003cDescription\u003e /from \u003cstart\u003e /to \u003cend\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"event \", \"\"); //Remove type","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":" descriptions \u003d description.split(\" /from \"); //Split remaining args into description + (from and to)","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"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":136,"author":{"gitId":"Sebtey"},"content":" String to \u003d descriptions[1].split(\" /to \")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":" newTask \u003d new Event(descriptions[0], from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":" return newTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":" public static String getKeyword(String arg) {","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":" //Parse keyword","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":" final String keyword \u003d arg.toLowerCase().replaceFirst(\"find \", \"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"Sebtey"},"content":" return keyword;","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":154}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" * Storage deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" private final String dir \u003d \"/VedaMissions\";","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" private final String storagePath \u003d \"/VedaMissions/Missions.txt\";","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" private final File storageFile \u003d new File(storagePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" * Adds file into the directory specified.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" * @return whether file has been successfully added into the hard disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" public boolean addFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" File directory \u003d new File(dir);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" if (directory.mkdir()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" storageFile.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"An error occurred while trying to create the file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" * Indicates if the saved file is existing.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" * @return true if the saved file does exist, false otherwise.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" public boolean checkFileExists() {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" return storageFile.exists();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" * Returns the stored task list from the hard disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" * @return an ArrayList containing the tasks stored in the hard disk.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" * @throws FileNotFoundException If the storageFile is not located in its rightful directory.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws FileNotFoundException {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" Scanner sc \u003d new Scanner(storageFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" final String task \u003d sc.nextLine(); //Each task is listed in a single line","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" char type \u003d task.charAt(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" String[] descriptions \u003d task.split(\"::\"); //:: demarcates a different field","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" switch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" tasks.add(new ToDo(descriptions[2], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" //Events.Deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Deadline(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" //Events.Event","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Event(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Wrong file format\");","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" //Formatting error in saved file","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"File corrupted.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" sc.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":" * Updates the saved data in the disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" * @param tasks is the current list of tasks the user has.","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" * @param isAddingTask indicates whether the user is adding a new task or overwriting the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" * @return true if file is successfully updated.","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" * @throws IOException When writer is called upon to write after being closed.","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" public boolean updateData(ArrayList\u003cTask\u003e tasks, boolean isAddingTask) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" FileWriter writer \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" boolean isNotFirstTask \u003d tasks.size() !\u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":" writer \u003d new FileWriter(storageFile, isAddingTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" String newData;","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" if (isNotFirstTask \u0026\u0026 isAddingTask) {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" //Add a new line containing the latest task","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" newData \u003d (System.lineSeparator() + tasks.get(tasks.size() - 1).convertToStorageForm());","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" } else if (!isNotFirstTask \u0026\u0026 isAddingTask) {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":" newData \u003d tasks.get(tasks.size() - 1).convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" //Overwrite the file","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":" newData \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" //Iterate through tasks and convertToStorageForm","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" newData +\u003d tasks.get(i).convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":" if (i !\u003d tasks.size() - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" newData +\u003d System.lineSeparator();","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" writer.write(newData);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Failed to update tasks on disk.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sebtey":151}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" * TaskList encapsulates the task lists and operations related to the task lists.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" private ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" public TaskList(Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" return this.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" * Retrieves the saved data from file.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" * @return true if successful. Otherwise, false.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" public boolean load() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" if (storage.checkFileExists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" //File does exist","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" tasks \u003d storage.retrieveTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to find file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" //File does not exist","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" storage.addFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" * Deletes the task at the given index of the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex is null if encounter an exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" public Task deleteTask(int taskIndex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.remove(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" storage.updateData(tasks, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Noted. I have removed the following mission:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to update file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" * Adds the given task into the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" * @param task","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" public boolean addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" if (task !\u003d null \u0026\u0026 tasks.add(task)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"added in mission:\\n\" + task);","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" storage.updateData(tasks, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Error writing to file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"System is unable to accommodate the new mission\");","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" * Marks the task at the given index as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex is the index of the task to be marked.","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" public boolean markAsDone(int taskIndex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" if (task.isDone()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" //Events.Task already marked as done","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission has been completed previously.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" task.updateCompletionStatus();","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission status updated! Mission completed successfully.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" return storage.updateData(tasks, false);","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to update file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" * Marks the task at the given index as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex is the index of the task to be unmarked.","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":" public boolean markUndone(int taskIndex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" if (!(task.isDone())) {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":" //task already marked as undone","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission is already marked as undone!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" task.updateCompletionStatus();","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission status updated! Mission completion status reverted.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":" return storage.updateData(tasks, false);","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to update file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"Sebtey"},"content":" * Returns an ArrayList containing tasks that contains the keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"Sebtey"},"content":" * @param keyword is the word that we are searching for amongst the tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"Sebtey"},"content":" * @return an ArrayList of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e findKeyword(String keyword) {","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"Sebtey"},"content":" //Filter out the tasks without the keyword using Stream","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"Sebtey"},"content":" List\u003cTask\u003e results \u003d tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"Sebtey"},"content":" .stream()","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"Sebtey"},"content":" .filter((task) -\u003e task.getDescription().toLowerCase().contains(keyword))","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"Sebtey"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"Sebtey"},"content":" return new ArrayList\u003c\u003e(results);","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":174}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * Ui handles the interactions with user.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" public Ui(Scanner sc) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" this.sc \u003d sc;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" * Retrieves input from the user in the command line.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" public String getInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" * Greets the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" public void welcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Veda initialised. How may I help you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" * Terminates the ui and closes the scanner.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" public void exit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Terminating reader.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" sc.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Bye. All the best for your mission!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" * Informs user that command is unrecognised.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" public void displayUnrecognisedInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unrecognised command.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" * List out the missions in tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" * @param tasks contains the missions to be listed.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" public void displayList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Missions:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" tasks.forEach(task -\u003e System.out.println((tasks.indexOf(task) + 1) + \".\" + task));","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" * List out the missions in tasks with the message at the top.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" * @param tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" * @param message","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" public void displayList(ArrayList\u003cTask\u003e tasks, String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" tasks.forEach(task -\u003e System.out.println((tasks.indexOf(task) + 1) + \".\" + task));","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":77}},{"path":"src/main/java/Veda.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import vedaexceptions.IncorrectInputException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import vedaexceptions.NoDescriptionException;","lastModifiedDate":"2023-09-03"},{"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 static final Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" private static final TaskList tasks \u003d new TaskList(storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" private static final Ui ui \u003d new Ui(new Scanner(System.in));","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" private static void initialise() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" ui.welcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" private static void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" while (true) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" String input \u003d ui.getInput();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" int method \u003d Parser.parse(input); //Get which commands to perform based on user\u0027s input","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" switch (method) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" case -1:","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" //Unrecognised input","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unrecognised command.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" case 0:","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" //User wishes to exit the program","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" ui.exit();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" return;","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" case 1:","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" //User wishes to see listed missions","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" ui.displayList(tasks.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" case 2:","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as done","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" tasks.markAsDone(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" case 3:","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as undone","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" tasks.markUndone(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" case 4:","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" //User wishes to delete a task","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" tasks.deleteTask(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" case 5:","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" //User wishes to add a new task","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" tasks.addTask(Parser.getTask(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" } catch (IncorrectInputException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Ensure your deadline is of the format {dd/MM/yyyy HHmm}\");","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" case 6:","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" //User wishes to find a task by a keyword","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" final String keyword \u003d Parser.getKeyword(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" ui.displayList(","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" tasks.findKeyword(keyword),","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" \"Retrieved the following missions containing the keyword \\\"\" + keyword + \"\\\":\"","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" * Runs the program.","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" * @param args","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" initialise();","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" run();","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Sebtey":115}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * Tasks that need to be done before a specific date/time.","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" //TODO","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" static final String SYMBOL \u003d \"D\";","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" protected String by;","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" protected LocalDateTime deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" * Constructor for deadline task that is used for user inputs.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" * @param description is the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" * @param by deadline for the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" this.deadline \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" * Constructor for deadline task that is used when retrieving tasks from the saved file.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" * @param description is the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" * @param by deadline for the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" * @param isDone indicates whether the task has been completed.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" public Deadline(String description, String by, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" this.deadline \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" return \"[D]\"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" + super.toString()","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" + \"(by: \" + this.deadline.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HHmm\")) + \"H)\";","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" final String separator \u003d \"::\";","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" //D::0::return book::June 6th","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + separator + status + separator + getDescription() + separator + this.by;","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":65}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * Tasks that start at a specific date/time and ends at a specific date/time.","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" static final String SYMBOL \u003d \"E\";","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" protected String from;","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" protected String to;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" * Constructor for event class, using user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" * @param description is the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" * @param from is the starting time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" * @param to is the ending time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" this.start \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" * Constructor for event class, using the data from the saved file.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" * @param description is the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" * @param period is the string containing the start and end time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" * @param isDone denotes whether the task has been completed.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" public Event(String description, String period, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" this.from \u003d period.split(\"-\")[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" this.to \u003d period.split(\"-\")[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" this.start \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" return \"[E][\" + getStatusIcon() + \"] \"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" + super.getDescription()","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" + \"(from: \"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" + this.start.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HHmm\"))","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" + \"H to: \"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" + this.to","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" + \"H)\";","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" final String separator \u003d \"::\";","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" final String period \u003d this.from + \"-\" + this.to;","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" //E::0::project meeting::Aug 6th 2pm-4pm","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + separator + status + separator + getDescription() + separator + period;","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":74}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * Task is the abstract class that encapsulates the common methods related to other Task classes.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" private String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" * Changes the current completion status of the task to true or false if it is currently false or true respectively.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" public void updateCompletionStatus() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" //If done, change to not done or false","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" //Else, change to done or true","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d !(this.isDone);","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" //Events.Task is marked as done with an \"X\"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" return isDone","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" ? \"X\"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" : \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" return this.isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" return \"[\" + getStatusIcon() + \"] \" + getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" public abstract String getType();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" * Converts the task into a String containing all its information that will be stored in the saved file.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" * @return a String that represents the task instance in the saved file.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" public abstract String convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sebtey":59}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * ToDos are tasks that have no date/time attached to them.","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" static final String SYMBOL \u003d \"T\";","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" return \"[T][\" + getStatusIcon() + \"] \" + super.getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" final String separator \u003d \"::\";","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + separator + status + separator + getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":36}},{"path":"src/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":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * ExcessiveArgumentException is a form of IncorrectInputException that is thrown when the user provides more arguments","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" * than the command requires.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"public class ExcessiveArgumentException extends IncorrectInputException {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" public ExcessiveArgumentException(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" super(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" return super.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sebtey":18}},{"path":"src/main/java/vedaexceptions/IncorrectInputException.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-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * IncorrectInputException is a form of RuntimeException that is thrown when the user provide an invalid input.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"public class IncorrectInputException extends RuntimeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" public IncorrectInputException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" super(message);","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" return \"Please ensure that you key in your arguments correctly.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sebtey":17}},{"path":"src/main/java/vedaexceptions/NoDescriptionException.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-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * NoDescriptionException is a form of IncorrectInputException that is thrown when the user omits certain description","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" * in their input.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"public class NoDescriptionException extends IncorrectInputException {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" public NoDescriptionException(String message) {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" super(message);","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" return super.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":18}},{"path":"src/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}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" mainClass.set(\"seedo.duke.Duke\")","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" archiveBaseName \u003d \"Veda\"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" archiveVersion \u003d \"V0.1\"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" archiveFileName \u003d \"Veda.jar\"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Sebtey":9,"-":40}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import exceptions.ExcessiveArgumentException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import exceptions.IncorrectInputException;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import exceptions.NoDescriptionException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" * Parser makes sense of the user command.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" * Returns an int value denoting which action to be performed.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" * @param args is the input taken from the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" * @return non-negative int if args is valid input, else -1.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" public static int parse(String args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" args \u003d args.toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" if (args.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" //User wishes to exit the program","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" return 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" //User wishes to see his listed missions","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" return 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" args \u003d args.split(\" \")[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" if (args.equals(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as done","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" return 2;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as undone","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" return 3;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" //User wishes to delete a task","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" return 4;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"todo\") || args.equals(\"deadline\") || args.equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" //User wishes to add a new task","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" return 5;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"find\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" //User wishes to find a task by a keyword","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" return 6;","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" return -1;","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" * Returns the index of the task given in the command line argument args.","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" * @param args","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" * @return an integer corresponding to the index of the task that we want.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" * @throws NumberFormatException","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" * @throws NoDescriptionException when the user did not input any additional arguments.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" * @throws ExcessiveArgumentException when the user input more arguments than required.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" public static int getTargetIndex(String args)","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" throws NumberFormatException, NoDescriptionException, ExcessiveArgumentException, IncorrectInputException {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" if (args.split(\" \").length \u003c 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"There is no given task index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" } else if (args.split(\" \").length \u003e 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" throw new ExcessiveArgumentException(\"There are too many arguments.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" int targetIndex \u003d Integer.parseInt(args.toLowerCase().split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" if (targetIndex \u003c 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" throw new IncorrectInputException(\"Index of task must be greater than 0.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" return targetIndex;","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" * Returns a new task based on the command line argument args.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" * @param args","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" * @return a Task from the given args.","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" * @throws NoDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" public static Task getTask(String args) throws NoDescriptionException {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" String type \u003d args.split(\" \")[0].toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" String[] descriptions \u003d null; //For multiple arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" switch (type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"todo \", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" newTask \u003d new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" //Expected CL input: deadline \u003cDescription\u003e /by \u003cDue date in dd/MM/yyyy HHmm\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" //TODO add error handling for no \"/by\" keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" \"Please input the right order: deadline \u003cDescription\u003e /by \u003cdue date\u003e\");","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"deadline \", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":" descriptions \u003d description.split(\" /by \");","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" if (descriptions.length \u003c 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" throw new IncorrectInputException(","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":" \"Please input the right order: deadline \u003cDescription\u003e /by \u003cdue date\u003e\");","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" newTask \u003d new Deadline(descriptions[0], descriptions[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" //Expected CL input: event \u003cDescription\u003e /from \u003cstart\u003e /to \u003cend\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"event \", \"\"); //Remove type","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":" descriptions \u003d description.split(\" /from \"); //Split remaining args into description + (from and to)","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" String from \u003d descriptions[1].split(\" /to \")[0]; //Split (from and to) into from and to","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":" String to \u003d descriptions[1].split(\" /to \")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" newTask \u003d new Event(descriptions[0], from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":" return newTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":" public static String getKeyword(String arg) {","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":" //Parse keyword","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":" final String keyword \u003d arg.toLowerCase().replaceFirst(\"find \", \"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"Sebtey"},"content":" return keyword;","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":155}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" * Storage deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" private final String dir \u003d \"/VedaMissions\";","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" private final String storagePath \u003d \"/VedaMissions/Missions.txt\";","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" private final File storageFile \u003d new File(storagePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" * Adds file into the directory specified.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" * @return whether file has been successfully added into the hard disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" public boolean addFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" File directory \u003d new File(dir);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" if (directory.mkdir()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" storageFile.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"An error occurred while trying to create the file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" * Indicates if the saved file is existing.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" * @return true if the saved file does exist, false otherwise.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" public boolean checkFileExists() {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" return storageFile.exists();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" * Returns the stored task list from the hard disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" * @return an ArrayList containing the tasks stored in the hard disk.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" * @throws FileNotFoundException If the storageFile is not located in its rightful directory.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws FileNotFoundException {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" Scanner sc \u003d new Scanner(storageFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" final String task \u003d sc.nextLine(); //Each task is listed in a single line","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" char type \u003d task.charAt(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" String[] descriptions \u003d task.split(\"::\"); //:: demarcates a different field","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" switch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" tasks.add(new ToDo(descriptions[2], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" //Events.Deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Deadline(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" //Events.Event","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Event(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Wrong file format\");","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" //Formatting error in saved file","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"File corrupted.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" sc.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":" * Updates the saved data in the disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" * @param tasks is the current list of tasks the user has.","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" * @param isAddingTask indicates whether the user is adding a new task or overwriting the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" * @return true if file is successfully updated.","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" * @throws IOException When writer is called upon to write after being closed.","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" public boolean updateData(ArrayList\u003cTask\u003e tasks, boolean isAddingTask) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" FileWriter writer \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" boolean isNotFirstTask \u003d tasks.size() !\u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":" writer \u003d new FileWriter(storageFile, isAddingTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" String newData;","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" if (isNotFirstTask \u0026\u0026 isAddingTask) {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" //Add a new line containing the latest task","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" newData \u003d (System.lineSeparator() + tasks.get(tasks.size() - 1).convertToStorageForm());","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" } else if (!isNotFirstTask \u0026\u0026 isAddingTask) {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":" newData \u003d tasks.get(tasks.size() - 1).convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" //Overwrite the file","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":" newData \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" //Iterate through tasks and convertToStorageForm","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" newData +\u003d tasks.get(i).convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":" if (i !\u003d tasks.size() - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" newData +\u003d System.lineSeparator();","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" writer.write(newData);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Failed to update tasks on disk.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sebtey":151}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" * TaskList encapsulates the task lists and operations related to the task lists.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" private ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" public TaskList(Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" return this.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" * Retrieves the saved data from file.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" * @return true if successful. Otherwise, false.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" public boolean load() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" if (storage.checkFileExists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" //File does exist","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" tasks \u003d storage.retrieveTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to find file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" //File does not exist","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" storage.addFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" * Deletes the task at the given index of the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex is null if encounter an exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" public Task deleteTask(int taskIndex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.remove(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" storage.updateData(tasks, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Noted. I have removed the following mission:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to update file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" * Adds the given task into the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" * @param task","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" public boolean addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" if (task !\u003d null \u0026\u0026 tasks.add(task)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"added in mission:\\n\" + task);","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" storage.updateData(tasks, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Error writing to file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"System is unable to accommodate the new mission\");","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" * Marks the task at the given index as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex is the index of the task to be marked.","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" public boolean markAsDone(int taskIndex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" if (task.isDone()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" //Events.Task already marked as done","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission has been completed previously.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" task.updateCompletionStatus();","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission status updated! Mission completed successfully.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" return storage.updateData(tasks, false);","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to update file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" * Marks the task at the given index as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex is the index of the task to be unmarked.","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":" public boolean markUndone(int taskIndex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" if (!(task.isDone())) {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":" //task already marked as undone","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission is already marked as undone!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" task.updateCompletionStatus();","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission status updated! Mission completion status reverted.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":" return storage.updateData(tasks, false);","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to update file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"Sebtey"},"content":" * Returns an ArrayList containing tasks that contains the keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"Sebtey"},"content":" * @param keyword is the word that we are searching for amongst the tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"Sebtey"},"content":" * @return an ArrayList of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e findKeyword(String keyword) {","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"Sebtey"},"content":" //Filter out the tasks without the keyword using Stream","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"Sebtey"},"content":" List\u003cTask\u003e results \u003d tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"Sebtey"},"content":" .stream()","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"Sebtey"},"content":" .filter((task) -\u003e task.getDescription().toLowerCase().contains(keyword))","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"Sebtey"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"Sebtey"},"content":" return new ArrayList\u003c\u003e(results);","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":174}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * Ui handles the interactions with user.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" public Ui(Scanner sc) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" this.sc \u003d sc;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" * Retrieves input from the user in the command line.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" public String getInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" * Greets the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" public void welcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Veda initialised. How may I help you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" * Terminates the ui and closes the scanner.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" public void exit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Terminating reader.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" sc.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Bye. All the best for your mission!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" * Informs user that command is unrecognised.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" public void displayUnrecognisedInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unrecognised command.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" * List out the missions in tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" * @param tasks contains the missions to be listed.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" public void displayList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Missions:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" tasks.forEach(task -\u003e System.out.println((tasks.indexOf(task) + 1) + \".\" + task));","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" * List out the missions in tasks with the message at the top.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" * @param tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" * @param message","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" public void displayList(ArrayList\u003cTask\u003e tasks, String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" tasks.forEach(task -\u003e System.out.println((tasks.indexOf(task) + 1) + \".\" + task));","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":77}},{"path":"src/main/java/Veda.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import exceptions.IncorrectInputException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import exceptions.NoDescriptionException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" * Veda is the main class for the chatbot application \"Veda\".","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"public class Veda {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" private static final Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" private static final TaskList tasks \u003d new TaskList(storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" private static final Ui ui \u003d new Ui(new Scanner(System.in));","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" private static void initialise() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" ui.welcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" private static void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" while (true) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" String input \u003d ui.getInput();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" int method \u003d Parser.parse(input); //Get which commands to perform based on user\u0027s input","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" switch (method) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" case -1:","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" //Unrecognised input","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unrecognised command.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" case 0:","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" //User wishes to exit the program","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" ui.exit();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" return;","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" case 1:","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" //User wishes to see listed missions","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" ui.displayList(tasks.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" case 2:","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as done","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" tasks.markAsDone(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" case 3:","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as undone","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" tasks.markUndone(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" case 4:","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" //User wishes to delete a task","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" tasks.deleteTask(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" case 5:","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" //User wishes to add a new task","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" tasks.addTask(Parser.getTask(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" } catch (IncorrectInputException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Ensure your deadline is of the format {dd/MM/yyyy HHmm}\");","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" case 6:","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" //User wishes to find a task by a keyword","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" final String keyword \u003d Parser.getKeyword(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" ui.displayList(","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" tasks.findKeyword(keyword),","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" \"Retrieved the following missions containing the keyword \\\"\" + keyword + \"\\\":\"","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" * Runs the program.","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" * @param args","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" initialise();","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" run();","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Sebtey":115}},{"path":"src/main/java/exceptions/ExcessiveArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * ExcessiveArgumentException is a form of IncorrectInputException that is thrown when the user provides more arguments","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" * than the command requires.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"public class ExcessiveArgumentException extends IncorrectInputException {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" public ExcessiveArgumentException(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" super(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" return super.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sebtey":18}},{"path":"src/main/java/exceptions/IncorrectInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * IncorrectInputException is a form of RuntimeException that is thrown when the user provide an invalid input.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"public class IncorrectInputException extends RuntimeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" public IncorrectInputException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" super(message);","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" return \"Please ensure that you key in your arguments correctly.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sebtey":17}},{"path":"src/main/java/exceptions/NoDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * NoDescriptionException is a form of IncorrectInputException that is thrown when the user omits certain description","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" * in their input.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"public class NoDescriptionException extends IncorrectInputException {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" public NoDescriptionException(String message) {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" super(message);","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" return super.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":18}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * Tasks that need to be done before a specific date/time.","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" //TODO","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" static final String SYMBOL \u003d \"D\";","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" protected String by;","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" protected LocalDateTime deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" * Constructor for deadline task that is used for user inputs.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" * @param description is the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" * @param by deadline for the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" this.deadline \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" * Constructor for deadline task that is used when retrieving tasks from the saved file.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" * @param description is the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" * @param by deadline for the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" * @param isDone indicates whether the task has been completed.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" public Deadline(String description, String by, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" this.deadline \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" return \"[D]\"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" + super.toString()","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" + \"(by: \" + this.deadline.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HHmm\")) + \"H)\";","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" final String separator \u003d \"::\";","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" //D::0::return book::June 6th","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + separator + status + separator + getDescription() + separator + this.by;","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":65}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * Tasks that start at a specific date/time and ends at a specific date/time.","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" static final String SYMBOL \u003d \"E\";","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" protected String from;","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" protected String to;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" * Constructor for event class, using user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" * @param description is the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" * @param from is the starting time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" * @param to is the ending time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" this.start \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" * Constructor for event class, using the data from the saved file.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" * @param description is the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" * @param period is the string containing the start and end time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" * @param isDone denotes whether the task has been completed.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" public Event(String description, String period, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" this.from \u003d period.split(\"-\")[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" this.to \u003d period.split(\"-\")[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" this.start \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" return \"[E][\" + getStatusIcon() + \"] \"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" + super.getDescription()","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" + \"(from: \"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" + this.start.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HHmm\"))","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" + \"H to: \"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" + this.to","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" + \"H)\";","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" final String separator \u003d \"::\";","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" final String period \u003d this.from + \"-\" + this.to;","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" //E::0::project meeting::Aug 6th 2pm-4pm","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + separator + status + separator + getDescription() + separator + period;","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":74}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * Task is the abstract class that encapsulates the common methods related to other Task classes.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" private String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" * Changes the current completion status of the task to true or false if it is currently false or true respectively.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" public void updateCompletionStatus() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" //If done, change to not done or false","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" //Else, change to done or true","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d !(this.isDone);","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" //Events.Task is marked as done with an \"X\"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" return isDone","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" ? \"X\"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" : \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" return this.isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" return \"[\" + getStatusIcon() + \"] \" + getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" public abstract String getType();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" * Converts the task into a String containing all its information that will be stored in the saved file.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" * @return a String that represents the task instance in the saved file.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" public abstract String convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sebtey":59}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * ToDos are tasks that have no date/time attached to them.","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" static final String SYMBOL \u003d \"T\";","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" return \"[T][\" + getStatusIcon() + \"] \" + super.getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" final String separator \u003d \"::\";","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + separator + status + separator + getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":36}},{"path":"src/test/java/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import exceptions.ExcessiveArgumentException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import exceptions.IncorrectInputException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"import exceptions.NoDescriptionException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" public void parse_emptyInput_negativeOne() {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" assertEquals(-1, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" public void parse_exit_one() {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" assertEquals(0, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" public void parse_statementWithExitFront_returnNegativeOne() {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"bye world\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" assertEquals(-1, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" public void parse_statementWithExitMiddle_returnNegativeOne() {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"good bye cruel world\");","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" assertEquals(-1, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" public void parse_listCall_returnOne() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" assertEquals(1, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" public void parse_instantiateNewTask_fiveFiveFive() {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" int methodTypeOne \u003d Parser.parse(\"todo hello world\");","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" int methodTypeTwo \u003d Parser.parse(\"deadline see you /by 08/12/2023 0800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" int methodTypeThree \u003d Parser.parse(\"event bye world /from 08/12/2023 0900 /to 0900\");","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" String actualOutput \u003d String.valueOf(methodTypeOne)","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" + String.valueOf(methodTypeTwo)","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" + String.valueOf(methodTypeThree);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" assertEquals(\"555\", actualOutput);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_excessiveArguments_throwExcessiveArgumentException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" assertThrows(ExcessiveArgumentException.class, () -\u003e Parser.getTargetIndex(\"mark 1 remove\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_stringArgumentIndex_throwNumberFormatException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" assertThrows(NumberFormatException.class, () -\u003e Parser.getTargetIndex(\"mark 1t\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_noArgumentIndex_throwNoDescriptionException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" assertThrows(NoDescriptionException.class, () -\u003e Parser.getTargetIndex(\"mark \"));","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_invalidArgumentIndex_throwIncorrectInputException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" assertThrows(IncorrectInputException.class, () -\u003e Parser.getTargetIndex(\"mark -1\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_correctArgumentIndex_correctIndex() {","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" int index \u003d Parser.getTargetIndex(\"mark 4\");","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" // argument index is offset by +1 from actual index of task for user-friendliness","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" assertEquals(3, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" public void getTask_todoTaskArgument_todoTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" Task task \u003d Parser.getTask(\"todo test mission\");","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" //We test if they are equal if they return the same storage form","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" assertEquals(new ToDo(\"test mission\").convertToStorageForm(), task.convertToStorageForm());","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" public void getTask_deadlineTaskArgument_deadlineTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" final String arg \u003d \"deadline test mission /by 08/08/2023 0800\";","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" final Task actualTask \u003d Parser.getTask(arg);","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":" //We test if they are equal if they return the same storage form","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" assertEquals(new Deadline(","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" \"test mission\",","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" \"08/08/2023 0800\").convertToStorageForm(),","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" actualTask.convertToStorageForm());","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" public void getTask_eventTaskArgument_eventTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" final String arg \u003d \"event test mission /from 08/08/2023 0800 /to 0900\";","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" final Task actualTask \u003d Parser.getTask(arg);","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" //We test if they are equal if they return the same storage form","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":" assertEquals(new Event(","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" \"test mission\",","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" \"08/08/2023 0800\",","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" \"0900\")","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":" .convertToStorageForm(), actualTask.convertToStorageForm());","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sebtey":123}},{"path":"src/test/java/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" * StorageStub is used to emulate ./Storage to allow unit testing of TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" private class StorageStub extends Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" private String[] data;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" protected StorageStub() {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" super();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" data \u003d new String[] {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" \"T::0::sing a song\",","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" \"D::0::hi world ::05/09/2023 2359\",","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" \"E::0::apocalypse ::03/09/2023 0100-03/09/2023 1200\"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" };","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" public boolean checkFileExists() {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws FileNotFoundException {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" for (int i \u003d 0; i \u003c data.length; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" char type \u003d data[i].charAt(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" String[] descriptions \u003d data[i].split(\"::\"); //:: demarcates a different field","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" switch (type) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" tasks.add(new ToDo(descriptions[2], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" //Events.Deadline","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Deadline(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" //Events.Event","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Event(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Wrong file format\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" public boolean updateData(ArrayList\u003cTask\u003e tasks, boolean isAddingTask) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" private TaskList tasks \u003d new TaskList(new StorageStub());","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" public void load_readFromStorageStub_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" assertEquals(true, tasks.load());","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" public void deleteTask_invalidIndex_returnNull() {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" //tasks have only 3 tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" final Task deletedTask \u003d tasks.deleteTask(5);","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" assertEquals(null, deletedTask);","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" public void deleteTask_validIndex_returnTodoTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" //task at index 0 is a todotask with description \"sing a song\"","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" final Task deletedTask \u003d tasks.deleteTask(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" assertEquals(new ToDo(\"sing a song\").convertToStorageForm(), deletedTask.convertToStorageForm());","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" public void deleteTask_postDeletionLength_two() {","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" tasks.deleteTask(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" final int length \u003d tasks.getTasks().size();","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" assertEquals(2, length);","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" public void markAsDone_taskIsNotDone_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" final boolean isSuccessful \u003d tasks.markAsDone(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" assertEquals(true, isSuccessful);","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" public void markAsDone_taskIsDone_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" tasks.markAsDone(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":" final boolean isSuccessful \u003d tasks.markAsDone(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" assertEquals(true, isSuccessful);","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":" public void markAsDone_taskIndexInvalid_false() {","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" final boolean isSuccessful \u003d tasks.markAsDone(5);","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" assertEquals(false, isSuccessful);","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":" public void markUndone_taskIsDone_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" tasks.markAsDone(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":" final boolean isSuccessful \u003d tasks.markUndone(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" assertEquals(true, isSuccessful);","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" public void markUndone_taskIsNotDone_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" final boolean isSuccessful \u003d tasks.markUndone(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" assertEquals(true, isSuccessful);","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":" public void markUndone_taskIndexInvalid_false() {","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":" final boolean isSuccessful \u003d tasks.markUndone(5);","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"Sebtey"},"content":" assertEquals(false, isSuccessful);","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sebtey":154}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"todo testing123","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"unmark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"bye","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":7}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"java -classpath ..\\bin Veda \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Sebtey":1,"-":20}}] diff --git a/Sebtey_ip_master/commits.json b/Sebtey_ip_master/commits.json index f234cf25..fe9c0a34 100644 --- a/Sebtey_ip_master/commits.json +++ b/Sebtey_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Sebtey":[{"date":"2023-08-23","commitResults":[{"hash":"78649d5f247dd30c1823567b412fbcd6e7e05e70","isMergeCommit":false,"messageTitle":"Implemented Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":10}}},{"hash":"895ba0beda2df1ca501282f88268ac9d025a4d97","isMergeCommit":false,"messageTitle":"echo feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"385cee9485f0b439a1a24a60d7128a9014b09b55","isMergeCommit":false,"messageTitle":"Add, List feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"a0ec1247c7c30ac11fd25676f11d6278f7ca4cce","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":4}}}]},{"date":"2023-08-25","commitResults":[{"hash":"41a206536fec747ea66de6a5fcf173db465d4cf3","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":6}}},{"hash":"608a123b587487c4fedf9b64259540440cfafeef","isMergeCommit":false,"messageTitle":"Added in simple automated CLI testing","messageBody":"","tags":["A-TextUITesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":1,"deletions":1},"bat":{"insertions":1,"deletions":1}}},{"hash":"9cce85327cfb82f8bf04f5b702bc75d754f947fc","isMergeCommit":false,"messageTitle":"Added in error handling features","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":22}}},{"hash":"9f6ded6b5b197dbc4a29e2929b75b6eb5b704ec3","isMergeCommit":false,"messageTitle":"Add in deletion of task feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a143d4c8e95f53da48fc3cda5a50688a6f5298f0","isMergeCommit":false,"messageTitle":"Implement file systems","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":0}}},{"hash":"a0b01da241a3b5680010f75cad3d63d1f26b21c3","isMergeCommit":false,"messageTitle":"Add file reading mechanism","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":57}}}]},{"date":"2023-09-01","commitResults":[{"hash":"ed1a587dcb61b763324a4aff93afe686424892a6","isMergeCommit":false,"messageTitle":"Add autosaving feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":175,"deletions":66}}},{"hash":"094200ffe6d88002684681fc11a6e7345067deb4","isMergeCommit":false,"messageTitle":"Rename saved tasks file naming convention","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":13}}},{"hash":"b61a4bf88386145378aa02e77b6fca53ac65657b","isMergeCommit":false,"messageTitle":"Implement date time support for deadline tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":10}}},{"hash":"304472a6ca0734975a986e56386fa8b6ab89777d","isMergeCommit":false,"messageTitle":"Add dateTime support for event tasks","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}}]},{"date":"2023-09-02","commitResults":[{"hash":"9a79510b76947b6221cec0082d84d21dd2ca7867","isMergeCommit":false,"messageTitle":"OOP TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":185,"deletions":108}}},{"hash":"3e5cf9819183dde479b655b577675c00fb8a8d66","isMergeCommit":false,"messageTitle":"Code refactoring into OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":208,"deletions":111}}},{"hash":"3ff8a3c3280dff475993662d69a6b35ecae97d2d","isMergeCommit":false,"messageTitle":"Package the files into repective packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":26}}},{"hash":"80f2cf0cdfdabbc4e5c4eec2b7749bb1728bd234","isMergeCommit":false,"messageTitle":"Add header comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":4}}},{"hash":"fce9c129e54241e340b60082be4e15b504905d25","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/Sebtey/ip into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d8a547b7d9e875eabc6307e76226c0edc7708347","isMergeCommit":false,"messageTitle":"Set up gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"ea7d0a805657d6c19d6b50837c45bb941cb25ba7","isMergeCommit":false,"messageTitle":"Add JUnit testing for Parser and TaskList","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":1},"java":{"insertions":315,"deletions":25}}},{"hash":"d12653d2d33ec3e2e2e7fdfb47198a119c56d114","isMergeCommit":false,"messageTitle":"Tweek file output name for shadow dependency in build gradle","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":2}}},{"hash":"d3641bdd242c682a637aa8c6524f5a35ceb75790","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":7}}},{"hash":"cc28af8d105b0da2e376e5197290b3802f626668","isMergeCommit":false,"messageTitle":"Remove dead code","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":17}}},{"hash":"9ef6ccd1a223945528f126142f273ed43d00a2c9","isMergeCommit":false,"messageTitle":"Complete javaDocs for Tasks package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"b639c767b6f6a3544b6a2ca5c4842a4dbe53b9a6","isMergeCommit":false,"messageTitle":"Complete javaDocs for VedaExceptions package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"b5d3f91d1e810cc2fdce2e310ef1a142334691fa","isMergeCommit":false,"messageTitle":"Complete javaDocs for Parser, Storage, TaskList, Ui and Veda","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"17514c103835981c6b6ef320bdeb0cb34a6f9069","isMergeCommit":false,"messageTitle":"Add checkstyle into build.gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"bf2270b0041b13f53b1ca261883cf04905575e43","isMergeCommit":false,"messageTitle":"Fix coding standard for Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":35}}},{"hash":"f7f7220b5b667566a2e11082a9df644003c1a0e0","isMergeCommit":false,"messageTitle":"Fix coding standards for Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":21}}},{"hash":"e120f093bc7ffd0c647b5693a77ec99c8e1f9788","isMergeCommit":false,"messageTitle":"Fix coding standards for TaskList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"f40067bfbfcf4c3d9b0cab4c78a335c755abcd08","isMergeCommit":false,"messageTitle":"Fix code standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":140,"deletions":97}}},{"hash":"93bea141446009e4514ea39a7437f0b98b2a0020","isMergeCommit":true,"messageTitle":"Merged branch-A-JavaDoc","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"725d34d1b454ef232742d66301054bdc6d8dd1cf","isMergeCommit":true,"messageTitle":"Merge branch-A-CodingStandard","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Sebtey":{"java":1222,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":9,"txt":7}},"authorContributionVariance":{"Sebtey":68275.766},"authorDisplayNameMap":{"Sebtey":"CS2103T-T17-1 SEBA.. XUN"}} +{"authorDailyContributionsMap":{"Sebtey":[{"date":"2023-08-23","commitResults":[{"hash":"78649d5f247dd30c1823567b412fbcd6e7e05e70","isMergeCommit":false,"messageTitle":"Implemented Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":10}}},{"hash":"895ba0beda2df1ca501282f88268ac9d025a4d97","isMergeCommit":false,"messageTitle":"echo feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"385cee9485f0b439a1a24a60d7128a9014b09b55","isMergeCommit":false,"messageTitle":"Add, List feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"a0ec1247c7c30ac11fd25676f11d6278f7ca4cce","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":4}}}]},{"date":"2023-08-25","commitResults":[{"hash":"41a206536fec747ea66de6a5fcf173db465d4cf3","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":6}}},{"hash":"608a123b587487c4fedf9b64259540440cfafeef","isMergeCommit":false,"messageTitle":"Added in simple automated CLI testing","messageBody":"","tags":["A-TextUITesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":1,"deletions":1},"bat":{"insertions":1,"deletions":1}}},{"hash":"9cce85327cfb82f8bf04f5b702bc75d754f947fc","isMergeCommit":false,"messageTitle":"Added in error handling features","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":22}}},{"hash":"9f6ded6b5b197dbc4a29e2929b75b6eb5b704ec3","isMergeCommit":false,"messageTitle":"Add in deletion of task feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a143d4c8e95f53da48fc3cda5a50688a6f5298f0","isMergeCommit":false,"messageTitle":"Implement file systems","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":0}}},{"hash":"a0b01da241a3b5680010f75cad3d63d1f26b21c3","isMergeCommit":false,"messageTitle":"Add file reading mechanism","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":57}}}]},{"date":"2023-09-01","commitResults":[{"hash":"ed1a587dcb61b763324a4aff93afe686424892a6","isMergeCommit":false,"messageTitle":"Add autosaving feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":175,"deletions":66}}},{"hash":"094200ffe6d88002684681fc11a6e7345067deb4","isMergeCommit":false,"messageTitle":"Rename saved tasks file naming convention","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":13}}},{"hash":"b61a4bf88386145378aa02e77b6fca53ac65657b","isMergeCommit":false,"messageTitle":"Implement date time support for deadline tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":10}}},{"hash":"304472a6ca0734975a986e56386fa8b6ab89777d","isMergeCommit":false,"messageTitle":"Add dateTime support for event tasks","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}}]},{"date":"2023-09-02","commitResults":[{"hash":"9a79510b76947b6221cec0082d84d21dd2ca7867","isMergeCommit":false,"messageTitle":"OOP TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":185,"deletions":108}}},{"hash":"3e5cf9819183dde479b655b577675c00fb8a8d66","isMergeCommit":false,"messageTitle":"Code refactoring into OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":208,"deletions":111}}},{"hash":"3ff8a3c3280dff475993662d69a6b35ecae97d2d","isMergeCommit":false,"messageTitle":"Package the files into repective packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":26}}},{"hash":"80f2cf0cdfdabbc4e5c4eec2b7749bb1728bd234","isMergeCommit":false,"messageTitle":"Add header comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":4}}},{"hash":"fce9c129e54241e340b60082be4e15b504905d25","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/Sebtey/ip into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d8a547b7d9e875eabc6307e76226c0edc7708347","isMergeCommit":false,"messageTitle":"Set up gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"ea7d0a805657d6c19d6b50837c45bb941cb25ba7","isMergeCommit":false,"messageTitle":"Add JUnit testing for Parser and TaskList","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":1},"java":{"insertions":315,"deletions":25}}},{"hash":"d12653d2d33ec3e2e2e7fdfb47198a119c56d114","isMergeCommit":false,"messageTitle":"Tweek file output name for shadow dependency in build gradle","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":2}}},{"hash":"d3641bdd242c682a637aa8c6524f5a35ceb75790","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":7}}},{"hash":"cc28af8d105b0da2e376e5197290b3802f626668","isMergeCommit":false,"messageTitle":"Remove dead code","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":17}}},{"hash":"9ef6ccd1a223945528f126142f273ed43d00a2c9","isMergeCommit":false,"messageTitle":"Complete javaDocs for Tasks package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"b639c767b6f6a3544b6a2ca5c4842a4dbe53b9a6","isMergeCommit":false,"messageTitle":"Complete javaDocs for VedaExceptions package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"b5d3f91d1e810cc2fdce2e310ef1a142334691fa","isMergeCommit":false,"messageTitle":"Complete javaDocs for Parser, Storage, TaskList, Ui and Veda","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"17514c103835981c6b6ef320bdeb0cb34a6f9069","isMergeCommit":false,"messageTitle":"Add checkstyle into build.gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"bf2270b0041b13f53b1ca261883cf04905575e43","isMergeCommit":false,"messageTitle":"Fix coding standard for Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":35}}},{"hash":"f7f7220b5b667566a2e11082a9df644003c1a0e0","isMergeCommit":false,"messageTitle":"Fix coding standards for Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":21}}},{"hash":"e120f093bc7ffd0c647b5693a77ec99c8e1f9788","isMergeCommit":false,"messageTitle":"Fix coding standards for TaskList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"f40067bfbfcf4c3d9b0cab4c78a335c755abcd08","isMergeCommit":false,"messageTitle":"Fix code standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":140,"deletions":97}}},{"hash":"93bea141446009e4514ea39a7437f0b98b2a0020","isMergeCommit":true,"messageTitle":"Merged branch-A-JavaDoc","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"725d34d1b454ef232742d66301054bdc6d8dd1cf","isMergeCommit":true,"messageTitle":"Merge branch-A-CodingStandard","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"6a5a06977d7878dfb3e87ba2d165983cd81a5ab8","isMergeCommit":false,"messageTitle":"Fix minor code styling issues","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":74}}}]}]},"authorFileTypeContributionMap":{"Sebtey":{"java":1236,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":9,"txt":7}},"authorContributionVariance":{"Sebtey":62245.625},"authorDisplayNameMap":{"Sebtey":"CS2103T-T17-1 SEBA.. XUN"}} diff --git a/SelwynAng_ip_master/authorship.json b/SelwynAng_ip_master/authorship.json index d03c927b..693ab791 100644 --- a/SelwynAng_ip_master/authorship.json +++ b/SelwynAng_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"SelwynAng":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"SelwynAng":6,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" * The Duke class represents a task management application. It provides functionality","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" * to interact with the user, manage tasks, and store task information.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" /** Name of chatbot */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" private static final String NAME \u003d \"Duke Prince\";","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" /** Task list associated with this duke.Duke object */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" /** Storage associated with this Duke object */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" /** UI associated with this Duke object */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" /** Parser associated with this Duke object */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" private Parser parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Duke object with the specified file path to initialize the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" * @param filePath The file path where task data is stored.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" ui \u003d new Ui(NAME);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" String[] dirAndFilePathArr \u003d filePath.split(\"/\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" String dirPath \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c dirAndFilePathArr.length - 1; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" dirPath +\u003d dirAndFilePathArr[i];","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" dirPath +\u003d \"/\";","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" System.out.println(dirPath);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" storage \u003d new Storage(dirPath, dirAndFilePathArr[dirAndFilePathArr.length - 1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" taskList \u003d new TaskList(storage.retrieveTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" ui.printError(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" * Starts the Duke application by displaying a greeting and processing user commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":" ui.greet();","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" boolean exitProgram \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":" String userInput;","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" while (!exitProgram) {","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" userInput \u003d ui.readCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":" Command c \u003d this.parser.parseCommand(userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" c.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" exitProgram \u003d c.isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" ui.printError(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" } finally {","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":76,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"SelwynAng"},"content":" * The main method to launch the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"SelwynAng"},"content":" * @param args Command-line arguments (not used in this context).","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"SelwynAng"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"SelwynAng"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":84,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"SelwynAng":81,"-":3}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":" * The DukeException class represents an exception specific to the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * Constructs a DukeException object with the specified error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @param message The error message to be associated with the exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":17}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" * The Parser class is responsible for parsing user input and generating the corresponding commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Parses the user input to generate the appropriate command.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param userInput The input provided by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" * @return A Command object representing the parsed command.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the input cannot be parsed into a valid command.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" public Command parseCommand(String userInput) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" String userCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" String args;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" String[] parsedCommand \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" userCommand \u003d parsedCommand[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" args \u003d parsedCommand.length \u003e 1 ? parsedCommand[1] : \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" switch (userCommand) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" return new AddCommand(TaskType.TODO, args);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" return new AddCommand(TaskType.DEADLINE, args);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" return new AddCommand(TaskType.EVENT, args);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" return new MarkCommand(args, true);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" return new MarkCommand(args, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" return new DeleteCommand(args);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" return new FindCommand(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"I don\u0027t understand what you are saying!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" + \"Available commands are list, todo, deadline, event, mark, unmark, delete, bye.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":56}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * The Storage class handles file operations for saving and retrieving tasks to/from a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" * @author Selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" /** The file used for storage. */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" private File file;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" /** The full path of the file. */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" private String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Storage object with the specified directory path and file name.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * @param directoryPath The directory path where the file should be stored.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * @param fileName The name of the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" public Storage(String directoryPath, String fileName) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" this.filePath \u003d directoryPath + fileName;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" if (new File(directoryPath).mkdirs()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Directories are created.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Directories already exist.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" if (this.file.createNewFile()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"File is created: \" + this.file.getName());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"File already exists.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" * Saves the given list of tasks to the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":" * @param tasks The list of tasks to be saved.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" public void saveTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" FileWriter fileWriter \u003d new FileWriter(this.file);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" fileWriter.write(tasks.get(i).toString() + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":" * Retrieves tasks from the file and returns them as an ArrayList.","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"SelwynAng"},"content":" * @return An ArrayList of Task objects retrieved from the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue with file retrieval or if the file is corrupted.","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"SelwynAng"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"SelwynAng"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"SelwynAng"},"content":" DateTimeFormatter dateTimeFormat \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"SelwynAng"},"content":" Scanner scanner \u003d new Scanner(this.file);","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"SelwynAng"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"SelwynAng"},"content":" String taskDesc \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"SelwynAng"},"content":" String[] taskDescArr \u003d taskDesc.split(\" \", 3);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"SelwynAng"},"content":" String taskTitle \u003d taskDescArr[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"SelwynAng"},"content":" String taskDoneStatus \u003d taskDescArr[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"SelwynAng"},"content":" String taskDetails \u003d taskDescArr[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"SelwynAng"},"content":" Task taskToAdd;","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"SelwynAng"},"content":" switch(taskTitle) {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"SelwynAng"},"content":" case(\"[T]\"):","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"SelwynAng"},"content":" taskToAdd \u003d new Todo(taskDetails);","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"SelwynAng"},"content":" if (taskDoneStatus.equals(\"[X]\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"SelwynAng"},"content":" taskToAdd.markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"SelwynAng"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"SelwynAng"},"content":" case(\"[D]\"):","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"SelwynAng"},"content":" String[] taskDetailsArr \u003d taskDetails.split(\"\\\\(by:\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"SelwynAng"},"content":" taskToAdd \u003d new Deadline(taskDetailsArr[0].trim(),","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime.parse(taskDetailsArr[1].split(\"\\\\)\")[0].trim(),","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"SelwynAng"},"content":" dateTimeFormat));","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"SelwynAng"},"content":" if (taskDoneStatus.equals(\"[X]\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"SelwynAng"},"content":" taskToAdd.markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"SelwynAng"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"SelwynAng"},"content":" case(\"[E]\"):","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"SelwynAng"},"content":" String[] taskDetailsArrOne \u003d taskDetails.split(\"\\\\(from:\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"SelwynAng"},"content":" String taskDetailsForEvent \u003d taskDetailsArrOne[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"SelwynAng"},"content":" String[] taskDetailsArrTwo \u003d taskDetailsArrOne[1].split(\"to:\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"SelwynAng"},"content":" taskToAdd \u003d new Event(taskDetailsForEvent.trim(),","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime.parse(taskDetailsArrTwo[0].trim(), dateTimeFormat),","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime.parse(taskDetailsArrTwo[1].split(\"\\\\)\")[0].trim(),","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"SelwynAng"},"content":" dateTimeFormat));","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"SelwynAng"},"content":" if (taskDoneStatus.equals(\"[X]\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"SelwynAng"},"content":" taskToAdd.markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"SelwynAng"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"SelwynAng"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"File is corrupted!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"SelwynAng"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"File cannot be found!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"SelwynAng"},"content":" return taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":139}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" * The Ui class handles interactions with the user interface, providing methods to read input,","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * display messages, and print various types of information.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" /** Name of the chatbot */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" private static String name;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Constructs an Ui object with the specified name to be used in greetings and messages.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param name The name of the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" public Ui(String name) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" * Reads a command input from the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" * @return The command input provided by the user as a string.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" return userInput;","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" * Prints the task list to the console.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The task list to be displayed.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" * @param isMatching Determines which statements to print (true for matching tasks, false for all tasks)","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" public void printTaskList(TaskList taskList, boolean isMatching) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" taskList.displayTaskList(isMatching);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" * Prints a message indicating that a task has been added, along with the new task\u0027s details.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" * @param addedTask The task that was added.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" * @param noOfTasksAfterAdding The number of tasks after adding the new task.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" public void printAddedTask(Task addedTask, int noOfTasksAfterAdding) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":" System.out.println(addedTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":" if (noOfTasksAfterAdding \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Now you have \" + noOfTasksAfterAdding + \" task in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Now you have \" + noOfTasksAfterAdding + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" * Prints a message indicating the change in task done status.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" * @param taskToChange The task for which the status changed.","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" * @param isDone Whether the task is marked as done or not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" public void printChangeTaskDoneStatus(Task taskToChange, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":" if (isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Nice! I\u0027ve marked this task done:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"SelwynAng"},"content":" System.out.println(taskToChange.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"SelwynAng"},"content":" * Prints a message indicating that a task has been deleted, along with the remaining tasks count.","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"SelwynAng"},"content":" * @param deletedTask The task that was deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"SelwynAng"},"content":" * @param numOfTasksLeft The number of tasks remaining after deletion.","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"SelwynAng"},"content":" public void printDeletedTask(Task deletedTask, int numOfTasksLeft) {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"SelwynAng"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"SelwynAng"},"content":" System.out.println(deletedTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"SelwynAng"},"content":" if (numOfTasksLeft \u003d\u003d 1 || numOfTasksLeft \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Now you have \" + numOfTasksLeft + \" task in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Now you have \" + numOfTasksLeft + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"SelwynAng"},"content":" * Prints a greeting message to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"SelwynAng"},"content":" public void greet() {","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"SelwynAng"},"content":" this.printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Hello! I\u0027m \" + name);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"SelwynAng"},"content":" this.printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"SelwynAng"},"content":" * Prints a farewell message to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"SelwynAng"},"content":" public void printExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"SelwynAng"},"content":" * Prints a horizontal line for visual separation.","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"SelwynAng"},"content":" public void printHorizontalLine() {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"SelwynAng"},"content":" int width \u003d 50;","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c width; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"SelwynAng"},"content":" System.out.print(\"-\");","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"SelwynAng"},"content":" * Prints an error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"SelwynAng"},"content":" * @param errorMsg The error message to be displayed.","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"SelwynAng"},"content":" public void printError(String errorMsg) {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"OOPS! \" + errorMsg);","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":136}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" * The AddCommand class represents a command to add a new task to the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" /** The type of task to be added. */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" private TaskType taskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" /** The details for creating the duke.task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" private String addCommandDetails;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * Constructs an AddCommand object with the specified task type and details.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" * @param taskType The type of task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" * @param args The arguments for creating the duke.task.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" public AddCommand(TaskType taskType, String args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" this.addCommandDetails \u003d args;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" * Executes the AddCommand by adding a new task to the task list and updating the storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue adding the task or updating storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" Task addedTask \u003d taskList.addTask(this.taskType, this.addCommandDetails);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" ui.printAddedTask(addedTask, taskList.getNumTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":51}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" * The Command class represents a command that can be executed in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" /** Indicates whether the command triggers an exit from the application. */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * Executes the command using the provided TaskList, Ui, and Storage objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue executing the duke.command.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" * Toggles the exit status of the duke.command.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" public void changeExitStatus() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" this.isExit \u003d !this.isExit;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" * Checks whether the command triggers an exit from the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" * @return True if the command triggers an exit, false otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" return this.isExit;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":42}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * The DeleteCommand class represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" /** The details of the task to be deleted. */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" private String taskToDeleteDetails;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Constructs a DeleteCommand object with the specified details of the task to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param args The arguments specifying the task to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" public DeleteCommand(String args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" this.taskToDeleteDetails \u003d args;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" * Executes the DeleteCommand by removing a task from the task list and updating the storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue deleting the task or updating storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" Task deletedTask \u003d taskList.deleteTask(taskToDeleteDetails);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" int numOfTasksLeft \u003d taskList.getNumTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" ui.printDeletedTask(deletedTask, numOfTasksLeft);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":46}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" * The ExitCommand class represents a command to exit the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" * Executes the ExitCommand by changing the exit status and displaying an exit message.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" super.changeExitStatus();","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" ui.printExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":25}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * The FindCommand class represents a command for searching and finding tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" * based on user-defined criteria in a task management application.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" /** The search criteria provided by the user for finding tasks. */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" private String taskToFindDetails;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * Constructs a new FindCommand object with the specified search criteria.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" * @param args The search criteria provided by the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" public FindCommand(String args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" this.taskToFindDetails \u003d args;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * Executes the find command, searching for tasks in the given task list","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * that match the provided search criteria and displays the results.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The list of tasks to search within.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" * @param ui The user interface for displaying the results.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" * @param storage The storage for data retrieval and persistence.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue executing the command.","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d taskList.findTasks(taskToFindDetails);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" TaskList taskListWithFoundTasks \u003d new TaskList(foundTasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" ui.printTaskList(taskListWithFoundTasks, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"SelwynAng":46}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" * The ListCommand class represents a command to list all tasks in the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" * Executes the ListCommand by displaying the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" ui.printTaskList(taskList, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":25}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * The MarkCommand class represents a command to mark or unmark a task as done in the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" /** Indicates whether to mark the task as done or not. */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" private boolean toMark;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /** The details of the task to be marked. */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" private String taskToMarkDetails;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" * Constructs a MarkCommand object with the specified details of the task to be marked and the marking status.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" * @param args The arguments specifying the task to be marked.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" * @param toMark True if the task should be marked as done, false if it should be marked as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" public MarkCommand(String args, boolean toMark) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" this.taskToMarkDetails \u003d args;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" this.toMark \u003d toMark;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * Executes the MarkCommand by marking or unmarking a task as done and updating the storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The TaskList object containing the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" * @param ui The Ui object handling user interface interactions.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" * @param storage The Storage object handling storage-related operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue marking or unmarking the task or updating storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" Task taskToChange \u003d taskList.changeTaskDoneStatus(this.taskToMarkDetails, this.toMark);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" ui.printChangeTaskDoneStatus(taskToChange, this.toMark);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":50}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" * The Deadline class represents a task with a specific end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" /** The end date and time of the deadline. */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" private LocalDateTime endDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Deadline object with the specified description and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" * @param detail The description of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * @param endDateTime The end date and time of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" public Deadline(String detail, LocalDateTime endDateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" super(detail);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" this.endDateTime \u003d endDateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" * Returns a string representation of the Deadline object, including its completion status, description,","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" * and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" * @return A string representation of the Deadline object.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" return \"[D] \" + super.toString() + \" (by: \" + super.getDisplayDateTime(this.endDateTime) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":35}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" * The Event class represents a task that occurs during a specified time range.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" * It extends the Task class and includes information about the start and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" /** Start date and time of the event */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" private LocalDateTime startDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" /** End date and time of the event */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" private LocalDateTime endDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Constructs an Event object with the specified details, start date and time, and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param detail The details of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" * @param startDateTime The start date and time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * @param endDateTime The end date and time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" public Event(String detail, LocalDateTime startDateTime, LocalDateTime endDateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" super(detail);","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" this.startDateTime \u003d startDateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" this.endDateTime \u003d endDateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * Returns a string representation of the Event object, including its details and time range.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" * @return A string representation of the Event object.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" return \"[E] \" + super.toString() + \" (from: \" + super.getDisplayDateTime(this.startDateTime)","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" + \" to: \" + super.getDisplayDateTime(this.endDateTime) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":41}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" * The Task class represents a task with a description and completion status.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" /** The description of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" private String detail;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" /** The completion status of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Task object with the specified description and sets its completion status to false.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param detail The description of the duke.task.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" public Task(String detail) {","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" this.detail \u003d detail;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" * Returns a formatted display string of the provided LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" * @param dateTime The LocalDateTime object to be formatted.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * @return A formatted date and time string.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" public String getDisplayDateTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" DateTimeFormatter displayFormat \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" return dateTime.format(displayFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" * Returns a string representation of the Task object, including its completion status and description.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" * @return A string representation of the Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" return \"[X] \" + this.detail;","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" return \"[-] \" + this.detail;","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" * Marks the task as done by setting its completion status to true.","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" public void markDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" * Marks the task as undone by setting its completion status to false.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" * Returns the done status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" * @return A boolean value that corresponds to whether the task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":" return this.isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":75}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" * The TaskList class manages a list of tasks and provides methods for adding, creating, deleting, and modifying tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"public class TaskList {","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" /** The list of tasks. */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" /** The number of tasks in the list. */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" private int numTasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * Constructs a TaskList object with the specified list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" * @param tasks The list of tasks to be managed.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" this.numTasks \u003d tasks.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * Adds a new task of the specified type with the given arguments to the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" * @param taskType The type of task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" * @param args The arguments for creating the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" * @return The added Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue with task creation or task type is unsupported.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" public Task addTask(TaskType taskType, String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" case TODO:","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" newTask \u003d createTodo(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" newTask \u003d createDeadline(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" case EVENT:","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" newTask \u003d createEvent(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" default:","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"I can\u0027t create this task type!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" this.tasks.add(newTask);","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":" this.numTasks++;","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" return newTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" * Creates a new Todo task with the given description.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" * @param args The description for the Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" * @return The created Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the description is missing.","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":" public Todo createTodo(String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" if (args \u003d\u003d null || args.isEmpty()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Todo tasks should be created in this format: todo [name]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":77,"author":{"gitId":"SelwynAng"},"content":" return new Todo(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":79,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":81,"author":{"gitId":"SelwynAng"},"content":" * Creates a new Deadline task with the given description and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"SelwynAng"},"content":" * @param args The description and end date/time for the Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"SelwynAng"},"content":" * @return The created Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the format is incorrect or the end date/time is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":87,"author":{"gitId":"SelwynAng"},"content":" public Deadline createDeadline(String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"SelwynAng"},"content":" DateTimeFormatter dateTimeFormat \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"SelwynAng"},"content":" String[] detailsAndDeadline \u003d args.split(\"/by\", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":91,"author":{"gitId":"SelwynAng"},"content":" if (detailsAndDeadline.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Deadline tasks should be created in this format: deadline [name] /by [date]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":94,"author":{"gitId":"SelwynAng"},"content":" String details \u003d detailsAndDeadline[0].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":95,"author":{"gitId":"SelwynAng"},"content":" String endDateTime \u003d detailsAndDeadline[1].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":96,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime formattedEndDateTime \u003d LocalDateTime.parse(endDateTime, dateTimeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"SelwynAng"},"content":" return new Deadline(details, formattedEndDateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"SelwynAng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Invalid deadline time format. Please use dd-MM-yyyy HHmm format!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":102,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":103,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":104,"author":{"gitId":"SelwynAng"},"content":" * Creates a new Event task with the given description and start/end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"SelwynAng"},"content":" * @param args The description and start/end date/time for the Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"SelwynAng"},"content":" * @return The created Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the format is incorrect or the date/time is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":110,"author":{"gitId":"SelwynAng"},"content":" public Event createEvent(String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"SelwynAng"},"content":" DateTimeFormatter dateTimeFormat \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"SelwynAng"},"content":" String eventMsg \u003d \"Event tasks should be created in this format: \"","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"SelwynAng"},"content":" + \"event [name] /from [start time] /to [end time]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"SelwynAng"},"content":" String[] detailsAndStartEnd \u003d args.split(\"/from\", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":117,"author":{"gitId":"SelwynAng"},"content":" if (detailsAndStartEnd.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":118,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(eventMsg);","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":120,"author":{"gitId":"SelwynAng"},"content":" String details \u003d detailsAndStartEnd[0].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":121,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":122,"author":{"gitId":"SelwynAng"},"content":" String[] startAndEnd \u003d detailsAndStartEnd[1].split(\"/to\", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":123,"author":{"gitId":"SelwynAng"},"content":" if (startAndEnd.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":124,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(eventMsg);","lastModifiedDate":"2023-08-22"},{"lineNumber":125,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":126,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":127,"author":{"gitId":"SelwynAng"},"content":" String start \u003d startAndEnd[0].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":128,"author":{"gitId":"SelwynAng"},"content":" String end \u003d startAndEnd[1].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":129,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime formattedStartDateTime \u003d LocalDateTime.parse(start, dateTimeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime formattedEndDateTime \u003d LocalDateTime.parse(end, dateTimeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"SelwynAng"},"content":" return new Event(details, formattedStartDateTime, formattedEndDateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"SelwynAng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Invalid event time format. Please use dd-MM-yyyy HHmm format!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":136,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":137,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":138,"author":{"gitId":"SelwynAng"},"content":" * Deletes a task from the list based on the given task number.","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"SelwynAng"},"content":" * @param args The task number to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"SelwynAng"},"content":" * @return The deleted Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the task number is invalid or in an incorrect format.","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":144,"author":{"gitId":"SelwynAng"},"content":" public Task deleteTask(String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"SelwynAng"},"content":" int taskNumber;","lastModifiedDate":"2023-08-22"},{"lineNumber":146,"author":{"gitId":"SelwynAng"},"content":" Task deletedTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":149,"author":{"gitId":"SelwynAng"},"content":" taskNumber \u003d Integer.parseInt(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":150,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":151,"author":{"gitId":"SelwynAng"},"content":" if (taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-22"},{"lineNumber":152,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Number must be more 1 or more!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":153,"author":{"gitId":"SelwynAng"},"content":" } else if (this.exceedsSizeOfTaskList(taskNumber)) {","lastModifiedDate":"2023-08-22"},{"lineNumber":154,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Number is higher than current size of task list!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":156,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":157,"author":{"gitId":"SelwynAng"},"content":" deletedTask \u003d this.tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"SelwynAng"},"content":" this.numTasks--;","lastModifiedDate":"2023-08-22"},{"lineNumber":159,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":160,"author":{"gitId":"SelwynAng"},"content":" return deletedTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"SelwynAng"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":162,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Deleting task should be in this format: delete [task number]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":164,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":165,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":166,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":167,"author":{"gitId":"SelwynAng"},"content":" * Changes the done status of a task based on the given task number and state.","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"SelwynAng"},"content":" * @param args The task number to be marked/unmarked and the state.","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"SelwynAng"},"content":" * @param toBeDone The desired state (true for done, false for undone).","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"SelwynAng"},"content":" * @return The Task object with the modified done status.","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the task number is invalid or in an incorrect format.","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":174,"author":{"gitId":"SelwynAng"},"content":" public Task changeTaskDoneStatus(String args, boolean toBeDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"SelwynAng"},"content":" int taskNumber;","lastModifiedDate":"2023-08-22"},{"lineNumber":176,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":177,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":178,"author":{"gitId":"SelwynAng"},"content":" taskNumber \u003d Integer.parseInt(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":179,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":180,"author":{"gitId":"SelwynAng"},"content":" if (taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-22"},{"lineNumber":181,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Number must be more 1 or more!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":182,"author":{"gitId":"SelwynAng"},"content":" } else if (this.exceedsSizeOfTaskList(taskNumber)) {","lastModifiedDate":"2023-08-22"},{"lineNumber":183,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Number is higher than current size of task list!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":185,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":186,"author":{"gitId":"SelwynAng"},"content":" Task taskToChange \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"SelwynAng"},"content":" if (toBeDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"SelwynAng"},"content":" taskToChange.markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":191,"author":{"gitId":"SelwynAng"},"content":" taskToChange.markUndone();","lastModifiedDate":"2023-08-29"},{"lineNumber":192,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":193,"author":{"gitId":"SelwynAng"},"content":" return taskToChange;","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"SelwynAng"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":195,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Marking/unmarking tasks should be in this format: mark/unmark [task number]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":196,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":197,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":199,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":200,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":201,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":202,"author":{"gitId":"SelwynAng"},"content":" * Displays the list of tasks to the console.","lastModifiedDate":"2023-08-29"},{"lineNumber":203,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"SelwynAng"},"content":" * @param isMatching Determine which statements to print (true for matching tasks, false for all tasks)","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":206,"author":{"gitId":"SelwynAng"},"content":" public void displayTaskList(boolean isMatching) {","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"SelwynAng"},"content":" if (isMatching) {","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"SelwynAng"},"content":" if (this.numTasks \u003d\u003d 0 || this.numTasks \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Here is the matching task in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"SelwynAng"},"content":" if (this.numTasks \u003d\u003d 0 || this.numTasks \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":215,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Here is the task in your list:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":216,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":217,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-21"},{"lineNumber":218,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":219,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c this.numTasks; i++) {","lastModifiedDate":"2023-08-21"},{"lineNumber":222,"author":{"gitId":"SelwynAng"},"content":" int bullet \u003d i + 1;","lastModifiedDate":"2023-08-21"},{"lineNumber":223,"author":{"gitId":"SelwynAng"},"content":" System.out.print(bullet + \". \");","lastModifiedDate":"2023-08-21"},{"lineNumber":224,"author":{"gitId":"SelwynAng"},"content":" System.out.println(this.tasks.get(i).toString());","lastModifiedDate":"2023-08-22"},{"lineNumber":225,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":226,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":227,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":228,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"SelwynAng"},"content":" * Finds the tasks which details contains the given string parameter","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"SelwynAng"},"content":" * @param taskToFindDetails The details of the task to find","lastModifiedDate":"2023-08-31"},{"lineNumber":232,"author":{"gitId":"SelwynAng"},"content":" * @return The ArrayList of tasks that match the string parameter","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"SelwynAng"},"content":" public ArrayList\u003cTask\u003e findTasks(String taskToFindDetails) {","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"SelwynAng"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"SelwynAng"},"content":" Task taskInFocus \u003d this.tasks.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"SelwynAng"},"content":" if (taskInFocus.toString().contains(taskToFindDetails)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"SelwynAng"},"content":" foundTasks.add(taskInFocus);","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":242,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"SelwynAng"},"content":" return foundTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":247,"author":{"gitId":"SelwynAng"},"content":" * Checks if the given index exceeds the size of the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":248,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":249,"author":{"gitId":"SelwynAng"},"content":" * @param index The index to be checked.","lastModifiedDate":"2023-08-29"},{"lineNumber":250,"author":{"gitId":"SelwynAng"},"content":" * @return True if the index exceeds the task list size, false otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":251,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":252,"author":{"gitId":"SelwynAng"},"content":" public boolean exceedsSizeOfTaskList(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":253,"author":{"gitId":"SelwynAng"},"content":" return index \u003e numTasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":254,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":255,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":256,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":257,"author":{"gitId":"SelwynAng"},"content":" * Retrieves the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":258,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":259,"author":{"gitId":"SelwynAng"},"content":" * @return The ArrayList of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":260,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":261,"author":{"gitId":"SelwynAng"},"content":" public ArrayList\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":262,"author":{"gitId":"SelwynAng"},"content":" return this.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":263,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":264,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":265,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":266,"author":{"gitId":"SelwynAng"},"content":" * Retrieves the number of tasks in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":267,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":268,"author":{"gitId":"SelwynAng"},"content":" * @return The number of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":269,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":270,"author":{"gitId":"SelwynAng"},"content":" public int getNumTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":271,"author":{"gitId":"SelwynAng"},"content":" return this.numTasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":272,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":273,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":273}},{"path":"src/main/java/duke/task/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":" * This is the TaskType enum","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":" * @author Selwyn","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"public enum TaskType {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"SelwynAng":9}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":" * The Todo class represents a task without a specific due date or time.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Todo object with the specified description.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @param detail The description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" public Todo(String detail) {","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" super(detail);","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Returns a string representation of the Todo object, including its completion status and description.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @return A string representation of the Todo object.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" return \"[T] \" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":27}},{"path":"src/test/java/duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"public class DukeTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" public void dummyTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" public void anotherDummyTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":17}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" public void testParseCommandForExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" Command c \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" c \u003d parser.parseCommand(\"bye\");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" assertEquals(c.getClass(), new ExitCommand().getClass());","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" public void testParseCommandForList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" Command c \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" c \u003d parser.parseCommand(\"list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" assertEquals(c.getClass(), new ListCommand().getClass());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"SelwynAng":36}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" public void testMarkDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" Task testTask \u003d new Task(\"testTask\");","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" testTask.markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" assertTrue(testTask.getIsDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" public void testMarkUndone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" Task testTask \u003d new Task(\"testTask\");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" testTask.markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" testTask.markUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" assertFalse(testTask.getIsDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"SelwynAng":23}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"todo drink tea","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"event project meeting /from Tues 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":7}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"SelwynAng":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"SelwynAng":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":"javafx {","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" version \u003d \"20\"","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" modules \u003d [ \u0027javafx.controls\u0027 , \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"SelwynAng":27,"-":41}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * The DialogBox class represents a graphical dialog box that can display text and an image.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" private Label dialog;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" * Constructs a new DialogBox with the specified text and image.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" * @param text The text to display in the dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * @param img The image to display in the dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" * Flips the dialog box to align its contents to the top left.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":" * Creates and returns a new user dialog box with the specified text and image.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" * @param text The text to display in the user dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" * @param img The image to display in the user dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" * @return A new DialogBox representing the user\u0027s dialog.","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" * Creates and returns a new Duke dialog box with the specified text and image.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" * Additionally, it flips the dialog box to align its contents to the top left.","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":" * @param text The text to display in the Duke dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" * @param img The image to display in the Duke dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":" * @return A new DialogBox representing Duke\u0027s dialog.","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"SelwynAng"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"SelwynAng"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"SelwynAng"},"content":" db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"SelwynAng"},"content":" return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"SelwynAng":82}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" * The Duke class represents the main controller of the Duke chatbot application.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" private Parser parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Duke instance with the specified file path for data storage.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param filePath The file path where Duke stores task data.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" String[] dirAndFilePathArr \u003d filePath.split(\"/\");","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" String dirPath \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c dirAndFilePathArr.length - 1; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" dirPath +\u003d dirAndFilePathArr[i];","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" dirPath +\u003d \"/\";","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" System.out.println(dirPath);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" storage \u003d new Storage(dirPath, dirAndFilePathArr[dirAndFilePathArr.length - 1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" taskList \u003d new TaskList(storage.retrieveTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" Ui.printError(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" * Gets a response from Duke based on user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" * @return The response generated by Duke.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" public String getResponse(String userInput) {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" String responseStr;","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" Command c \u003d this.parser.parseCommand(userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" responseStr \u003d c.execute(taskList, storage);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" responseStr \u003d Ui.printError(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" return responseStr;","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"SelwynAng":55,"-":3}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":" * The DukeException class represents an exception specific to the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * Constructs a DukeException object with the specified error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @param message The error message to be associated with the exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":17}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" * The Launcher class is responsible for launching the Duke chatbot application.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"public class Launcher {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * The main entry point of the Duke chatbot application.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" * @param args The command-line arguments passed to the application.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"SelwynAng":19}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * The Main class serves as the entry point for the Duke application.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" * It sets up the JavaFX user interface and initializes the Duke chatbot.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" * @author Selwyn","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" private Duke duke \u003d new Duke(\"data/tasks.txt\");","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * The main entry point for the JavaFX application.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * @param stage The primary stage for the JavaFX application.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" // Load the FXML file for the main window","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" // Create a new scene with the loaded AnchorPane","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" // Set the scene for the primary stage","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" // Get the controller associated with the FXML and set the Duke instance","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" // Print a greeting message using the controller","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().printGreeting();","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" // Show the primary stage","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"SelwynAng":50}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" * The MainWindow class represents the main graphical user interface for the Duke chatbot application.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" private Duke duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.jpeg\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/duke.jpeg\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" * Initializes the MainWindow by binding the scrollPane\u0027s vvalue property to the height property of dialogContainer.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" public void initialize() {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" * Sets the Duke instance for this MainWindow.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" * @param d The Duke instance to set.","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" * Handles user input when the user enters hir or her input.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" * Retrieves the user\u0027s input, gets a response from Duke, and displays it in the dialogContainer.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" String response \u003d duke.getResponse(userInput.getText());","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" * Prints the initial greeting message from Duke in the dialogContainer.","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" public void printGreeting() {","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(ui.printGreet(), dukeImage));","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"SelwynAng":67}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" * The Parser class is responsible for parsing user input and generating the corresponding commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Parses the user input to generate the appropriate command.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param userInput The input provided by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" * @return A Command object representing the parsed command.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the input cannot be parsed into a valid command.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" public Command parseCommand(String userInput) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" String userCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" String args;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" String[] parsedCommand \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" userCommand \u003d parsedCommand[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" args \u003d parsedCommand.length \u003e 1 ? parsedCommand[1] : \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" switch (userCommand) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" return new AddCommand(TaskType.TODO, args);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" return new AddCommand(TaskType.DEADLINE, args);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" return new AddCommand(TaskType.EVENT, args);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" return new MarkCommand(args, true);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" return new MarkCommand(args, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" return new DeleteCommand(args);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" return new FindCommand(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"I don\u0027t understand what you are saying!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" + \"Available commands are list, todo, deadline, event, mark, unmark, delete, bye.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":56}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * The Storage class handles file operations for saving and retrieving tasks to/from a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" * @author Selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" /** The file used for storage. */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" private File file;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" /** The full path of the file. */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" private String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Storage object with the specified directory path and file name.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * @param directoryPath The directory path where the file should be stored.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * @param fileName The name of the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" public Storage(String directoryPath, String fileName) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" this.filePath \u003d directoryPath + fileName;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" if (new File(directoryPath).mkdirs()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Directories are created.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"Directories already exist.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" if (this.file.createNewFile()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"File is created: \" + this.file.getName());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"File already exists.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" * Saves the given list of tasks to the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":" * @param tasks The list of tasks to be saved.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" public void saveTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" FileWriter fileWriter \u003d new FileWriter(this.file);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" fileWriter.write(tasks.get(i).toString() + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":" * Retrieves tasks from the file and returns them as an ArrayList.","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"SelwynAng"},"content":" * @return An ArrayList of Task objects retrieved from the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue with file retrieval or if the file is corrupted.","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"SelwynAng"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"SelwynAng"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"SelwynAng"},"content":" DateTimeFormatter dateTimeFormat \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"SelwynAng"},"content":" Scanner scanner \u003d new Scanner(this.file);","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"SelwynAng"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"SelwynAng"},"content":" String taskDesc \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"SelwynAng"},"content":" String[] taskDescArr \u003d taskDesc.split(\" \", 3);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"SelwynAng"},"content":" String taskTitle \u003d taskDescArr[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"SelwynAng"},"content":" String taskDoneStatus \u003d taskDescArr[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"SelwynAng"},"content":" String taskDetails \u003d taskDescArr[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"SelwynAng"},"content":" Task taskToAdd;","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"SelwynAng"},"content":" switch(taskTitle) {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"SelwynAng"},"content":" case(\"[T]\"):","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"SelwynAng"},"content":" taskToAdd \u003d new Todo(taskDetails);","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"SelwynAng"},"content":" if (taskDoneStatus.equals(\"[X]\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"SelwynAng"},"content":" taskToAdd.markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"SelwynAng"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"SelwynAng"},"content":" case(\"[D]\"):","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"SelwynAng"},"content":" String[] taskDetailsArr \u003d taskDetails.split(\"\\\\(by:\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"SelwynAng"},"content":" taskToAdd \u003d new Deadline(taskDetailsArr[0].trim(),","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime.parse(taskDetailsArr[1].split(\"\\\\)\")[0].trim(),","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"SelwynAng"},"content":" dateTimeFormat));","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"SelwynAng"},"content":" if (taskDoneStatus.equals(\"[X]\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"SelwynAng"},"content":" taskToAdd.markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"SelwynAng"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"SelwynAng"},"content":" case(\"[E]\"):","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"SelwynAng"},"content":" String[] taskDetailsArrOne \u003d taskDetails.split(\"\\\\(from:\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"SelwynAng"},"content":" String taskDetailsForEvent \u003d taskDetailsArrOne[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"SelwynAng"},"content":" String[] taskDetailsArrTwo \u003d taskDetailsArrOne[1].split(\"to:\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"SelwynAng"},"content":" taskToAdd \u003d new Event(taskDetailsForEvent.trim(),","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime.parse(taskDetailsArrTwo[0].trim(), dateTimeFormat),","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime.parse(taskDetailsArrTwo[1].split(\"\\\\)\")[0].trim(),","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"SelwynAng"},"content":" dateTimeFormat));","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"SelwynAng"},"content":" if (taskDoneStatus.equals(\"[X]\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"SelwynAng"},"content":" taskToAdd.markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"SelwynAng"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"SelwynAng"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"File is corrupted!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"SelwynAng"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"SelwynAng"},"content":" System.out.println(\"File cannot be found!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"SelwynAng"},"content":" return taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":139}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" * The Ui class handles user interface-related operations and generates user-friendly messages for the Duke chatbot.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" private static final String NAME \u003d \"DUKE PRINCE\";","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" * Generates a representation of the task list, optionally filtered by a search query.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The task list to be represented.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * @param isMatching Whether the task list is filtered by a search query.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * @return A string representation of the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" public static String printTaskList(TaskList taskList, boolean isMatching) {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" return taskList.taskListRepresentation(isMatching);","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" * Generates a message indicating that a task has been successfully added to the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" * @param addedTask The task that has been added.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" * @param noOfTasksAfterAdding The number of tasks in the list after adding the new task.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" * @return A message indicating the successful addition of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" public static String printAddedTask(Task addedTask, int noOfTasksAfterAdding) {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" String strToReturn \u003d \"\";","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d \"Got it. I\u0027ve added this task: \\n\" + addedTask.toString() + \"\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" if (noOfTasksAfterAdding \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d \"Now you have \" + noOfTasksAfterAdding + \" task in the list.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d \"Now you have \" + noOfTasksAfterAdding + \" tasks in the list.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" return strToReturn;","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" * Generates a message indicating that the done status of a task has been changed.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" * @param taskToChange The task whose done status has been changed.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" * @param isDone Whether the task is marked as done or not.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" * @return A message indicating the change in task done status.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" public static String printChangeTaskDoneStatus(Task taskToChange, boolean isDone) {","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" String strToReturn \u003d \"\";","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" if (isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d \"Nice! I\u0027ve marked this task done:\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d \"OK, I\u0027ve marked this task as not done yet:\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d taskToChange.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" return strToReturn;","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":" * Generates a message indicating that a task has been successfully deleted from the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" * @param deletedTask The task that has been deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" * @param numOfTasksLeft The number of tasks remaining in the list after deletion.","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" * @return A message indicating the successful deletion of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" public static String printDeletedTask(Task deletedTask, int numOfTasksLeft) {","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" String strToReturn \u003d \"\";","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d \"Noted. I\u0027ve removed this task:\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d deletedTask.toString() + \"\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"SelwynAng"},"content":" if (numOfTasksLeft \u003d\u003d 1 || numOfTasksLeft \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d \"Now you have \" + numOfTasksLeft + \" task in the list.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d \"Now you have \" + numOfTasksLeft + \" tasks in the list.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"SelwynAng"},"content":" return strToReturn;","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"SelwynAng"},"content":" * Generates a welcome greeting message.","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"SelwynAng"},"content":" * @return A welcome message for the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"SelwynAng"},"content":" public static String printGreet() {","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"SelwynAng"},"content":" return \"Hello! I\u0027m \" + NAME + \"\\n\" + \"What can I do for you?\";","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"SelwynAng"},"content":" * Generates a farewell message for when the user exits the application.","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"SelwynAng"},"content":" * @return A farewell message.","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"SelwynAng"},"content":" public static String printExit() {","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"SelwynAng"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"SelwynAng"},"content":" * Generates an error message for the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"SelwynAng"},"content":" * @param errorMsg The error message to display.","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"SelwynAng"},"content":" * @return An error message for the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"SelwynAng"},"content":" public static String printError(String errorMsg) {","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"SelwynAng"},"content":" return \"OOPS! \" + errorMsg;","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":112}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" * The AddCommand class represents a command for adding tasks to the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" private TaskType taskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" private String addCommandDetails;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * Constructs an AddCommand with the specified task type and command details.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * @param taskType The type of task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" * @param addCommandDetails The details of the task to be added.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" public AddCommand(TaskType taskType, String addCommandDetails) {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" this.addCommandDetails \u003d addCommandDetails;","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * Executes the AddCommand by adding a task to the task list and saving it to storage.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The task list to which the task will be added.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" * @param storage The storage object used for saving tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" * @return A message indicating the successful addition of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an error adding the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" public String execute(TaskList taskList, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" Task addedTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" addedTask \u003d taskList.addTask(this.taskType, this.addCommandDetails);","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" return Ui.printAddedTask(addedTask, taskList.getNumTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":51}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" * The Command class represents a generic command that can be executed in the Duke chatbot.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" * Executes the command by performing specific actions on the task list and storage.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The task list to which the command is applied.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * @param storage The storage object used for saving or retrieving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" * @return A string representing the result of executing the command.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an error executing the command.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" public abstract String execute(TaskList taskList, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" * Toggles the exit status of the command.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" * If set to true, it indicates that the command should exit the application.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" public void changeExitStatus() {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" this.isExit \u003d !this.isExit;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" * Checks if the command should exit the application.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" * @return true if the command should exit, false otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" return this.isExit;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":41}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * The DeleteCommand class represents a command for deleting tasks from the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" private String taskToDeleteDetails;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * Constructs a DeleteCommand with the specified details of the task to be deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" * @param args The details of the task to be deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" public DeleteCommand(String args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" this.taskToDeleteDetails \u003d args;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" * Executes the DeleteCommand by deleting a task from the task list and saving it to storage.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The task list from which the task will be deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" * @param storage The storage object used for saving tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" * @return A message indicating the successful deletion of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an error deleting the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" public String execute(TaskList taskList, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" int numOfTasksLeft;","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" Task deletedTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" deletedTask \u003d taskList.deleteTask(taskToDeleteDetails);","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" numOfTasksLeft \u003d taskList.getNumTasks();","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" return Ui.printDeletedTask(deletedTask, numOfTasksLeft);","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":48}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" * The ExitCommand class represents a command for exiting the Duke chatbot application.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" * Executes the ExitCommand by changing the exit status and returning an exit message.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The task list (not used in this command).","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" * @param storage The storage object (not used in this command).","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * @return A message indicating the application should exit.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" public String execute(TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" super.changeExitStatus();","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" return Ui.printExit();","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":25}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * The FindCommand class represents a command for finding tasks that match a search query.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" private String taskToFindDetails;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" * Constructs a FindCommand with the specified search query.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" * @param args The search query for finding tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" public FindCommand(String args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" this.taskToFindDetails \u003d args;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" * Executes the FindCommand by searching for tasks that match the given query.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The task list to search within.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * @param storage The storage object (not used in this command).","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * @return A message displaying the tasks that match the search query.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an error executing the command.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" public String execute(TaskList taskList, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d taskList.findTasks(taskToFindDetails);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" TaskList taskListWithFoundTasks \u003d new TaskList(foundTasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" return Ui.printTaskList(taskListWithFoundTasks, true);","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"SelwynAng":42}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" * The ListCommand class represents a command for listing all tasks in the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" * Executes the ListCommand by displaying all tasks in the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The task list to be displayed.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" * @param storage The storage object (not used in this command).","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" * @return A message displaying all tasks in the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" public String execute(TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" return Ui.printTaskList(taskList, false);","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":24}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * The MarkCommand class represents a command for marking tasks as done or undone in the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" private boolean toMark;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" private String taskToMarkDetails;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" * Constructs a MarkCommand with the specified task details and whether to mark as done or undone.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" * @param args The details of the task to be marked.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * @param toMark Whether to mark the task as done (true) or undone (false).","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" public MarkCommand(String args, boolean toMark) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" this.taskToMarkDetails \u003d args;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" this.toMark \u003d toMark;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" * Executes the MarkCommand by changing the done status of a task and saving it to storage.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * @param taskList The task list to which the task belongs.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" * @param storage The storage object used for saving tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" * @return A message indicating the successful change in task done status.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an error executing the command.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" public String execute(TaskList taskList, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" Task taskToChange;","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" taskToChange \u003d taskList.changeTaskDoneStatus(this.taskToMarkDetails, this.toMark);","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" storage.saveTasks(taskList.getTaskList());","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" return Ui.printChangeTaskDoneStatus(taskToChange, this.toMark);","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":49}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" * The Deadline class represents a task with a specific end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" private LocalDateTime endDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Deadline object with the specified description and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" * @param detail The description of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" * @param endDateTime The end date and time of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" public Deadline(String detail, LocalDateTime endDateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" super(detail);","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" this.endDateTime \u003d endDateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" * Returns a string representation of the Deadline object, including its completion status, description,","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" * and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" * @return A string representation of the Deadline object.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" return \"[D] \" + super.toString() + \" (by: \" + super.getDisplayDateTime(this.endDateTime) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":34}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" * The Event class represents a task that occurs during a specified time range.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" * It extends the Task class and includes information about the start and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" private LocalDateTime startDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" private LocalDateTime endDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" * Constructs an Event object with the specified details, start date and time, and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * @param detail The details of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" * @param startDateTime The start date and time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @param endDateTime The end date and time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" public Event(String detail, LocalDateTime startDateTime, LocalDateTime endDateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" super(detail);","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" this.startDateTime \u003d startDateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" this.endDateTime \u003d endDateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" * Returns a string representation of the Event object, including its details and time range.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" * @return A string representation of the Event object.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" return \"[E] \" + super.toString() + \" (from: \" + super.getDisplayDateTime(this.startDateTime)","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" + \" to: \" + super.getDisplayDateTime(this.endDateTime) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":39}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" * The Task class represents a task with a description and completion status.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" private String detail;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Task object with the specified description and sets its completion status to false.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * @param detail The description of the duke.task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" public Task(String detail) {","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" this.detail \u003d detail;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" * Returns a formatted display string of the provided LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" * @param dateTime The LocalDateTime object to be formatted.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" * @return A formatted date and time string.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" public String getDisplayDateTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" DateTimeFormatter displayFormat \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" return dateTime.format(displayFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" * Returns a string representation of the Task object, including its completion status and description.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" * @return A string representation of the Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" return \"[X] \" + this.detail;","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" return \"[-] \" + this.detail;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" * Marks the task as done by setting its completion status to true.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" public void markDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":" * Marks the task as undone by setting its completion status to false.","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" * Returns the done status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" * @return A boolean value that corresponds to whether the task is done or not.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" return this.isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":73}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" * The TaskList class manages a list of tasks and provides methods for adding, creating, deleting, and modifying tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"public class TaskList {","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" /** The list of tasks. */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" /** The number of tasks in the list. */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" private int numTasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" * Constructs a TaskList object with the specified list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" * @param tasks The list of tasks to be managed.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" this.numTasks \u003d tasks.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" * Adds a new task of the specified type with the given arguments to the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" * @param taskType The type of task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":" * @param args The arguments for creating the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SelwynAng"},"content":" * @return The added Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If there is an issue with task creation or task type is unsupported.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"SelwynAng"},"content":" public Task addTask(TaskType taskType, String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"SelwynAng"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"SelwynAng"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"SelwynAng"},"content":" case TODO:","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"SelwynAng"},"content":" newTask \u003d createTodo(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"SelwynAng"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"SelwynAng"},"content":" newTask \u003d createDeadline(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"SelwynAng"},"content":" case EVENT:","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"SelwynAng"},"content":" newTask \u003d createEvent(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"SelwynAng"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"SelwynAng"},"content":" default:","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"I can\u0027t create this task type!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"SelwynAng"},"content":" this.tasks.add(newTask);","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"SelwynAng"},"content":" this.numTasks++;","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"SelwynAng"},"content":" return newTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"SelwynAng"},"content":" * Creates a new Todo task with the given description.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"SelwynAng"},"content":" * @param args The description for the Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"SelwynAng"},"content":" * @return The created Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the description is missing.","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"SelwynAng"},"content":" public Todo createTodo(String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"SelwynAng"},"content":" if (args \u003d\u003d null || args.isEmpty()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Todo tasks should be created in this format: todo [name]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":77,"author":{"gitId":"SelwynAng"},"content":" return new Todo(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":79,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":81,"author":{"gitId":"SelwynAng"},"content":" * Creates a new Deadline task with the given description and end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"SelwynAng"},"content":" * @param args The description and end date/time for the Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"SelwynAng"},"content":" * @return The created Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the format is incorrect or the end date/time is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":87,"author":{"gitId":"SelwynAng"},"content":" public Deadline createDeadline(String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"SelwynAng"},"content":" DateTimeFormatter dateTimeFormat \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"SelwynAng"},"content":" String[] detailsAndDeadline \u003d args.split(\"/by\", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":91,"author":{"gitId":"SelwynAng"},"content":" if (detailsAndDeadline.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Deadline tasks should be created in this format: deadline [name] /by [date]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":94,"author":{"gitId":"SelwynAng"},"content":" String details \u003d detailsAndDeadline[0].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":95,"author":{"gitId":"SelwynAng"},"content":" String endDateTime \u003d detailsAndDeadline[1].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":96,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime formattedEndDateTime \u003d LocalDateTime.parse(endDateTime, dateTimeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"SelwynAng"},"content":" return new Deadline(details, formattedEndDateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"SelwynAng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Invalid deadline time format. Please use dd-MM-yyyy HHmm format!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":102,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":103,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":104,"author":{"gitId":"SelwynAng"},"content":" * Creates a new Event task with the given description and start/end date and time.","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"SelwynAng"},"content":" * @param args The description and start/end date/time for the Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"SelwynAng"},"content":" * @return The created Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the format is incorrect or the date/time is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":110,"author":{"gitId":"SelwynAng"},"content":" public Event createEvent(String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"SelwynAng"},"content":" DateTimeFormatter dateTimeFormat \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"SelwynAng"},"content":" String eventMsg \u003d \"Event tasks should be created in this format: \"","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"SelwynAng"},"content":" + \"event [name] /from [start time] /to [end time]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"SelwynAng"},"content":" String[] detailsAndStartEnd \u003d args.split(\"/from\", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":117,"author":{"gitId":"SelwynAng"},"content":" if (detailsAndStartEnd.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":118,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(eventMsg);","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":120,"author":{"gitId":"SelwynAng"},"content":" String details \u003d detailsAndStartEnd[0].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":121,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":122,"author":{"gitId":"SelwynAng"},"content":" String[] startAndEnd \u003d detailsAndStartEnd[1].split(\"/to\", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":123,"author":{"gitId":"SelwynAng"},"content":" if (startAndEnd.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":124,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(eventMsg);","lastModifiedDate":"2023-08-22"},{"lineNumber":125,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":126,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":127,"author":{"gitId":"SelwynAng"},"content":" String start \u003d startAndEnd[0].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":128,"author":{"gitId":"SelwynAng"},"content":" String end \u003d startAndEnd[1].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":129,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime formattedStartDateTime \u003d LocalDateTime.parse(start, dateTimeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"SelwynAng"},"content":" LocalDateTime formattedEndDateTime \u003d LocalDateTime.parse(end, dateTimeFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"SelwynAng"},"content":" return new Event(details, formattedStartDateTime, formattedEndDateTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"SelwynAng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Invalid event time format. Please use dd-MM-yyyy HHmm format!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":136,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":137,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":138,"author":{"gitId":"SelwynAng"},"content":" * Deletes a task from the list based on the given task number.","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"SelwynAng"},"content":" * @param args The task number to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"SelwynAng"},"content":" * @return The deleted Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the task number is invalid or in an incorrect format.","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":144,"author":{"gitId":"SelwynAng"},"content":" public Task deleteTask(String args) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"SelwynAng"},"content":" int taskNumber;","lastModifiedDate":"2023-08-22"},{"lineNumber":146,"author":{"gitId":"SelwynAng"},"content":" Task deletedTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":149,"author":{"gitId":"SelwynAng"},"content":" taskNumber \u003d Integer.parseInt(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":150,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":151,"author":{"gitId":"SelwynAng"},"content":" if (taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-22"},{"lineNumber":152,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Number must be more 1 or more!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":153,"author":{"gitId":"SelwynAng"},"content":" } else if (this.exceedsSizeOfTaskList(taskNumber)) {","lastModifiedDate":"2023-08-22"},{"lineNumber":154,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Number is higher than current size of task list!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":156,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":157,"author":{"gitId":"SelwynAng"},"content":" deletedTask \u003d this.tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"SelwynAng"},"content":" this.numTasks--;","lastModifiedDate":"2023-08-22"},{"lineNumber":159,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":160,"author":{"gitId":"SelwynAng"},"content":" return deletedTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"SelwynAng"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":162,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Deleting task should be in this format: delete [task number]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":164,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":165,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":166,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":167,"author":{"gitId":"SelwynAng"},"content":" * Changes the done status of a task based on the given task number and state.","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"SelwynAng"},"content":" * @param args The task number to be marked/unmarked and the state.","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"SelwynAng"},"content":" * @param toBeDone The desired state (true for done, false for undone).","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"SelwynAng"},"content":" * @return The Task object with the modified done status.","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"SelwynAng"},"content":" * @throws DukeException If the task number is invalid or in an incorrect format.","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":174,"author":{"gitId":"SelwynAng"},"content":" public Task changeTaskDoneStatus(String args, boolean toBeDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"SelwynAng"},"content":" int taskNumber;","lastModifiedDate":"2023-08-22"},{"lineNumber":176,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":177,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":178,"author":{"gitId":"SelwynAng"},"content":" taskNumber \u003d Integer.parseInt(args);","lastModifiedDate":"2023-08-22"},{"lineNumber":179,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":180,"author":{"gitId":"SelwynAng"},"content":" if (taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-22"},{"lineNumber":181,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Number must be more 1 or more!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":182,"author":{"gitId":"SelwynAng"},"content":" } else if (this.exceedsSizeOfTaskList(taskNumber)) {","lastModifiedDate":"2023-08-22"},{"lineNumber":183,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Number is higher than current size of task list!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":185,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":186,"author":{"gitId":"SelwynAng"},"content":" Task taskToChange \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"SelwynAng"},"content":" if (toBeDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"SelwynAng"},"content":" taskToChange.markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":191,"author":{"gitId":"SelwynAng"},"content":" taskToChange.markUndone();","lastModifiedDate":"2023-08-29"},{"lineNumber":192,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":193,"author":{"gitId":"SelwynAng"},"content":" return taskToChange;","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"SelwynAng"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":195,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(\"Marking/unmarking tasks should be in this format: mark/unmark [task number]\");","lastModifiedDate":"2023-08-29"},{"lineNumber":196,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":197,"author":{"gitId":"SelwynAng"},"content":" throw new DukeException(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":199,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":200,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":201,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":202,"author":{"gitId":"SelwynAng"},"content":" * Displays the list of tasks to the console.","lastModifiedDate":"2023-08-29"},{"lineNumber":203,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"SelwynAng"},"content":" * @param isMatching Determine which statements to print (true for matching tasks, false for all tasks)","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":206,"author":{"gitId":"SelwynAng"},"content":" public String taskListRepresentation(boolean isMatching) {","lastModifiedDate":"2023-09-06"},{"lineNumber":207,"author":{"gitId":"SelwynAng"},"content":" String strToReturn \u003d \"\";","lastModifiedDate":"2023-09-06"},{"lineNumber":208,"author":{"gitId":"SelwynAng"},"content":" if (isMatching) {","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"SelwynAng"},"content":" if (this.numTasks \u003d\u003d 0) {","lastModifiedDate":"2023-09-06"},{"lineNumber":210,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d \"There are no matching tasks in your list!\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":211,"author":{"gitId":"SelwynAng"},"content":" } else if (this.numTasks \u003d\u003d 1) {","lastModifiedDate":"2023-09-06"},{"lineNumber":212,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d \"Here is the matching task in your list:\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":213,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":215,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"SelwynAng"},"content":" if (this.numTasks \u003d\u003d 0) {","lastModifiedDate":"2023-09-06"},{"lineNumber":218,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d \"You have no tasks in your list at the moment!\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":219,"author":{"gitId":"SelwynAng"},"content":" } else if (this.numTasks \u003d\u003d 1) {","lastModifiedDate":"2023-09-06"},{"lineNumber":220,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d \"Here is the task in your list:\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":221,"author":{"gitId":"SelwynAng"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":222,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":223,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":224,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c this.numTasks; i++) {","lastModifiedDate":"2023-08-21"},{"lineNumber":227,"author":{"gitId":"SelwynAng"},"content":" int bullet \u003d i + 1;","lastModifiedDate":"2023-08-21"},{"lineNumber":228,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d bullet + \". \";","lastModifiedDate":"2023-09-06"},{"lineNumber":229,"author":{"gitId":"SelwynAng"},"content":" strToReturn +\u003d this.tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":230,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":231,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":232,"author":{"gitId":"SelwynAng"},"content":" return strToReturn;","lastModifiedDate":"2023-09-06"},{"lineNumber":233,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":234,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":235,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"SelwynAng"},"content":" * Finds the tasks which details contains the given string parameter","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"SelwynAng"},"content":" * @param taskToFindDetails The details of the task to find","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"SelwynAng"},"content":" * @return The ArrayList of tasks that match the string parameter","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"SelwynAng"},"content":" public ArrayList\u003cTask\u003e findTasks(String taskToFindDetails) {","lastModifiedDate":"2023-08-31"},{"lineNumber":242,"author":{"gitId":"SelwynAng"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"SelwynAng"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"SelwynAng"},"content":" Task taskInFocus \u003d this.tasks.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"SelwynAng"},"content":" if (taskInFocus.toString().contains(taskToFindDetails)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"SelwynAng"},"content":" foundTasks.add(taskInFocus);","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":250,"author":{"gitId":"SelwynAng"},"content":" return foundTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":251,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":252,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":253,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":254,"author":{"gitId":"SelwynAng"},"content":" * Checks if the given index exceeds the size of the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":255,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":256,"author":{"gitId":"SelwynAng"},"content":" * @param index The index to be checked.","lastModifiedDate":"2023-08-29"},{"lineNumber":257,"author":{"gitId":"SelwynAng"},"content":" * @return True if the index exceeds the task list size, false otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":258,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":259,"author":{"gitId":"SelwynAng"},"content":" public boolean exceedsSizeOfTaskList(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":260,"author":{"gitId":"SelwynAng"},"content":" return index \u003e numTasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":261,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":262,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":263,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":264,"author":{"gitId":"SelwynAng"},"content":" * Retrieves the list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":265,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":266,"author":{"gitId":"SelwynAng"},"content":" * @return The ArrayList of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":267,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":268,"author":{"gitId":"SelwynAng"},"content":" public ArrayList\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":269,"author":{"gitId":"SelwynAng"},"content":" return this.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":270,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":271,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":272,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":273,"author":{"gitId":"SelwynAng"},"content":" * Retrieves the number of tasks in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":274,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":275,"author":{"gitId":"SelwynAng"},"content":" * @return The number of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":276,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":277,"author":{"gitId":"SelwynAng"},"content":" public int getNumTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":278,"author":{"gitId":"SelwynAng"},"content":" return this.numTasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":279,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":280,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":280}},{"path":"src/main/java/duke/task/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":" * This is the TaskType enum","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":" * @author Selwyn","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"public enum TaskType {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"SelwynAng":9}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":" * The Todo class represents a task without a specific due date or time.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":" * @author selwyn","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" * Constructs a Todo object with the specified description.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" * @param detail The description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" public Todo(String detail) {","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" super(detail);","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" * Returns a string representation of the Todo object, including its completion status and description.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" * @return A string representation of the Todo object.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" return \"[T] \" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":27}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"SelwynAng":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"SelwynAng":19}},{"path":"src/test/java/duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"public class DukeTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" public void dummyTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" public void anotherDummyTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"SelwynAng":17}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" public void testParseCommandForExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" Command c \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" c \u003d parser.parseCommand(\"bye\");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" assertEquals(c.getClass(), new ExitCommand().getClass());","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"SelwynAng"},"content":" public void testParseCommandForList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"SelwynAng"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"SelwynAng"},"content":" Command c \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"SelwynAng"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"SelwynAng"},"content":" c \u003d parser.parseCommand(\"list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"SelwynAng"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"SelwynAng"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"SelwynAng"},"content":" assertEquals(c.getClass(), new ListCommand().getClass());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"SelwynAng":36}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"SelwynAng"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"SelwynAng"},"content":" public void testMarkDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"SelwynAng"},"content":" Task testTask \u003d new Task(\"testTask\");","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"SelwynAng"},"content":" testTask.markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"SelwynAng"},"content":" assertTrue(testTask.getIsDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"SelwynAng"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"SelwynAng"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"SelwynAng"},"content":" public void testMarkUndone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":" Task testTask \u003d new Task(\"testTask\");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"SelwynAng"},"content":" testTask.markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"SelwynAng"},"content":" testTask.markUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"SelwynAng"},"content":" assertFalse(testTask.getIsDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"SelwynAng"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"SelwynAng"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"SelwynAng":23}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"SelwynAng"},"content":"todo drink tea","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"SelwynAng"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"SelwynAng"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"SelwynAng"},"content":"event project meeting /from Tues 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"SelwynAng"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"SelwynAng"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"SelwynAng"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"SelwynAng":7}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"SelwynAng"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"SelwynAng":1,"-":20}}] diff --git a/SelwynAng_ip_master/commits.json b/SelwynAng_ip_master/commits.json index d34cdd5c..468819de 100644 --- a/SelwynAng_ip_master/commits.json +++ b/SelwynAng_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"SelwynAng":[{"date":"2023-08-21","commitResults":[{"hash":"60a0618b1a4f5c3aac2dee62e4a544ba17a3c53b","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"15204c02961a6973c0dd6ff68efba830ead7534b","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":3}}},{"hash":"32ac95fa0afc40bab2c8f242cb5260ff2c8e40e6","isMergeCommit":false,"messageTitle":"Added adding and listing tasks functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":15}}},{"hash":"8a6b8f63b9ddb2d2476a327a5b5cf56c9a107271","isMergeCommit":false,"messageTitle":"Added functionality for marking tasks done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":17}}},{"hash":"836aa1b79deaeee554f45d395baf4c8c9ee62f9b","isMergeCommit":false,"messageTitle":"Added support for todos, deadlines, events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":360,"deletions":216},"bat":{"insertions":21,"deletions":21},"sh":{"insertions":37,"deletions":37},"md":{"insertions":62,"deletions":62}}},{"hash":"7fcc559b4c484ca7d3f796c102062dd7770283b9","isMergeCommit":false,"messageTitle":"Added test using the I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":2,"deletions":9},"sh":{"insertions":37,"deletions":37}}},{"hash":"e117ddfb5d4a2044efd1395261f363541f759260","isMergeCommit":false,"messageTitle":"Added handling of exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":35}}}]},{"date":"2023-08-22","commitResults":[{"hash":"5ca48d8d8f03be72b7b91356458a6ec02d46c8ff","isMergeCommit":false,"messageTitle":"Added functionality for deleting tasks, more error handling","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":52},"sh":{"insertions":0,"deletions":0}}},{"hash":"f9972667bf74b8288ed951e513386f771c9aed94","isMergeCommit":false,"messageTitle":"Added enums and refactored code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":138}}},{"hash":"85ed2cac3f431ea385bf9965fe3f73c70714dd39","isMergeCommit":false,"messageTitle":"Updated createTodo method to handle empty args","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"af05ecc4f1d77b057be69fe4d7a9617da95f79fe","isMergeCommit":false,"messageTitle":"Change indentation for Switch statments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":39}}}]},{"date":"2023-08-29","commitResults":[{"hash":"c39e81737d66ced090e0908670486d8f83bcecd8","isMergeCommit":false,"messageTitle":"Add save and retrive task functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":5}}},{"hash":"ba6266cdd5126a1aede08896bc9d8acf51407995","isMergeCommit":false,"messageTitle":"Add Date and Time parsing functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":32}}},{"hash":"fe7fe4327a0076c943363ee358d1ac29da992174","isMergeCommit":false,"messageTitle":"Refactor code to extract out Storage, Parser, Ui, Command classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":610,"deletions":254}}},{"hash":"c38c9812f2582dfa5a508c05d0c620769a5cfd62","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":25},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"bd9c236a4a79f04e90e5fafa75bd2dd04ed5e63a","isMergeCommit":false,"messageTitle":"Change indention of switch statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":30}}},{"hash":"ca665611e2b4d5874439bf4213c7199e4c283c6b","isMergeCommit":false,"messageTitle":"Build the project","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"63803755269637bc5fbfb5f758fe7b988e35fe9b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-A-Gradle Merge branch add-gradle support into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a2521244b645b5126dc2c8d77abfb3fc65a3580c","isMergeCommit":false,"messageTitle":"Set up Gradle to run Duke and unit tests","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":17,"deletions":0}}},{"hash":"cf077100de6f4704710256b64a59598d20f581a8","isMergeCommit":false,"messageTitle":"Edit String output for certain methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":16}}}]},{"date":"2023-08-30","commitResults":[{"hash":"695fe97f858a16034017ab1f97e1dc7511a3c2fc","isMergeCommit":false,"messageTitle":"Add getIsDone method to Task file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"67810f89f857731526055b45710e1ec561ae2429","isMergeCommit":false,"messageTitle":"Add unit testing for Parser and Task classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"bfb9b6e5a0d1b0152a8625307edba0c1c3c337f8","isMergeCommit":false,"messageTitle":"Change Javadocs for greet method in Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"269ff4f1e5ecdadd8685ce93b5f3cdf2113cf18b","isMergeCommit":false,"messageTitle":"Tweak code to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":7}}},{"hash":"96396fb7e12acf8d596161f6230aa2c2ebebe8f1","isMergeCommit":false,"messageTitle":"Add Find Command functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":17}}},{"hash":"3fa00a4f651f79b7eedf4a2deedfe0f8f03f0782","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 Merge branch \u0027branch-Level-7\u0027 into master to add save and retrieve tasks functionality","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"9cb1d33252824a840375460196eb89e79a4a82f5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027 Merge branch-Level-8 into master to add date and timing parsing functionality","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"6bc5db02374b508e5467f7d7ad3127e34c804a43","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027 Merge branch-A-MoreOOP into master to make code more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"3c5fdc25fba3160161704287d21dce7fc5f0aaed","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027 Merge branch-A-Packages into master to add packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"3a38ce1ce07a3accf5fabff106238b031e4091b5","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 Add gradle support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2744fbb1db350e8ab94c40abfb10d0332647866d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027 Add gradle functionality","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7309cde5fdf46adfd9174accb5d66a443f1ba0a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027 Add Java testing","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"cba99fb9b5d7219fdda9ffec2d4ef6167a1daabc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027 Merge branch-A-JavaDoc into master to update Javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"00c1208e659e0ed731fde222ab8ae6ec573ac5c1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027 Merge branch-A-CodingStandard into master to tweak code to comply with a coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"b6fc7337f50d1ef9269a01e846a44b97a81d0d72","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027 Merge branch-Level-9 into master to add find command functionality","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"c85d744992d8f023270d45a697cd8d8e7e185c81","isMergeCommit":false,"messageTitle":"Implement CheckStyle rules for all files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":81,"deletions":49}}},{"hash":"01e938de1166e08b5fa7f46e6bc6955e0c8a7d76","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027 Merge branch-A-CheckStyle into master","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"SelwynAng":{"java":1250,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":6,"txt":7}},"authorContributionVariance":{"SelwynAng":163378.94},"authorDisplayNameMap":{"SelwynAng":"CS2103T-F11-1 ANG ..LWYN"}} +{"authorDailyContributionsMap":{"SelwynAng":[{"date":"2023-08-21","commitResults":[{"hash":"60a0618b1a4f5c3aac2dee62e4a544ba17a3c53b","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"15204c02961a6973c0dd6ff68efba830ead7534b","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":3}}},{"hash":"32ac95fa0afc40bab2c8f242cb5260ff2c8e40e6","isMergeCommit":false,"messageTitle":"Added adding and listing tasks functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":15}}},{"hash":"8a6b8f63b9ddb2d2476a327a5b5cf56c9a107271","isMergeCommit":false,"messageTitle":"Added functionality for marking tasks done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":17}}},{"hash":"836aa1b79deaeee554f45d395baf4c8c9ee62f9b","isMergeCommit":false,"messageTitle":"Added support for todos, deadlines, events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":360,"deletions":216},"bat":{"insertions":21,"deletions":21},"sh":{"insertions":37,"deletions":37},"md":{"insertions":62,"deletions":62}}},{"hash":"7fcc559b4c484ca7d3f796c102062dd7770283b9","isMergeCommit":false,"messageTitle":"Added test using the I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":2,"deletions":9},"sh":{"insertions":37,"deletions":37}}},{"hash":"e117ddfb5d4a2044efd1395261f363541f759260","isMergeCommit":false,"messageTitle":"Added handling of exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":35}}}]},{"date":"2023-08-22","commitResults":[{"hash":"5ca48d8d8f03be72b7b91356458a6ec02d46c8ff","isMergeCommit":false,"messageTitle":"Added functionality for deleting tasks, more error handling","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":52},"sh":{"insertions":0,"deletions":0}}},{"hash":"f9972667bf74b8288ed951e513386f771c9aed94","isMergeCommit":false,"messageTitle":"Added enums and refactored code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":138}}},{"hash":"85ed2cac3f431ea385bf9965fe3f73c70714dd39","isMergeCommit":false,"messageTitle":"Updated createTodo method to handle empty args","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"af05ecc4f1d77b057be69fe4d7a9617da95f79fe","isMergeCommit":false,"messageTitle":"Change indentation for Switch statments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":39}}}]},{"date":"2023-08-29","commitResults":[{"hash":"c39e81737d66ced090e0908670486d8f83bcecd8","isMergeCommit":false,"messageTitle":"Add save and retrive task functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":5}}},{"hash":"ba6266cdd5126a1aede08896bc9d8acf51407995","isMergeCommit":false,"messageTitle":"Add Date and Time parsing functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":32}}},{"hash":"fe7fe4327a0076c943363ee358d1ac29da992174","isMergeCommit":false,"messageTitle":"Refactor code to extract out Storage, Parser, Ui, Command classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":610,"deletions":254}}},{"hash":"c38c9812f2582dfa5a508c05d0c620769a5cfd62","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":25},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"bd9c236a4a79f04e90e5fafa75bd2dd04ed5e63a","isMergeCommit":false,"messageTitle":"Change indention of switch statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":30}}},{"hash":"ca665611e2b4d5874439bf4213c7199e4c283c6b","isMergeCommit":false,"messageTitle":"Build the project","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"63803755269637bc5fbfb5f758fe7b988e35fe9b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-A-Gradle Merge branch add-gradle support into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a2521244b645b5126dc2c8d77abfb3fc65a3580c","isMergeCommit":false,"messageTitle":"Set up Gradle to run Duke and unit tests","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":17,"deletions":0}}},{"hash":"cf077100de6f4704710256b64a59598d20f581a8","isMergeCommit":false,"messageTitle":"Edit String output for certain methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":16}}}]},{"date":"2023-08-30","commitResults":[{"hash":"695fe97f858a16034017ab1f97e1dc7511a3c2fc","isMergeCommit":false,"messageTitle":"Add getIsDone method to Task file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"67810f89f857731526055b45710e1ec561ae2429","isMergeCommit":false,"messageTitle":"Add unit testing for Parser and Task classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"bfb9b6e5a0d1b0152a8625307edba0c1c3c337f8","isMergeCommit":false,"messageTitle":"Change Javadocs for greet method in Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"269ff4f1e5ecdadd8685ce93b5f3cdf2113cf18b","isMergeCommit":false,"messageTitle":"Tweak code to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":7}}},{"hash":"96396fb7e12acf8d596161f6230aa2c2ebebe8f1","isMergeCommit":false,"messageTitle":"Add Find Command functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":17}}},{"hash":"3fa00a4f651f79b7eedf4a2deedfe0f8f03f0782","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 Merge branch \u0027branch-Level-7\u0027 into master to add save and retrieve tasks functionality","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"9cb1d33252824a840375460196eb89e79a4a82f5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027 Merge branch-Level-8 into master to add date and timing parsing functionality","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"6bc5db02374b508e5467f7d7ad3127e34c804a43","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027 Merge branch-A-MoreOOP into master to make code more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"3c5fdc25fba3160161704287d21dce7fc5f0aaed","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027 Merge branch-A-Packages into master to add packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"3a38ce1ce07a3accf5fabff106238b031e4091b5","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 Add gradle support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2744fbb1db350e8ab94c40abfb10d0332647866d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027 Add gradle functionality","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7309cde5fdf46adfd9174accb5d66a443f1ba0a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027 Add Java testing","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"cba99fb9b5d7219fdda9ffec2d4ef6167a1daabc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027 Merge branch-A-JavaDoc into master to update Javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"00c1208e659e0ed731fde222ab8ae6ec573ac5c1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027 Merge branch-A-CodingStandard into master to tweak code to comply with a coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"b6fc7337f50d1ef9269a01e846a44b97a81d0d72","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027 Merge branch-Level-9 into master to add find command functionality","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"c85d744992d8f023270d45a697cd8d8e7e185c81","isMergeCommit":false,"messageTitle":"Implement CheckStyle rules for all files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":81,"deletions":49}}},{"hash":"01e938de1166e08b5fa7f46e6bc6955e0c8a7d76","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027 Merge branch-A-CheckStyle into master","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"b06afafde99d67a473bf1ff11921666565bbe757","isMergeCommit":false,"messageTitle":"Implement GUI for Duke application","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":22,"deletions":1},"txt":{"insertions":0,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":384,"deletions":219}}},{"hash":"570126c35bfef94ccb1727536174e7f86f8ccc60","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027 Merge Level-10 branch into master","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"SelwynAng":{"java":1415,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":27,"txt":7}},"authorContributionVariance":{"SelwynAng":166005.66},"authorDisplayNameMap":{"SelwynAng":"CS2103T-F11-1 ANG ..LWYN"}} diff --git a/Seonlo99_ip_master/authorship.json b/Seonlo99_ip_master/authorship.json index 130cfa11..9786999c 100644 --- a/Seonlo99_ip_master/authorship.json +++ b/Seonlo99_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":"Seonlo99"},"content":" testImplementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-09-01"},{"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":"Seonlo99"},"content":" mainClass.set(\"nobita.Nobita\")","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" archiveBaseName \u003d \"nobita\"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Seonlo99":3,"-":40}},{"path":"src/main/java/nobita/Nobita.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.parser.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates a robot application name Nobita.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"public class Nobita {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" /** The Ui that interact with the user */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" /** The list of tasks stored */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" /** The Storage used for reading and writing data to local file */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" * Constructs Nobita.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" public Nobita() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" this.storage \u003d new Storage(System.getProperty(\"user.dir\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" this.tasks \u003d storage.readFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" * Starts Nobita robot.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" * @param args an array of command-line arguments for the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" new Nobita().run();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" * Start running Nobita robot.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" System.out.println(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":" } catch (NobitaException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Seonlo99"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Seonlo99"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Seonlo99":65}},{"path":"src/main/java/nobita/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates AddCommand which extends from Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" /** The task to be added */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" private final Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" * Constructor AddCommand for ToDo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" * @param description The description of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" public AddCommand(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" this.task \u003d new ToDo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" * Constructor AddCommand for Deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" * @param description The description of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" * @param by The due date of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" public AddCommand(String description, String by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" this.task \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" * Constructor AddCommand for Event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" * @param description The description of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" * @param from The start date for task.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" * @param to The end data for task.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" public AddCommand(String description, String from, String to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" this.task \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" * Command that executes the task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" * @param tasks Contains all current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" * @param ui Ui for interacting with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":" * @param storage Storage that the data file is stored in.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Seonlo99"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Seonlo99"},"content":" tasks.addTask(this.task);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Seonlo99"},"content":" ui.showMessage(\"Got it. I\u0027ve added this task:\\n\" + task + \"\\nNow you have \"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Seonlo99"},"content":" + tasks.getTotalTask() +\" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Seonlo99"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Seonlo99"},"content":" * @return false.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Seonlo99"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Seonlo99"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":76}},{"path":"src/main/java/nobita/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" * Command that executes the corresponding task.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" * @param tasks Contains all current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" * @param ui Ui for interacting with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * @param storage Storage that the data file is stored in.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" * @throws NobitaException Allow subclasses to override the function with the throw property.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" * @return false.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":32}},{"path":"src/main/java/nobita/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates DeleteCommand which extends from Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"public class DeleteCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" /** The index of task to be deleted */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" private final int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * Constructs DeleteCommand using the index of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" * @param index the index of the task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" * Command that executes the task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" * @param tasks Contains all current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" * @param ui Ui for interacting with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" * @param storage Storage that the data file is stored in.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" * @throws NobitaException If the task is not inside tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws NobitaException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" if (tasks.checkIndexWithinRange(index)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(\"Selected task number not in list\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" Task task \u003d tasks.deleteTask(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" ui.showMessage(\"Noted. I\u0027ve removed this task:\\n\" + task + \"\\nNow you have \" + tasks.getTotalTask() +\" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" * @return false.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":55}},{"path":"src/main/java/nobita/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates ExitCommand which extends from Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" * Command that executes exit of program.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" * @param tasks Contains all current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" * @param ui Ui for interacting with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * @param storage Storage that the data file is stored in.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" * @throws NobitaException If error occurs when writing to local files.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws NobitaException {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" storage.writeFile(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" ui.exitMessage();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" * @return true.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":39}},{"path":"src/main/java/nobita/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" /** The query string to search for */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" private final String query;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" * Constructs FindCommand with a query String.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" * @param query The item to search for.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" public FindCommand(String query) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" this.query \u003d query;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * Command that executes finding of a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" * @param tasks Contains all current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" * @param ui Ui for interacting with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" * @param storage Storage that the data file is stored in.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" ui.showList(tasks.findTask(this.query));","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" * @return false.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Seonlo99":41}},{"path":"src/main/java/nobita/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates ListCommand which extends from Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" * Command that executes listing of all tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" * @param tasks Contains all current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" * @param ui Ui for interacting with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * @param storage Storage that the data file is stored in.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" ui.showList(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" * @return false.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":37}},{"path":"src/main/java/nobita/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates MarkCommand which extends from Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"public class MarkCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" /** The index of task to be marked*/","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" private final int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * Constructs MarkCommand using the index of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" * @param index the index of the task to be marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" * Command that executes the marking of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" * @param tasks Contains all current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" * @param ui Ui for interacting with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" * @param storage Storage that the data file is stored in.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" * @throws NobitaException If the task is not inside tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws NobitaException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" if (tasks.checkIndexWithinRange(index)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(\"Selected task number not in list\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" Task task \u003d tasks.markComplete(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" ui.showMessage(\"Nice! I\u0027ve marked this task as done:\\n\" + task);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" * @return false.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":55}},{"path":"src/main/java/nobita/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates UnmarkCommand which extends from Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"public class UnmarkCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" /** The index of task to be marked*/","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" private final int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * Constructs UnmarkCommand using the index of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" * @param index the index of the task to be marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" * Command that executes the unmarking of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" * @param tasks Contains all current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" * @param ui Ui for interacting with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" * @param storage Storage that the data file is stored in.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" * @throws NobitaException If the task is not inside tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws NobitaException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" if (tasks.checkIndexWithinRange(index)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(\"Selected task number not in list\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" Task task \u003d tasks.markIncomplete(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" ui.showMessage(\"OK, I\u0027ve marked this task as not done yet:\\n\" + task);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" * @return false.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":55}},{"path":"src/main/java/nobita/exception/NobitaException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates NobitaException.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":" * Throws an exception when error occurs in Nobita.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"public class NobitaException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" * Constructs NobitaException using an error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" * @param errorMessage The error message to be printed with the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" public NobitaException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * Returns the String representation of NobitaException.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" * @return String representation of NobitaException.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" return \"☹ OOPS!!! \" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Seonlo99":29}},{"path":"src/main/java/nobita/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.command.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import java.rmi.NotBoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates Parser.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" * Parser that is used to read in and understand user commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" * Parses the line of command given by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" * @param fullCommand A line of user input command string to be parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" * @return A Command instruction that the user specify.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * @throws NobitaException If command received are of wrong format.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" public static Command parse(String fullCommand) throws NobitaException {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" String[] commands \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" String commandType \u003d commands[0].toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" return new MarkCommand(checkNumber(commands[1]));","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" return new UnmarkCommand(checkNumber(commands[1]));","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" if (commands.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(\"The description of a todo cannot be empty.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" + \"Please specify a description.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" return new AddCommand(commands[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" if (commands.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(\"The description of a deadline cannot be empty.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" + \"Please specify a description.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" String[] deadlineFields \u003d commands[1].split(\" /by \");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" return new AddCommand(deadlineFields[0], deadlineFields[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" if (commands.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(\"The description of a event cannot be empty.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" + \"Please specify a description.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" String[] eventFields \u003d commands[1].split(\" /from \");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":" String[] fromAndTo \u003d eventFields[1].split(\" /to \");","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" return new AddCommand(eventFields[0], fromAndTo[0], fromAndTo[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":" return new DeleteCommand(Integer.parseInt(commands[1]) - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Seonlo99"},"content":" return new FindCommand(commands[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Seonlo99"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Seonlo99"},"content":" * Check if the task number passed in is a number.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Seonlo99"},"content":" * @param toTest The number parameter that is pass in.","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Seonlo99"},"content":" * @return An integer representing the correct task index.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Seonlo99"},"content":" * @throws NobitaException If parameter receive is not a number.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Seonlo99"},"content":" private static int checkNumber(String toTest) throws NobitaException {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Seonlo99"},"content":" return Integer.parseInt(toTest) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Seonlo99"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(\"Only numbers are allow\");","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Seonlo99"},"content":"// private static void checkParameterLength(String[] toTest, int actual) throws NobitaException {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Seonlo99"},"content":"// int len \u003d toTest.length;","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Seonlo99"},"content":"// if (len \u003c actual) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Seonlo99"},"content":"// throw new NobitaException(String.format(\"Expected %d parameter but only received %d\", actual, len));","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Seonlo99"},"content":"// }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Seonlo99"},"content":"// }","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":87}},{"path":"src/main/java/nobita/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates Storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" * Storage that is used to interact with local data files.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" /** The file name that stores data */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" private final String fileName \u003d \"Nobita.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" /** The directory path that the file locates */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" private final String directoryPath;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" * Constructs Storage with a file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" * @param directoryPath The directory path that the data file is store in.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" public Storage(String directoryPath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" this.directoryPath \u003d directoryPath;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" * Reads the stored data file to Nobita.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" * @return A TaskList that contains all stored tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" public TaskList readFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" checkFileExist();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" File file \u003d new File(getFilePath());","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" Scanner sc \u003d new Scanner(file);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" while(sc.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" String[] data \u003d sc.nextLine().split(\";\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" Task toAdd \u003d new Task(\"Test Subject\");","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" switch (data[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" toAdd \u003d new ToDo(data[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":" toAdd \u003d new Deadline(data[2], data[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Seonlo99"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Seonlo99"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Seonlo99"},"content":" toAdd \u003d new Event(data[2], data[3], data[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Seonlo99"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Seonlo99"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Seonlo99"},"content":" if (data[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Seonlo99"},"content":" toAdd.markComplete();","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Seonlo99"},"content":" tasks.addTask(toAdd);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Seonlo99"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Seonlo99"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Seonlo99"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Seonlo99"},"content":" * Write the tasks from Nobita into the file located in the directory specified.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Seonlo99"},"content":" * @throws NobitaException If error occur when saving file.","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Seonlo99"},"content":" public void writeFile(TaskList tasks) throws NobitaException {","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Seonlo99"},"content":" FileWriter file \u003d new FileWriter(getFilePath());","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Seonlo99"},"content":" for (Task task: tasks.getAllTasks()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Seonlo99"},"content":" file.write(task.toFileFormat());","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Seonlo99"},"content":" file.write(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Seonlo99"},"content":" file.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Seonlo99"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(e.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Seonlo99"},"content":" * Return the file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Seonlo99"},"content":" * Creates directory to the file if directory does not exist.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Seonlo99"},"content":" * @return String that represents the file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Seonlo99"},"content":" private String getFilePath() {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Seonlo99"},"content":" Path pathDirectory \u003d java.nio.file.Paths.get(directoryPath,\"src\", \"main\", \"data\");","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Seonlo99"},"content":" Files.createDirectories(pathDirectory);","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"Seonlo99"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"Seonlo99"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Seonlo99"},"content":" String filePath \u003d pathDirectory.toString() + \"\\\\\" + this.fileName;","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Seonlo99"},"content":" return filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Seonlo99"},"content":" * Check if file exist, do nothing if exist else create a new file.","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Seonlo99"},"content":" private void checkFileExist() {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"Seonlo99"},"content":" File file \u003d new File(getFilePath());","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"Seonlo99"},"content":" file.createNewFile(); // create new file if file does not exist","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"Seonlo99"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"Seonlo99"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":125}},{"path":"src/main/java/nobita/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import java.util.StringJoiner;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates Deadline which extends from Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" /** The data of the Deadline is due */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" private String by;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" /** The data of the Deadline is due */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" private LocalDate date;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" /** The time of the Deadline is due */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" private LocalTime time;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" * Constructs Deadline using name and due date of Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" * @param taskName The name of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" * @param by The due date.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" public Deadline(String taskName, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" String[] dueDateTime \u003d by.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" this.date \u003d LocalDate.parse(dueDateTime[0]); // input format \"2016-06-11\"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" this.time \u003d LocalTime.parse(dueDateTime[1]); // input format \"06:30\"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" * Return a String representation of Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" * @return A String representing of Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" return \"[D]\" + super.toString() + \" (by: \" + date.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\")) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" * Return a String representation of Deadline that is formatted for file reading and writing.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" * @return A String representation of Deadline that is formatted for file reading and writing.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":" StringJoiner joiner \u003d new StringJoiner(\";\");","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" joiner.add(\"D\").add(super.toFileFormat()).add(this.by);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" return joiner.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Seonlo99":59}},{"path":"src/main/java/nobita/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import java.util.StringJoiner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates Event which extends from Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" /** The start time of the Event */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" protected String start;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" /** The end time of the Event */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" protected String end;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" * Constructs Deadline using name and due date of Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * @param taskName The name of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" * @param start The start date of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" * @param end The end date of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" public Event(String taskName, String start, String end) {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" * Return a String representation of Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" * @return A String representing of Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.start + \" to: \"+ this.end + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" * Return a String representation of Event that is formatted for file reading and writing.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" * @return A String representation of Event that is formatted for file reading and writing.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" StringJoiner joiner \u003d new StringJoiner(\";\");","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" joiner.add(\"E\").add(super.toFileFormat()).add(this.start).add(this.end);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" return joiner.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Seonlo99":52}},{"path":"src/main/java/nobita/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import java.util.StringJoiner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" /** The name of the task */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" private final String taskName;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" /** Whether the task is completed or not */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" private boolean isComplete \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" * Constructs a task with a task name.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * @param taskName The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" * Marks the task as complete.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" public void markComplete() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" this.isComplete \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" * Marks the task as incomplete.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" public void markIncomplete() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" * A getter of the status icon if task is completed or not.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" * @return A String representing the status icon.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" private String getStatus() {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" return isComplete ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" * A getter of the task name.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" * @return A String representing the task name.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":" public String getTaskName() {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" return this.taskName;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Seonlo99"},"content":" * Return a String representation of Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Seonlo99"},"content":" * @return A String representing of Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"Seonlo99"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"Seonlo99"},"content":" return getStatus() + this.taskName;","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Seonlo99"},"content":" * Return a String representation of Task that is formatted for file reading and writing.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Seonlo99"},"content":" * @return A String representation of Task that is formatted for file reading and writing.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Seonlo99"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Seonlo99"},"content":" StringJoiner joiner \u003d new StringJoiner(\";\");","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Seonlo99"},"content":" joiner.add(this.isComplete ? \"1\" : \"0\").add(this.taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Seonlo99"},"content":" return joiner.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Seonlo99":79}},{"path":"src/main/java/nobita/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":" * TaskList contains all tasks in an ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":"public class TaskList implements Iterable\u003cTask\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" /** The list that contains all tasks */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" * Constructs TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" * Getter for number of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" * @return An integer representing number of total tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" public int getTotalTask() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" * Add a task to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" * @param task The task to be added to list.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" * Delete a task from list with given index.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" * @param targetTask The index of task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" * @return The deleted Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" public Task deleteTask(int targetTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" return this.tasks.remove(targetTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" * Mark a task to be complete","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" * @param targetTask The index of the task to be mark complete.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" * @return The Task that is mark complete.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" public Task markComplete(int targetTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" Task task \u003d this.tasks.get(targetTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":" task.markComplete();","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Seonlo99"},"content":" * Mark a task to be incomplete","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Seonlo99"},"content":" * @param targetTask The index of the task to be mark incomplete.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Seonlo99"},"content":" * @return The Task that is mark incomplete.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Seonlo99"},"content":" public Task markIncomplete(int targetTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Seonlo99"},"content":" Task task \u003d this.tasks.get(targetTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Seonlo99"},"content":" task.markIncomplete();","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Seonlo99"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Seonlo99"},"content":" * Rrturn all tasks in ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Seonlo99"},"content":" * @return An ArrayList that contains all tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Seonlo99"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Seonlo99"},"content":" return this.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Seonlo99"},"content":" * Print all tasks that matches the query.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Seonlo99"},"content":" * @param query The query to compare with all tasks name.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Seonlo99"},"content":" * @Return A TaskList containing all match tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Seonlo99"},"content":" public TaskList findTask(String query) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Seonlo99"},"content":" TaskList matchedQuery \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Seonlo99"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Seonlo99"},"content":" if (task.getTaskName().toLowerCase().contains(query.toLowerCase())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Seonlo99"},"content":" matchedQuery.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Seonlo99"},"content":" return matchedQuery;","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Seonlo99"},"content":" * Check if a task index is within the tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Seonlo99"},"content":" * @param ind The task index to be checked.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Seonlo99"},"content":" * @return True if task index fall within the tasklist, False otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Seonlo99"},"content":" public boolean checkIndexWithinRange(int ind) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Seonlo99"},"content":" return ind \u003c 1 || ind \u003e this.tasks.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Seonlo99"},"content":" * Return the Iterator for TaskList","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Seonlo99"},"content":" * @return A Task Iterator.","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Seonlo99"},"content":" public Iterator\u003cTask\u003e iterator() {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Seonlo99"},"content":" return tasks.iterator();","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":117}},{"path":"src/main/java/nobita/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import java.util.StringJoiner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates ToDo which extends from Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" * Constructs ToDo using name of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" * @param taskName The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" public ToDo(String taskName) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" * Return a String representation of ToDo.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" * @return A String representing of ToDo.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" * Return a String representation of ToDo that is formatted for file reading and writing.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" * @return A String representation of ToDo that is formatted for file reading and writing.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" StringJoiner joiner \u003d new StringJoiner(\";\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" joiner.add(\"T\").add(super.toFileFormat());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" return joiner.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Seonlo99":42}},{"path":"src/main/java/nobita/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates Ui.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" * Ui is used to display message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" * Prints welcome message.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"Hello! I\u0027m Nobita\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" * Reads user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" * @return A String that represents the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" return new Scanner(System.in).nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" * Print the exit message.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" public void exitMessage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" * Prints a line.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" public void showLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" * Prints a error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" * @param message The error message to be display to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" public void showError(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" * Prints a message.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":" * @param message The message to be display to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Seonlo99"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Seonlo99"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Seonlo99"},"content":" public void showList(TaskList list) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Seonlo99"},"content":" if (list.getTotalTask() \u003c 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"There are no tasks to be shown.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Seonlo99"},"content":" else {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Seonlo99"},"content":" int listNum \u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Seonlo99"},"content":" for (Task task: list) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Seonlo99"},"content":" System.out.println(listNum + \". \" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Seonlo99"},"content":" ++listNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":77}},{"path":"src/test/java/nobita/command/MarkTaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"import org.junit.After;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"import org.junit.Before;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":"public class MarkTaskTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" public void outOfRangeTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" MarkCommand command \u003d new MarkCommand(0);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" Ui testUi \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" Storage testStorage \u003d new Storage(\"test\");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" testList.addTask(new ToDo(\"item 1\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" testList.addTask(new ToDo(\"item 2\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" testList.addTask(new ToDo(\"item 3\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" NobitaException exception \u003d assertThrows(NobitaException.class, () -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" command.execute(testList, testUi, testStorage );","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" String expectedMessage \u003d \"Selected task number not in list\";","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" String actualMessage \u003d exception.getMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" assertEquals(expectedMessage, actualMessage);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"Something went wrong with the test\");","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" public void correctlyMarkTaskTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" MarkCommand command \u003d new MarkCommand(4);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" Ui testUi \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" Storage testStorage \u003d new Storage(\"test\");","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":" testList.addTask(new ToDo(\"item 1\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" testList.addTask(new ToDo(\"item 2\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" testList.addTask(new ToDo(\"item 3\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Seonlo99"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Seonlo99"},"content":" ToDo testTask \u003d new ToDo(\"item 4\");","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Seonlo99"},"content":" testList.addTask(testTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Seonlo99"},"content":" command.execute(testList, testUi, testStorage );","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Seonlo99"},"content":" String expectedMessage \u003d testTask.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Seonlo99"},"content":" String actualMessage \u003d testList.getAllTasks().get(4).toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Seonlo99"},"content":" assertEquals(expectedMessage, actualMessage);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Seonlo99"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"Something went wrong with the test\");","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Seonlo99":75}},{"path":"src/test/java/nobita/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" public void nonIntegerTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" NobitaException exception \u003d assertThrows(NobitaException.class, () -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" Parser.parse(\"mark x\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" String expectedMessage \u003d \"Only numbers are allow\";","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" String actualMessage \u003d exception.getMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" assertEquals(expectedMessage, actualMessage);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"Something went wrong with the test\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" public void parameterTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" NobitaException exception \u003d assertThrows(NobitaException.class, () -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" Parser.parse(\"deadline\");","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" String expectedMessage \u003d \"The description of a deadline cannot be empty.\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" + \"Please specify a description.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" String actualMessage \u003d exception.getMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" assertEquals(expectedMessage, actualMessage);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"Something went wrong with the test\");","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Seonlo99":42}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"list","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Seonlo99":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":"java -classpath ..\\bin Nobita \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":{"Seonlo99":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":"Seonlo99"},"content":" testImplementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-09-01"},{"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":"Seonlo99"},"content":" mainClass.set(\"nobita.Nobita\")","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" archiveBaseName \u003d \"nobita\"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Seonlo99":3,"-":40}},{"path":"src/main/java/nobita/Nobita.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.parser.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates a robot application name Nobita.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"public class Nobita {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" /** The Ui that interact with the user */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" /** The list of tasks stored */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" /** The Storage used for reading and writing data to local file */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" * Constructs Nobita.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" public Nobita() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" this.storage \u003d new Storage(System.getProperty(\"user.dir\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" this.tasks \u003d storage.readFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" * Starts Nobita robot.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" * @param args an array of command-line arguments for the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" new Nobita().run();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" * Start running Nobita robot.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" System.out.println(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":" } catch (NobitaException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Seonlo99"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Seonlo99"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Seonlo99":65}},{"path":"src/main/java/nobita/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates AddCommand which extends from Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" /** The task to be added */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" private final Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" * Constructor AddCommand for ToDo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" * @param description The description of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" public AddCommand(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" this.task \u003d new ToDo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" * Constructor AddCommand for Deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" * @param description The description of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" * @param by The due date of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" public AddCommand(String description, String by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" this.task \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" * Constructor AddCommand for Event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" * @param description The description of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" * @param from The start date for task.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" * @param to The end data for task.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" public AddCommand(String description, String from, String to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" this.task \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" * Command that executes the task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" * @param tasks Contains all current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" * @param ui Ui for interacting with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":" * @param storage Storage that the data file is stored in.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Seonlo99"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Seonlo99"},"content":" tasks.addTask(this.task);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Seonlo99"},"content":" ui.showMessage(\"Got it. I\u0027ve added this task:\\n\" + task + \"\\nNow you have \"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Seonlo99"},"content":" + tasks.getTotalTask() +\" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Seonlo99"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Seonlo99"},"content":" * @return false.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Seonlo99"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Seonlo99"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":76}},{"path":"src/main/java/nobita/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" * Command that executes the corresponding task.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" * @param tasks Contains all current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" * @param ui Ui for interacting with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * @param storage Storage that the data file is stored in.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" * @throws NobitaException Allow subclasses to override the function with the throw property.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" * @return false.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":32}},{"path":"src/main/java/nobita/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates DeleteCommand which extends from Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"public class DeleteCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" /** The index of task to be deleted */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" private final int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * Constructs DeleteCommand using the index of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" * @param index the index of the task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" * Command that executes the task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" * @param tasks Contains all current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" * @param ui Ui for interacting with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" * @param storage Storage that the data file is stored in.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" * @throws NobitaException If the task is not inside tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws NobitaException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" if (tasks.checkIndexWithinRange(index)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(\"Selected task number not in list\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" Task task \u003d tasks.deleteTask(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" ui.showMessage(\"Noted. I\u0027ve removed this task:\\n\" + task + \"\\nNow you have \" + tasks.getTotalTask() +\" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" * @return false.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":55}},{"path":"src/main/java/nobita/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates ExitCommand which extends from Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" * Command that executes exit of program.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" * @param tasks Contains all current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" * @param ui Ui for interacting with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * @param storage Storage that the data file is stored in.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" * @throws NobitaException If error occurs when writing to local files.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws NobitaException {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" storage.writeFile(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" ui.exitMessage();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" * @return true.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":39}},{"path":"src/main/java/nobita/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates FindCommand which extends from Command.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" /** The query string to search for */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" private final String query;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" * Constructs FindCommand with a query String.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * @param query The item to search for.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" public FindCommand(String query) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" this.query \u003d query;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" * Command that executes finding of a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" * @param tasks Contains all current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" * @param ui Ui for interacting with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" * @param storage Storage that the data file is stored in.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" ui.showList(tasks.findTask(this.query));","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" * @return false.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Seonlo99":48}},{"path":"src/main/java/nobita/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates ListCommand which extends from Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" * Command that executes listing of all tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" * @param tasks Contains all current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" * @param ui Ui for interacting with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * @param storage Storage that the data file is stored in.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" ui.showList(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" * @return false.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":37}},{"path":"src/main/java/nobita/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates MarkCommand which extends from Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"public class MarkCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" /** The index of task to be marked*/","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" private final int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * Constructs MarkCommand using the index of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" * @param index the index of the task to be marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" * Command that executes the marking of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" * @param tasks Contains all current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" * @param ui Ui for interacting with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" * @param storage Storage that the data file is stored in.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" * @throws NobitaException If the task is not inside tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws NobitaException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" if (tasks.checkIndexWithinRange(index)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(\"Selected task number not in list\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" Task task \u003d tasks.markComplete(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" ui.showMessage(\"Nice! I\u0027ve marked this task as done:\\n\" + task);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" * @return false.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":55}},{"path":"src/main/java/nobita/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates UnmarkCommand which extends from Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"public class UnmarkCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" /** The index of task to be marked*/","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" private final int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * Constructs UnmarkCommand using the index of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" * @param index the index of the task to be marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" * Command that executes the unmarking of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" * @param tasks Contains all current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" * @param ui Ui for interacting with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" * @param storage Storage that the data file is stored in.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" * @throws NobitaException If the task is not inside tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws NobitaException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" if (tasks.checkIndexWithinRange(index)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(\"Selected task number not in list\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" Task task \u003d tasks.markIncomplete(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" ui.showMessage(\"OK, I\u0027ve marked this task as not done yet:\\n\" + task);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" * @return false.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":55}},{"path":"src/main/java/nobita/exception/NobitaException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates NobitaException.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":" * Throws an exception when error occurs in Nobita.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"public class NobitaException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" * Constructs NobitaException using an error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" * @param errorMessage The error message to be printed with the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" public NobitaException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * Returns the String representation of NobitaException.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" * @return String representation of NobitaException.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" return \"☹ OOPS!!! \" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Seonlo99":29}},{"path":"src/main/java/nobita/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.command.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import java.rmi.NotBoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates Parser.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" * Parser that is used to read in and understand user commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" * Parses the line of command given by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" * @param fullCommand A line of user input command string to be parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" * @return A Command instruction that the user specify.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * @throws NobitaException If command received are of wrong format.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" public static Command parse(String fullCommand) throws NobitaException {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" String[] commands \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" String commandType \u003d commands[0].toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" return new MarkCommand(checkNumber(commands[1]));","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" return new UnmarkCommand(checkNumber(commands[1]));","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" if (commands.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(\"The description of a todo cannot be empty.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" + \"Please specify a description.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" return new AddCommand(commands[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" if (commands.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(\"The description of a deadline cannot be empty.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" + \"Please specify a description.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" String[] deadlineFields \u003d commands[1].split(\" /by \");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" return new AddCommand(deadlineFields[0], deadlineFields[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" if (commands.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(\"The description of a event cannot be empty.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" + \"Please specify a description.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" String[] eventFields \u003d commands[1].split(\" /from \");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":" String[] fromAndTo \u003d eventFields[1].split(\" /to \");","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" return new AddCommand(eventFields[0], fromAndTo[0], fromAndTo[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":" return new DeleteCommand(Integer.parseInt(commands[1]) - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Seonlo99"},"content":" return new FindCommand(commands[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Seonlo99"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Seonlo99"},"content":" * Check if the task number passed in is a number.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Seonlo99"},"content":" * @param toTest The number parameter that is pass in.","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Seonlo99"},"content":" * @return An integer representing the correct task index.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Seonlo99"},"content":" * @throws NobitaException If parameter receive is not a number.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Seonlo99"},"content":" private static int checkNumber(String toTest) throws NobitaException {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Seonlo99"},"content":" return Integer.parseInt(toTest) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Seonlo99"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(\"Only numbers are allow\");","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Seonlo99"},"content":"// private static void checkParameterLength(String[] toTest, int actual) throws NobitaException {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Seonlo99"},"content":"// int len \u003d toTest.length;","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Seonlo99"},"content":"// if (len \u003c actual) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Seonlo99"},"content":"// throw new NobitaException(String.format(\"Expected %d parameter but only received %d\", actual, len));","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Seonlo99"},"content":"// }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Seonlo99"},"content":"// }","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":87}},{"path":"src/main/java/nobita/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates Storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" * Storage that is used to interact with local data files.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" /** The file name that stores data */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" private final String fileName \u003d \"Nobita.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" /** The directory path that the file locates */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" private final String directoryPath;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" * Constructs Storage with a file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" * @param directoryPath The directory path that the data file is store in.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" public Storage(String directoryPath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" this.directoryPath \u003d directoryPath;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" * Reads the stored data file to Nobita.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" * @return A TaskList that contains all stored tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" public TaskList readFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" checkFileExist();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" File file \u003d new File(getFilePath());","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" Scanner sc \u003d new Scanner(file);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" while(sc.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" String[] data \u003d sc.nextLine().split(\";\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" Task toAdd \u003d new Task(\"Test Subject\");","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" switch (data[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" toAdd \u003d new ToDo(data[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":" toAdd \u003d new Deadline(data[2], data[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Seonlo99"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Seonlo99"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Seonlo99"},"content":" toAdd \u003d new Event(data[2], data[3], data[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Seonlo99"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Seonlo99"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Seonlo99"},"content":" if (data[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Seonlo99"},"content":" toAdd.markComplete();","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Seonlo99"},"content":" tasks.addTask(toAdd);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Seonlo99"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Seonlo99"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Seonlo99"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Seonlo99"},"content":" * Write the tasks from Nobita into the file located in the directory specified.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Seonlo99"},"content":" * @throws NobitaException If error occur when saving file.","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Seonlo99"},"content":" public void writeFile(TaskList tasks) throws NobitaException {","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Seonlo99"},"content":" FileWriter file \u003d new FileWriter(getFilePath());","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Seonlo99"},"content":" for (Task task: tasks.getAllTasks()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Seonlo99"},"content":" file.write(task.toFileFormat());","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Seonlo99"},"content":" file.write(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Seonlo99"},"content":" file.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Seonlo99"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Seonlo99"},"content":" throw new NobitaException(e.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Seonlo99"},"content":" * Return the file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Seonlo99"},"content":" * Creates directory to the file if directory does not exist.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Seonlo99"},"content":" * @return String that represents the file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Seonlo99"},"content":" private String getFilePath() {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Seonlo99"},"content":" Path pathDirectory \u003d java.nio.file.Paths.get(directoryPath,\"src\", \"main\", \"data\");","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Seonlo99"},"content":" Files.createDirectories(pathDirectory);","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"Seonlo99"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"Seonlo99"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Seonlo99"},"content":" String filePath \u003d pathDirectory.toString() + \"\\\\\" + this.fileName;","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Seonlo99"},"content":" return filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Seonlo99"},"content":" * Check if file exist, do nothing if exist else create a new file.","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Seonlo99"},"content":" private void checkFileExist() {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"Seonlo99"},"content":" File file \u003d new File(getFilePath());","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"Seonlo99"},"content":" file.createNewFile(); // create new file if file does not exist","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"Seonlo99"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"Seonlo99"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":125}},{"path":"src/main/java/nobita/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import java.util.StringJoiner;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates Deadline which extends from Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" /** The data of the Deadline is due */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" private String by;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" /** The data of the Deadline is due */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" private LocalDate date;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" /** The time of the Deadline is due */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" private LocalTime time;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" * Constructs Deadline using name and due date of Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" * @param taskName The name of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" * @param by The due date.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" public Deadline(String taskName, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" String[] dueDateTime \u003d by.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" this.date \u003d LocalDate.parse(dueDateTime[0]); // input format \"2016-06-11\"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" this.time \u003d LocalTime.parse(dueDateTime[1]); // input format \"06:30\"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" * Return a String representation of Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" * @return A String representing of Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" return \"[D]\" + super.toString() + \" (by: \" + date.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\")) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" * Return a String representation of Deadline that is formatted for file reading and writing.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" * @return A String representation of Deadline that is formatted for file reading and writing.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":" StringJoiner joiner \u003d new StringJoiner(\";\");","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" joiner.add(\"D\").add(super.toFileFormat()).add(this.by);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" return joiner.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Seonlo99":59}},{"path":"src/main/java/nobita/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import java.util.StringJoiner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates Event which extends from Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" /** The start time of the Event */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" protected String start;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" /** The end time of the Event */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" protected String end;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" * Constructs Deadline using name and due date of Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * @param taskName The name of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" * @param start The start date of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" * @param end The end date of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" public Event(String taskName, String start, String end) {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" * Return a String representation of Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" * @return A String representing of Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.start + \" to: \"+ this.end + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" * Return a String representation of Event that is formatted for file reading and writing.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" * @return A String representation of Event that is formatted for file reading and writing.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" StringJoiner joiner \u003d new StringJoiner(\";\");","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" joiner.add(\"E\").add(super.toFileFormat()).add(this.start).add(this.end);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" return joiner.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Seonlo99":52}},{"path":"src/main/java/nobita/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import java.util.StringJoiner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" /** The name of the task */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" private final String taskName;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" /** Whether the task is completed or not */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" private boolean isComplete \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" * Constructs a task with a task name.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" * @param taskName The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" * Marks the task as complete.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" public void markComplete() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" this.isComplete \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" * Marks the task as incomplete.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" public void markIncomplete() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" * A getter of the status icon if task is completed or not.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" * @return A String representing the status icon.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" private String getStatus() {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" return isComplete ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" * A getter of the task name.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" * @return A String representing the task name.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":" public String getTaskName() {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" return this.taskName;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Seonlo99"},"content":" * Return a String representation of Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Seonlo99"},"content":" * @return A String representing of Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"Seonlo99"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"Seonlo99"},"content":" return getStatus() + this.taskName;","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Seonlo99"},"content":" * Return a String representation of Task that is formatted for file reading and writing.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Seonlo99"},"content":" * @return A String representation of Task that is formatted for file reading and writing.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Seonlo99"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Seonlo99"},"content":" StringJoiner joiner \u003d new StringJoiner(\";\");","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Seonlo99"},"content":" joiner.add(this.isComplete ? \"1\" : \"0\").add(this.taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Seonlo99"},"content":" return joiner.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Seonlo99":79}},{"path":"src/main/java/nobita/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":" * TaskList contains all tasks in an ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":"public class TaskList implements Iterable\u003cTask\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" /** The list that contains all tasks */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" * Constructs TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" * Getter for number of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" * @return An integer representing number of total tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" public int getTotalTask() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" * Add a task to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" * @param task The task to be added to list.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" * Delete a task from list with given index.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" * @param targetTask The index of task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" * @return The deleted Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" public Task deleteTask(int targetTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" return this.tasks.remove(targetTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" * Mark a task to be complete","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" * @param targetTask The index of the task to be mark complete.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" * @return The Task that is mark complete.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" public Task markComplete(int targetTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" Task task \u003d this.tasks.get(targetTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":" task.markComplete();","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Seonlo99"},"content":" * Mark a task to be incomplete","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Seonlo99"},"content":" * @param targetTask The index of the task to be mark incomplete.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Seonlo99"},"content":" * @return The Task that is mark incomplete.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Seonlo99"},"content":" public Task markIncomplete(int targetTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Seonlo99"},"content":" Task task \u003d this.tasks.get(targetTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Seonlo99"},"content":" task.markIncomplete();","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Seonlo99"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Seonlo99"},"content":" * Rrturn all tasks in ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Seonlo99"},"content":" * @return An ArrayList that contains all tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Seonlo99"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Seonlo99"},"content":" return this.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Seonlo99"},"content":" * Print all tasks that matches the query.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Seonlo99"},"content":" * @param query The query to compare with all tasks name.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Seonlo99"},"content":" * @Return A TaskList containing all match tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Seonlo99"},"content":" public TaskList findTask(String query) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Seonlo99"},"content":" TaskList matchedQuery \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Seonlo99"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Seonlo99"},"content":" if (task.getTaskName().toLowerCase().contains(query.toLowerCase())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Seonlo99"},"content":" matchedQuery.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Seonlo99"},"content":" return matchedQuery;","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Seonlo99"},"content":" * Check if a task index is within the tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Seonlo99"},"content":" * @param ind The task index to be checked.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Seonlo99"},"content":" * @return True if task index fall within the tasklist, False otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Seonlo99"},"content":" public boolean checkIndexWithinRange(int ind) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Seonlo99"},"content":" return ind \u003c 1 || ind \u003e this.tasks.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Seonlo99"},"content":" * Return the Iterator for TaskList","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Seonlo99"},"content":" * @return A Task Iterator.","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Seonlo99"},"content":" public Iterator\u003cTask\u003e iterator() {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Seonlo99"},"content":" return tasks.iterator();","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":117}},{"path":"src/main/java/nobita/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import java.util.StringJoiner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates ToDo which extends from Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" * Constructs ToDo using name of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" * @param taskName The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" public ToDo(String taskName) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" * Return a String representation of ToDo.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" * @return A String representing of ToDo.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":" * Return a String representation of ToDo that is formatted for file reading and writing.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" * @return A String representation of ToDo that is formatted for file reading and writing.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" StringJoiner joiner \u003d new StringJoiner(\";\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" joiner.add(\"T\").add(super.toFileFormat());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" return joiner.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Seonlo99":42}},{"path":"src/main/java/nobita/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":" * Class that encapsulates Ui.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" * Ui is used to display message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" * @author Zheng Chenglong","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" * Prints welcome message.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"Hello! I\u0027m Nobita\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" * Reads user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" * @return A String that represents the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" return new Scanner(System.in).nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" * Print the exit message.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":" public void exitMessage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" * Prints a line.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" public void showLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" * Prints a error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":" * @param message The error message to be display to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" public void showError(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" * Prints a message.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":" * @param message The message to be display to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Seonlo99"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Seonlo99"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Seonlo99"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"Seonlo99"},"content":" * Print the content of the TaskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"Seonlo99"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"Seonlo99"},"content":" * @param list The list of tasks to be printed.","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"Seonlo99"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"Seonlo99"},"content":" public void showList(TaskList list) {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Seonlo99"},"content":" if (list.getTotalTask() \u003c 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"There are no tasks to be shown.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Seonlo99"},"content":" else {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Seonlo99"},"content":" int listNum \u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Seonlo99"},"content":" for (Task task: list) {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Seonlo99"},"content":" System.out.println(listNum + \". \" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Seonlo99"},"content":" ++listNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Seonlo99":82}},{"path":"src/test/java/nobita/command/MarkTaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import nobita.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import nobita.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"import nobita.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"import org.junit.After;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"import org.junit.Before;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":"public class MarkTaskTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" public void outOfRangeTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" MarkCommand command \u003d new MarkCommand(0);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":" Ui testUi \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" Storage testStorage \u003d new Storage(\"test\");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" testList.addTask(new ToDo(\"item 1\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" testList.addTask(new ToDo(\"item 2\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" testList.addTask(new ToDo(\"item 3\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" NobitaException exception \u003d assertThrows(NobitaException.class, () -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" command.execute(testList, testUi, testStorage );","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" String expectedMessage \u003d \"Selected task number not in list\";","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" String actualMessage \u003d exception.getMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" assertEquals(expectedMessage, actualMessage);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"Something went wrong with the test\");","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Seonlo99"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Seonlo99"},"content":" public void correctlyMarkTaskTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Seonlo99"},"content":" MarkCommand command \u003d new MarkCommand(4);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Seonlo99"},"content":" Ui testUi \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Seonlo99"},"content":" Storage testStorage \u003d new Storage(\"test\");","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Seonlo99"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Seonlo99"},"content":" testList.addTask(new ToDo(\"item 1\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Seonlo99"},"content":" testList.addTask(new ToDo(\"item 2\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Seonlo99"},"content":" testList.addTask(new ToDo(\"item 3\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Seonlo99"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Seonlo99"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Seonlo99"},"content":" ToDo testTask \u003d new ToDo(\"item 4\");","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Seonlo99"},"content":" testList.addTask(testTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Seonlo99"},"content":" command.execute(testList, testUi, testStorage );","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Seonlo99"},"content":" String expectedMessage \u003d testTask.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Seonlo99"},"content":" String actualMessage \u003d testList.getAllTasks().get(4).toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Seonlo99"},"content":" assertEquals(expectedMessage, actualMessage);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Seonlo99"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"Something went wrong with the test\");","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Seonlo99":75}},{"path":"src/test/java/nobita/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"package nobita.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"import nobita.exception.NobitaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Seonlo99"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Seonlo99"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Seonlo99"},"content":" public void nonIntegerTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Seonlo99"},"content":" NobitaException exception \u003d assertThrows(NobitaException.class, () -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Seonlo99"},"content":" Parser.parse(\"mark x\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Seonlo99"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Seonlo99"},"content":" String expectedMessage \u003d \"Only numbers are allow\";","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":" String actualMessage \u003d exception.getMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Seonlo99"},"content":" assertEquals(expectedMessage, actualMessage);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Seonlo99"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"Something went wrong with the test\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Seonlo99"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Seonlo99"},"content":" public void parameterTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Seonlo99"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Seonlo99"},"content":" NobitaException exception \u003d assertThrows(NobitaException.class, () -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Seonlo99"},"content":" Parser.parse(\"deadline\");","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Seonlo99"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Seonlo99"},"content":" String expectedMessage \u003d \"The description of a deadline cannot be empty.\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Seonlo99"},"content":" + \"Please specify a description.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Seonlo99"},"content":" String actualMessage \u003d exception.getMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Seonlo99"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Seonlo99"},"content":" assertEquals(expectedMessage, actualMessage);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Seonlo99"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Seonlo99"},"content":" System.out.println(\"Something went wrong with the test\");","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Seonlo99"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Seonlo99"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Seonlo99":42}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Seonlo99"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Seonlo99"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Seonlo99"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Seonlo99"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Seonlo99"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Seonlo99"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Seonlo99"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Seonlo99"},"content":"list","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Seonlo99":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Seonlo99"},"content":"java -classpath ..\\bin Nobita \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":{"Seonlo99":1,"-":20}}] diff --git a/Seonlo99_ip_master/commits.json b/Seonlo99_ip_master/commits.json index 4b216dc3..06956152 100644 --- a/Seonlo99_ip_master/commits.json +++ b/Seonlo99_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Seonlo99":[{"date":"2023-08-23","commitResults":[{"hash":"6880e022aaef63a3e7248c372d4cda5523b47e76","isMergeCommit":false,"messageTitle":"Rename Chatbot","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"8407e2e3b116499c73b2f59ef98c029f557b2913","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Seonlo99/ip","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{}},{"hash":"aabbbff1c4ba3480a6414d59fe396b165f16c419","isMergeCommit":false,"messageTitle":"Add ability to store and display","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"6df7fd8369b5ce232be21ba7ee6162b16e5feed2","isMergeCommit":false,"messageTitle":"Add mark and unmark task","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":8}}},{"hash":"9e467fdc883c8c6ab8849672a9f94515f2ac9aa8","isMergeCommit":false,"messageTitle":"Add Todo, Deadline and Event","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":120,"deletions":45}}},{"hash":"8d5eaad7ea986f1436041a0a6bdcb6a095326da6","isMergeCommit":false,"messageTitle":"Add automated Text UI Testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"478ace9c8ba82a6bdf55ab15b3e89d13198e78df","isMergeCommit":false,"messageTitle":"Add Handle Errors","messageBody":"","tags":["Level-5","A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":71},"bat":{"insertions":1,"deletions":1}}},{"hash":"bca211d4a69539f993e47cd0740f2b765dfb35cf","isMergeCommit":false,"messageTitle":"Add deletefeature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":7}}},{"hash":"054fccc7961748bd00600d6785e2fca4043ba271","isMergeCommit":false,"messageTitle":"Fix bug","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"f7db58cc12e014042f8d2d3d0feb8715502a12fe","isMergeCommit":false,"messageTitle":"Update syntax","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":49}}}]},{"date":"2023-08-30","commitResults":[{"hash":"7c8433b8990e7a465e074a8d33a85d29d909f869","isMergeCommit":false,"messageTitle":"Add Level-7 Save feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":162,"deletions":51}}},{"hash":"0490252bc700af1d9d7319522a11522afaefe41f","isMergeCommit":true,"messageTitle":"merge branch-Level-7 to master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c3d23cd99232d8081dc4dcd274867a5ded58fc5f","isMergeCommit":false,"messageTitle":"Add Level-8 Date and Time feature","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":10,"deletions":2}}}]},{"date":"2023-08-31","commitResults":[{"hash":"87ac866f782885efc36fcc7e704726e203a4445a","isMergeCommit":false,"messageTitle":"Add A-MoreOOP refactor related code as classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":329,"deletions":167}}},{"hash":"edd669a6303639c50ad3e71d24e0b9ce4deac255","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":11}}},{"hash":"c7e3b6791d8dd5a18b155db64a45a0e607803741","isMergeCommit":false,"messageTitle":"Devide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"a0af1a6f8645603182ba8da43eaada43347a1547","isMergeCommit":false,"messageTitle":"Add Gradle support for Nobita","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"426bad6210c6845f291b5656de731cd8437e8605","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":164,"deletions":7}}},{"hash":"0bfb982b590ff8a41a4ac90489c94beac84a0162","isMergeCommit":false,"messageTitle":"Add JavaDocs","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":400,"deletions":17}}},{"hash":"26253f416251bba3d747f348e93a020ec733e62b","isMergeCommit":false,"messageTitle":"Add Level-9 find task feature","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":203,"deletions":44}}}]}]},"authorFileTypeContributionMap":{"Seonlo99":{"java":1239,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":3,"txt":8}},"authorContributionVariance":{"Seonlo99":65102.824},"authorDisplayNameMap":{"Seonlo99":"CS2103-T16-2 ZHEN..LONG"}} +{"authorDailyContributionsMap":{"Seonlo99":[{"date":"2023-08-23","commitResults":[{"hash":"6880e022aaef63a3e7248c372d4cda5523b47e76","isMergeCommit":false,"messageTitle":"Rename Chatbot","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"8407e2e3b116499c73b2f59ef98c029f557b2913","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Seonlo99/ip","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{}},{"hash":"aabbbff1c4ba3480a6414d59fe396b165f16c419","isMergeCommit":false,"messageTitle":"Add ability to store and display","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"6df7fd8369b5ce232be21ba7ee6162b16e5feed2","isMergeCommit":false,"messageTitle":"Add mark and unmark task","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":8}}},{"hash":"9e467fdc883c8c6ab8849672a9f94515f2ac9aa8","isMergeCommit":false,"messageTitle":"Add Todo, Deadline and Event","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":120,"deletions":45}}},{"hash":"8d5eaad7ea986f1436041a0a6bdcb6a095326da6","isMergeCommit":false,"messageTitle":"Add automated Text UI Testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"478ace9c8ba82a6bdf55ab15b3e89d13198e78df","isMergeCommit":false,"messageTitle":"Add Handle Errors","messageBody":"","tags":["Level-5","A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":71},"bat":{"insertions":1,"deletions":1}}},{"hash":"bca211d4a69539f993e47cd0740f2b765dfb35cf","isMergeCommit":false,"messageTitle":"Add deletefeature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":7}}},{"hash":"054fccc7961748bd00600d6785e2fca4043ba271","isMergeCommit":false,"messageTitle":"Fix bug","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"f7db58cc12e014042f8d2d3d0feb8715502a12fe","isMergeCommit":false,"messageTitle":"Update syntax","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":49}}}]},{"date":"2023-08-30","commitResults":[{"hash":"7c8433b8990e7a465e074a8d33a85d29d909f869","isMergeCommit":false,"messageTitle":"Add Level-7 Save feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":162,"deletions":51}}},{"hash":"0490252bc700af1d9d7319522a11522afaefe41f","isMergeCommit":true,"messageTitle":"merge branch-Level-7 to master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c3d23cd99232d8081dc4dcd274867a5ded58fc5f","isMergeCommit":false,"messageTitle":"Add Level-8 Date and Time feature","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":10,"deletions":2}}}]},{"date":"2023-08-31","commitResults":[{"hash":"87ac866f782885efc36fcc7e704726e203a4445a","isMergeCommit":false,"messageTitle":"Add A-MoreOOP refactor related code as classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":329,"deletions":167}}},{"hash":"edd669a6303639c50ad3e71d24e0b9ce4deac255","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":11}}},{"hash":"c7e3b6791d8dd5a18b155db64a45a0e607803741","isMergeCommit":false,"messageTitle":"Devide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"a0af1a6f8645603182ba8da43eaada43347a1547","isMergeCommit":false,"messageTitle":"Add Gradle support for Nobita","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"426bad6210c6845f291b5656de731cd8437e8605","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":164,"deletions":7}}},{"hash":"0bfb982b590ff8a41a4ac90489c94beac84a0162","isMergeCommit":false,"messageTitle":"Add JavaDocs","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":400,"deletions":17}}},{"hash":"26253f416251bba3d747f348e93a020ec733e62b","isMergeCommit":false,"messageTitle":"Add Level-9 find task feature","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":203,"deletions":44}}}]},{"date":"2023-09-06","commitResults":[{"hash":"5ed64cc90f82072680888ac47f983329e009630a","isMergeCommit":false,"messageTitle":"Reformat JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":24}}}]}]},"authorFileTypeContributionMap":{"Seonlo99":{"java":1251,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":3,"txt":8}},"authorContributionVariance":{"Seonlo99":52449.332},"authorDisplayNameMap":{"Seonlo99":"CS2103-T16-2 ZHEN..LONG"}} diff --git a/Singa-pirate_ip_master/authorship.json b/Singa-pirate_ip_master/authorship.json index a1bf9900..d99a2c75 100644 --- a/Singa-pirate_ip_master/authorship.json +++ b/Singa-pirate_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":"Singa-pirate"},"content":" mainClass.set(\"chatbot.ChatBot\")","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" archiveBaseName \u003d \"chatbot\"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"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":{"Singa-pirate":2,"-":40}},{"path":"data/chatbot.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"[D][ ] 1 (by: 2023-12-123)","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"[D][ ] 2 (by: tmr)","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"[D][ ] 3 (by: 12 December 2023)","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"[T][ ] 4","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"[D][ ] 5 (by: 12 December 2022)","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"[E][ ] 6 (from: 4 February 2024 to: 2024-21-03)","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"[E][ ] 44 (from: 1 to: 2)","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Singa-pirate":7}},{"path":"src/main/java/chatbot/ChatBot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.ChatBotException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.FilePermissionException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.IllegalCommandException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.LocalFileException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":" * Main ChatBot class which instantiates a ChatBot object that coordinates other components.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":"public class ChatBot {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":" static final String NAME \u003d \"4F5DA2\";","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":" static final String LOCAL_DIRECTORY_PATH \u003d \"./data\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":" static final String LOCAL_FILE_PATH \u003d LOCAL_DIRECTORY_PATH + \"/chatbot.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":" private boolean isExit \u003d false; // Whether the user has indicated to exit the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":" private boolean noLocalFileAccess \u003d false; // Whether the data file cannot be accessed due to permission issue.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":" * Constructor to instantiate a new ChatBot object.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" * @param directoryPath String path to the data file\u0027s directory","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" * @param filePath String path to the data file","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" public ChatBot(String directoryPath, String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":" this.storage \u003d new Storage(directoryPath, filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" this.tasks \u003d new TaskList(storage.readData());","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" } catch (LocalFileException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" this.ui.showLoadingError(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" if (e instanceof FilePermissionException) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":" this.noLocalFileAccess \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":" private void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":" this.ui.greet();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":" String command \u003d this.ui.nextCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":" this.handleCommand(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" } catch (ChatBotException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" this.ui.output(e.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"Singa-pirate"},"content":" private void handleCommand(String command) throws ChatBotException {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Singa-pirate"},"content":" String[] words \u003d command.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Singa-pirate"},"content":" String firstWord \u003d words[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Singa-pirate"},"content":" switch (firstWord) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Singa-pirate"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Singa-pirate"},"content":" this.isExit \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Singa-pirate"},"content":" this.ui.farewell();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Singa-pirate"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Singa-pirate"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Singa-pirate"},"content":" this.ui.output(this.tasks.listTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Singa-pirate"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Singa-pirate"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Singa-pirate"},"content":" String name \u003d Parser.parseFindCommand(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Singa-pirate"},"content":" this.ui.output(this.tasks.findTasks(name));","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Singa-pirate"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Singa-pirate"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Singa-pirate"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Singa-pirate"},"content":" boolean isDone \u003d words[0].equals(\"mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Singa-pirate"},"content":" String taskString \u003d this.tasks.markAs(isDone, Parser.parseMarkCommand(words));","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Singa-pirate"},"content":" this.writeTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Singa-pirate"},"content":" this.ui.output(String.format(\"\\t%s\\n\\t%s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Singa-pirate"},"content":" isDone ? \"Nice! I\u0027ve marked this task as done:\"","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"Singa-pirate"},"content":" : \"OK, I\u0027ve marked this task as not done yet:\",","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"Singa-pirate"},"content":" taskString));","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Singa-pirate"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Singa-pirate"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Singa-pirate"},"content":" taskString \u003d this.tasks.deleteTask(Parser.parseDeleteCommand(words));","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Singa-pirate"},"content":" this.writeTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Singa-pirate"},"content":" this.ui.output(String.format(\"\\tNoted. I\u0027ve removed this task:\\n\\t%s\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Singa-pirate"},"content":" \"\\tNow you have %d tasks in the list.\",","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Singa-pirate"},"content":" taskString,","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Singa-pirate"},"content":" this.tasks.getSize()));","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Singa-pirate"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Singa-pirate"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Singa-pirate"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Singa-pirate"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Singa-pirate"},"content":" Task task \u003d words[0].equals(\"todo\")","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Singa-pirate"},"content":" ? Parser.parseTodoTaskCommand(command)","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Singa-pirate"},"content":" : words[0].equals(\"deadline\")","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Singa-pirate"},"content":" ? Parser.parseDeadlineTaskCommand(command)","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Singa-pirate"},"content":" : Parser.parseEventTaskCommand(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Singa-pirate"},"content":" this.tasks.addTask(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Singa-pirate"},"content":" this.writeTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Singa-pirate"},"content":" this.ui.output(String.format(\"\\tGot it. I\u0027ve added this task:\\n\\t\\t%s\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Singa-pirate"},"content":" \"\\n\\tNow you have %d tasks in the list\",","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Singa-pirate"},"content":" task,","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Singa-pirate"},"content":" this.tasks.getSize()","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Singa-pirate"},"content":" ));","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Singa-pirate"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Singa-pirate"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Singa-pirate"},"content":" throw new IllegalCommandException();","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Singa-pirate"},"content":" private void writeTaskList() throws LocalFileException {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Singa-pirate"},"content":" if (!noLocalFileAccess) {","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Singa-pirate"},"content":" this.storage.writeToDataFile(this.tasks.taskListToStrings());","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":115,"author":{"gitId":"Singa-pirate"},"content":" new ChatBot(ChatBot.LOCAL_DIRECTORY_PATH, ChatBot.LOCAL_FILE_PATH).run();","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":117,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Singa-pirate":114,"-":3}},{"path":"src/main/java/chatbot/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.DeadlineMissingFieldException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.DeleteMissingFieldException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.EventMissingFieldException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.FindMissingFieldException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.InvalidTaskIndexException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.MarkMissingFieldException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.TodoMissingFieldException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.DeadlineTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.EventTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.ToDoTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" * Class that contains static methods to help parse user commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":" * Parse \"find\" command from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" * @param command String which is the user\u0027s command","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" * @return task name provided as the search string","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":" * @throws FindMissingFieldException when the command does not contain any task name","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" public static String parseFindCommand(String command) throws FindMissingFieldException {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" String name \u003d command.substring(5);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" if (name.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":" throw new FindMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" return name;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" throw new FindMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":" * Parse \"mark\" or \"unmark\" command from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" * @param commandWords String array that contains the words in the command in order","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":" * @return index of the task to mark or unmark","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":" * @throws MarkMissingFieldException when the command is not in the expected format (2 words)","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":" * @throws InvalidTaskIndexException when the second word cannot be interpreted as an integer","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":" public static int parseMarkCommand(String[] commandWords) throws MarkMissingFieldException, InvalidTaskIndexException {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":" if (commandWords.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" throw new MarkMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" return Integer.parseInt(commandWords[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskIndexException();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Singa-pirate"},"content":" * Parse \"delete\" command from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Singa-pirate"},"content":" * @param commandWords String array that contains the words in the command in order","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Singa-pirate"},"content":" * @return index of the task to delete","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Singa-pirate"},"content":" * @throws DeleteMissingFieldException when the command is not in the expected format (2 words)","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Singa-pirate"},"content":" * @throws InvalidTaskIndexException when the second word cannot be interpreted as an integer","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Singa-pirate"},"content":" public static int parseDeleteCommand(String[] commandWords) throws DeleteMissingFieldException, InvalidTaskIndexException {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Singa-pirate"},"content":" if (commandWords.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Singa-pirate"},"content":" throw new DeleteMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Singa-pirate"},"content":" return Integer.parseInt(commandWords[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Singa-pirate"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskIndexException();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Singa-pirate"},"content":" * Parse \"todo\" command from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Singa-pirate"},"content":" * @param command String which is the user\u0027s command","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Singa-pirate"},"content":" * @return TodoTask instantiated with the name specified in the command","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Singa-pirate"},"content":" * @throws TodoMissingFieldException when no task name is specified in the command","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Singa-pirate"},"content":" public static Task parseTodoTaskCommand(String command) throws TodoMissingFieldException{","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Singa-pirate"},"content":" String name \u003d command.substring(5);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Singa-pirate"},"content":" if (name.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Singa-pirate"},"content":" throw new TodoMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Singa-pirate"},"content":" return new ToDoTask(command.substring(5));","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Singa-pirate"},"content":" throw new TodoMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Singa-pirate"},"content":" * Parse \"deadline\" command from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Singa-pirate"},"content":" * @param command String which is the user\u0027s command","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Singa-pirate"},"content":" * @return DeadlineTask instantiated with the name and deadline specified in the command","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Singa-pirate"},"content":" * @throws DeadlineMissingFieldException when the command does not contain name or deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Singa-pirate"},"content":" public static Task parseDeadlineTaskCommand(String command) throws DeadlineMissingFieldException {","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Singa-pirate"},"content":" int idOfBy \u003d command.indexOf(\"/by\");","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Singa-pirate"},"content":" if (idOfBy \u003d\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Singa-pirate"},"content":" throw new DeadlineMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Singa-pirate"},"content":" String name \u003d command.substring(9, idOfBy - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Singa-pirate"},"content":" String deadline \u003d command.substring(idOfBy + 4);","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Singa-pirate"},"content":" if (name.isEmpty() || deadline.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Singa-pirate"},"content":" throw new DeadlineMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"Singa-pirate"},"content":" return new DeadlineTask(name, deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Singa-pirate"},"content":" throw new DeadlineMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Singa-pirate"},"content":" * Parse \"event\" command from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Singa-pirate"},"content":" * @param command String which is the user\u0027s command","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Singa-pirate"},"content":" * @return EventTask instantiated with the name, from (time), to (time) specified in the command","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"Singa-pirate"},"content":" * @throws EventMissingFieldException when the command does not contain name, from or to","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"Singa-pirate"},"content":" public static Task parseEventTaskCommand(String command) throws EventMissingFieldException {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"Singa-pirate"},"content":" int idOfFrom \u003d command.indexOf(\"/from\");","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"Singa-pirate"},"content":" int idOfTo \u003d command.indexOf(\"/to\");","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"Singa-pirate"},"content":" if (idOfFrom \u003d\u003d -1 || idOfTo \u003d\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"Singa-pirate"},"content":" throw new EventMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"Singa-pirate"},"content":" String name \u003d command.substring(6, idOfFrom - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Singa-pirate"},"content":" String from \u003d command.substring(idOfFrom + 6, idOfTo - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"Singa-pirate"},"content":" String to \u003d command.substring(idOfTo + 4);","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"Singa-pirate"},"content":" if (name.isEmpty() || from.isEmpty() || to.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"Singa-pirate"},"content":" throw new EventMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"Singa-pirate"},"content":" return new EventTask(name, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"Singa-pirate"},"content":" throw new EventMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Singa-pirate":138}},{"path":"src/main/java/chatbot/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.FileCorruptedException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.FilePermissionException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.InvalidTaskStringException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.LocalFileException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.DeadlineTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.EventTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.ToDoTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" private final String localDirectoryPath;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" private final String localFilePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" * Constructor that instantiates a Storage object with the paths.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":" * @param directoryPath String path to the directory containing the data file","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" * @param filePath String path to the data file","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":" public Storage(String directoryPath, String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":" this.localDirectoryPath \u003d directoryPath;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" this.localFilePath \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":" private static Task parseTaskString(String taskString) throws InvalidTaskStringException {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" if (taskString.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":" String firstWord \u003d taskString.split(\" \")[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":" switch (firstWord.charAt(1)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":" return parseTodoTaskString(taskString);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":" return parseDeadlineTaskString(taskString);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" return parseEventTaskString(taskString);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Singa-pirate"},"content":" private static boolean parseTaskIsDone(String taskString) throws InvalidTaskStringException {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Singa-pirate"},"content":" switch (taskString.charAt(4)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Singa-pirate"},"content":" case \u0027X\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Singa-pirate"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Singa-pirate"},"content":" case \u0027 \u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Singa-pirate"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Singa-pirate"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Singa-pirate"},"content":" private static Task parseTodoTaskString(String taskString) throws InvalidTaskStringException {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Singa-pirate"},"content":" boolean isDone \u003d parseTaskIsDone(taskString);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Singa-pirate"},"content":" String taskName \u003d taskString.substring(7);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Singa-pirate"},"content":" return new ToDoTask(taskName, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Singa-pirate"},"content":" private static Task parseDeadlineTaskString(String taskString) throws InvalidTaskStringException {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Singa-pirate"},"content":" boolean isDone \u003d parseTaskIsDone(taskString);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Singa-pirate"},"content":" int idOfBy \u003d taskString.indexOf(\"(by:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Singa-pirate"},"content":" if (idOfBy \u003d\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Singa-pirate"},"content":" String taskName \u003d taskString.substring(7, idOfBy - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Singa-pirate"},"content":" String deadlineWholeString \u003d taskString.substring(idOfBy);","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Singa-pirate"},"content":" String deadline \u003d deadlineWholeString.substring(5, deadlineWholeString.length() - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Singa-pirate"},"content":" return new DeadlineTask(taskName, isDone, deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Singa-pirate"},"content":" private static Task parseEventTaskString(String taskString) throws InvalidTaskStringException {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Singa-pirate"},"content":" boolean isDone \u003d parseTaskIsDone(taskString);","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Singa-pirate"},"content":" int idOfFrom \u003d taskString.indexOf(\"(from:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Singa-pirate"},"content":" int idOfTo \u003d taskString.indexOf(\"to:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Singa-pirate"},"content":" if (idOfFrom \u003d\u003d -1 || idOfTo \u003d\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Singa-pirate"},"content":" String taskName \u003d taskString.substring(7, idOfFrom - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Singa-pirate"},"content":" String fromWholeString \u003d taskString.substring(idOfFrom, idOfTo);","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Singa-pirate"},"content":" String toWholeString \u003d taskString.substring(idOfTo);","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"Singa-pirate"},"content":" String from \u003d fromWholeString.substring(7, fromWholeString.length() - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"Singa-pirate"},"content":" String to \u003d toWholeString.substring(4, toWholeString.length() - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Singa-pirate"},"content":" return new EventTask(taskName, isDone, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Singa-pirate"},"content":" * Load data from the data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Singa-pirate"},"content":" * @return ArrayList of Tasks represented by the Strings in the data file","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"Singa-pirate"},"content":" * @throws LocalFileException when the file contains invalid data, or cannot be accessed due to permission issue","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"Singa-pirate"},"content":" public ArrayList\u003cTask\u003e readData() throws LocalFileException {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"Singa-pirate"},"content":" File d \u003d new File(localDirectoryPath);","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"Singa-pirate"},"content":" if (!d.exists() || !d.isDirectory()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"Singa-pirate"},"content":" Files.createDirectory(Paths.get(localDirectoryPath));","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"Singa-pirate"},"content":" File f \u003d new File(localFilePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"Singa-pirate"},"content":" if (!f.exists() || !f.isFile()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Singa-pirate"},"content":" Files.createFile(Paths.get(localFilePath));","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"Singa-pirate"},"content":" // Local File is present","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"Singa-pirate"},"content":" Scanner initialDataScanner \u003d new Scanner(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"Singa-pirate"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"Singa-pirate"},"content":" while (initialDataScanner.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"Singa-pirate"},"content":" taskList.add(parseTaskString(initialDataScanner.nextLine()));","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"Singa-pirate"},"content":" return taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"Singa-pirate"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"Singa-pirate"},"content":" throw new FilePermissionException(localFilePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskStringException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"Singa-pirate"},"content":" throw new FileCorruptedException(localFilePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"Singa-pirate"},"content":" * Rewrite the data file with the data provided.","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"Singa-pirate"},"content":" * @param data the String data to store in the data file","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"Singa-pirate"},"content":" * @throws LocalFileException when the file cannot be written due to permission issue","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"Singa-pirate"},"content":" public void writeToDataFile(String data) throws LocalFileException {","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"Singa-pirate"},"content":" FileWriter fw \u003d new FileWriter(localFilePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"Singa-pirate"},"content":" fw.write(data);","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"Singa-pirate"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"Singa-pirate"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"Singa-pirate"},"content":" throw new FilePermissionException(localFilePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Singa-pirate":158}},{"path":"src/main/java/chatbot/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.InvalidTaskIndexException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"import java.util.function.Consumer;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":" * Class that represents the list of tasks the user has created.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":" static final int MAX_NUMBER_OF_TASKS \u003d 100;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" * Constructor that instantiates a TaskList object with specified list of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":" * @param taskList the initial list of task of the TaskList object","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" * Constructor that instantiates an empty TaskList object.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" this.taskList \u003d new ArrayList\u003c\u003e(MAX_NUMBER_OF_TASKS);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" * Add a task to the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" * @param task the Task object to be added","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":" * Mark a task in the list to be completed or not completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":" * @param isDone whether to mark the task as completed or not completed","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":" * @param index index of the task to be marked","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":" * @return String representation of the task after being marked","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":" * @throws InvalidTaskIndexException when the index provided does not correspond to any task","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" public String markAs(boolean isDone, int index) throws InvalidTaskIndexException {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":" if (index \u003c 1 || index \u003e taskList.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskIndexException();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":" Task task \u003d taskList.get(index-1);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" task.markAs(isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" return task.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Singa-pirate"},"content":" * Delete a task from the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Singa-pirate"},"content":" * @param index index of the task to be deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Singa-pirate"},"content":" * @return String representation of the task being deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Singa-pirate"},"content":" * @throws InvalidTaskIndexException when the index provided does not correspond to any task","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Singa-pirate"},"content":" public String deleteTask(int index) throws InvalidTaskIndexException {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Singa-pirate"},"content":" if (index \u003c 1 || index \u003e taskList.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskIndexException();","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Singa-pirate"},"content":" Task task \u003d taskList.get(index-1);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Singa-pirate"},"content":" taskList.remove(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Singa-pirate"},"content":" return task.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Singa-pirate"},"content":" * Obtain a String representation of all the tasks in the list, each in a line.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Singa-pirate"},"content":" * @return String representation of all tasks in the list","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Singa-pirate"},"content":" public String taskListToStrings() {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Singa-pirate"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Singa-pirate"},"content":" for (Task task: taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Singa-pirate"},"content":" sb.append(task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Singa-pirate"},"content":" sb.append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Singa-pirate"},"content":" return sb.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Singa-pirate"},"content":" * Obtain an indexed String representation of all tasks, each in a line.","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Singa-pirate"},"content":" * @return indexed String representation of all tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Singa-pirate"},"content":" public String listTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Singa-pirate"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Singa-pirate"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Singa-pirate"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Singa-pirate"},"content":" sb.append(String.format(\"\\t%d.%s\\n\",","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Singa-pirate"},"content":" i+1,","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Singa-pirate"},"content":" task.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Singa-pirate"},"content":" return sb.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Singa-pirate"},"content":" * Obtain indexed String representation of tasks matched with the given name.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Singa-pirate"},"content":" * @param name the task name to match with","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Singa-pirate"},"content":" * @return indexed String representation of tasks whose names contain the provided name","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Singa-pirate"},"content":" public String findTasks(String name) {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Singa-pirate"},"content":" ArrayList\u003cTask\u003e matchedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Singa-pirate"},"content":" taskList.forEach(new Consumer\u003cTask\u003e() {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"Singa-pirate"},"content":" public void accept(Task t) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"Singa-pirate"},"content":" if (t.getName().contains(name)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Singa-pirate"},"content":" matchedTasks.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Singa-pirate"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Singa-pirate"},"content":" if (matchedTasks.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tNo task in the list matches the query.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Singa-pirate"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tHere are the matching tasks in your list:\\n\" + new TaskList(matchedTasks).listTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"Singa-pirate"},"content":" * Obtain the number of tasks in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"Singa-pirate"},"content":" * @return number of tasks in the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"Singa-pirate"},"content":" public int getSize() {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Singa-pirate"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Singa-pirate":128}},{"path":"src/main/java/chatbot/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.LocalFileException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" * Class that represents User Interface which deals with user input and output.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" static final String line \u003d \"\\t____________________________________________________________\";","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":" static final Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":" * Display a separator line in the output.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" public void showLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" * Display the specified String, followed by a separator line, in the output.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":" * @param s the String to be displayed","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" public void output(String s) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":" System.out.println(s.stripTrailing());","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" * Display the welcome message.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" public void greet() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":" this.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" System.out.println(\"\\tWelcome back, human!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":" System.out.println(\"\\tI\u0027m your personal chatBot, \" + ChatBot.NAME + \".\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":" System.out.println(\"\\tWhat can I do for you today?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":" this.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":" * Display the farewell message.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":" public void farewell() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":" output(\"\\tBye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" * Display error when an error has occurred during initiation process with the data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":" * @param e the error that has occurred","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" public void showLoadingError(LocalFileException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Singa-pirate"},"content":" * Obtains the next command as a String from user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Singa-pirate"},"content":" * @return String of the command provided by the user","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Singa-pirate"},"content":" public String nextCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Singa-pirate"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Singa-pirate":63}},{"path":"src/main/java/chatbot/exceptions/ChatBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class ChatBotException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, an error has occurred within me... Don\u0027t worry and just try again, human...\";","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":8}},{"path":"src/main/java/chatbot/exceptions/DeadlineMissingFieldException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class DeadlineMissingFieldException extends MissingFieldException{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, to create a deadline task, use deadline \u003cDescription\u003e /by \u003cDeadline\u003e\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" \"\\tThe description, /by handle and deadline cannot be empty\";","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":9}},{"path":"src/main/java/chatbot/exceptions/DeleteMissingFieldException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class DeleteMissingFieldException extends MissingFieldException{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, to delete a task, use delete\u003cindex\u003e\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" \"\\tThe index cannot be empty, and there shouldn\u0027t be any more field after the index\";","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":9}},{"path":"src/main/java/chatbot/exceptions/EventMissingFieldException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class EventMissingFieldException extends MissingFieldException{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, to create an event task, use event \u003cDescription\u003e /from \u003cfrom\u003e /to \u003cto\u003e\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" \"\\tThe description, /from handle, from, /to handle, and to cannot be empty\";","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":9}},{"path":"src/main/java/chatbot/exceptions/FileCorruptedException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class FileCorruptedException extends LocalFileException{","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" private String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" public FileCorruptedException(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" super(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, the file \" + this.filePath + \" seems to be corrupted.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":" \"\\tInitiated with empty task list.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Singa-pirate":16}},{"path":"src/main/java/chatbot/exceptions/FilePermissionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class FilePermissionException extends LocalFileException{","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" private String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" public FilePermissionException(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" super(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, an error occurred when accessing / creating / writing a local file.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":" \"\\tThe file path is \" + this.filePath +","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":" \"\\n\\tFor this session, previous data cannot be read, and current data cannot be stored.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Singa-pirate":17}},{"path":"src/main/java/chatbot/exceptions/FindMissingFieldException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class FindMissingFieldException extends MissingFieldException{","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, to find a task, use find \u003cDescription\u003e\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" \"\\tThe description cannot be empty.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Singa-pirate":9}},{"path":"src/main/java/chatbot/exceptions/IllegalCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class IllegalCommandException extends ChatBotException{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString(){","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tSorry, I\u0027m not sure what that means...\";","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":8}},{"path":"src/main/java/chatbot/exceptions/InvalidTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class InvalidTaskIndexException extends ChatBotException{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, invalid index provided.\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" \"\\tPlease provide an integer from 1 to the number of tasks in your task list.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":9}},{"path":"src/main/java/chatbot/exceptions/InvalidTaskStringException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class InvalidTaskStringException extends ChatBotException{","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tInvalid String representation of task\";","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Singa-pirate":8}},{"path":"src/main/java/chatbot/exceptions/LocalFileException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class LocalFileException extends ChatBotException{","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" private String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" public LocalFileException(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, an error occurred with file \" + this.filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Singa-pirate":13}},{"path":"src/main/java/chatbot/exceptions/MarkMissingFieldException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class MarkMissingFieldException extends MissingFieldException{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, to mark / unmark a task, use mark \u003cindex\u003e / unmark \u003cindex\u003e\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" \"\\tThe index cannot be empty, and there shouldn\u0027t be any more field after the index\";","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":9}},{"path":"src/main/java/chatbot/exceptions/MissingFieldException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public abstract class MissingFieldException extends ChatBotException{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, your command is valid, but it is missing an important field\";","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":8}},{"path":"src/main/java/chatbot/exceptions/TodoMissingFieldException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.MissingFieldException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"public class TodoMissingFieldException extends MissingFieldException {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, to create a todo task, use todo \u003cDescription\u003e\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":" \"\\tThe description cannot be empty\";","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":11}},{"path":"src/main/java/chatbot/tasks/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"public class DeadlineTask extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":" public static String type \u003d \"D\";","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" private String deadlineString;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":" private void initDeadline(String deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":" if (deadline.matches(\"\\\\d{4}-\\\\d{2}-\\\\d{2}\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" this.deadline \u003d LocalDate.parse(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":" this.deadlineString \u003d deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" this.deadlineString \u003d deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" public DeadlineTask(String name, String deadline) {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" initDeadline(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":" public DeadlineTask(String name, boolean isDone, String deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" initDeadline(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" private String parseLocalDate(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":" return date.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" return date.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":" return String.format(\"[%s][%s] %s (by: %s)\",","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" this.type,","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":" this.checkIsDone() ? \"X\" : \" \",","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" this.getName(),","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" this.deadline !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":" ? parseLocalDate(this.deadline)","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" : this.deadlineString);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":53}},{"path":"src/main/java/chatbot/tasks/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"public class EventTask extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":" public static String type \u003d \"E\";","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":" private String fromAsString;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":" private String toAsString;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":" private void initFrom(String from) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" if (from.matches(\"\\\\d{4}-\\\\d{2}-\\\\d{2}\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":" this.fromAsString \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":" this.fromAsString \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" private void initTo(String to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" if (to.matches(\"\\\\d{4}-\\\\d{2}-\\\\d{2}\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" this.toAsString \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" this.toAsString \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" public EventTask(String name, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":" initFrom(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":" initTo(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":" public EventTask(String name, boolean isDone, String from, String to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":" initFrom(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" initTo(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" private String parseLocalDate(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":" return date.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Singa-pirate"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Singa-pirate"},"content":" return date.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"Singa-pirate"},"content":" return String.format(\"[%s][%s] %s (from: %s to: %s)\",","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"Singa-pirate"},"content":" this.type,","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"Singa-pirate"},"content":" this.checkIsDone() ? \"X\" : \" \",","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"Singa-pirate"},"content":" this.getName(),","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"Singa-pirate"},"content":" this.from !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Singa-pirate"},"content":" ? parseLocalDate(this.from)","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Singa-pirate"},"content":" : this.fromAsString,","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Singa-pirate"},"content":" this.to !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Singa-pirate"},"content":" ? parseLocalDate(this.to)","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Singa-pirate"},"content":" : this.toAsString);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":72}},{"path":"src/main/java/chatbot/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" private String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" public Task(String name, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" public String getName() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" return name;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":" public boolean checkIsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" return isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" public void markAs(boolean isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":" return String.format(\"[%s] %s\",","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" this.checkIsDone() ? \"X\" : \" \",","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" this.getName());","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":34}},{"path":"src/main/java/chatbot/tasks/ToDoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class ToDoTask extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" public static String type \u003d \"T\";","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public ToDoTask(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":" public ToDoTask(String name, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":" return String.format(\"[%s][%s] %s\",","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":" this.type,","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" this.checkIsDone() ? \"X\" : \" \",","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" this.getName());","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":19}},{"path":"src/test/java/chatbot/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.EventTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":" public void markTest1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":" String[] commandWords \u003d new String[]{\"mark\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" Parser.parseMarkCommand(commandWords);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(e instanceof MarkMissingFieldException);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" public void markTest2() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" String[] commandWords \u003d new String[]{\"mark\", \"2103\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":" assertEquals(Parser.parseMarkCommand(commandWords), 2103);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" public void markTest3() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":" String[] commandWords \u003d new String[]{\"mark\", \"a1\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":" Parser.parseMarkCommand(commandWords);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" public void deleteTest1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":" String[] commandWords \u003d new String[]{\"delete\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Singa-pirate"},"content":" Parser.parseDeleteCommand(commandWords);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(e instanceof DeleteMissingFieldException);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Singa-pirate"},"content":" public void deleteTest2() {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Singa-pirate"},"content":" String[] commandWords \u003d new String[]{\"delete\", \"2103\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Singa-pirate"},"content":" assertEquals(Parser.parseDeleteCommand(commandWords), 2103);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Singa-pirate"},"content":" public void deleteTest3() {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Singa-pirate"},"content":" String[] commandWords \u003d new String[]{\"delete\", \"a1\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Singa-pirate"},"content":" Parser.parseDeleteCommand(commandWords);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Singa-pirate"},"content":" public void eventTest1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Singa-pirate"},"content":" String command \u003d \"event /from 1 /to 2\";","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Singa-pirate"},"content":" Parser.parseEventTaskCommand(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(e instanceof EventMissingFieldException);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Singa-pirate"},"content":" public void eventTest2() {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Singa-pirate"},"content":" String command \u003d \"event 1 /from /to 2\";","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Singa-pirate"},"content":" Parser.parseEventTaskCommand(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(e instanceof EventMissingFieldException);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Singa-pirate"},"content":" public void eventTest3() {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Singa-pirate"},"content":" String command \u003d \"event 1 /from 2 /to\";","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Singa-pirate"},"content":" Parser.parseEventTaskCommand(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(e instanceof EventMissingFieldException);","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"Singa-pirate"},"content":" public void eventTest4() {","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"Singa-pirate"},"content":" String command \u003d \"event 1 /from 2 /to 3\";","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"Singa-pirate"},"content":" Task task \u003d Parser.parseEventTaskCommand(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(task instanceof EventTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"Singa-pirate"},"content":" public void eventTest5() {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"Singa-pirate"},"content":" String command \u003d \"event 1 /from 2 /to 3\";","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"Singa-pirate"},"content":" Task task \u003d Parser.parseEventTaskCommand(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"Singa-pirate"},"content":" assertEquals(task.getName(), \"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Singa-pirate":143}},{"path":"src/test/java/chatbot/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.InvalidTaskIndexException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.DeadlineTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.EventTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.ToDoTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" public void getSizeTest1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":" assertEquals(taskList.getSize(), 0);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" public void getSizeTest2() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" taskList.addTask(new ToDoTask(\"1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" taskList.addTask(new DeadlineTask(\"2\", \"tmr\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":" taskList.addTask(new EventTask(\"3\", \"4\", \"5\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" assertEquals(taskList.getSize(), 3);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" public void markAsTest1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" taskList.addTask(new ToDoTask(\"1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" taskList.markAs(true, 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":" public void markAsTest2() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":" taskList.addTask(new ToDoTask(\"1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":" taskList.markAs(true, 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" assertEquals(\"[T][X] 1\\n\", taskList.taskListToStrings());","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Singa-pirate"},"content":" public void markAsTest3() {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Singa-pirate"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Singa-pirate"},"content":" taskList.addTask(new ToDoTask(\"1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Singa-pirate"},"content":" taskList.markAs(false, 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Singa-pirate"},"content":" assertEquals(\"[T][ ] 1\\n\", taskList.taskListToStrings());","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Singa-pirate"},"content":" public void markAsTest4() {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Singa-pirate"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Singa-pirate"},"content":" taskList.addTask(new ToDoTask(\"1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Singa-pirate"},"content":" taskList.markAs(false, 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Singa-pirate"},"content":" taskList.markAs(true, 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Singa-pirate"},"content":" assertEquals(\"[T][X] 1\\n\", taskList.taskListToStrings());","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Singa-pirate":79}},{"path":"text-ui-test/data/chatbot.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"[E][ ] task 2 (from: 25 Aug to: 27 Aug)","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"[D][X] task 5 (by: 26 Aug)","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"[E][X] 6 (from: 2023 to: 2024)","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Singa-pirate":3}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"hi","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"todo task 1","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"event task 2 /from 25 Aug /to 27 Aug","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"todo task 3","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"deadline task 4 /by tmr","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"deadline task 5 /by 26 Aug","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"unmark 5","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"mark 5","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":"mark 6","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":"mark -1","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":"mark abc","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":"mark","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":"mark 2 3","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":"deadline /by 2","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":"deadline 1 2","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":"deadline 1 /by","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":"event /from 2 /to 3","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":"event 1 2 /to 3","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":"event 1 /from /to 3","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":"event 1 /from 2 3","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":"event 1 /from 2 /to","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":"delete","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":"delete 10","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":"delete -1","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":"delete abc","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":"delete 4","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":"event 6 /from 2023 /to 2024","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":40}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"if exist .\\data\\chatbot.txt del .\\data\\chatbot.txt","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\chatbot\\*.java","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\chatbot\\exceptions\\*.java","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\chatbot\\tasks\\*.java","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":"java -classpath ..\\bin chatbot.ChatBot \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Singa-pirate":5,"-":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":"Singa-pirate"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" mainClass.set(\"chatbot.ChatBot\")","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":"Singa-pirate"},"content":" archiveBaseName \u003d \"chatbot\"","lastModifiedDate":"2023-08-31"},{"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":"Singa-pirate"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Singa-pirate":7,"-":40}},{"path":"data/chatbot.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"[D][ ] 1 (by: 2023-12-123)","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"[D][ ] 2 (by: tmr)","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"[D][ ] 3 (by: 12 December 2023)","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"[T][ ] 4","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"[D][ ] 5 (by: 12 December 2022)","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"[E][ ] 6 (from: 4 February 2024 to: 2024-21-03)","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"[E][ ] 44 (from: 1 to: 2)","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Singa-pirate":7}},{"path":"src/main/java/chatbot/ChatBot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.ChatBotException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.FilePermissionException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.IllegalCommandException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.LocalFileException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":" * Main ChatBot class which instantiates a ChatBot object that coordinates other components.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":"public class ChatBot {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":" static final String NAME \u003d \"4F5DA2\";","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":" static final String LOCAL_DIRECTORY_PATH \u003d \"./data\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":" static final String LOCAL_FILE_PATH \u003d LOCAL_DIRECTORY_PATH + \"/chatbot.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":" private boolean isExit \u003d false; // Whether the user has indicated to exit the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":" private boolean noLocalFileAccess \u003d false; // Whether the data file cannot be accessed due to permission issue.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":" * Constructor to instantiate a new ChatBot object.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" * @param directoryPath String path to the data file\u0027s directory","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" * @param filePath String path to the data file","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" public ChatBot(String directoryPath, String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":" this.storage \u003d new Storage(directoryPath, filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" this.tasks \u003d new TaskList(storage.readData());","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" } catch (LocalFileException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" this.ui.showLoadingError(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" if (e instanceof FilePermissionException) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":" this.noLocalFileAccess \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":" private void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":" this.ui.greet();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":" String command \u003d this.ui.nextCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":" this.handleCommand(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" } catch (ChatBotException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" this.ui.output(e.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"Singa-pirate"},"content":" private void handleCommand(String command) throws ChatBotException {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Singa-pirate"},"content":" String[] words \u003d command.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Singa-pirate"},"content":" String firstWord \u003d words[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Singa-pirate"},"content":" switch (firstWord) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Singa-pirate"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Singa-pirate"},"content":" this.isExit \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Singa-pirate"},"content":" this.ui.farewell();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Singa-pirate"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Singa-pirate"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Singa-pirate"},"content":" this.ui.output(this.tasks.listTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Singa-pirate"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Singa-pirate"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Singa-pirate"},"content":" String name \u003d Parser.parseFindCommand(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Singa-pirate"},"content":" this.ui.output(this.tasks.findTasks(name));","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Singa-pirate"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Singa-pirate"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Singa-pirate"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Singa-pirate"},"content":" boolean isDone \u003d words[0].equals(\"mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Singa-pirate"},"content":" String taskString \u003d this.tasks.markAs(isDone, Parser.parseMarkCommand(words));","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Singa-pirate"},"content":" this.writeTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Singa-pirate"},"content":" this.ui.output(String.format(\"\\t%s\\n\\t%s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Singa-pirate"},"content":" isDone ? \"Nice! I\u0027ve marked this task as done:\"","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"Singa-pirate"},"content":" : \"OK, I\u0027ve marked this task as not done yet:\",","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"Singa-pirate"},"content":" taskString));","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Singa-pirate"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Singa-pirate"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Singa-pirate"},"content":" taskString \u003d this.tasks.deleteTask(Parser.parseDeleteCommand(words));","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Singa-pirate"},"content":" this.writeTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Singa-pirate"},"content":" this.ui.output(String.format(\"\\tNoted. I\u0027ve removed this task:\\n\\t%s\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"Singa-pirate"},"content":" + \"\\tNow you have %d tasks in the list.\",","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"Singa-pirate"},"content":" taskString,","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Singa-pirate"},"content":" this.tasks.getSize()));","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Singa-pirate"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Singa-pirate"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Singa-pirate"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Singa-pirate"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Singa-pirate"},"content":" Task task \u003d words[0].equals(\"todo\")","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Singa-pirate"},"content":" ? Parser.parseTodoTaskCommand(command)","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Singa-pirate"},"content":" : words[0].equals(\"deadline\")","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Singa-pirate"},"content":" ? Parser.parseDeadlineTaskCommand(command)","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Singa-pirate"},"content":" : Parser.parseEventTaskCommand(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Singa-pirate"},"content":" this.tasks.addTask(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Singa-pirate"},"content":" this.writeTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Singa-pirate"},"content":" this.ui.output(String.format(\"\\tGot it. I\u0027ve added this task:\\n\\t\\t%s\"","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"Singa-pirate"},"content":" + \"\\n\\tNow you have %d tasks in the list\",","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"Singa-pirate"},"content":" task,","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Singa-pirate"},"content":" this.tasks.getSize()","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Singa-pirate"},"content":" ));","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Singa-pirate"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Singa-pirate"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Singa-pirate"},"content":" throw new IllegalCommandException();","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Singa-pirate"},"content":" private void writeTaskList() throws LocalFileException {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Singa-pirate"},"content":" if (!noLocalFileAccess) {","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Singa-pirate"},"content":" this.storage.writeToDataFile(this.tasks.taskListToStrings());","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":115,"author":{"gitId":"Singa-pirate"},"content":" new ChatBot(ChatBot.LOCAL_DIRECTORY_PATH, ChatBot.LOCAL_FILE_PATH).run();","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":117,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Singa-pirate":114,"-":3}},{"path":"src/main/java/chatbot/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.DeadlineMissingFieldException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.DeleteMissingFieldException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.EventMissingFieldException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.FindMissingFieldException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.InvalidTaskIndexException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.MarkMissingFieldException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.TodoMissingFieldException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.DeadlineTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.EventTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.ToDoTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" * Class that contains static methods to help parse user commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":" * Parse \"find\" command from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" * @param command String which is the user\u0027s command","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" * @return task name provided as the search string","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":" * @throws FindMissingFieldException when the command does not contain any task name","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" public static String parseFindCommand(String command) throws FindMissingFieldException {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" String name \u003d command.substring(5);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" if (name.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":" throw new FindMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" return name;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" throw new FindMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":" * Parse \"mark\" or \"unmark\" command from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" * @param commandWords String array that contains the words in the command in order","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":" * @return index of the task to mark or unmark","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":" * @throws MarkMissingFieldException when the command is not in the expected format (2 words)","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":" * @throws InvalidTaskIndexException when the second word cannot be interpreted as an integer","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":" public static int parseMarkCommand(String[] commandWords)","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":" throws MarkMissingFieldException, InvalidTaskIndexException {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" if (commandWords.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":" throw new MarkMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":" return Integer.parseInt(commandWords[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskIndexException();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Singa-pirate"},"content":" * Parse \"delete\" command from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Singa-pirate"},"content":" * @param commandWords String array that contains the words in the command in order","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Singa-pirate"},"content":" * @return index of the task to delete","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Singa-pirate"},"content":" * @throws DeleteMissingFieldException when the command is not in the expected format (2 words)","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Singa-pirate"},"content":" * @throws InvalidTaskIndexException when the second word cannot be interpreted as an integer","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Singa-pirate"},"content":" public static int parseDeleteCommand(String[] commandWords)","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Singa-pirate"},"content":" throws DeleteMissingFieldException, InvalidTaskIndexException {","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"Singa-pirate"},"content":" if (commandWords.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Singa-pirate"},"content":" throw new DeleteMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Singa-pirate"},"content":" return Integer.parseInt(commandWords[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Singa-pirate"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskIndexException();","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Singa-pirate"},"content":" * Parse \"todo\" command from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Singa-pirate"},"content":" * @param command String which is the user\u0027s command","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Singa-pirate"},"content":" * @return TodoTask instantiated with the name specified in the command","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Singa-pirate"},"content":" * @throws TodoMissingFieldException when no task name is specified in the command","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Singa-pirate"},"content":" public static Task parseTodoTaskCommand(String command) throws TodoMissingFieldException {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Singa-pirate"},"content":" String name \u003d command.substring(5);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Singa-pirate"},"content":" if (name.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Singa-pirate"},"content":" throw new TodoMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Singa-pirate"},"content":" return new ToDoTask(command.substring(5));","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Singa-pirate"},"content":" throw new TodoMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Singa-pirate"},"content":" * Parse \"deadline\" command from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Singa-pirate"},"content":" * @param command String which is the user\u0027s command","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Singa-pirate"},"content":" * @return DeadlineTask instantiated with the name and deadline specified in the command","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Singa-pirate"},"content":" * @throws DeadlineMissingFieldException when the command does not contain name or deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Singa-pirate"},"content":" public static Task parseDeadlineTaskCommand(String command) throws DeadlineMissingFieldException {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Singa-pirate"},"content":" int idOfBy \u003d command.indexOf(\"/by\");","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Singa-pirate"},"content":" if (idOfBy \u003d\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Singa-pirate"},"content":" throw new DeadlineMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Singa-pirate"},"content":" String name \u003d command.substring(9, idOfBy - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Singa-pirate"},"content":" String deadline \u003d command.substring(idOfBy + 4);","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"Singa-pirate"},"content":" if (name.isEmpty() || deadline.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"Singa-pirate"},"content":" throw new DeadlineMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Singa-pirate"},"content":" return new DeadlineTask(name, deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Singa-pirate"},"content":" throw new DeadlineMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Singa-pirate"},"content":" * Parse \"event\" command from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"Singa-pirate"},"content":" * @param command String which is the user\u0027s command","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Singa-pirate"},"content":" * @return EventTask instantiated with the name, from (time), to (time) specified in the command","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"Singa-pirate"},"content":" * @throws EventMissingFieldException when the command does not contain name, from or to","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"Singa-pirate"},"content":" public static Task parseEventTaskCommand(String command) throws EventMissingFieldException {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"Singa-pirate"},"content":" int idOfFrom \u003d command.indexOf(\"/from\");","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"Singa-pirate"},"content":" int idOfTo \u003d command.indexOf(\"/to\");","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Singa-pirate"},"content":" if (idOfFrom \u003d\u003d -1 || idOfTo \u003d\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"Singa-pirate"},"content":" throw new EventMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"Singa-pirate"},"content":" String name \u003d command.substring(6, idOfFrom - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"Singa-pirate"},"content":" String from \u003d command.substring(idOfFrom + 6, idOfTo - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"Singa-pirate"},"content":" String to \u003d command.substring(idOfTo + 4);","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"Singa-pirate"},"content":" if (name.isEmpty() || from.isEmpty() || to.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"Singa-pirate"},"content":" throw new EventMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"Singa-pirate"},"content":" return new EventTask(name, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"Singa-pirate"},"content":" throw new EventMissingFieldException();","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Singa-pirate":140}},{"path":"src/main/java/chatbot/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.FileCorruptedException;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.FilePermissionException;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.InvalidTaskStringException;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.LocalFileException;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.DeadlineTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.EventTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.ToDoTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" * Class that interact with user\u0027s local storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" private final String localDirectoryPath;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" private final String localFilePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" * Constructor that instantiates a Storage object with the paths.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":" * @param directoryPath String path to the directory containing the data file","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":" * @param filePath String path to the data file","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" public Storage(String directoryPath, String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" this.localDirectoryPath \u003d directoryPath;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":" this.localFilePath \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":" private static Task parseTaskString(String taskString) throws InvalidTaskStringException {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":" if (taskString.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":" String firstWord \u003d taskString.split(\" \")[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":" switch (firstWord.charAt(1)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":" return parseTodoTaskString(taskString);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":" return parseDeadlineTaskString(taskString);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" return parseEventTaskString(taskString);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Singa-pirate"},"content":" private static boolean parseTaskIsDone(String taskString) throws InvalidTaskStringException {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Singa-pirate"},"content":" switch (taskString.charAt(4)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Singa-pirate"},"content":" case \u0027X\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Singa-pirate"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Singa-pirate"},"content":" case \u0027 \u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Singa-pirate"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Singa-pirate"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Singa-pirate"},"content":" private static Task parseTodoTaskString(String taskString) throws InvalidTaskStringException {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Singa-pirate"},"content":" boolean isDone \u003d parseTaskIsDone(taskString);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Singa-pirate"},"content":" String taskName \u003d taskString.substring(7);","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Singa-pirate"},"content":" return new ToDoTask(taskName, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Singa-pirate"},"content":" private static Task parseDeadlineTaskString(String taskString) throws InvalidTaskStringException {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Singa-pirate"},"content":" boolean isDone \u003d parseTaskIsDone(taskString);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Singa-pirate"},"content":" int idOfBy \u003d taskString.indexOf(\"(by:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Singa-pirate"},"content":" if (idOfBy \u003d\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Singa-pirate"},"content":" String taskName \u003d taskString.substring(7, idOfBy - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Singa-pirate"},"content":" String deadlineWholeString \u003d taskString.substring(idOfBy);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Singa-pirate"},"content":" String deadline \u003d deadlineWholeString.substring(5, deadlineWholeString.length() - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Singa-pirate"},"content":" return new DeadlineTask(taskName, isDone, deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Singa-pirate"},"content":" private static Task parseEventTaskString(String taskString) throws InvalidTaskStringException {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Singa-pirate"},"content":" boolean isDone \u003d parseTaskIsDone(taskString);","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Singa-pirate"},"content":" int idOfFrom \u003d taskString.indexOf(\"(from:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Singa-pirate"},"content":" int idOfTo \u003d taskString.indexOf(\"to:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Singa-pirate"},"content":" if (idOfFrom \u003d\u003d -1 || idOfTo \u003d\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"Singa-pirate"},"content":" String taskName \u003d taskString.substring(7, idOfFrom - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"Singa-pirate"},"content":" String fromWholeString \u003d taskString.substring(idOfFrom, idOfTo);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Singa-pirate"},"content":" String toWholeString \u003d taskString.substring(idOfTo);","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Singa-pirate"},"content":" String from \u003d fromWholeString.substring(7, fromWholeString.length() - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Singa-pirate"},"content":" String to \u003d toWholeString.substring(4, toWholeString.length() - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Singa-pirate"},"content":" return new EventTask(taskName, isDone, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Singa-pirate"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskStringException();","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Singa-pirate"},"content":" * Load data from the data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"Singa-pirate"},"content":" * @return ArrayList of Tasks represented by the Strings in the data file","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"Singa-pirate"},"content":" * @throws LocalFileException when the file contains invalid data, or cannot be accessed due to permission issue","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"Singa-pirate"},"content":" public ArrayList\u003cTask\u003e readData() throws LocalFileException {","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Singa-pirate"},"content":" File d \u003d new File(localDirectoryPath);","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"Singa-pirate"},"content":" if (!d.exists() || !d.isDirectory()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"Singa-pirate"},"content":" Files.createDirectory(Paths.get(localDirectoryPath));","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"Singa-pirate"},"content":" File f \u003d new File(localFilePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"Singa-pirate"},"content":" if (!f.exists() || !f.isFile()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"Singa-pirate"},"content":" Files.createFile(Paths.get(localFilePath));","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"Singa-pirate"},"content":" // Local File is present","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"Singa-pirate"},"content":" Scanner initialDataScanner \u003d new Scanner(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"Singa-pirate"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"Singa-pirate"},"content":" while (initialDataScanner.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"Singa-pirate"},"content":" taskList.add(parseTaskString(initialDataScanner.nextLine()));","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"Singa-pirate"},"content":" return taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"Singa-pirate"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"Singa-pirate"},"content":" throw new FilePermissionException(localFilePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskStringException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"Singa-pirate"},"content":" throw new FileCorruptedException(localFilePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"Singa-pirate"},"content":" * Rewrite the data file with the data provided.","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"Singa-pirate"},"content":" * @param data the String data to store in the data file","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"Singa-pirate"},"content":" * @throws LocalFileException when the file cannot be written due to permission issue","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"Singa-pirate"},"content":" public void writeToDataFile(String data) throws LocalFileException {","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"Singa-pirate"},"content":" FileWriter fw \u003d new FileWriter(localFilePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"Singa-pirate"},"content":" fw.write(data);","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"Singa-pirate"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"Singa-pirate"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"Singa-pirate"},"content":" throw new FilePermissionException(localFilePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Singa-pirate":161}},{"path":"src/main/java/chatbot/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"import java.util.function.Consumer;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.InvalidTaskIndexException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":" * Class that represents the list of tasks the user has created.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":" public static final int MAX_NUMBER_OF_TASKS \u003d 100;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" * Constructor that instantiates a TaskList object with specified list of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":" * @param taskList the initial list of task of the TaskList object","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" * Constructor that instantiates an empty TaskList object.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" this.taskList \u003d new ArrayList\u003c\u003e(MAX_NUMBER_OF_TASKS);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" * Add a task to the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" * @param task the Task object to be added","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":" * Mark a task in the list to be completed or not completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":" * @param isDone whether to mark the task as completed or not completed","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":" * @param index index of the task to be marked","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":" * @return String representation of the task after being marked","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":" * @throws InvalidTaskIndexException when the index provided does not correspond to any task","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" public String markAs(boolean isDone, int index) throws InvalidTaskIndexException {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":" if (index \u003c 1 || index \u003e taskList.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskIndexException();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":" Task task \u003d taskList.get(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" task.markAs(isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" return task.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Singa-pirate"},"content":" * Delete a task from the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Singa-pirate"},"content":" * @param index index of the task to be deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Singa-pirate"},"content":" * @return String representation of the task being deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Singa-pirate"},"content":" * @throws InvalidTaskIndexException when the index provided does not correspond to any task","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Singa-pirate"},"content":" public String deleteTask(int index) throws InvalidTaskIndexException {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Singa-pirate"},"content":" if (index \u003c 1 || index \u003e taskList.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Singa-pirate"},"content":" throw new InvalidTaskIndexException();","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Singa-pirate"},"content":" Task task \u003d taskList.get(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Singa-pirate"},"content":" taskList.remove(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Singa-pirate"},"content":" return task.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Singa-pirate"},"content":" * Obtain a String representation of all the tasks in the list, each in a line.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Singa-pirate"},"content":" * @return String representation of all tasks in the list","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Singa-pirate"},"content":" public String taskListToStrings() {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Singa-pirate"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Singa-pirate"},"content":" for (Task task: taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Singa-pirate"},"content":" sb.append(task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Singa-pirate"},"content":" sb.append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Singa-pirate"},"content":" return sb.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Singa-pirate"},"content":" * Obtain an indexed String representation of all tasks, each in a line.","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Singa-pirate"},"content":" * @return indexed String representation of all tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Singa-pirate"},"content":" public String listTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Singa-pirate"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Singa-pirate"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Singa-pirate"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Singa-pirate"},"content":" sb.append(String.format(\"\\t%d.%s\\n\",","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Singa-pirate"},"content":" i + 1,","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Singa-pirate"},"content":" task.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Singa-pirate"},"content":" return sb.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Singa-pirate"},"content":" * Obtain indexed String representation of tasks matched with the given name.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Singa-pirate"},"content":" * @param name the task name to match with","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Singa-pirate"},"content":" * @return indexed String representation of tasks whose names contain the provided name","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Singa-pirate"},"content":" public String findTasks(String name) {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Singa-pirate"},"content":" ArrayList\u003cTask\u003e matchedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Singa-pirate"},"content":" taskList.forEach(new Consumer\u003cTask\u003e() {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"Singa-pirate"},"content":" public void accept(Task t) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"Singa-pirate"},"content":" if (t.getName().contains(name)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Singa-pirate"},"content":" matchedTasks.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Singa-pirate"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Singa-pirate"},"content":" if (matchedTasks.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tNo task in the list matches the query.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Singa-pirate"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tHere are the matching tasks in your list:\\n\" + new TaskList(matchedTasks).listTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"Singa-pirate"},"content":" * Obtain the number of tasks in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"Singa-pirate"},"content":" * @return number of tasks in the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"Singa-pirate"},"content":" public int getSize() {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Singa-pirate"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Singa-pirate":128}},{"path":"src/main/java/chatbot/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.LocalFileException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" * Class that represents User Interface which deals with user input and output.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" private static final String line \u003d \"\\t____________________________________________________________\";","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":" private static final Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":" * Display a separator line in the output.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" public void showLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" * Display the specified String, followed by a separator line, in the output.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":" * @param s the String to be displayed","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" public void output(String s) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":" System.out.println(s.stripTrailing());","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" * Display the welcome message.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" public void greet() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":" this.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" System.out.println(\"\\tWelcome back, human!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":" System.out.println(\"\\tI\u0027m your personal chatBot, \" + ChatBot.NAME + \".\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":" System.out.println(\"\\tWhat can I do for you today?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":" this.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":" * Display the farewell message.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":" public void farewell() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":" output(\"\\tBye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" * Display error when an error has occurred during initiation process with the data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":" * @param e the error that has occurred","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" public void showLoadingError(LocalFileException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Singa-pirate"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Singa-pirate"},"content":" * Obtains the next command as a String from user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Singa-pirate"},"content":" * @return String of the command provided by the user","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Singa-pirate"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Singa-pirate"},"content":" public String nextCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Singa-pirate"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Singa-pirate":63}},{"path":"src/main/java/chatbot/exceptions/ChatBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class ChatBotException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, an error has occurred within me... Don\u0027t worry and just try again, human...\";","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":8}},{"path":"src/main/java/chatbot/exceptions/DeadlineMissingFieldException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class DeadlineMissingFieldException extends MissingFieldException {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, to create a deadline task, use deadline \u003cDescription\u003e /by \u003cDeadline\u003e\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" + \"\\tThe description, /by handle and deadline cannot be empty\";","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":9}},{"path":"src/main/java/chatbot/exceptions/DeleteMissingFieldException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class DeleteMissingFieldException extends MissingFieldException {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, to delete a task, use delete\u003cindex\u003e\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" + \"\\tThe index cannot be empty, and there shouldn\u0027t be any more field after the index\";","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":9}},{"path":"src/main/java/chatbot/exceptions/EventMissingFieldException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class EventMissingFieldException extends MissingFieldException {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, to create an event task, use event \u003cDescription\u003e /from \u003cfrom\u003e /to \u003cto\u003e\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" + \"\\tThe description, /from handle, from, /to handle, and to cannot be empty\";","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":9}},{"path":"src/main/java/chatbot/exceptions/FileCorruptedException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class FileCorruptedException extends LocalFileException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" private String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" public FileCorruptedException(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" super(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, the file \" + this.filePath + \" seems to be corrupted.\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":" + \"\\tInitiated with empty task list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Singa-pirate":16}},{"path":"src/main/java/chatbot/exceptions/FilePermissionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class FilePermissionException extends LocalFileException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" private String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" public FilePermissionException(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" super(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, an error occurred when accessing / creating / writing a local file.\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":" + \"\\tThe file path is \" + this.filePath","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":" + \"\\n\\tFor this session, previous data cannot be read, and current data cannot be stored.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Singa-pirate":17}},{"path":"src/main/java/chatbot/exceptions/FindMissingFieldException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class FindMissingFieldException extends MissingFieldException {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, to find a task, use find \u003cDescription\u003e\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" + \"\\tThe description cannot be empty.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Singa-pirate":9}},{"path":"src/main/java/chatbot/exceptions/IllegalCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class IllegalCommandException extends ChatBotException {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tSorry, I\u0027m not sure what that means...\";","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":8}},{"path":"src/main/java/chatbot/exceptions/InvalidTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class InvalidTaskIndexException extends ChatBotException {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, invalid index provided.\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" + \"\\tPlease provide an integer from 1 to the number of tasks in your task list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":9}},{"path":"src/main/java/chatbot/exceptions/InvalidTaskStringException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class InvalidTaskStringException extends ChatBotException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tInvalid String representation of task\";","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Singa-pirate":8}},{"path":"src/main/java/chatbot/exceptions/LocalFileException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class LocalFileException extends ChatBotException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" private String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" public LocalFileException(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, an error occurred with file \" + this.filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Singa-pirate":13}},{"path":"src/main/java/chatbot/exceptions/MarkMissingFieldException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class MarkMissingFieldException extends MissingFieldException {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, to mark / unmark a task, use mark \u003cindex\u003e / unmark \u003cindex\u003e\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" + \"\\tThe index cannot be empty, and there shouldn\u0027t be any more field after the index\";","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":9}},{"path":"src/main/java/chatbot/exceptions/MissingFieldException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public abstract class MissingFieldException extends ChatBotException {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, your command is valid, but it is missing an important field\";","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":8}},{"path":"src/main/java/chatbot/exceptions/TodoMissingFieldException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class TodoMissingFieldException extends MissingFieldException {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" return \"\\tOOPS, to create a todo task, use todo \u003cDescription\u003e\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" + \"\\tThe description cannot be empty\";","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":9}},{"path":"src/main/java/chatbot/tasks/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":" private static String type \u003d \"D\";","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":" private String deadlineString;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":" private void initDeadline(String deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":" if (deadline.matches(\"\\\\d{4}-\\\\d{2}-\\\\d{2}\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" this.deadline \u003d LocalDate.parse(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":" this.deadlineString \u003d deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" this.deadlineString \u003d deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":" public DeadlineTask(String name, String deadline) {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" initDeadline(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" public DeadlineTask(String name, boolean isDone, String deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" initDeadline(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":" private String parseLocalDate(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":" return date.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":" return date.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" return String.format(\"[%s][%s] %s (by: %s)\",","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":" this.type,","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" this.checkIsDone() ? \"X\" : \" \",","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" this.getName(),","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":" this.deadline !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" ? parseLocalDate(this.deadline)","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" : this.deadlineString);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":54}},{"path":"src/main/java/chatbot/tasks/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":" private static String type \u003d \"E\";","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":" private String fromAsString;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":" private String toAsString;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":" private void initFrom(String from) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" if (from.matches(\"\\\\d{4}-\\\\d{2}-\\\\d{2}\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":" this.fromAsString \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":" this.fromAsString \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" private void initTo(String to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" if (to.matches(\"\\\\d{4}-\\\\d{2}-\\\\d{2}\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" this.toAsString \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" this.toAsString \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" public EventTask(String name, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":" initFrom(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":" initTo(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":" public EventTask(String name, boolean isDone, String from, String to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":" initFrom(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" initTo(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" private String parseLocalDate(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":" return date.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Singa-pirate"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Singa-pirate"},"content":" return date.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"Singa-pirate"},"content":" return String.format(\"[%s][%s] %s (from: %s to: %s)\",","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"Singa-pirate"},"content":" this.type,","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"Singa-pirate"},"content":" this.checkIsDone() ? \"X\" : \" \",","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"Singa-pirate"},"content":" this.getName(),","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"Singa-pirate"},"content":" this.from !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Singa-pirate"},"content":" ? parseLocalDate(this.from)","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Singa-pirate"},"content":" : this.fromAsString,","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Singa-pirate"},"content":" this.to !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Singa-pirate"},"content":" ? parseLocalDate(this.to)","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Singa-pirate"},"content":" : this.toAsString);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":72}},{"path":"src/main/java/chatbot/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" private String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" public Task(String name, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" public String getName() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" return name;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":" public boolean checkIsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" return isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" public void markAs(boolean isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":" return String.format(\"[%s] %s\",","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" this.checkIsDone() ? \"X\" : \" \",","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" this.getName());","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":34}},{"path":"src/main/java/chatbot/tasks/ToDoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"public class ToDoTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":" private static String type \u003d \"T\";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":" public ToDoTask(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":" public ToDoTask(String name, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":" super(name, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":" return String.format(\"[%s][%s] %s\",","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":" this.type,","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":" this.checkIsDone() ? \"X\" : \" \",","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":" this.getName());","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":19}},{"path":"src/test/java/chatbot/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.DeleteMissingFieldException;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.EventMissingFieldException;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.InvalidTaskIndexException;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.MarkMissingFieldException;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.MissingFieldException;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.EventTask;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":" public void markTest1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":" String[] commandWords \u003d new String[]{\"mark\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" Parser.parseMarkCommand(commandWords);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(e instanceof MarkMissingFieldException);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" public void markTest2() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":" String[] commandWords \u003d new String[]{\"mark\", \"2103\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" assertEquals(Parser.parseMarkCommand(commandWords), 2103);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":" public void markTest3() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":" String[] commandWords \u003d new String[]{\"mark\", \"a1\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":" Parser.parseMarkCommand(commandWords);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Singa-pirate"},"content":" public void deleteTest1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Singa-pirate"},"content":" String[] commandWords \u003d new String[]{\"delete\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Singa-pirate"},"content":" Parser.parseDeleteCommand(commandWords);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(e instanceof DeleteMissingFieldException);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Singa-pirate"},"content":" public void deleteTest2() {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Singa-pirate"},"content":" String[] commandWords \u003d new String[]{\"delete\", \"2103\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Singa-pirate"},"content":" assertEquals(Parser.parseDeleteCommand(commandWords), 2103);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Singa-pirate"},"content":" public void deleteTest3() {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Singa-pirate"},"content":" String[] commandWords \u003d new String[]{\"delete\", \"a1\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Singa-pirate"},"content":" Parser.parseDeleteCommand(commandWords);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Singa-pirate"},"content":" public void eventTest1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Singa-pirate"},"content":" String command \u003d \"event /from 1 /to 2\";","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Singa-pirate"},"content":" Parser.parseEventTaskCommand(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(e instanceof EventMissingFieldException);","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Singa-pirate"},"content":" public void eventTest2() {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"Singa-pirate"},"content":" String command \u003d \"event 1 /from /to 2\";","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"Singa-pirate"},"content":" Parser.parseEventTaskCommand(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(e instanceof EventMissingFieldException);","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Singa-pirate"},"content":" public void eventTest3() {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"Singa-pirate"},"content":" String command \u003d \"event 1 /from 2 /to\";","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"Singa-pirate"},"content":" Parser.parseEventTaskCommand(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(e instanceof EventMissingFieldException);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Singa-pirate"},"content":" public void eventTest4() {","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"Singa-pirate"},"content":" String command \u003d \"event 1 /from 2 /to 3\";","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"Singa-pirate"},"content":" Task task \u003d Parser.parseEventTaskCommand(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(task instanceof EventTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"Singa-pirate"},"content":" public void eventTest5() {","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"Singa-pirate"},"content":" String command \u003d \"event 1 /from 2 /to 3\";","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"Singa-pirate"},"content":" Task task \u003d Parser.parseEventTaskCommand(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"Singa-pirate"},"content":" assertEquals(task.getName(), \"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"Singa-pirate"},"content":" } catch (MissingFieldException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Singa-pirate":148}},{"path":"src/test/java/chatbot/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"package chatbot;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.exceptions.InvalidTaskIndexException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.DeadlineTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.EventTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":"import chatbot.tasks.ToDoTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":" public void getSizeTest1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":" assertEquals(taskList.getSize(), 0);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":" public void getSizeTest2() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":" taskList.addTask(new ToDoTask(\"1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":" taskList.addTask(new DeadlineTask(\"2\", \"tmr\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":" taskList.addTask(new EventTask(\"3\", \"4\", \"5\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":" assertEquals(taskList.getSize(), 3);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":" public void markAsTest1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":" taskList.addTask(new ToDoTask(\"1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":" taskList.markAs(true, 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Singa-pirate"},"content":" assertTrue(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Singa-pirate"},"content":" public void markAsTest2() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Singa-pirate"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Singa-pirate"},"content":" taskList.addTask(new ToDoTask(\"1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Singa-pirate"},"content":" taskList.markAs(true, 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Singa-pirate"},"content":" assertEquals(\"[T][X] 1\\n\", taskList.taskListToStrings());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Singa-pirate"},"content":" public void markAsTest3() {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Singa-pirate"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Singa-pirate"},"content":" taskList.addTask(new ToDoTask(\"1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Singa-pirate"},"content":" taskList.markAs(false, 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Singa-pirate"},"content":" assertEquals(\"[T][ ] 1\\n\", taskList.taskListToStrings());","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Singa-pirate"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Singa-pirate"},"content":" public void markAsTest4() {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Singa-pirate"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Singa-pirate"},"content":" taskList.addTask(new ToDoTask(\"1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Singa-pirate"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Singa-pirate"},"content":" taskList.markAs(false, 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Singa-pirate"},"content":" taskList.markAs(true, 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Singa-pirate"},"content":" assertEquals(\"[T][X] 1\\n\", taskList.taskListToStrings());","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Singa-pirate"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Singa-pirate"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Singa-pirate"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Singa-pirate"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Singa-pirate"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Singa-pirate":83}},{"path":"text-ui-test/data/chatbot.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"[E][ ] task 2 (from: 25 Aug to: 27 Aug)","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"[D][X] task 5 (by: 26 Aug)","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"[E][X] 6 (from: 2023 to: 2024)","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Singa-pirate":3}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Singa-pirate"},"content":"hi","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Singa-pirate"},"content":"todo task 1","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Singa-pirate"},"content":"event task 2 /from 25 Aug /to 27 Aug","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Singa-pirate"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Singa-pirate"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Singa-pirate"},"content":"todo task 3","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"deadline task 4 /by tmr","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Singa-pirate"},"content":"deadline task 5 /by 26 Aug","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Singa-pirate"},"content":"unmark 5","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Singa-pirate"},"content":"mark 5","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Singa-pirate"},"content":"mark 6","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Singa-pirate"},"content":"mark -1","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Singa-pirate"},"content":"mark abc","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Singa-pirate"},"content":"mark","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Singa-pirate"},"content":"mark 2 3","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Singa-pirate"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Singa-pirate"},"content":"deadline /by 2","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":"deadline 1 2","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Singa-pirate"},"content":"deadline 1 /by","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Singa-pirate"},"content":"event /from 2 /to 3","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Singa-pirate"},"content":"event 1 2 /to 3","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Singa-pirate"},"content":"event 1 /from /to 3","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Singa-pirate"},"content":"event 1 /from 2 3","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Singa-pirate"},"content":"event 1 /from 2 /to","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Singa-pirate"},"content":"delete","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Singa-pirate"},"content":"delete 10","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Singa-pirate"},"content":"delete -1","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Singa-pirate"},"content":"delete abc","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Singa-pirate"},"content":"delete 4","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Singa-pirate"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Singa-pirate"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Singa-pirate"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Singa-pirate"},"content":"event 6 /from 2023 /to 2024","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Singa-pirate"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Singa-pirate"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Singa-pirate"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Singa-pirate"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Singa-pirate":40}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"Singa-pirate"},"content":"if exist .\\data\\chatbot.txt del .\\data\\chatbot.txt","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"Singa-pirate"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\chatbot\\*.java","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Singa-pirate"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\chatbot\\exceptions\\*.java","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Singa-pirate"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\chatbot\\tasks\\*.java","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"Singa-pirate"},"content":"java -classpath ..\\bin chatbot.ChatBot \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Singa-pirate":5,"-":19}}] diff --git a/Singa-pirate_ip_master/commits.json b/Singa-pirate_ip_master/commits.json index 47c7ba12..6cf84d7c 100644 --- a/Singa-pirate_ip_master/commits.json +++ b/Singa-pirate_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Singa-pirate":[{"date":"2023-08-24","commitResults":[{"hash":"171d6d669a55a1c927e9a85c91ca95309acd5a6d","isMergeCommit":false,"messageTitle":"Level-0: rename, greeting, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":2}}},{"hash":"87514659cab4f21fcc0ef9fd977ffec0cbf40852","isMergeCommit":false,"messageTitle":"Level-1: echo and bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":9}}},{"hash":"0f7cf293c2f916fa36991b69e4305c1bec11a8cf","isMergeCommit":false,"messageTitle":"Level-2: add, list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"09cc7562ad2f5f29bd484720d2b038125a9116f6","isMergeCommit":false,"messageTitle":"Level-3: mark as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":2}}},{"hash":"34fe859c3b6b2c8525c2c4a35d4de25016c7bf09","isMergeCommit":false,"messageTitle":"Level-4: todos, deadlines, events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":13}}},{"hash":"c556cca860ca1ad68be3f96d4a057ce82cb24512","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"java":{"insertions":2,"deletions":1},"bat":{"insertions":1,"deletions":1}}},{"hash":"235681e1ab561bec6501f259db045b6c139be236","isMergeCommit":false,"messageTitle":"Level-5: error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"java":{"insertions":127,"deletions":33}}},{"hash":"012998a1181ad130d56b32941aeebfc6dcb5e653","isMergeCommit":false,"messageTitle":"Level-6: delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"java":{"insertions":33,"deletions":5}}}]},{"date":"2023-08-30","commitResults":[{"hash":"39db770e4da67561a4f33d642cf60279f941ffcd","isMergeCommit":false,"messageTitle":"Add Level-7: Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":229,"deletions":19}}},{"hash":"a38d129d82ab2c947b886e20a0a5c58e48820908","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"db3db887d81bf36b4c4841a202f5d279f3cd450f","isMergeCommit":false,"messageTitle":"Add Level-8: Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":6},"java":{"insertions":89,"deletions":19},"bat":{"insertions":1,"deletions":0}}},{"hash":"97aa51c1197b985da9c7ed7a373e7acc33a15604","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"d7da0584b8ffb1c4513b9c8a6b73a45f071e7911","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":307,"deletions":249}}},{"hash":"e5ff27db7f5b6d5c9c14023c720d7067aad86bbe","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6e8476e93a26a257ea0db9c53cb4372e5b6b1837","isMergeCommit":false,"messageTitle":"Add Parser class to parse commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":76}}},{"hash":"8ffab7d90517fd46a22efd47353ecb82e71e900f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"4d48e1f14100d890b5a36c39337f478bf70ca713","isMergeCommit":false,"messageTitle":"Organise into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":4},"bat":{"insertions":4,"deletions":2}}},{"hash":"15309edafe1c152698de618b32c8949cc196e905","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"598a9635fc59be65a0b1b9836c4de4b2f7f58ae2","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":222,"deletions":0}}},{"hash":"953ab2ff1ff01e1430f102cb01c8e2c8ffdac61f","isMergeCommit":false,"messageTitle":"Fix issues with when data directory / file not found - Add checking so that ./data directory will be created if absent - File permission error message will only be printed once","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}},{"hash":"94c2bde9da042d2901c21a5bff421e05e2d57020","isMergeCommit":false,"messageTitle":"Correct app name in gradle","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"d078ee9b4dcbd4e5cd890dcd733624e98fef25f5","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":129,"deletions":4}}},{"hash":"419578ff186236e9044d225b081935f772e829eb","isMergeCommit":false,"messageTitle":"Tweak code to follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":9}}},{"hash":"3e1baba572c46289c54f73047d2f1035528b53fc","isMergeCommit":false,"messageTitle":"Add Level-9: Find","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":44,"deletions":2}}},{"hash":"6ea01be9fec2cf5da16d165e5ce2040fb336f47f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"7c32d8366e24e39581e9d7d1cec6a4c307474b73","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"286e2885365b7dce07eb7c37a6563097d179bcf3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tdata/chatbot.txt\n#\tsrc/main/java/chatbot/Parser.java\n#\tsrc/main/java/chatbot/TaskList.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Singa-pirate":{"java":1144,"md":0,"fxml":0,"sh":0,"bat":5,"gradle":2,"txt":50}},"authorContributionVariance":{"Singa-pirate":116707.54},"authorDisplayNameMap":{"Singa-pirate":"CS2103T-T08-2 LUO ..IALE"}} +{"authorDailyContributionsMap":{"Singa-pirate":[{"date":"2023-08-24","commitResults":[{"hash":"171d6d669a55a1c927e9a85c91ca95309acd5a6d","isMergeCommit":false,"messageTitle":"Level-0: rename, greeting, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":2}}},{"hash":"87514659cab4f21fcc0ef9fd977ffec0cbf40852","isMergeCommit":false,"messageTitle":"Level-1: echo and bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":9}}},{"hash":"0f7cf293c2f916fa36991b69e4305c1bec11a8cf","isMergeCommit":false,"messageTitle":"Level-2: add, list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"09cc7562ad2f5f29bd484720d2b038125a9116f6","isMergeCommit":false,"messageTitle":"Level-3: mark as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":2}}},{"hash":"34fe859c3b6b2c8525c2c4a35d4de25016c7bf09","isMergeCommit":false,"messageTitle":"Level-4: todos, deadlines, events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":13}}},{"hash":"c556cca860ca1ad68be3f96d4a057ce82cb24512","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"java":{"insertions":2,"deletions":1},"bat":{"insertions":1,"deletions":1}}},{"hash":"235681e1ab561bec6501f259db045b6c139be236","isMergeCommit":false,"messageTitle":"Level-5: error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"java":{"insertions":127,"deletions":33}}},{"hash":"012998a1181ad130d56b32941aeebfc6dcb5e653","isMergeCommit":false,"messageTitle":"Level-6: delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"java":{"insertions":33,"deletions":5}}}]},{"date":"2023-08-30","commitResults":[{"hash":"39db770e4da67561a4f33d642cf60279f941ffcd","isMergeCommit":false,"messageTitle":"Add Level-7: Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":229,"deletions":19}}},{"hash":"a38d129d82ab2c947b886e20a0a5c58e48820908","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"db3db887d81bf36b4c4841a202f5d279f3cd450f","isMergeCommit":false,"messageTitle":"Add Level-8: Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":6},"java":{"insertions":89,"deletions":19},"bat":{"insertions":1,"deletions":0}}},{"hash":"97aa51c1197b985da9c7ed7a373e7acc33a15604","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"d7da0584b8ffb1c4513b9c8a6b73a45f071e7911","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":307,"deletions":249}}},{"hash":"e5ff27db7f5b6d5c9c14023c720d7067aad86bbe","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6e8476e93a26a257ea0db9c53cb4372e5b6b1837","isMergeCommit":false,"messageTitle":"Add Parser class to parse commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":76}}},{"hash":"8ffab7d90517fd46a22efd47353ecb82e71e900f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"4d48e1f14100d890b5a36c39337f478bf70ca713","isMergeCommit":false,"messageTitle":"Organise into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":4},"bat":{"insertions":4,"deletions":2}}},{"hash":"15309edafe1c152698de618b32c8949cc196e905","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"598a9635fc59be65a0b1b9836c4de4b2f7f58ae2","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":222,"deletions":0}}},{"hash":"953ab2ff1ff01e1430f102cb01c8e2c8ffdac61f","isMergeCommit":false,"messageTitle":"Fix issues with when data directory / file not found - Add checking so that ./data directory will be created if absent - File permission error message will only be printed once","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}},{"hash":"94c2bde9da042d2901c21a5bff421e05e2d57020","isMergeCommit":false,"messageTitle":"Correct app name in gradle","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"d078ee9b4dcbd4e5cd890dcd733624e98fef25f5","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":129,"deletions":4}}},{"hash":"419578ff186236e9044d225b081935f772e829eb","isMergeCommit":false,"messageTitle":"Tweak code to follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":9}}},{"hash":"3e1baba572c46289c54f73047d2f1035528b53fc","isMergeCommit":false,"messageTitle":"Add Level-9: Find","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":44,"deletions":2}}},{"hash":"6ea01be9fec2cf5da16d165e5ce2040fb336f47f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"7c32d8366e24e39581e9d7d1cec6a4c307474b73","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"286e2885365b7dce07eb7c37a6563097d179bcf3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tdata/chatbot.txt\n#\tsrc/main/java/chatbot/Parser.java\n#\tsrc/main/java/chatbot/TaskList.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"0701f91a8bd6f98c7d46431995f6441437d3990d","isMergeCommit":false,"messageTitle":"Add CheckStyle - Configure CheckStyle in gradle - Fix most of the style violations detected","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":96,"deletions":83}}},{"hash":"15610b479ba50ec9c87d3704f9e6ed80bea5f808","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Singa-pirate":{"java":1157,"md":0,"fxml":0,"sh":0,"bat":5,"gradle":7,"txt":50}},"authorContributionVariance":{"Singa-pirate":89927.29},"authorDisplayNameMap":{"Singa-pirate":"CS2103T-T08-2 LUO ..IALE"}} diff --git a/SungMatt_ip_master/authorship.json b/SungMatt_ip_master/authorship.json index 15f1e439..5334a02d 100644 --- a/SungMatt_ip_master/authorship.json +++ b/SungMatt_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":"SungMatt"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":" toolVersion \u003d \"10.11.2\"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"SungMatt"},"content":" mainClass.set(\"mattbot.MattBot\")","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"SungMatt"},"content":" archiveBaseName \u003d \"mattbot\"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"SungMatt":7,"-":40}},{"path":"src/main/java/mattbot/MattBot.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":"import mattbot.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":"import mattbot.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":"import java.util.List;","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"SungMatt"},"content":"public class MattBot {","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"SungMatt"},"content":" private static final String NAME \u003d \"MattBot\";","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"SungMatt"},"content":" private static Storage mattmory;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SungMatt"},"content":" private static TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SungMatt"},"content":" private static final DateTimeFormatter PRINT_DTF \u003d DateTimeFormatter.ofPattern(\"yyyyMMdd\u0027T\u0027HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SungMatt"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"SungMatt"},"content":" // Load save file","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SungMatt"},"content":" // List\u003cTask\u003e taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SungMatt"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SungMatt"},"content":" mattmory \u003d new Storage();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SungMatt"},"content":" tasks \u003d mattmory.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SungMatt"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SungMatt"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"SungMatt"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"SungMatt"},"content":" /*String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"SungMatt"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"SungMatt"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"SungMatt"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"SungMatt"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Hello from\\n\" + logo);*/","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Hello! I\u0027m \" + NAME);","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"SungMatt"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"SungMatt"},"content":" String userInput;","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"SungMatt"},"content":" label:","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"SungMatt"},"content":" while (true) {","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"SungMatt"},"content":" // Take user input in, and process user input","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"SungMatt"},"content":" userInput \u003d sc.nextLine();","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"SungMatt"},"content":" String command \u003d userInput.split(\" \",2)[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"SungMatt"},"content":" switch (command) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"SungMatt"},"content":" case \"bye\":","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Bye, Hope to see you soon!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"SungMatt"},"content":" break label;","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"SungMatt"},"content":" case \"list\":","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"SungMatt"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"SungMatt"},"content":" Task t \u003d tasks.getTask(i + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"SungMatt"},"content":" System.out.println(String.format(\"%d. %s\", i + 1, t));","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"SungMatt"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"SungMatt"},"content":" int taskId \u003d Integer.parseInt(userInput.split(\" \", 2)[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"SungMatt"},"content":" tasks.markTask(taskId);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"SungMatt"},"content":" Task t \u003d tasks.getTask(taskId);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Great job! You have completed the task \" + t.showName());","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"SungMatt"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"SungMatt"},"content":" int taskId \u003d Integer.parseInt(userInput.split(\" \", 2)[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"SungMatt"},"content":" tasks.unmarkTask(taskId);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"SungMatt"},"content":" Task t \u003d tasks.getTask(taskId);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Oh no, you have uncompleted \" + t.showName());","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"SungMatt"},"content":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"SungMatt"},"content":" int len \u003d userInput.split(\" \", 2).length;","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"SungMatt"},"content":" if (len \u003c\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Oh no, your input is bad.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"SungMatt"},"content":" System.out.println(command + \" requires an argument.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"SungMatt"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":103,"author":{"gitId":"SungMatt"},"content":" String arguments \u003d userInput.split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"SungMatt"},"content":" Task t;","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"SungMatt"},"content":" if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"SungMatt"},"content":" t \u003d new Todo(arguments);","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"SungMatt"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I\u0027ve added this to your tasks: \");","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"SungMatt"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"SungMatt"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"SungMatt"},"content":" String name \u003d arguments.split(\" /by \", 2)[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"SungMatt"},"content":" String dueDate \u003d arguments.split(\" /by \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"SungMatt"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"SungMatt"},"content":" LocalDateTime dtDueDate \u003d LocalDateTime.parse(dueDate, PRINT_DTF);","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"SungMatt"},"content":" t \u003d new Deadline(name, dtDueDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"SungMatt"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I\u0027ve added this to your tasks: \");","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"SungMatt"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"SungMatt"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"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":123,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"SungMatt"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"SungMatt"},"content":" String name \u003d arguments.split(\" /from \", 2)[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"SungMatt"},"content":" String dates \u003d arguments.split(\" /from \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"SungMatt"},"content":" String startDate \u003d dates.split(\" /to \")[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"SungMatt"},"content":" String endDate \u003d dates.split(\" /to \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"SungMatt"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"SungMatt"},"content":" LocalDateTime dtStartDate \u003d LocalDateTime.parse(startDate, PRINT_DTF);","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"SungMatt"},"content":" LocalDateTime dtEndDate \u003d LocalDateTime.parse(endDate, PRINT_DTF);","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"SungMatt"},"content":" t \u003d new Event(name, dtStartDate, dtEndDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"SungMatt"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I\u0027ve added this to your tasks: \");","lastModifiedDate":"2023-08-24"},{"lineNumber":136,"author":{"gitId":"SungMatt"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"SungMatt"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"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":139,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"SungMatt"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"SungMatt"},"content":" if (tasks.size() \u003d\u003d 0 || tasks.size() \u003c Integer.parseInt(arguments)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Oops, you\u0027re deleting a task that doesn\u0027t exist.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"SungMatt"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":144,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"SungMatt"},"content":" t \u003d tasks.getTask(Integer.parseInt(arguments));","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I have removed this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":147,"author":{"gitId":"SungMatt"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"SungMatt"},"content":" tasks.removeTask(Integer.parseInt(arguments));","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"SungMatt"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":151,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I didn\u0027t quite understand your input.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":152,"author":{"gitId":"SungMatt"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":153,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":154,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":155,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":158,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":159,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":160,"author":{"gitId":"SungMatt"},"content":" public static void printTop() {","lastModifiedDate":"2023-08-23"},{"lineNumber":161,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-23"},{"lineNumber":162,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":163,"author":{"gitId":"SungMatt"},"content":" public static void printBottom() {","lastModifiedDate":"2023-08-23"},{"lineNumber":164,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-23"},{"lineNumber":165,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":166,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"SungMatt":166}},{"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":"src/test/java/MattBotTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"package mattbot; //same package as the class being tested","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":"public class MattBotTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":" public void dummyTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":" public void anotherDummyTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"SungMatt":18}},{"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":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"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":"SungMatt"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":" toolVersion \u003d \"10.11.2\"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"SungMatt"},"content":" mainClass.set(\"mattbot.MattBot\")","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"SungMatt"},"content":" archiveBaseName \u003d \"mattbot\"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"SungMatt"},"content":" archiveVersion \u003d \"0.1\"","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"SungMatt":8,"-":40}},{"path":"src/main/java/mattbot/MattBot.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":"import mattbot.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":"import mattbot.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":"import java.util.List;","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"SungMatt"},"content":"public class MattBot {","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"SungMatt"},"content":" private static final String NAME \u003d \"MattBot\";","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"SungMatt"},"content":" private static Storage mattmory;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SungMatt"},"content":" private static TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SungMatt"},"content":" private static final DateTimeFormatter PRINT_DTF \u003d DateTimeFormatter.ofPattern(\"yyyyMMdd\u0027T\u0027HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SungMatt"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"SungMatt"},"content":" // Load save file","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SungMatt"},"content":" // List\u003cTask\u003e taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SungMatt"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SungMatt"},"content":" mattmory \u003d new Storage();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SungMatt"},"content":" tasks \u003d mattmory.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SungMatt"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SungMatt"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"SungMatt"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"SungMatt"},"content":" /*String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"SungMatt"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"SungMatt"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"SungMatt"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"SungMatt"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Hello from\\n\" + logo);*/","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Hello! I\u0027m \" + NAME);","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"SungMatt"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"SungMatt"},"content":" String userInput;","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"SungMatt"},"content":" label:","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"SungMatt"},"content":" while (true) {","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"SungMatt"},"content":" // Take user input in, and process user input","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"SungMatt"},"content":" userInput \u003d sc.nextLine();","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"SungMatt"},"content":" String command \u003d userInput.split(\" \",2)[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"SungMatt"},"content":" switch (command) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"SungMatt"},"content":" case \"bye\":","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Bye, Hope to see you soon!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"SungMatt"},"content":" break label;","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"SungMatt"},"content":" case \"list\":","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"SungMatt"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"SungMatt"},"content":" Task t \u003d tasks.getTask(i + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"SungMatt"},"content":" System.out.println(String.format(\"%d. %s\", i + 1, t));","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"SungMatt"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"SungMatt"},"content":" int taskId \u003d Integer.parseInt(userInput.split(\" \", 2)[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"SungMatt"},"content":" tasks.markTask(taskId);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"SungMatt"},"content":" Task t \u003d tasks.getTask(taskId);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Great job! You have completed the task \" + t.showName());","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"SungMatt"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"SungMatt"},"content":" int taskId \u003d Integer.parseInt(userInput.split(\" \", 2)[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"SungMatt"},"content":" tasks.unmarkTask(taskId);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"SungMatt"},"content":" Task t \u003d tasks.getTask(taskId);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Oh no, you have uncompleted \" + t.showName());","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"SungMatt"},"content":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"SungMatt"},"content":" int len \u003d userInput.split(\" \", 2).length;","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"SungMatt"},"content":" if (len \u003c\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Oh no, your input is bad.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"SungMatt"},"content":" System.out.println(command + \" requires an argument.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"SungMatt"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":103,"author":{"gitId":"SungMatt"},"content":" String arguments \u003d userInput.split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"SungMatt"},"content":" Task t;","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"SungMatt"},"content":" if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"SungMatt"},"content":" t \u003d new Todo(arguments);","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"SungMatt"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I\u0027ve added this to your tasks: \");","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"SungMatt"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"SungMatt"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"SungMatt"},"content":" String name \u003d arguments.split(\" /by \", 2)[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"SungMatt"},"content":" String dueDate \u003d arguments.split(\" /by \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"SungMatt"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"SungMatt"},"content":" LocalDateTime dtDueDate \u003d LocalDateTime.parse(dueDate, PRINT_DTF);","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"SungMatt"},"content":" t \u003d new Deadline(name, dtDueDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"SungMatt"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I\u0027ve added this to your tasks: \");","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"SungMatt"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"SungMatt"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"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":123,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"SungMatt"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"SungMatt"},"content":" String name \u003d arguments.split(\" /from \", 2)[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"SungMatt"},"content":" String dates \u003d arguments.split(\" /from \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"SungMatt"},"content":" String startDate \u003d dates.split(\" /to \")[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"SungMatt"},"content":" String endDate \u003d dates.split(\" /to \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"SungMatt"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"SungMatt"},"content":" LocalDateTime dtStartDate \u003d LocalDateTime.parse(startDate, PRINT_DTF);","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"SungMatt"},"content":" LocalDateTime dtEndDate \u003d LocalDateTime.parse(endDate, PRINT_DTF);","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"SungMatt"},"content":" t \u003d new Event(name, dtStartDate, dtEndDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"SungMatt"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I\u0027ve added this to your tasks: \");","lastModifiedDate":"2023-08-24"},{"lineNumber":136,"author":{"gitId":"SungMatt"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"SungMatt"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"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":139,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"SungMatt"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"SungMatt"},"content":" if (tasks.size() \u003d\u003d 0 || tasks.size() \u003c Integer.parseInt(arguments)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Oops, you\u0027re deleting a task that doesn\u0027t exist.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"SungMatt"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":144,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"SungMatt"},"content":" t \u003d tasks.getTask(Integer.parseInt(arguments));","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I have removed this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":147,"author":{"gitId":"SungMatt"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"SungMatt"},"content":" tasks.removeTask(Integer.parseInt(arguments));","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"SungMatt"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":151,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I didn\u0027t quite understand your input.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":152,"author":{"gitId":"SungMatt"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":153,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":154,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":155,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":158,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":159,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":160,"author":{"gitId":"SungMatt"},"content":" public static void printTop() {","lastModifiedDate":"2023-08-23"},{"lineNumber":161,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-23"},{"lineNumber":162,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":163,"author":{"gitId":"SungMatt"},"content":" public static void printBottom() {","lastModifiedDate":"2023-08-23"},{"lineNumber":164,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-23"},{"lineNumber":165,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":166,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"SungMatt":166}},{"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":"src/test/java/mattbot/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"package mattbot;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":"import mattbot.task.Event;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":"import mattbot.task.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":" private LocalDateTime lDT1 \u003d LocalDateTime.of(2023, 9, 13, 22, 34);","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":" public void taskList_getTask_success() {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":" Task t \u003d new Event(\"Test Event\", false, lDT1, lDT1);","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":" TaskList tL \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":" tL.addTask(t);","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":" assertEquals(tL.getTask(1), t);","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":" @Test public void taskList_size_success() {","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SungMatt"},"content":" // Throws DateTimeParseException","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"SungMatt"},"content":" Task t \u003d new Event(\"Test Event\", false, lDT1, lDT1);","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"SungMatt"},"content":" TaskList tL \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SungMatt"},"content":" tL.addTask(t);","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"SungMatt"},"content":" assertEquals(tL.size(), 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"SungMatt":30}},{"path":"src/test/java/mattbot/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"package mattbot.task; //same package as the class being tested","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":" private LocalDateTime lDT1 \u003d LocalDateTime.of(2023, 9, 13, 22, 34);","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":" public void toFile_workingInput_success() {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":" assertEquals(new Deadline(\"Test\", lDT1).toFile(), \"D | 0 | Test | 20230913T2234\");","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":" public void print_workingInput_success() {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":" assertEquals(new Deadline(\"Test\", lDT1).toString(), \"[D] [ ] Test (by: Sept 13 2023 22:34)\");","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"SungMatt":22}},{"path":"src/test/java/mattbot/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"package mattbot.task; //same package as the class being tested","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":"public class EventTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":" private LocalDateTime lDT1 \u003d LocalDateTime.of(2023, 9, 13, 22, 34);","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":" public void eventCreation_normalTime_success() throws Exception {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":" assertEquals(new Event(\"Test Event\", false, lDT1, lDT1).identifier(), \"E\");","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":" @Test public void eventCreation_invalidTime_exceptionThrown() throws Exception {","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":" // Throws DateTimeParseException","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":" LocalDateTime lDT1 \u003d LocalDateTime.of(2023, 13, 13, 22, 34);","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"SungMatt":23}},{"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 91934078..f24c0079 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}}}]},{"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":{}},{"hash":"78c0e74c0e9be23e3bafe8863e08949a6adb0a95","isMergeCommit":false,"messageTitle":"Add Gradle and Checkstyle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":2},"java":{"insertions":23,"deletions":4}}},{"hash":"50b2f95637900cdd18168c720d534bead4f38a2c","isMergeCommit":false,"messageTitle":"Updated packaging structure to follow code convention","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":31,"deletions":31}}}]}]},"authorFileTypeContributionMap":{"SungMatt":{"java":596,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":7,"txt":5}},"authorContributionVariance":{"SungMatt":17617.818},"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":{}},{"hash":"78c0e74c0e9be23e3bafe8863e08949a6adb0a95","isMergeCommit":false,"messageTitle":"Add Gradle and Checkstyle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":2},"java":{"insertions":23,"deletions":4}}},{"hash":"50b2f95637900cdd18168c720d534bead4f38a2c","isMergeCommit":false,"messageTitle":"Updated packaging structure to follow code convention","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":31,"deletions":31}}}]},{"date":"2023-09-06","commitResults":[{"hash":"e6e714e34835cc36f5561f057c3e19ee6929a8e6","isMergeCommit":false,"messageTitle":"Add JUnit Compatibility","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":18}}},{"hash":"9b2c6ffd40c83a35618f098e1223c00f67ad6c4f","isMergeCommit":false,"messageTitle":"Add .jar compilation functionality","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"SungMatt":{"java":653,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":8,"txt":5}},"authorContributionVariance":{"SungMatt":15398.01},"authorDisplayNameMap":{"SungMatt":"CS2103-T16-1 MATT..IANG"}} diff --git a/VN-Hao_ip_master/authorship.json b/VN-Hao_ip_master/authorship.json index c4198644..7bbb5a7e 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.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}}] +[{"path":"src/main/java/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" private Task task;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" public AddCommand(String taskDescription) {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" this.task \u003d new Todo(taskDescription);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" public AddCommand(String taskDescription, LocalDate deadline) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" this.task \u003d new Deadline(taskDescription, deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" public AddCommand(String taskDescription, String startTime, String endTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" this.task \u003d new Event(taskDescription, startTime, endTime);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws QiException {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" tasks.addTask(this.task);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" ui.showTaskAdded(this.task ,tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" storage.update(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"Cannot write to file!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":33}},{"path":"src/main/java/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" private boolean isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" protected Command(Boolean isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws QiException;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" return this.isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":15}},{"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/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" private int taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" public DeleteCommand(int taskId) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" this.taskId \u003d taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws QiException {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" ui.showTaskDeleted(this.taskId, tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" storage.update(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"Cannot write to file!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":20}},{"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/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" super(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws QiException {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" ui.showGoodbye();","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":11}},{"path":"src/main/java/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" public InvalidCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws QiException {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" ui.showInvalid();","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":11}},{"path":"src/main/java/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws QiException {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" ui.showList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":11}},{"path":"src/main/java/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" private int taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" public MarkCommand(int taskId) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" this.taskId \u003d taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws QiException {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" ui.showTaskMarked(this.taskId, tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" storage.update(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"Cannot write to file!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":20}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"import java.util.Comparator;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" public static Command parse(String command) throws QiException {","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" int taskId \u003d Integer.parseInt(command.substring(5));","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" return new MarkCommand(taskId);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"☹ OOPS!!! Please specify which task you want to mark.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" int taskId \u003d Integer.parseInt(command.substring(7));","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" return new UnmarkedCommand(taskId);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"☹ OOPS!!! Please specify which task you want to unmark.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" String task \u003d command.substring(5);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" return new AddCommand(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" int idx \u003d 9;","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" while (idx \u003c command.length() \u0026\u0026 command.charAt(idx) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" idx++;","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" String task \u003d command.substring(9, idx - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" String deadline \u003d command.substring(idx + 4);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":" return new AddCommand(task, LocalDate.parse(deadline));","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" // find the first slash","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" int idx1 \u003d 6;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" while (idx1 \u003c command.length() \u0026\u0026 command.charAt(idx1) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" idx1++;","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":" // find the second slash","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" int idx2 \u003d idx1 + 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" while (idx2 \u003c command.length() \u0026\u0026 command.charAt(idx2) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" idx2++;","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":" String task \u003d command.substring(6, idx1 - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":" String startTime \u003d command.substring(idx1 + 6, idx2 - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":" String endTime \u003d command.substring(idx2 + 4);","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":" return new AddCommand(task, startTime, endTime);","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"VN-Hao"},"content":" int taskId \u003d Integer.parseInt(command.substring(7));","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"VN-Hao"},"content":" return new DeleteCommand(taskId);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"☹ OOPS!!! Please specify which task you want to delete.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"VN-Hao"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":90}},{"path":"src/main/java/Qi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"public class Qi {","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" public Qi(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" storage.load(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" } catch (QiException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"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":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" public void run() {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" ui.showLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" } catch (QiException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" } finally {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" ui.showLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" System.out.println();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" new Qi(\"data/tasks.txt\").run();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"VN-Hao":42}},{"path":"src/main/java/QiException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"public class QiException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":" public QiException(String e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":" super(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":5}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" private File file;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" File directory \u003d file.getParentFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" // Create directory to the file if it does not exist","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" directory.mkdirs();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot create file!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" public void load(TaskList list) throws QiException {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" Scanner sc \u003d new Scanner(this.file);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" String task;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" task \u003d sc.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(1) \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" list.addTask(new Todo(task.substring(7)));","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" list.mark(list.size(), true);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" } else if (task.charAt(1) \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" int idx \u003d 0;","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" while (task.charAt(idx) !\u003d \u0027:\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" idx++;","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" list.addTask(new Deadline(task.substring(7, idx - 4),","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" LocalDate.parse(task.substring(idx + 2, task.length() - 1),","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))));","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" list.mark(list.size(), true);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":" int idx1 \u003d 0;","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":" while (task.charAt(idx1) !\u003d \u0027:\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" idx1++;","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" int idx2 \u003d idx1 + 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" while (task.charAt(idx2) !\u003d \u0027:\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" idx2++;","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":" list.addTask(new Event(task.substring(7, idx1 - 6),","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" task.substring(idx1 + 2, idx2 - 3),","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" task.substring(idx2 + 2, task.length() - 1)));","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" list.mark(list.size(), true);","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"hahah\");","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"VN-Hao"},"content":" public void update(TaskList list) throws IOException {","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"VN-Hao"},"content":" FileWriter fw \u003d new FileWriter(this.file.getAbsolutePath());","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"VN-Hao"},"content":" StringBuilder content \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"VN-Hao"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"VN-Hao"},"content":" content.append(list.showTask(i + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"VN-Hao"},"content":" if (i \u003c list.size() - 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"VN-Hao"},"content":" content.append(\u0027\\n\u0027);","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"VN-Hao"},"content":" fw.write(content.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"VN-Hao"},"content":" fw.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":89}},{"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":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" public Ui() {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" showLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Hello! I\u0027m Qi\");","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" showLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" System.out.println();","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" return this.sc.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" public void showTaskAdded(Task task, TaskList list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" public void showTaskDeleted(int taskId, TaskList list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" \" + list.deleteTask(taskId));","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" public void showTaskMarked(int taskId, TaskList list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" list.mark(taskId, true);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" \" + list.showTask(taskId));","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" public void showTaskUnmarked(int taskId, TaskList list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" list.mark(taskId, false);","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" \" + list.showTask(taskId));","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" public void showList(TaskList list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Here are the tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" System.out.println(list);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" public void showLine() {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" public void showInvalid() {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" public void showGoodbye() {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"\");","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" public void showError(String e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" \" + e);","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":71}},{"path":"src/main/java/UnmarkedCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"public class UnmarkedCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" private int taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" public UnmarkedCommand(int taskId) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" this.taskId \u003d taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws QiException {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" ui.showTaskUnmarked(this.taskId, tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" storage.update(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"Cannot write to file!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":20}},{"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 e429b624..8ee51457 100644 --- a/VN-Hao_ip_master/commits.json +++ b/VN-Hao_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"VN-Hao":[{"date":"2023-08-23","commitResults":[{"hash":"c18c3412730bd68e4f1d8b4104fc2c5951721e9e","isMergeCommit":false,"messageTitle":"New chatbot with simple greetings","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}},{"hash":"505812c237e94be4865ee300c42042a81ce045d2","isMergeCommit":false,"messageTitle":"echo commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"2557383f0066a9221c936415bfcb983f0b3117f3","isMergeCommit":false,"messageTitle":"Add, store and display tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"2b26de26509d89821ea080cfcc483e46cdb57a9b","isMergeCommit":false,"messageTitle":"Mark and unmark task, reorganize classes","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":126,"deletions":24}}},{"hash":"c993ec1559f480e91b8d90fd9aee86b60d3b0522","isMergeCommit":false,"messageTitle":"Categorize tasks into todos, deadlines and events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":19}}},{"hash":"f826b17885e4ca386bb892aeb63f754607a08a4c","isMergeCommit":false,"messageTitle":"Change input, EXPECTED and runtest file for UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"e9990677f78241b2b05f9cadec74a2fb1782ad9c","isMergeCommit":false,"messageTitle":"Handle simple errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":17}}},{"hash":"5fb67133ff4e1dc595713a69a5654943c0236624","isMergeCommit":false,"messageTitle":"Allow deletions of tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}}]},{"date":"2023-08-25","commitResults":[{"hash":"f188f254916c8a6198ac39b35f620c7973780ff2","isMergeCommit":false,"messageTitle":"Minor changes in variable names. Rewrite some functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":55}}}]},{"date":"2023-09-02","commitResults":[{"hash":"3fe875498f790166f5671e8660ca2b0f35e3b92e","isMergeCommit":false,"messageTitle":"Allow saving list to hard disk","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":10}}},{"hash":"25459762cabb1471db821bd63405c79699479397","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"140bd1298db5f318b43c5bcb06fc623c23f6c1cd","isMergeCommit":false,"messageTitle":"Change type of deadline from String to java.time.LocalDate","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":6}}},{"hash":"9cb5bd03ab14ae6ce60b6b9d3c53ab6fc25c50b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]}]},"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"}} +{"authorDailyContributionsMap":{"VN-Hao":[{"date":"2023-08-23","commitResults":[{"hash":"c18c3412730bd68e4f1d8b4104fc2c5951721e9e","isMergeCommit":false,"messageTitle":"New chatbot with simple greetings","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}},{"hash":"505812c237e94be4865ee300c42042a81ce045d2","isMergeCommit":false,"messageTitle":"echo commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"2557383f0066a9221c936415bfcb983f0b3117f3","isMergeCommit":false,"messageTitle":"Add, store and display tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"2b26de26509d89821ea080cfcc483e46cdb57a9b","isMergeCommit":false,"messageTitle":"Mark and unmark task, reorganize classes","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":126,"deletions":24}}},{"hash":"c993ec1559f480e91b8d90fd9aee86b60d3b0522","isMergeCommit":false,"messageTitle":"Categorize tasks into todos, deadlines and events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":19}}},{"hash":"f826b17885e4ca386bb892aeb63f754607a08a4c","isMergeCommit":false,"messageTitle":"Change input, EXPECTED and runtest file for UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"e9990677f78241b2b05f9cadec74a2fb1782ad9c","isMergeCommit":false,"messageTitle":"Handle simple errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":17}}},{"hash":"5fb67133ff4e1dc595713a69a5654943c0236624","isMergeCommit":false,"messageTitle":"Allow deletions of tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}}]},{"date":"2023-08-25","commitResults":[{"hash":"f188f254916c8a6198ac39b35f620c7973780ff2","isMergeCommit":false,"messageTitle":"Minor changes in variable names. Rewrite some functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":55}}}]},{"date":"2023-09-02","commitResults":[{"hash":"3fe875498f790166f5671e8660ca2b0f35e3b92e","isMergeCommit":false,"messageTitle":"Allow saving list to hard disk","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":10}}},{"hash":"25459762cabb1471db821bd63405c79699479397","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"140bd1298db5f318b43c5bcb06fc623c23f6c1cd","isMergeCommit":false,"messageTitle":"Change type of deadline from String to java.time.LocalDate","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":6}}},{"hash":"9cb5bd03ab14ae6ce60b6b9d3c53ab6fc25c50b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"935f16f43bf9c182e60281fd6c3775e90b989862","isMergeCommit":false,"messageTitle":"rewrite code by OOP principles","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":404,"deletions":306}}}]},{"date":"2023-09-06","commitResults":[{"hash":"e6410e11dd1af74338975c5569f8caaa30a884dc","isMergeCommit":false,"messageTitle":"handle input exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":32}}},{"hash":"68bfbaf201bd21844938162e8dc5ef768b753ba4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"VN-Hao":{"java":543,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":6}},"authorContributionVariance":{"VN-Hao":29685.246},"authorDisplayNameMap":{"VN-Hao":"CS2103T-T13-2 NGUY.. HAO"}} diff --git a/Vanessamae23_ip_master/authorship.json b/Vanessamae23_ip_master/authorship.json index 6ae9f5c3..6ea10ad3 100644 --- a/Vanessamae23_ip_master/authorship.json +++ b/Vanessamae23_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"# Duke Project Pro","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"\u003e “Your mind is for having ideas, not holding them.” – David Allen","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"DukePro frees your mind of having to remember things you need to do. It\u0027s,","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"- Text-based","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"- Best way to learn","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"- Easy and Simple to use","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"All you need to do is,","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":"1. Download from [link](https://nus-cs2103-ay2324s1.github.io/website/schedule/week4/project.html)","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":"2. Double click it","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":"3. Add your tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":"4. Let it manage your task for you :blush:","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":"It is also *Emphasize* Free","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":"Features","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":"- [ ] Managing tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":"- [ ] Managing deadlines (coming soon)","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":"- [ ] Reminders (coming soon)","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":"If you Java programmer, you can use it to practice Java too. Here\u0027s the `main` method:","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":"```","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":"public class Main {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" Application.launch(MainApp.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":"```","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":"","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":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"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":39,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":40,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":41,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":42,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"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":44,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":45,"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":46,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Vanessamae23":31,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" String javaFxVersion \u003d \u002717.0.8\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":"","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":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":"javafx {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":" version \u003d \u002717\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":" mainClass.set(\"seedu.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"Vanessamae23"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Vanessamae23"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Vanessamae23":27,"-":41}},{"path":"demo/mvnw.cmd","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"@REM ----------------------------------------------------------------------------","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"@REM Licensed to the Apache Software Foundation (ASF) under one","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"@REM or more contributor license agreements. See the NOTICE file","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"@REM distributed with this work for additional information","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"@REM regarding copyright ownership. The ASF licenses this file","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"@REM to you under the Apache License, Version 2.0 (the","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"@REM \"License\"); you may not use this file except in compliance","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"@REM with the License. You may obtain a copy of the License at","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"@REM","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"@REM https://www.apache.org/licenses/LICENSE-2.0","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":"@REM","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":"@REM Unless required by applicable law or agreed to in writing,","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":"@REM software distributed under the License is distributed on an","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":"@REM \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":"@REM KIND, either express or implied. See the License for the","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"@REM specific language governing permissions and limitations","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":"@REM under the License.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":"@REM ----------------------------------------------------------------------------","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":"@REM ----------------------------------------------------------------------------","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":"@REM Maven Start Up Batch script","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":"@REM","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":"@REM Required ENV vars:","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":"@REM JAVA_HOME - location of a JDK home dir","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":"@REM","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":"@REM Optional ENV vars","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":"@REM M2_HOME - location of maven2\u0027s installed home dir","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":"@REM MAVEN_BATCH_ECHO - set to \u0027on\u0027 to enable the echoing of the batch commands","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":"@REM MAVEN_BATCH_PAUSE - set to \u0027on\u0027 to wait for a keystroke before ending","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":"@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":"@REM e.g. to debug Maven itself, use","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":"@REM set MAVEN_OPTS\u003d-Xdebug -Xrunjdwp:transport\u003ddt_socket,server\u003dy,suspend\u003dy,address\u003d8000","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":"@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":"@REM ----------------------------------------------------------------------------","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":"@REM Begin all REM lines with \u0027@\u0027 in case MAVEN_BATCH_ECHO is \u0027on\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":"@echo off","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":"@REM set title of command window","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Vanessamae23"},"content":"title %0","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Vanessamae23"},"content":"@REM enable echoing by setting MAVEN_BATCH_ECHO to \u0027on\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Vanessamae23"},"content":"@if \"%MAVEN_BATCH_ECHO%\" \u003d\u003d \"on\" echo %MAVEN_BATCH_ECHO%","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Vanessamae23"},"content":"@REM set %HOME% to equivalent of $HOME","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Vanessamae23"},"content":"if \"%HOME%\" \u003d\u003d \"\" (set \"HOME\u003d%HOMEDRIVE%%HOMEPATH%\")","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Vanessamae23"},"content":"@REM Execute a user defined script before this one","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Vanessamae23"},"content":"if not \"%MAVEN_SKIP_RC%\" \u003d\u003d \"\" goto skipRcPre","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":"@REM check for pre script, once with legacy .bat ending and once with .cmd ending","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":"if exist \"%USERPROFILE%\\mavenrc_pre.bat\" call \"%USERPROFILE%\\mavenrc_pre.bat\" %*","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":"if exist \"%USERPROFILE%\\mavenrc_pre.cmd\" call \"%USERPROFILE%\\mavenrc_pre.cmd\" %*","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":":skipRcPre","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":"@setlocal","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Vanessamae23"},"content":"set ERROR_CODE\u003d0","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Vanessamae23"},"content":"@REM To isolate internal variables from possible post scripts, we use another setlocal","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Vanessamae23"},"content":"@setlocal","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Vanessamae23"},"content":"@REM \u003d\u003d\u003d\u003d START VALIDATION \u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Vanessamae23"},"content":"if not \"%JAVA_HOME%\" \u003d\u003d \"\" goto OkJHome","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Vanessamae23"},"content":"echo.","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Vanessamae23"},"content":"echo Error: JAVA_HOME not found in your environment. \u003e\u00262","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Vanessamae23"},"content":"echo Please set the JAVA_HOME variable in your environment to match the \u003e\u00262","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Vanessamae23"},"content":"echo location of your Java installation. \u003e\u00262","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Vanessamae23"},"content":"echo.","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Vanessamae23"},"content":"goto error","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Vanessamae23"},"content":":OkJHome","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Vanessamae23"},"content":"if exist \"%JAVA_HOME%\\bin\\java.exe\" goto init","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Vanessamae23"},"content":"echo.","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Vanessamae23"},"content":"echo Error: JAVA_HOME is set to an invalid directory. \u003e\u00262","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Vanessamae23"},"content":"echo JAVA_HOME \u003d \"%JAVA_HOME%\" \u003e\u00262","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Vanessamae23"},"content":"echo Please set the JAVA_HOME variable in your environment to match the \u003e\u00262","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Vanessamae23"},"content":"echo location of your Java installation. \u003e\u00262","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Vanessamae23"},"content":"echo.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Vanessamae23"},"content":"goto error","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Vanessamae23"},"content":"@REM \u003d\u003d\u003d\u003d END VALIDATION \u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Vanessamae23"},"content":":init","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Vanessamae23"},"content":"@REM Find the project base dir, i.e. the directory that contains the folder \".mvn\".","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Vanessamae23"},"content":"@REM Fallback to current working directory if not found.","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Vanessamae23"},"content":"set MAVEN_PROJECTBASEDIR\u003d%MAVEN_BASEDIR%","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Vanessamae23"},"content":"IF NOT \"%MAVEN_PROJECTBASEDIR%\"\u003d\u003d\"\" goto endDetectBaseDir","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Vanessamae23"},"content":"set EXEC_DIR\u003d%CD%","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Vanessamae23"},"content":"set WDIR\u003d%EXEC_DIR%","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Vanessamae23"},"content":":findBaseDir","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Vanessamae23"},"content":"IF EXIST \"%WDIR%\"\\.mvn goto baseDirFound","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Vanessamae23"},"content":"cd ..","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Vanessamae23"},"content":"IF \"%WDIR%\"\u003d\u003d\"%CD%\" goto baseDirNotFound","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Vanessamae23"},"content":"set WDIR\u003d%CD%","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Vanessamae23"},"content":"goto findBaseDir","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Vanessamae23"},"content":":baseDirFound","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Vanessamae23"},"content":"set MAVEN_PROJECTBASEDIR\u003d%WDIR%","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Vanessamae23"},"content":"cd \"%EXEC_DIR%\"","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"Vanessamae23"},"content":"goto endDetectBaseDir","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Vanessamae23"},"content":":baseDirNotFound","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Vanessamae23"},"content":"set MAVEN_PROJECTBASEDIR\u003d%EXEC_DIR%","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Vanessamae23"},"content":"cd \"%EXEC_DIR%\"","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Vanessamae23"},"content":":endDetectBaseDir","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"Vanessamae23"},"content":"IF NOT EXIST \"%MAVEN_PROJECTBASEDIR%\\.mvn\\jvm.config\" goto endReadAdditionalConfig","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Vanessamae23"},"content":"@setlocal EnableExtensions EnableDelayedExpansion","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Vanessamae23"},"content":"for /F \"usebackq delims\u003d\" %%a in (\"%MAVEN_PROJECTBASEDIR%\\.mvn\\jvm.config\") do set JVM_CONFIG_MAVEN_PROPS\u003d!JVM_CONFIG_MAVEN_PROPS! %%a","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Vanessamae23"},"content":"@endlocal \u0026 set JVM_CONFIG_MAVEN_PROPS\u003d%JVM_CONFIG_MAVEN_PROPS%","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Vanessamae23"},"content":":endReadAdditionalConfig","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"Vanessamae23"},"content":"SET MAVEN_JAVA_EXE\u003d\"%JAVA_HOME%\\bin\\java.exe\"","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"Vanessamae23"},"content":"set WRAPPER_JAR\u003d\"%MAVEN_PROJECTBASEDIR%\\.mvn\\wrapper\\maven-wrapper.jar\"","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"Vanessamae23"},"content":"set WRAPPER_LAUNCHER\u003dorg.apache.maven.wrapper.MavenWrapperMain","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"Vanessamae23"},"content":"set DOWNLOAD_URL\u003d\"https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar\"","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Vanessamae23"},"content":"FOR /F \"usebackq tokens\u003d1,2 delims\u003d\u003d\" %%A IN (\"%MAVEN_PROJECTBASEDIR%\\.mvn\\wrapper\\maven-wrapper.properties\") DO (","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"Vanessamae23"},"content":" IF \"%%A\"\u003d\u003d\"wrapperUrl\" SET DOWNLOAD_URL\u003d%%B","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"Vanessamae23"},"content":")","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"Vanessamae23"},"content":"@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"Vanessamae23"},"content":"@REM This allows using the maven wrapper in projects that prohibit checking in binary data.","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"Vanessamae23"},"content":"if exist %WRAPPER_JAR% (","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"Vanessamae23"},"content":" if \"%MVNW_VERBOSE%\" \u003d\u003d \"true\" (","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"Vanessamae23"},"content":" echo Found %WRAPPER_JAR%","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"Vanessamae23"},"content":" )","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"Vanessamae23"},"content":") else (","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"Vanessamae23"},"content":" if not \"%MVNW_REPOURL%\" \u003d\u003d \"\" (","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"Vanessamae23"},"content":" SET DOWNLOAD_URL\u003d\"%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar\"","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"Vanessamae23"},"content":" )","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"Vanessamae23"},"content":" if \"%MVNW_VERBOSE%\" \u003d\u003d \"true\" (","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"Vanessamae23"},"content":" echo Couldn\u0027t find %WRAPPER_JAR%, downloading it ...","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"Vanessamae23"},"content":" echo Downloading from: %DOWNLOAD_URL%","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"Vanessamae23"},"content":" )","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"Vanessamae23"},"content":" powershell -Command \"\u0026{\"^","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"Vanessamae23"},"content":"\t\t\"$webclient \u003d new-object System.Net.WebClient;\"^","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"Vanessamae23"},"content":"\t\t\"if (-not ([string]::IsNullOrEmpty(\u0027%MVNW_USERNAME%\u0027) -and [string]::IsNullOrEmpty(\u0027%MVNW_PASSWORD%\u0027))) {\"^","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"Vanessamae23"},"content":"\t\t\"$webclient.Credentials \u003d new-object System.Net.NetworkCredential(\u0027%MVNW_USERNAME%\u0027, \u0027%MVNW_PASSWORD%\u0027);\"^","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"Vanessamae23"},"content":"\t\t\"}\"^","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"Vanessamae23"},"content":"\t\t\"[Net.ServicePointManager]::SecurityProtocol \u003d [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile(\u0027%DOWNLOAD_URL%\u0027, \u0027%WRAPPER_JAR%\u0027)\"^","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"Vanessamae23"},"content":"\t\t\"}\"","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"Vanessamae23"},"content":" if \"%MVNW_VERBOSE%\" \u003d\u003d \"true\" (","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"Vanessamae23"},"content":" echo Finished downloading %WRAPPER_JAR%","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"Vanessamae23"},"content":" )","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"Vanessamae23"},"content":")","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"Vanessamae23"},"content":"@REM End of extension","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"Vanessamae23"},"content":"@REM Provide a \"standardized\" way to retrieve the CLI args that will","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"Vanessamae23"},"content":"@REM work with both Windows and non-Windows executions.","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"Vanessamae23"},"content":"set MAVEN_CMD_LINE_ARGS\u003d%*","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"Vanessamae23"},"content":"%MAVEN_JAVA_EXE% ^","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"Vanessamae23"},"content":" %JVM_CONFIG_MAVEN_PROPS% ^","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"Vanessamae23"},"content":" %MAVEN_OPTS% ^","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"Vanessamae23"},"content":" %MAVEN_DEBUG_OPTS% ^","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"Vanessamae23"},"content":" -classpath %WRAPPER_JAR% ^","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"Vanessamae23"},"content":" \"-Dmaven.multiModuleProjectDirectory\u003d%MAVEN_PROJECTBASEDIR%\" ^","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"Vanessamae23"},"content":" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"Vanessamae23"},"content":"if ERRORLEVEL 1 goto error","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"Vanessamae23"},"content":"goto end","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"Vanessamae23"},"content":":error","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"Vanessamae23"},"content":"set ERROR_CODE\u003d1","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"Vanessamae23"},"content":":end","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"Vanessamae23"},"content":"@endlocal \u0026 set ERROR_CODE\u003d%ERROR_CODE%","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"Vanessamae23"},"content":"if not \"%MAVEN_SKIP_RC%\"\u003d\u003d\"\" goto skipRcPost","lastModifiedDate":"2023-09-03"},{"lineNumber":178,"author":{"gitId":"Vanessamae23"},"content":"@REM check for post script, once with legacy .bat ending and once with .cmd ending","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"Vanessamae23"},"content":"if exist \"%USERPROFILE%\\mavenrc_post.bat\" call \"%USERPROFILE%\\mavenrc_post.bat\"","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"Vanessamae23"},"content":"if exist \"%USERPROFILE%\\mavenrc_post.cmd\" call \"%USERPROFILE%\\mavenrc_post.cmd\"","lastModifiedDate":"2023-09-03"},{"lineNumber":181,"author":{"gitId":"Vanessamae23"},"content":":skipRcPost","lastModifiedDate":"2023-09-03"},{"lineNumber":182,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":183,"author":{"gitId":"Vanessamae23"},"content":"@REM pause the script if MAVEN_BATCH_PAUSE is set to \u0027on\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":184,"author":{"gitId":"Vanessamae23"},"content":"if \"%MAVEN_BATCH_PAUSE%\"\u003d\u003d\"on\" pause","lastModifiedDate":"2023-09-03"},{"lineNumber":185,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":186,"author":{"gitId":"Vanessamae23"},"content":"if \"%MAVEN_TERMINATE_CMD%\"\u003d\u003d\"on\" exit %ERROR_CODE%","lastModifiedDate":"2023-09-03"},{"lineNumber":187,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":188,"author":{"gitId":"Vanessamae23"},"content":"cmd /C exit /B %ERROR_CODE%","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":188}},{"path":"demo/src/main/java/com/example/demo/HelloApplication.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package com.example.demo;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"public class HelloApplication extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" public void start(Stage stage) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(HelloApplication.class.getResource(\"hello-view.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" Scene scene \u003d new Scene(fxmlLoader.load(), 320, 240);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" stage.setTitle(\"Hello!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" launch();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":23}},{"path":"demo/src/main/java/com/example/demo/HelloController.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package com.example.demo;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"public class HelloController {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":" private Label welcomeText;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" protected void onHelloButtonClick() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" welcomeText.setText(\"Welcome to JavaFX Application!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":14}},{"path":"demo/src/main/java/module-info.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"module com.example.demo {","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":" requires javafx.controls;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":" requires javafx.fxml;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":" opens com.example.demo to javafx.fxml;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":" exports com.example.demo;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":8}},{"path":"demo/src/main/resources/com/example/demo/hello-view.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"\u003cVBox alignment\u003d\"CENTER\" spacing\u003d\"20.0\" xmlns:fx\u003d\"http://javafx.com/fxml\"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":" fx:controller\u003d\"com.example.demo.HelloController\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" \u003cInsets bottom\u003d\"20.0\" left\u003d\"20.0\" right\u003d\"20.0\" top\u003d\"20.0\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" \u003cLabel fx:id\u003d\"welcomeText\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" \u003cButton text\u003d\"Hello!\" onAction\u003d\"#onHelloButtonClick\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"\u003c/VBox\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":16}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" * The main class","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/user.jpg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/ans.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":" private Scene scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":" private static void writeToFile(String filePath, String textToAdd) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Vanessamae23"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Vanessamae23"},"content":" public Duke() {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Vanessamae23"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Vanessamae23"},"content":" storage \u003d new Storage(\"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Vanessamae23"},"content":" this.tasks \u003d storage.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Vanessamae23"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":" tasks \u003d new TaskList(null);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Vanessamae23"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Vanessamae23"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"Vanessamae23"},"content":" this.tasks \u003d storage.load();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Vanessamae23"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"Vanessamae23"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Vanessamae23"},"content":" tasks \u003d new TaskList(null);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Vanessamae23"},"content":" * Iteration 2:","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Vanessamae23"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Vanessamae23"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Vanessamae23"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Vanessamae23"},"content":" Label userText \u003d new Label(userInput.getText());","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Vanessamae23"},"content":" Label dukeText \u003d new Label(getResponse(userInput.getText()));","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Vanessamae23"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Vanessamae23"},"content":" custom.DialogBox.getUserDialog( userText.toString(), user),","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Vanessamae23"},"content":" custom.DialogBox.getDukeDialog(dukeText.toString(), duke)","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Vanessamae23"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Vanessamae23"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Vanessamae23"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Vanessamae23"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Vanessamae23"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Vanessamae23"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Vanessamae23"},"content":" return \"Duke heard: \" + input;","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Vanessamae23"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Vanessamae23"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Vanessamae23"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Vanessamae23"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Vanessamae23"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Vanessamae23"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Vanessamae23"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Vanessamae23"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Vanessamae23"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Vanessamae23"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Vanessamae23"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Vanessamae23"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Vanessamae23"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Vanessamae23"},"content":" // more code to be added here later","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Vanessamae23"},"content":" //Step 2. Formatting the window to look as expected","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Vanessamae23"},"content":" stage.setTitle(\"Duke Chatbot Pro\");","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Vanessamae23"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Vanessamae23"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Vanessamae23"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"Vanessamae23"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"Vanessamae23"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"Vanessamae23"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"Vanessamae23"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Vanessamae23"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"Vanessamae23"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"Vanessamae23"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"Vanessamae23"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"Vanessamae23"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"Vanessamae23"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"Vanessamae23"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"Vanessamae23"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"Vanessamae23"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"Vanessamae23"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"Vanessamae23"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"Vanessamae23"},"content":" //Scroll down to the end every time dialogContainer\u0027s height changes.","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"Vanessamae23"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"Vanessamae23"},"content":" // more code to be added here later","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"Vanessamae23"},"content":" //Part 3. Add functionality to handle user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"Vanessamae23"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"Vanessamae23"},"content":" handleUserInput();","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"Vanessamae23"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"Vanessamae23"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"Vanessamae23"},"content":" handleUserInput();","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"Vanessamae23"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"Vanessamae23"},"content":" * Iteration 1:","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"Vanessamae23"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"Vanessamae23"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"Vanessamae23"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"Vanessamae23"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"Vanessamae23"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"Vanessamae23"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"Vanessamae23"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"Vanessamae23"},"content":" return textToAdd;","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"Vanessamae23"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"Vanessamae23"},"content":" this.ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"Vanessamae23"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"Vanessamae23"},"content":" while(!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"Vanessamae23"},"content":" String input \u003d this.ui.getUserCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"Vanessamae23"},"content":" Command c \u003d Parser.parse(input, this.ui, this.storage, this.tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"Vanessamae23"},"content":" if (c.execute()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"Vanessamae23"},"content":" isExit \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"Vanessamae23"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"Vanessamae23"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"Vanessamae23"},"content":" this.ui.showError(\"Something wrong!\" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"Vanessamae23"},"content":" } finally {","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"Vanessamae23"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":194,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":195,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"Vanessamae23"},"content":" String filename \u003d \"src/save.txt\";","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"Vanessamae23"},"content":" new Duke(filename).run();","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":199,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Vanessamae23":196,"-":3}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import java.lang.reflect.InvocationTargetException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" private seedu.Duke duke \u003d new seedu.Duke();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(fxmlLoader);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" fxmlLoader.\u003cui.MainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(\"sasa\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(\"SASasasas\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":39}},{"path":"src/main/java/custom/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package custom;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(ui.MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Vanessamae23"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Vanessamae23"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Vanessamae23"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Vanessamae23"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Vanessamae23"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Vanessamae23"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Vanessamae23"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Vanessamae23"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Vanessamae23"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Vanessamae23"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":61}},{"path":"src/main/java/seedu/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"public class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":" private String command;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":" private boolean exit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" public Command(String command, Ui ui, Storage storage, TaskList tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" public Command(String command, Ui ui, Storage storage, TaskList tasks, int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" public boolean execute() throws Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" this.ui.showByeMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":" this.storage.save(this.tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":" this.ui.showTask(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":" Task removed \u003d this.tasks.remove(this.index);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":" this.ui.removeTask(removed, this.tasks.getLen());","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Vanessamae23"},"content":" this.tasks.mark(this.index);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Vanessamae23"},"content":" this.ui.showMarked();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Vanessamae23"},"content":" } else if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Vanessamae23"},"content":" String keyword \u003d command.substring(4).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Vanessamae23"},"content":" ArrayList\u003cTask\u003e foundWords \u003d this.tasks.find(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Vanessamae23"},"content":" this.ui.showFoundWords(foundWords);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Vanessamae23"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Vanessamae23"},"content":" Task curr \u003d new Task(command.substring(command.indexOf(\" \")),","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Vanessamae23"},"content":" command.substring(0, command.indexOf(\" \")));","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":" this.ui.addTask(curr);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":" this.tasks.add(curr);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Vanessamae23"},"content":" throw new Exception(\"Some error occurred \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Vanessamae23"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Vanessamae23"},"content":" public boolean exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Vanessamae23"},"content":" return this.exit;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Vanessamae23":61}},{"path":"src/main/java/seedu/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" Application.launch(seedu.Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":12}},{"path":"src/main/java/seedu/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":" * Parses user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":" public static Command parse(String command, Ui ui, Storage storage, TaskList tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":" if(command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" return new Command(command, ui, storage, tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" return new Command(command, ui, storage, tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" } else if (command.startsWith(\"delete \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" String[] s \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" int removeIndex \u003d Integer.parseInt(s[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" return new Command(\"delete\", ui, storage, tasks, removeIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" } else if (command.startsWith(\"mark \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" int current \u003d Integer.parseInt(command.substring(5)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" return new Command(\"mark\", ui, storage, tasks, current);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" } else if (command.startsWith(\"find \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" return new Command(command, ui, storage, tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" return new Command(command, ui, storage, tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Vanessamae23":28}},{"path":"src/main/java/seedu/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" private final Path filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" * Stores the file of the tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" this.filePath \u003d Paths.get(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" public TaskList load() throws Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" List\u003cString\u003e tasks \u003d Files.readAllLines(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" return TaskList.getFromFile(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" } catch(IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" throw new IOException(\"Error writing to file: \" + filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" throw new Exception(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" public void save(TaskList tasks) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" List\u003cString\u003e encodedTasks \u003d TaskList.encode(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":" Files.write(filePath, encodedTasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":" } catch (IOException ioe) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":" throw new IOException(\"Error writing to file: \" + filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Vanessamae23":38}},{"path":"src/main/java/seedu/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":" protected Type category;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":" protected String title;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" protected String start \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" protected String end \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" * The task to be loaded","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" public Task(String description, String category) throws IllegalArgumentException {","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" if (category.equals(\"todo\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" this.category \u003d Type.ToDo;","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" String[] splitWord \u003ddescription.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" this.title \u003d splitWord[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" this.description \u003d splitWord[0].trim() + \" \" + title;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(\"This is not in the correct format\");","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" throw new IllegalArgumentException(\"Please correct the format\");","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" } else if (category.equals(\"deadline\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" this.category \u003d Type.Deadline;","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":" String[] splitWord \u003ddescription.split(\"/\", 4);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":" if (splitWord.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":" this.title \u003d splitWord[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":" this.end \u003d splitWord[1].split(\"by \")[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":" this.description \u003d title + \"(\"+ splitWord[1].split(\"by \")[1].trim() + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":" String date \u003d splitWord[1].substring( 3).length() \u003d\u003d 1 ? \"0\"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Vanessamae23"},"content":" + splitWord[1].substring( 3) : splitWord[1].substring( 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Vanessamae23"},"content":" String endDate \u003d splitWord[3]+\"-\"+splitWord[2]+\"-\" + date;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Vanessamae23"},"content":" String formattedDate \u003d LocalDate.parse(endDate)","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Vanessamae23"},"content":" .format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Vanessamae23"},"content":" this.title \u003d splitWord[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Vanessamae23"},"content":" this.end \u003d formattedDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Vanessamae23"},"content":" this.description \u003d splitWord[0] + \"(\"+ formattedDate + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(\"This is not in the correct format\");","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"Vanessamae23"},"content":" throw new IllegalArgumentException(\"Please correct the format\");","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"Vanessamae23"},"content":" } else if (category.equals(\"event\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"Vanessamae23"},"content":" String[] splitWord \u003d description.split(\"/(from|to)\", 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Vanessamae23"},"content":" this.category \u003d Type.Event;","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"Vanessamae23"},"content":" this.title \u003d splitWord[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Vanessamae23"},"content":" this.start \u003d splitWord[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Vanessamae23"},"content":" this.end \u003d splitWord[2].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Vanessamae23"},"content":" this.description \u003d title + \"(From : \" + start + \" To : \" + end + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(\"OOPS!!! The description of a event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(\"This is not in the correct format\");","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"Vanessamae23"},"content":" throw new IllegalArgumentException(\"Please correct the format\");","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"Vanessamae23"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"Vanessamae23"},"content":" throw new IllegalArgumentException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-21"},{"lineNumber":70,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Vanessamae23"},"content":" * Returns the status of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Vanessamae23"},"content":" * @returns a String of X if task is done otherwise a blank space","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Vanessamae23"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"Vanessamae23"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":82,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Vanessamae23"},"content":" * Returns the status of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Vanessamae23"},"content":" * @returns a String more descriptive status of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Vanessamae23"},"content":" public String getStatus() {","lastModifiedDate":"2023-08-21"},{"lineNumber":88,"author":{"gitId":"Vanessamae23"},"content":" String cat \u003d this.category \u003d\u003d Type.ToDo ? \"T\" : this.category \u003d\u003d Type.Deadline ? \"D\" : \"E\";","lastModifiedDate":"2023-08-21"},{"lineNumber":89,"author":{"gitId":"Vanessamae23"},"content":" return \"[\" + cat +\"]\" + \"[\"+ this.getStatusIcon() + \"] \" + this.description.trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":91,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":92,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Vanessamae23"},"content":" * Sets the description of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Vanessamae23"},"content":" * @param the text description of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Vanessamae23"},"content":" public void setDescription(String desc) {","lastModifiedDate":"2023-08-21"},{"lineNumber":98,"author":{"gitId":"Vanessamae23"},"content":" this.description \u003d desc;","lastModifiedDate":"2023-08-21"},{"lineNumber":99,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":100,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":101,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Vanessamae23"},"content":" * Marks a certain task as done","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Vanessamae23"},"content":" * @returns a String to confirm the checked","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Vanessamae23"},"content":" public String mark() {","lastModifiedDate":"2023-08-21"},{"lineNumber":107,"author":{"gitId":"Vanessamae23"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":108,"author":{"gitId":"Vanessamae23"},"content":" return \"[\"+ this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":109,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":110,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":111,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Vanessamae23"},"content":" * Returns a string to show the status of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Vanessamae23"},"content":" * @returns a status of the current task","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"Vanessamae23"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":117,"author":{"gitId":"Vanessamae23"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":118,"author":{"gitId":"Vanessamae23"},"content":" return this.getStatus();","lastModifiedDate":"2023-08-21"},{"lineNumber":119,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":120,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":121,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Vanessamae23":121}},{"path":"src/main/java/seedu/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"import java.util.Date;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" private List\u003cTask\u003e lists \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" public TaskList(List\u003cTask\u003e t) {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" this.lists \u003d t;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" * Add a tasks in the lists of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" * @param task the Task class that is to be added","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" public void add(Task t) throws Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" this.lists.add(t);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" } catch(IllegalArgumentException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" throw new Exception(\"Unfortunately, \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" throw new Exception(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":" * Returns the current task from the list","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":" * @param index the position of the current task to be retrieved","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":" * @returns a Task object of interest","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Vanessamae23"},"content":" return this.lists.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Vanessamae23"},"content":" * Retrieves task lists from a list of string from a file","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Vanessamae23"},"content":" * @param from source of the lists of strings","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Vanessamae23"},"content":" * @returns a TaskList of the current lists of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":" public static TaskList getFromFile(List\u003cString\u003e from) throws Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":" List\u003cTask\u003e lists \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Vanessamae23"},"content":" for (String l : from) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":" String[] chars \u003d l.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Vanessamae23"},"content":" if (chars[0].equals(\"ToDo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Vanessamae23"},"content":" lists.add(new Task(\"todo\" + \" \" + chars[2] ,\"todo\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Vanessamae23"},"content":" } else if (chars[0].equals(\"Event\")){","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Vanessamae23"},"content":" String title \u003d chars[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Vanessamae23"},"content":" String fr \u003d chars[4].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Vanessamae23"},"content":" String to \u003d chars[3].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Vanessamae23"},"content":" Task temp \u003d new Task(title + \" /from \" + fr + \" /to \" + to, \"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Vanessamae23"},"content":" if (chars[1].equals(\"true\")) temp.isDone \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Vanessamae23"},"content":" lists.add(temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Vanessamae23"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Vanessamae23"},"content":" String title \u003d chars[2].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Vanessamae23"},"content":" String to \u003d chars[3].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Vanessamae23"},"content":" Task temp \u003d new Task(title + \" /by \" + to,\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Vanessamae23"},"content":" if (chars[1].equals(\"true\")) temp.isDone \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Vanessamae23"},"content":" lists.add(temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Vanessamae23"},"content":" return new TaskList(lists);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Vanessamae23"},"content":" throw new Error(\"Parsing error\");","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Vanessamae23"},"content":" * Encodes TaskList to a list of string to be used in a file","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Vanessamae23"},"content":" * @param tasks the list of Tasks objects","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Vanessamae23"},"content":" * @returns a String List to be stored in a file","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Vanessamae23"},"content":" public static List\u003cString\u003e encode(TaskList tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Vanessamae23"},"content":" int curr \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Vanessamae23"},"content":" List\u003cString\u003e arrays \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Vanessamae23"},"content":" for (int i \u003d 0; i \u003c tasks.getLen(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Vanessamae23"},"content":" if (tasks.get(i) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Vanessamae23"},"content":" Task t \u003d tasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Vanessamae23"},"content":" String start \u003d !t.start.isEmpty() ? t.start + \"|\" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Vanessamae23"},"content":" String end \u003d !t.end.isEmpty()? t.end + \"|\" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Vanessamae23"},"content":" arrays.add(t.category.toString() + \"|\" + (t.isDone ? \"true\" : \"false\") + \"|\" + t.title + \"|\" + end + start);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Vanessamae23"},"content":" ;","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Vanessamae23"},"content":" return arrays;","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Vanessamae23"},"content":" * Returns the size of the TaskList","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Vanessamae23"},"content":" * @returns the length of the tasks number","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Vanessamae23"},"content":" public int getLen() {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Vanessamae23"},"content":" return this.lists.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"Vanessamae23"},"content":" * Marks a task in the lists of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Vanessamae23"},"content":" * @param index position of the task in the lists of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Vanessamae23"},"content":" public void mark(int index) throws Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"Vanessamae23"},"content":" this.lists.get(index).mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"Vanessamae23"},"content":" throw new Exception(\"Sorry there is no such task\");","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"Vanessamae23"},"content":" * Removes a task from lists of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"Vanessamae23"},"content":" * @param index the position of the task to be removed","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"Vanessamae23"},"content":" * @returns the Task that was removed","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"Vanessamae23"},"content":" public Task remove(int index) throws Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"Vanessamae23"},"content":" Task now \u003d lists.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"Vanessamae23"},"content":" this.lists.remove(now);","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"Vanessamae23"},"content":" return now;","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Vanessamae23"},"content":" throw new Exception(\"Something wrong with the given input\");","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"Vanessamae23"},"content":" public ArrayList\u003cTask\u003e find(String keyword) throws Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"Vanessamae23"},"content":" ArrayList\u003cTask\u003e foundWords \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"Vanessamae23"},"content":" for(Task t : this.lists) {","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"Vanessamae23"},"content":" if(t.description.contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"Vanessamae23"},"content":" foundWords.add(t);","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"Vanessamae23"},"content":" return foundWords;","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"Vanessamae23"},"content":" throw new Exception(\"Keyword not found\");","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Vanessamae23":152}},{"path":"src/main/java/seedu/Type.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"public enum Type {","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":" ToDo, Deadline, Event","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Vanessamae23":5}},{"path":"src/main/java/seedu/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":" private Scanner sc;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":" private boolean on;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" private final PrintStream out;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" this.out \u003d System.out;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" * Prints welcome message to the user","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" String logo \u003d \"Bacon Pancake\";","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" out.println(\" Hello from \" + logo + \"\\n What can I do for you? \\n\" + \"---------------------------------- \\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" * Prints ending message to the user","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" public boolean showByeMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" out.println(\"Bacon Pancake : \\n\" + \"Bye! See you again soon \");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":" * Prints out all the tasks in the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":" * @param tasks the TaskList class that contains all the current tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":" public void showTask(TaskList tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Vanessamae23"},"content":" out.println(\"Bacon Pancake : Below are the lists\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Vanessamae23"},"content":" int curr \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Vanessamae23"},"content":" for (int i \u003d 0; i \u003c tasks.getLen(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Vanessamae23"},"content":" if (tasks.get(i) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Vanessamae23"},"content":" Task t \u003d tasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Vanessamae23"},"content":" out.println((curr++) + \". \" + t.getStatus());","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":" * Generates and prints the error message upon any exceptions.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":" * @param m message of the error","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":" public void showError(String m) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Vanessamae23"},"content":" out.println(m);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Vanessamae23"},"content":" * Generates and prints a horizontal line.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Vanessamae23"},"content":" public void showLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Vanessamae23"},"content":" out.println(\"----------------------------------\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Vanessamae23"},"content":" * Returns the command that is entered by the user","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Vanessamae23"},"content":" * @return string of comman (full line) entered by the user","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Vanessamae23"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Vanessamae23"},"content":" out.println(\"Enter your input : \");","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Vanessamae23"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Vanessamae23"},"content":" * Removes a task from the lists of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Vanessamae23"},"content":" * @param t Task that is to be removed","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Vanessamae23"},"content":" * @param currentLength to show the current number of tasks after removal","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Vanessamae23"},"content":" public void removeTask(Task t, int currentLength) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Vanessamae23"},"content":" out.println(\"Noted. I\u0027ve removed this task: \\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Vanessamae23"},"content":" out.println(t);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Vanessamae23"},"content":" out.println(\"Now you have \" + currentLength + \" tasks left.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Vanessamae23"},"content":" * Marks and checks the current task to be true","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Vanessamae23"},"content":" public void showMarked() {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Vanessamae23"},"content":" out.println(\"Bacon Pancake : Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Vanessamae23"},"content":" * Add a task to the lists of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Vanessamae23"},"content":" * @param curr Task that is supposed to be added to the lists of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Vanessamae23"},"content":" public void addTask(Task curr) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Vanessamae23"},"content":" out.println(\"Bacon Pancake : \\n Added : \" + curr.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Vanessamae23"},"content":" public void showFoundWords(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Vanessamae23"},"content":" for(Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(task.getStatus());","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Vanessamae23":110}},{"path":"src/main/java/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import javafx.event.ActionEvent;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" private seedu.Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/user.jpg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/ans.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":" public void setDuke(seedu.Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Vanessamae23"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Vanessamae23"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Vanessamae23"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Vanessamae23"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Vanessamae23"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Vanessamae23"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":" custom.DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":" custom.DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":53}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":19}},{"path":"src/module-info.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"module yourModuleName {","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":" requires javafx.controls;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":" requires javafx.fxml;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":" // Add any other module dependencies if needed","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":5}},{"path":"src/save.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"Event|false|Supernova|Tue 2pm|Mon 2pm|","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"Deadline|false|return book|Dec 2 2019|","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"ToDo|false|poop|","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"Event|false|Supernova|Tue 2pm|Mon 2pm|","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"Deadline|false|return book|Dec 2 2019|","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"ToDo|false|kk|","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"ToDo|true|psadas|","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Vanessamae23":7}},{"path":"src/test/java/seedu/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu; //same package as the class being tested","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" public void addTaskTest(){","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" Task newTask \u003d new Task(\"todo cs2103t\", \"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" List\u003cTask\u003e lists \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" lists.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" TaskList t \u003d new TaskList(lists);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" assertEquals(\"todo cs2103t\", t.get(0).description);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" public void removeTaskTest(){","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" Task newTask \u003d new Task(\"todo cs2103t\", \"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" List\u003cTask\u003e lists \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" for(int i \u003d 0; i \u003c 10; i++) lists.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" TaskList t \u003d new TaskList(lists);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" t.remove(4);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":" assertEquals(9, t.getLen());","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Vanessamae23":33}},{"path":"src/test/java/seedu/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu; //same package as the class being tested","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" public void statusMarkTest(){","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" Task newTask \u003d new Task(\"todo cs2103t\", \"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" newTask.mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" assertEquals(\"[T][X] todo cs2103t\", newTask.getStatus());","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" public void markTest(){","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" Task newTask \u003d new Task(\"todsadao cs2103t\", \"toddsado\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" assertEquals(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Vanessamae23":26}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"todo Poop","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"deadline return book /by 02/12/2019","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"event Supernova /from Mon 2pm /to Tue 2pm","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"delete 3","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Vanessamae23":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"javac -cp C:\\Users\\user\\NUS\\CS2103T\\cs2103t-ip\\src\\main\\java -Xlint:none -d ..\\bin C:\\Users\\user\\NUS\\CS2103T\\cs2103t-ip\\src\\main\\java\\*.java","lastModifiedDate":"2023-08-21"},{"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":"Vanessamae23"},"content":"java -classpath C:\\Users\\user\\NUS\\CS2103T\\cs2103t-ip\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-21"},{"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":{"Vanessamae23":2,"-":19}},{"path":"untitled/src/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"public class Main {","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(\"Hello world!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":5}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"# Duke Project Pro","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"\u003e “Your mind is for having ideas, not holding them.” – David Allen","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"DukePro frees your mind of having to remember things you need to do. It\u0027s,","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"- Text-based","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"- Best way to learn","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"- Easy and Simple to use","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"All you need to do is,","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":"1. Download from [link](https://nus-cs2103-ay2324s1.github.io/website/schedule/week4/project.html)","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":"2. Double click it","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":"3. Add your tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":"4. Let it manage your task for you :blush:","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":"It is also *Emphasize* Free","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":"Features","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":"- [ ] Managing tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":"- [ ] Managing deadlines (coming soon)","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":"- [ ] Reminders (coming soon)","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":"If you Java programmer, you can use it to practice Java too. Here\u0027s the `main` method:","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":"```","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":"public class Main {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" Application.launch(MainApp.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":"```","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":"","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":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"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":39,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":40,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":41,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":42,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"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":44,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":45,"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":46,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Vanessamae23":31,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" String javaFxVersion \u003d \u002717.0.8\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":"","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":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":"javafx {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":" version \u003d \u002717\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":" mainClass.set(\"seedu.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"Vanessamae23"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Vanessamae23"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Vanessamae23":27,"-":41}},{"path":"demo/mvnw.cmd","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"@REM ----------------------------------------------------------------------------","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"@REM Licensed to the Apache Software Foundation (ASF) under one","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"@REM or more contributor license agreements. See the NOTICE file","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"@REM distributed with this work for additional information","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"@REM regarding copyright ownership. The ASF licenses this file","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"@REM to you under the Apache License, Version 2.0 (the","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"@REM \"License\"); you may not use this file except in compliance","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"@REM with the License. You may obtain a copy of the License at","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"@REM","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"@REM https://www.apache.org/licenses/LICENSE-2.0","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":"@REM","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":"@REM Unless required by applicable law or agreed to in writing,","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":"@REM software distributed under the License is distributed on an","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":"@REM \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":"@REM KIND, either express or implied. See the License for the","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"@REM specific language governing permissions and limitations","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":"@REM under the License.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":"@REM ----------------------------------------------------------------------------","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":"@REM ----------------------------------------------------------------------------","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":"@REM Maven Start Up Batch script","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":"@REM","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":"@REM Required ENV vars:","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":"@REM JAVA_HOME - location of a JDK home dir","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":"@REM","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":"@REM Optional ENV vars","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":"@REM M2_HOME - location of maven2\u0027s installed home dir","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":"@REM MAVEN_BATCH_ECHO - set to \u0027on\u0027 to enable the echoing of the batch commands","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":"@REM MAVEN_BATCH_PAUSE - set to \u0027on\u0027 to wait for a keystroke before ending","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":"@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":"@REM e.g. to debug Maven itself, use","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":"@REM set MAVEN_OPTS\u003d-Xdebug -Xrunjdwp:transport\u003ddt_socket,server\u003dy,suspend\u003dy,address\u003d8000","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":"@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":"@REM ----------------------------------------------------------------------------","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":"@REM Begin all REM lines with \u0027@\u0027 in case MAVEN_BATCH_ECHO is \u0027on\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":"@echo off","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":"@REM set title of command window","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Vanessamae23"},"content":"title %0","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Vanessamae23"},"content":"@REM enable echoing by setting MAVEN_BATCH_ECHO to \u0027on\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Vanessamae23"},"content":"@if \"%MAVEN_BATCH_ECHO%\" \u003d\u003d \"on\" echo %MAVEN_BATCH_ECHO%","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Vanessamae23"},"content":"@REM set %HOME% to equivalent of $HOME","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Vanessamae23"},"content":"if \"%HOME%\" \u003d\u003d \"\" (set \"HOME\u003d%HOMEDRIVE%%HOMEPATH%\")","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Vanessamae23"},"content":"@REM Execute a user defined script before this one","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Vanessamae23"},"content":"if not \"%MAVEN_SKIP_RC%\" \u003d\u003d \"\" goto skipRcPre","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":"@REM check for pre script, once with legacy .bat ending and once with .cmd ending","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":"if exist \"%USERPROFILE%\\mavenrc_pre.bat\" call \"%USERPROFILE%\\mavenrc_pre.bat\" %*","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":"if exist \"%USERPROFILE%\\mavenrc_pre.cmd\" call \"%USERPROFILE%\\mavenrc_pre.cmd\" %*","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":":skipRcPre","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":"@setlocal","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Vanessamae23"},"content":"set ERROR_CODE\u003d0","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Vanessamae23"},"content":"@REM To isolate internal variables from possible post scripts, we use another setlocal","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Vanessamae23"},"content":"@setlocal","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Vanessamae23"},"content":"@REM \u003d\u003d\u003d\u003d START VALIDATION \u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Vanessamae23"},"content":"if not \"%JAVA_HOME%\" \u003d\u003d \"\" goto OkJHome","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Vanessamae23"},"content":"echo.","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Vanessamae23"},"content":"echo Error: JAVA_HOME not found in your environment. \u003e\u00262","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Vanessamae23"},"content":"echo Please set the JAVA_HOME variable in your environment to match the \u003e\u00262","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Vanessamae23"},"content":"echo location of your Java installation. \u003e\u00262","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Vanessamae23"},"content":"echo.","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Vanessamae23"},"content":"goto error","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Vanessamae23"},"content":":OkJHome","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Vanessamae23"},"content":"if exist \"%JAVA_HOME%\\bin\\java.exe\" goto init","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Vanessamae23"},"content":"echo.","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Vanessamae23"},"content":"echo Error: JAVA_HOME is set to an invalid directory. \u003e\u00262","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Vanessamae23"},"content":"echo JAVA_HOME \u003d \"%JAVA_HOME%\" \u003e\u00262","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Vanessamae23"},"content":"echo Please set the JAVA_HOME variable in your environment to match the \u003e\u00262","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Vanessamae23"},"content":"echo location of your Java installation. \u003e\u00262","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Vanessamae23"},"content":"echo.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Vanessamae23"},"content":"goto error","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Vanessamae23"},"content":"@REM \u003d\u003d\u003d\u003d END VALIDATION \u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Vanessamae23"},"content":":init","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Vanessamae23"},"content":"@REM Find the project base dir, i.e. the directory that contains the folder \".mvn\".","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Vanessamae23"},"content":"@REM Fallback to current working directory if not found.","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Vanessamae23"},"content":"set MAVEN_PROJECTBASEDIR\u003d%MAVEN_BASEDIR%","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Vanessamae23"},"content":"IF NOT \"%MAVEN_PROJECTBASEDIR%\"\u003d\u003d\"\" goto endDetectBaseDir","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Vanessamae23"},"content":"set EXEC_DIR\u003d%CD%","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Vanessamae23"},"content":"set WDIR\u003d%EXEC_DIR%","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Vanessamae23"},"content":":findBaseDir","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Vanessamae23"},"content":"IF EXIST \"%WDIR%\"\\.mvn goto baseDirFound","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Vanessamae23"},"content":"cd ..","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Vanessamae23"},"content":"IF \"%WDIR%\"\u003d\u003d\"%CD%\" goto baseDirNotFound","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Vanessamae23"},"content":"set WDIR\u003d%CD%","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Vanessamae23"},"content":"goto findBaseDir","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Vanessamae23"},"content":":baseDirFound","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Vanessamae23"},"content":"set MAVEN_PROJECTBASEDIR\u003d%WDIR%","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Vanessamae23"},"content":"cd \"%EXEC_DIR%\"","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"Vanessamae23"},"content":"goto endDetectBaseDir","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Vanessamae23"},"content":":baseDirNotFound","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Vanessamae23"},"content":"set MAVEN_PROJECTBASEDIR\u003d%EXEC_DIR%","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Vanessamae23"},"content":"cd \"%EXEC_DIR%\"","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Vanessamae23"},"content":":endDetectBaseDir","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"Vanessamae23"},"content":"IF NOT EXIST \"%MAVEN_PROJECTBASEDIR%\\.mvn\\jvm.config\" goto endReadAdditionalConfig","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Vanessamae23"},"content":"@setlocal EnableExtensions EnableDelayedExpansion","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Vanessamae23"},"content":"for /F \"usebackq delims\u003d\" %%a in (\"%MAVEN_PROJECTBASEDIR%\\.mvn\\jvm.config\") do set JVM_CONFIG_MAVEN_PROPS\u003d!JVM_CONFIG_MAVEN_PROPS! %%a","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Vanessamae23"},"content":"@endlocal \u0026 set JVM_CONFIG_MAVEN_PROPS\u003d%JVM_CONFIG_MAVEN_PROPS%","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Vanessamae23"},"content":":endReadAdditionalConfig","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"Vanessamae23"},"content":"SET MAVEN_JAVA_EXE\u003d\"%JAVA_HOME%\\bin\\java.exe\"","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"Vanessamae23"},"content":"set WRAPPER_JAR\u003d\"%MAVEN_PROJECTBASEDIR%\\.mvn\\wrapper\\maven-wrapper.jar\"","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"Vanessamae23"},"content":"set WRAPPER_LAUNCHER\u003dorg.apache.maven.wrapper.MavenWrapperMain","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"Vanessamae23"},"content":"set DOWNLOAD_URL\u003d\"https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar\"","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Vanessamae23"},"content":"FOR /F \"usebackq tokens\u003d1,2 delims\u003d\u003d\" %%A IN (\"%MAVEN_PROJECTBASEDIR%\\.mvn\\wrapper\\maven-wrapper.properties\") DO (","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"Vanessamae23"},"content":" IF \"%%A\"\u003d\u003d\"wrapperUrl\" SET DOWNLOAD_URL\u003d%%B","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"Vanessamae23"},"content":")","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"Vanessamae23"},"content":"@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"Vanessamae23"},"content":"@REM This allows using the maven wrapper in projects that prohibit checking in binary data.","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"Vanessamae23"},"content":"if exist %WRAPPER_JAR% (","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"Vanessamae23"},"content":" if \"%MVNW_VERBOSE%\" \u003d\u003d \"true\" (","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"Vanessamae23"},"content":" echo Found %WRAPPER_JAR%","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"Vanessamae23"},"content":" )","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"Vanessamae23"},"content":") else (","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"Vanessamae23"},"content":" if not \"%MVNW_REPOURL%\" \u003d\u003d \"\" (","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"Vanessamae23"},"content":" SET DOWNLOAD_URL\u003d\"%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar\"","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"Vanessamae23"},"content":" )","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"Vanessamae23"},"content":" if \"%MVNW_VERBOSE%\" \u003d\u003d \"true\" (","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"Vanessamae23"},"content":" echo Couldn\u0027t find %WRAPPER_JAR%, downloading it ...","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"Vanessamae23"},"content":" echo Downloading from: %DOWNLOAD_URL%","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"Vanessamae23"},"content":" )","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"Vanessamae23"},"content":" powershell -Command \"\u0026{\"^","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"Vanessamae23"},"content":"\t\t\"$webclient \u003d new-object System.Net.WebClient;\"^","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"Vanessamae23"},"content":"\t\t\"if (-not ([string]::IsNullOrEmpty(\u0027%MVNW_USERNAME%\u0027) -and [string]::IsNullOrEmpty(\u0027%MVNW_PASSWORD%\u0027))) {\"^","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"Vanessamae23"},"content":"\t\t\"$webclient.Credentials \u003d new-object System.Net.NetworkCredential(\u0027%MVNW_USERNAME%\u0027, \u0027%MVNW_PASSWORD%\u0027);\"^","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"Vanessamae23"},"content":"\t\t\"}\"^","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"Vanessamae23"},"content":"\t\t\"[Net.ServicePointManager]::SecurityProtocol \u003d [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile(\u0027%DOWNLOAD_URL%\u0027, \u0027%WRAPPER_JAR%\u0027)\"^","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"Vanessamae23"},"content":"\t\t\"}\"","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"Vanessamae23"},"content":" if \"%MVNW_VERBOSE%\" \u003d\u003d \"true\" (","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"Vanessamae23"},"content":" echo Finished downloading %WRAPPER_JAR%","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"Vanessamae23"},"content":" )","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"Vanessamae23"},"content":")","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"Vanessamae23"},"content":"@REM End of extension","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"Vanessamae23"},"content":"@REM Provide a \"standardized\" way to retrieve the CLI args that will","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"Vanessamae23"},"content":"@REM work with both Windows and non-Windows executions.","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"Vanessamae23"},"content":"set MAVEN_CMD_LINE_ARGS\u003d%*","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"Vanessamae23"},"content":"%MAVEN_JAVA_EXE% ^","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"Vanessamae23"},"content":" %JVM_CONFIG_MAVEN_PROPS% ^","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"Vanessamae23"},"content":" %MAVEN_OPTS% ^","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"Vanessamae23"},"content":" %MAVEN_DEBUG_OPTS% ^","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"Vanessamae23"},"content":" -classpath %WRAPPER_JAR% ^","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"Vanessamae23"},"content":" \"-Dmaven.multiModuleProjectDirectory\u003d%MAVEN_PROJECTBASEDIR%\" ^","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"Vanessamae23"},"content":" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"Vanessamae23"},"content":"if ERRORLEVEL 1 goto error","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"Vanessamae23"},"content":"goto end","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"Vanessamae23"},"content":":error","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"Vanessamae23"},"content":"set ERROR_CODE\u003d1","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"Vanessamae23"},"content":":end","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"Vanessamae23"},"content":"@endlocal \u0026 set ERROR_CODE\u003d%ERROR_CODE%","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"Vanessamae23"},"content":"if not \"%MAVEN_SKIP_RC%\"\u003d\u003d\"\" goto skipRcPost","lastModifiedDate":"2023-09-03"},{"lineNumber":178,"author":{"gitId":"Vanessamae23"},"content":"@REM check for post script, once with legacy .bat ending and once with .cmd ending","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"Vanessamae23"},"content":"if exist \"%USERPROFILE%\\mavenrc_post.bat\" call \"%USERPROFILE%\\mavenrc_post.bat\"","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"Vanessamae23"},"content":"if exist \"%USERPROFILE%\\mavenrc_post.cmd\" call \"%USERPROFILE%\\mavenrc_post.cmd\"","lastModifiedDate":"2023-09-03"},{"lineNumber":181,"author":{"gitId":"Vanessamae23"},"content":":skipRcPost","lastModifiedDate":"2023-09-03"},{"lineNumber":182,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":183,"author":{"gitId":"Vanessamae23"},"content":"@REM pause the script if MAVEN_BATCH_PAUSE is set to \u0027on\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":184,"author":{"gitId":"Vanessamae23"},"content":"if \"%MAVEN_BATCH_PAUSE%\"\u003d\u003d\"on\" pause","lastModifiedDate":"2023-09-03"},{"lineNumber":185,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":186,"author":{"gitId":"Vanessamae23"},"content":"if \"%MAVEN_TERMINATE_CMD%\"\u003d\u003d\"on\" exit %ERROR_CODE%","lastModifiedDate":"2023-09-03"},{"lineNumber":187,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":188,"author":{"gitId":"Vanessamae23"},"content":"cmd /C exit /B %ERROR_CODE%","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":188}},{"path":"demo/src/main/java/com/example/demo/HelloApplication.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package com.example.demo;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"public class HelloApplication extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" public void start(Stage stage) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(HelloApplication.class.getResource(\"hello-view.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" Scene scene \u003d new Scene(fxmlLoader.load(), 320, 240);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" stage.setTitle(\"Hello!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" launch();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":23}},{"path":"demo/src/main/java/com/example/demo/HelloController.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package com.example.demo;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"public class HelloController {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":" private Label welcomeText;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" protected void onHelloButtonClick() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" welcomeText.setText(\"Welcome to JavaFX Application!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":14}},{"path":"demo/src/main/java/module-info.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"module com.example.demo {","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":" requires javafx.controls;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":" requires javafx.fxml;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":" opens com.example.demo to javafx.fxml;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":" exports com.example.demo;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":8}},{"path":"demo/src/main/resources/com/example/demo/hello-view.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"\u003cVBox alignment\u003d\"CENTER\" spacing\u003d\"20.0\" xmlns:fx\u003d\"http://javafx.com/fxml\"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":" fx:controller\u003d\"com.example.demo.HelloController\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" \u003cInsets bottom\u003d\"20.0\" left\u003d\"20.0\" right\u003d\"20.0\" top\u003d\"20.0\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" \u003cLabel fx:id\u003d\"welcomeText\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" \u003cButton text\u003d\"Hello!\" onAction\u003d\"#onHelloButtonClick\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"\u003c/VBox\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":16}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" * The main class","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/user.jpg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/ans.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" private Scene scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":" private static void writeToFile(String filePath, String textToAdd) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Vanessamae23"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Vanessamae23"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Vanessamae23"},"content":" public Duke() {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Vanessamae23"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Vanessamae23"},"content":" storage \u003d new Storage(\"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Vanessamae23"},"content":" this.tasks \u003d storage.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":" tasks \u003d new TaskList(null);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Vanessamae23"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Vanessamae23"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"Vanessamae23"},"content":" this.tasks \u003d storage.load();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Vanessamae23"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"Vanessamae23"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Vanessamae23"},"content":" tasks \u003d new TaskList(null);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Vanessamae23"},"content":" * Iteration 2:","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Vanessamae23"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Vanessamae23"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Vanessamae23"},"content":" private String handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"Vanessamae23"},"content":" Label userText \u003d new Label(userInput.getText());","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Vanessamae23"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Vanessamae23"},"content":" custom.DialogBox.getUserDialog( userText.toString(), user)","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"Vanessamae23"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Vanessamae23"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Vanessamae23"},"content":" return userText.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Vanessamae23"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Vanessamae23"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Vanessamae23"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Vanessamae23"},"content":" public String[] getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"Vanessamae23"},"content":" Command c \u003d Parser.parse(input, this.ui, this.storage, this.tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"Vanessamae23"},"content":" ArrayList\u003cString\u003e s \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"Vanessamae23"},"content":" s \u003d c.execute();","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"Vanessamae23"},"content":" return s.toArray(new String[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"Vanessamae23"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"Vanessamae23"},"content":" String[] s \u003d new String[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"Vanessamae23"},"content":" s[0] \u003d this.ui.showError(\"Something wrong!\" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"Vanessamae23"},"content":" return s;","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Vanessamae23"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Vanessamae23"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Vanessamae23"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Vanessamae23"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Vanessamae23"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Vanessamae23"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Vanessamae23"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Vanessamae23"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Vanessamae23"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Vanessamae23"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Vanessamae23"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Vanessamae23"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Vanessamae23"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"Vanessamae23"},"content":" // more code to be added here later","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"Vanessamae23"},"content":" //Step 2. Formatting the window to look as expected","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"Vanessamae23"},"content":" stage.setTitle(\"Duke Chatbot Pro\");","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"Vanessamae23"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"Vanessamae23"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Vanessamae23"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"Vanessamae23"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"Vanessamae23"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"Vanessamae23"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"Vanessamae23"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"Vanessamae23"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"Vanessamae23"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"Vanessamae23"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"Vanessamae23"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"Vanessamae23"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"Vanessamae23"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"Vanessamae23"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"Vanessamae23"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"Vanessamae23"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"Vanessamae23"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"Vanessamae23"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"Vanessamae23"},"content":" //Scroll down to the end every time dialogContainer\u0027s height changes.","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"Vanessamae23"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"Vanessamae23"},"content":" // more code to be added here later","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"Vanessamae23"},"content":" String filename \u003d \"src/save.txt\";","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"Vanessamae23"},"content":" new Duke(filename).run();","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"Vanessamae23"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"Vanessamae23"},"content":" //Part 3. Add functionality to handle user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"Vanessamae23"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"Vanessamae23"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"Vanessamae23"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"Vanessamae23"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"Vanessamae23"},"content":" * Iteration 1:","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"Vanessamae23"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"Vanessamae23"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"Vanessamae23"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"Vanessamae23"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"Vanessamae23"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"Vanessamae23"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":178,"author":{"gitId":"Vanessamae23"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"Vanessamae23"},"content":" return textToAdd;","lastModifiedDate":"2023-09-03"},{"lineNumber":181,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":182,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":183,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":184,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":185,"author":{"gitId":"Vanessamae23"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"Vanessamae23"},"content":" this.ui.showWelcome(dialogContainer);","lastModifiedDate":"2023-09-05"},{"lineNumber":187,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":190,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":191,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"Vanessamae23"},"content":" String filename \u003d \"src/save.txt\";","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":194,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Vanessamae23":191,"-":3}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import java.lang.reflect.InvocationTargetException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" private seedu.Duke duke \u003d new seedu.Duke( \"src/save.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(fxmlLoader);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" fxmlLoader.\u003cui.MainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":37}},{"path":"src/main/java/custom/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package custom;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(ui.MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Vanessamae23"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Vanessamae23"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Vanessamae23"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Vanessamae23"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Vanessamae23"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Vanessamae23"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Vanessamae23"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Vanessamae23"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Vanessamae23"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Vanessamae23"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":61}},{"path":"src/main/java/seedu/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"public class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":" private String command;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" private boolean exit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" public Command(String command, Ui ui, Storage storage, TaskList tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" public Command(String command, Ui ui, Storage storage, TaskList tasks, int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" public ArrayList\u003cString\u003e execute() throws Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" ArrayList\u003cString\u003e s \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":" s.add(this.ui.showByeMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":" this.storage.save(this.tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":" s.add(this.ui.showTask(tasks));","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":" Task removed \u003d this.tasks.remove(this.index);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Vanessamae23"},"content":" s.add(this.ui.removeTask(removed, this.tasks.getLen()));","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Vanessamae23"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Vanessamae23"},"content":" this.tasks.mark(this.index);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Vanessamae23"},"content":" s.add(this.ui.showMarked());","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Vanessamae23"},"content":" } else if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Vanessamae23"},"content":" String keyword \u003d command.substring(4).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Vanessamae23"},"content":" ArrayList\u003cTask\u003e foundWords \u003d this.tasks.find(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Vanessamae23"},"content":" s.add(this.ui.showFoundWords(foundWords));","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Vanessamae23"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":" Task curr \u003d new Task(command.substring(command.indexOf(\" \")),","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":" command.substring(0, command.indexOf(\" \")));","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":" s.add(this.ui.addTask(curr));","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":" this.tasks.add(curr);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Vanessamae23"},"content":" throw new Exception(\"Some error occurred \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Vanessamae23"},"content":" return s;","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Vanessamae23"},"content":" public boolean exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Vanessamae23"},"content":" return this.exit;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Vanessamae23":63}},{"path":"src/main/java/seedu/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" Application.launch(seedu.Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":12}},{"path":"src/main/java/seedu/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":" * Parses user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":" public static Command parse(String command, Ui ui, Storage storage, TaskList tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":" if(command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" return new Command(command, ui, storage, tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" return new Command(command, ui, storage, tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" } else if (command.startsWith(\"delete \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" String[] s \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" int removeIndex \u003d Integer.parseInt(s[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" return new Command(\"delete\", ui, storage, tasks, removeIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" } else if (command.startsWith(\"mark \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" int current \u003d Integer.parseInt(command.substring(5)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" return new Command(\"mark\", ui, storage, tasks, current);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" } else if (command.startsWith(\"find \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" return new Command(command, ui, storage, tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" return new Command(command, ui, storage, tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Vanessamae23":28}},{"path":"src/main/java/seedu/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" private final Path filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" * Stores the file of the tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" this.filePath \u003d Paths.get(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" public TaskList load() throws Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" List\u003cString\u003e tasks \u003d Files.readAllLines(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" return TaskList.getFromFile(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" } catch(IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" throw new IOException(\"Error writing to file: \" + filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" throw new Exception(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" public void save(TaskList tasks) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" List\u003cString\u003e encodedTasks \u003d TaskList.encode(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":" Files.write(filePath, encodedTasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":" } catch (IOException ioe) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":" throw new IOException(\"Error writing to file: \" + filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Vanessamae23":38}},{"path":"src/main/java/seedu/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":" protected Type category;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":" protected String title;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" protected String start \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" protected String end \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" * The task to be loaded","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" public Task(String description, String category) throws IllegalArgumentException {","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" if (category.equals(\"todo\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" this.category \u003d Type.ToDo;","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" String[] splitWord \u003ddescription.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" this.title \u003d splitWord[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" this.description \u003d splitWord[0].trim() + \" \" + title;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(\"This is not in the correct format\");","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" throw new IllegalArgumentException(\"Please correct the format\");","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" } else if (category.equals(\"deadline\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" this.category \u003d Type.Deadline;","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":" String[] splitWord \u003ddescription.split(\"/\", 4);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":" if (splitWord.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":" this.title \u003d splitWord[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":" this.end \u003d splitWord[1].split(\"by \")[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":" this.description \u003d title + \"(\"+ splitWord[1].split(\"by \")[1].trim() + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":" String date \u003d splitWord[1].substring( 3).length() \u003d\u003d 1 ? \"0\"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Vanessamae23"},"content":" + splitWord[1].substring( 3) : splitWord[1].substring( 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Vanessamae23"},"content":" String endDate \u003d splitWord[3]+\"-\"+splitWord[2]+\"-\" + date;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Vanessamae23"},"content":" String formattedDate \u003d LocalDate.parse(endDate)","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Vanessamae23"},"content":" .format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Vanessamae23"},"content":" this.title \u003d splitWord[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Vanessamae23"},"content":" this.end \u003d formattedDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Vanessamae23"},"content":" this.description \u003d splitWord[0] + \"(\"+ formattedDate + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(\"This is not in the correct format\");","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"Vanessamae23"},"content":" throw new IllegalArgumentException(\"Please correct the format\");","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"Vanessamae23"},"content":" } else if (category.equals(\"event\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"Vanessamae23"},"content":" String[] splitWord \u003d description.split(\"/(from|to)\", 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Vanessamae23"},"content":" this.category \u003d Type.Event;","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"Vanessamae23"},"content":" this.title \u003d splitWord[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Vanessamae23"},"content":" this.start \u003d splitWord[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Vanessamae23"},"content":" this.end \u003d splitWord[2].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Vanessamae23"},"content":" this.description \u003d title + \"(From : \" + start + \" To : \" + end + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(\"OOPS!!! The description of a event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(\"This is not in the correct format\");","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"Vanessamae23"},"content":" throw new IllegalArgumentException(\"Please correct the format\");","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"Vanessamae23"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"Vanessamae23"},"content":" throw new IllegalArgumentException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-21"},{"lineNumber":70,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Vanessamae23"},"content":" * Returns the status of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Vanessamae23"},"content":" * @returns a String of X if task is done otherwise a blank space","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Vanessamae23"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"Vanessamae23"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":82,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Vanessamae23"},"content":" * Returns the status of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Vanessamae23"},"content":" * @returns a String more descriptive status of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Vanessamae23"},"content":" public String getStatus() {","lastModifiedDate":"2023-08-21"},{"lineNumber":88,"author":{"gitId":"Vanessamae23"},"content":" String cat \u003d this.category \u003d\u003d Type.ToDo ? \"T\" : this.category \u003d\u003d Type.Deadline ? \"D\" : \"E\";","lastModifiedDate":"2023-08-21"},{"lineNumber":89,"author":{"gitId":"Vanessamae23"},"content":" return \"[\" + cat +\"]\" + \"[\"+ this.getStatusIcon() + \"] \" + this.description.trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":91,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":92,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Vanessamae23"},"content":" * Sets the description of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Vanessamae23"},"content":" * @param the text description of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Vanessamae23"},"content":" public void setDescription(String desc) {","lastModifiedDate":"2023-08-21"},{"lineNumber":98,"author":{"gitId":"Vanessamae23"},"content":" this.description \u003d desc;","lastModifiedDate":"2023-08-21"},{"lineNumber":99,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":100,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":101,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Vanessamae23"},"content":" * Marks a certain task as done","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Vanessamae23"},"content":" * @returns a String to confirm the checked","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Vanessamae23"},"content":" public String mark() {","lastModifiedDate":"2023-08-21"},{"lineNumber":107,"author":{"gitId":"Vanessamae23"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":108,"author":{"gitId":"Vanessamae23"},"content":" return \"[\"+ this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":109,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":110,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":111,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Vanessamae23"},"content":" * Returns a string to show the status of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Vanessamae23"},"content":" * @returns a status of the current task","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"Vanessamae23"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":117,"author":{"gitId":"Vanessamae23"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":118,"author":{"gitId":"Vanessamae23"},"content":" return this.getStatus();","lastModifiedDate":"2023-08-21"},{"lineNumber":119,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":120,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":121,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Vanessamae23":121}},{"path":"src/main/java/seedu/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"import java.util.Date;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" private List\u003cTask\u003e lists \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" public TaskList(List\u003cTask\u003e t) {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" this.lists \u003d t;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" * Add a tasks in the lists of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" * @param task the Task class that is to be added","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" public void add(Task t) throws Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" this.lists.add(t);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" } catch(IllegalArgumentException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" throw new Exception(\"Unfortunately, \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" throw new Exception(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":" * Returns the current task from the list","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":" * @param index the position of the current task to be retrieved","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":" * @returns a Task object of interest","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Vanessamae23"},"content":" return this.lists.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Vanessamae23"},"content":" * Retrieves task lists from a list of string from a file","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Vanessamae23"},"content":" * @param from source of the lists of strings","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Vanessamae23"},"content":" * @returns a TaskList of the current lists of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":" public static TaskList getFromFile(List\u003cString\u003e from) throws Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":" List\u003cTask\u003e lists \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Vanessamae23"},"content":" for (String l : from) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":" String[] chars \u003d l.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Vanessamae23"},"content":" if (chars[0].equals(\"ToDo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Vanessamae23"},"content":" lists.add(new Task(\"todo\" + \" \" + chars[2] ,\"todo\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Vanessamae23"},"content":" } else if (chars[0].equals(\"Event\")){","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Vanessamae23"},"content":" String title \u003d chars[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Vanessamae23"},"content":" String fr \u003d chars[4].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Vanessamae23"},"content":" String to \u003d chars[3].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Vanessamae23"},"content":" Task temp \u003d new Task(title + \" /from \" + fr + \" /to \" + to, \"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Vanessamae23"},"content":" if (chars[1].equals(\"true\")) temp.isDone \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Vanessamae23"},"content":" lists.add(temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Vanessamae23"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Vanessamae23"},"content":" String title \u003d chars[2].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Vanessamae23"},"content":" String to \u003d chars[3].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Vanessamae23"},"content":" Task temp \u003d new Task(title + \" /by \" + to,\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Vanessamae23"},"content":" if (chars[1].equals(\"true\")) temp.isDone \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Vanessamae23"},"content":" lists.add(temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Vanessamae23"},"content":" return new TaskList(lists);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Vanessamae23"},"content":" throw new Error(\"Parsing error\");","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Vanessamae23"},"content":" * Encodes TaskList to a list of string to be used in a file","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Vanessamae23"},"content":" * @param tasks the list of Tasks objects","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Vanessamae23"},"content":" * @returns a String List to be stored in a file","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Vanessamae23"},"content":" public static List\u003cString\u003e encode(TaskList tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Vanessamae23"},"content":" int curr \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Vanessamae23"},"content":" List\u003cString\u003e arrays \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Vanessamae23"},"content":" for (int i \u003d 0; i \u003c tasks.getLen(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Vanessamae23"},"content":" if (tasks.get(i) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Vanessamae23"},"content":" Task t \u003d tasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Vanessamae23"},"content":" String start \u003d !t.start.isEmpty() ? t.start + \"|\" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Vanessamae23"},"content":" String end \u003d !t.end.isEmpty()? t.end + \"|\" : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Vanessamae23"},"content":" arrays.add(t.category.toString() + \"|\" + (t.isDone ? \"true\" : \"false\") + \"|\" + t.title + \"|\" + end + start);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Vanessamae23"},"content":" ;","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Vanessamae23"},"content":" return arrays;","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Vanessamae23"},"content":" * Returns the size of the TaskList","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Vanessamae23"},"content":" * @returns the length of the tasks number","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Vanessamae23"},"content":" public int getLen() {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Vanessamae23"},"content":" return this.lists.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"Vanessamae23"},"content":" * Marks a task in the lists of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Vanessamae23"},"content":" * @param index position of the task in the lists of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Vanessamae23"},"content":" public void mark(int index) throws Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"Vanessamae23"},"content":" this.lists.get(index).mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"Vanessamae23"},"content":" throw new Exception(\"Sorry there is no such task\");","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"Vanessamae23"},"content":" * Removes a task from lists of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"Vanessamae23"},"content":" * @param index the position of the task to be removed","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"Vanessamae23"},"content":" * @returns the Task that was removed","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"Vanessamae23"},"content":" public Task remove(int index) throws Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"Vanessamae23"},"content":" Task now \u003d lists.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"Vanessamae23"},"content":" this.lists.remove(now);","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"Vanessamae23"},"content":" return now;","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Vanessamae23"},"content":" throw new Exception(\"Something wrong with the given input\");","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"Vanessamae23"},"content":" public ArrayList\u003cTask\u003e find(String keyword) throws Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"Vanessamae23"},"content":" ArrayList\u003cTask\u003e foundWords \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"Vanessamae23"},"content":" for(Task t : this.lists) {","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"Vanessamae23"},"content":" if(t.description.contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"Vanessamae23"},"content":" foundWords.add(t);","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"Vanessamae23"},"content":" return foundWords;","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"Vanessamae23"},"content":" throw new Exception(\"Keyword not found\");","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Vanessamae23":152}},{"path":"src/main/java/seedu/Type.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"public enum Type {","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":" ToDo, Deadline, Event","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Vanessamae23":5}},{"path":"src/main/java/seedu/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" private Scanner sc;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" private boolean on;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" private final PrintStream out;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" this.out \u003d System.out;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" * Prints welcome message to the user","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" public String showWelcome(VBox dialogContainer) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" String logo \u003d \"Bacon Pancake\";","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" return (\" Hello from \" + logo + \"\\n What can I do for you? \\n\" + \"---------------------------------- \\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" * Prints ending message to the user","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" public String showByeMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":" return (\"Bacon Pancake : \\n\" + \"Bye! See you again soon \");","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":" * Prints out all the tasks in the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Vanessamae23"},"content":" * @param tasks the TaskList class that contains all the current tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Vanessamae23"},"content":" public String showTask(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Vanessamae23"},"content":" StringBuilder s \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Vanessamae23"},"content":" s.append(\"Bacon Pancake : Below are the lists\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Vanessamae23"},"content":" int curr \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Vanessamae23"},"content":" for (int i \u003d 0; i \u003c tasks.getLen(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Vanessamae23"},"content":" if (tasks.get(i) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":" Task t \u003d tasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":" s.append((curr++) + \". \" + t.getStatus() + \"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Vanessamae23"},"content":" return s.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Vanessamae23"},"content":" * Generates and prints the error message upon any exceptions.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Vanessamae23"},"content":" * @param m message of the error","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Vanessamae23"},"content":" public String showError(String m) {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Vanessamae23"},"content":" return m;","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Vanessamae23"},"content":" * Returns the command that is entered by the user","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Vanessamae23"},"content":" * @return string of comman (full line) entered by the user","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Vanessamae23"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Vanessamae23"},"content":" out.println(\"Enter your input : \");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Vanessamae23"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Vanessamae23"},"content":" * Removes a task from the lists of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Vanessamae23"},"content":" * @param t Task that is to be removed","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Vanessamae23"},"content":" * @param currentLength to show the current number of tasks after removal","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Vanessamae23"},"content":" public String removeTask(Task t, int currentLength) {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"Vanessamae23"},"content":" StringBuilder s \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"Vanessamae23"},"content":" s.append(\"Noted. I\u0027ve removed this task: \\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"Vanessamae23"},"content":" s.append(t.toString() + \"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"Vanessamae23"},"content":" s.append(\"Now you have \" + currentLength + \" tasks left. \\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"Vanessamae23"},"content":" return s.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Vanessamae23"},"content":" * Marks and checks the current task to be true","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Vanessamae23"},"content":" public String showMarked() {","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"Vanessamae23"},"content":" return (\"Bacon Pancake : Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Vanessamae23"},"content":" * Add a task to the lists of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Vanessamae23"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Vanessamae23"},"content":" * @param curr Task that is supposed to be added to the lists of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Vanessamae23"},"content":" public String addTask(Task curr) {","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"Vanessamae23"},"content":" return (\"Bacon Pancake : \\n Added : \" + curr.description);","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Vanessamae23"},"content":" public String showFoundWords(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"Vanessamae23"},"content":" StringBuilder s \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"Vanessamae23"},"content":" for(Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Vanessamae23"},"content":" s.append(task.getStatus());","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"Vanessamae23"},"content":" return s.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Vanessamae23":113}},{"path":"src/main/java/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import javafx.event.ActionEvent;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":"import seedu.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":"import seedu.Parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" private seedu.Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/user.jpg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/ans.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Vanessamae23"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Vanessamae23"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Vanessamae23"},"content":" public void setDuke(seedu.Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Vanessamae23"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Vanessamae23"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Vanessamae23"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Vanessamae23"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Vanessamae23"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Vanessamae23"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Vanessamae23"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Vanessamae23"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Vanessamae23"},"content":" if(input.equals(\"exit\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Vanessamae23"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Vanessamae23"},"content":" custom.DialogBox.getUserDialog(input, userImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Vanessamae23"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Vanessamae23"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Vanessamae23"},"content":" custom.DialogBox.getDukeDialog(\"Press exit close\", dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Vanessamae23"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Vanessamae23"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Vanessamae23"},"content":" String[] response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Vanessamae23"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Vanessamae23"},"content":" custom.DialogBox.getUserDialog(input, userImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"Vanessamae23"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Vanessamae23"},"content":" for (int i \u003d 0; i \u003c response.length; i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"Vanessamae23"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Vanessamae23"},"content":" custom.DialogBox.getDukeDialog(response[i], dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"Vanessamae23"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"Vanessamae23"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":72}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":19}},{"path":"src/module-info.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"module yourModuleName {","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":" requires javafx.controls;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":" requires javafx.fxml;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":" // Add any other module dependencies if needed","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":5}},{"path":"src/save.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"Event|false|Supernova|Tue 2pm|Mon 2pm|","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"Deadline|false|return book|Dec 2 2019|","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"ToDo|false|poop|","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"Event|false|Supernova|Tue 2pm|Mon 2pm|","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"Deadline|false|return book|Dec 2 2019|","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"ToDo|false|kk|","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"ToDo|true|psadas|","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Vanessamae23":7}},{"path":"src/test/java/seedu/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu; //same package as the class being tested","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" public void addTaskTest(){","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" Task newTask \u003d new Task(\"todo cs2103t\", \"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" List\u003cTask\u003e lists \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" lists.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" TaskList t \u003d new TaskList(lists);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":" assertEquals(\"todo cs2103t\", t.get(0).description);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" public void removeTaskTest(){","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" Task newTask \u003d new Task(\"todo cs2103t\", \"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" List\u003cTask\u003e lists \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" for(int i \u003d 0; i \u003c 10; i++) lists.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" TaskList t \u003d new TaskList(lists);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Vanessamae23"},"content":" t.remove(4);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Vanessamae23"},"content":" assertEquals(9, t.getLen());","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Vanessamae23":33}},{"path":"src/test/java/seedu/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"package seedu; //same package as the class being tested","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Vanessamae23"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Vanessamae23"},"content":" public void statusMarkTest(){","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Vanessamae23"},"content":" Task newTask \u003d new Task(\"todo cs2103t\", \"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Vanessamae23"},"content":" newTask.mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Vanessamae23"},"content":" assertEquals(\"[T][X] todo cs2103t\", newTask.getStatus());","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Vanessamae23"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Vanessamae23"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Vanessamae23"},"content":" public void markTest(){","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Vanessamae23"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Vanessamae23"},"content":" Task newTask \u003d new Task(\"todsadao cs2103t\", \"toddsado\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Vanessamae23"},"content":" } catch(Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Vanessamae23"},"content":" assertEquals(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Vanessamae23":26}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"todo Poop","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":"deadline return book /by 02/12/2019","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":"event Supernova /from Mon 2pm /to Tue 2pm","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"Vanessamae23"},"content":"delete 3","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"Vanessamae23"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"Vanessamae23"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Vanessamae23":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"Vanessamae23"},"content":"javac -cp C:\\Users\\user\\NUS\\CS2103T\\cs2103t-ip\\src\\main\\java -Xlint:none -d ..\\bin C:\\Users\\user\\NUS\\CS2103T\\cs2103t-ip\\src\\main\\java\\*.java","lastModifiedDate":"2023-08-21"},{"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":"Vanessamae23"},"content":"java -classpath C:\\Users\\user\\NUS\\CS2103T\\cs2103t-ip\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-21"},{"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":{"Vanessamae23":2,"-":19}},{"path":"untitled/src/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Vanessamae23"},"content":"public class Main {","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Vanessamae23"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Vanessamae23"},"content":" System.out.println(\"Hello world!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Vanessamae23"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Vanessamae23"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Vanessamae23":5}}] diff --git a/Vanessamae23_ip_master/commits.json b/Vanessamae23_ip_master/commits.json index e197bce9..696220fd 100644 --- a/Vanessamae23_ip_master/commits.json +++ b/Vanessamae23_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Vanessamae23":[{"date":"2023-08-21","commitResults":[{"hash":"988a83ba0317502625238c92205d0f1c51ff5f14","isMergeCommit":false,"messageTitle":"Added level 0 tags","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"448e23ac117e9e23cdc158b848b9afd25e31f22d","isMergeCommit":false,"messageTitle":"Added level 1 tag","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"4b9e49db97e070f7146cdbddf2f8fd98b3d10692","isMergeCommit":false,"messageTitle":"Added feature for level 1 tag","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"c8069dad6e9143569074714f7c42398a56d064f3","isMergeCommit":false,"messageTitle":"Added level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":2}}},{"hash":"26e13bad28eeb1ea259160fc9ebcaabe858d9964","isMergeCommit":false,"messageTitle":"Added level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":3}}},{"hash":"3e137a5a65d0237b493aca3597a12bb080b38700","isMergeCommit":false,"messageTitle":"Added level 4 and fixed sth in level 0","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":9}}},{"hash":"1f6d6a6f80af20453e1e485b3bd8583ede1e6980","isMergeCommit":false,"messageTitle":"Added testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"bat":{"insertions":2,"deletions":2}}},{"hash":"0872499fdef51fc2de9e915b9cca259a454f6ccb","isMergeCommit":false,"messageTitle":"Added exception handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":8}}},{"hash":"ddc634a202a31b2a9b87c5223e3119d26af080d1","isMergeCommit":false,"messageTitle":"Added level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":32,"deletions":11}}},{"hash":"f2030dec4b0a7da85a1cb9fc9b56746dbd06cd27","isMergeCommit":false,"messageTitle":"Added enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":5}}}]},{"date":"2023-08-30","commitResults":[{"hash":"6141730e4063df9e401f4591bf17382c87ec8221","isMergeCommit":false,"messageTitle":"Add level 7 requirements","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":24,"deletions":3}}},{"hash":"3db11fc4b54216fd878a5cb9af168e5a8b70f64f","isMergeCommit":true,"messageTitle":"Fix merging issues","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"7b46a8fc2921c4b7e1d39c54c2e0979d739b05e7","isMergeCommit":false,"messageTitle":"Add level 8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":12,"deletions":5}}},{"hash":"b6262b32627fd69f61cad4a34940e390069a766c","isMergeCommit":true,"messageTitle":"resolve conflicts","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"83781da36396408c2e9aab364689c6efabc1b7a1","isMergeCommit":false,"messageTitle":"More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":305,"deletions":68}}},{"hash":"fbfa5c8a13daa2a5f6250cfc86573c55d6d5aa84","isMergeCommit":false,"messageTitle":"Add package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":6}}},{"hash":"30009e83d6368d8a38a2c7d89db996cd4e8b5325","isMergeCommit":false,"messageTitle":"fix issue","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":41,"deletions":31}}},{"hash":"3380f7be9652e2413620b37878f7dfb6faa6d1d3","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"110f532e0015d1d58f4f85a2bf3dd4462724062d","isMergeCommit":false,"messageTitle":"Add testing","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":7,"deletions":4},"java":{"insertions":70,"deletions":11}}},{"hash":"32415ec91b644814452a4d40b3468cf5ec9f66b4","isMergeCommit":false,"messageTitle":"Added javadoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":0}}},{"hash":"43c40d7dff69031da0fda4505db1318de9a1f80a","isMergeCommit":false,"messageTitle":"Add code standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":26,"deletions":22}}},{"hash":"41984b2c950a6d50d44fb7c9b2ffd0fd6fd1df4a","isMergeCommit":false,"messageTitle":"Add find method","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":3},"java":{"insertions":28,"deletions":1}}},{"hash":"c172dd76b5fdeb4fd682ecf4a25ccbe6c042bdbd","isMergeCommit":true,"messageTitle":"After merging two branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cba2d0de948ab9683c099fb460427d8318f91139","isMergeCommit":true,"messageTitle":"After merge last","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"45caf5b3cedff69b7fd5170894ac757bf68bbcac","isMergeCommit":false,"messageTitle":"After merge last","messageBody":"","tags":["AfterMerge"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-02","commitResults":[{"hash":"5daee0df6a40d547980b00364c16f1513cdf0d72","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":31,"deletions":2}}},{"hash":"47686a936b94d00cbf29f19769e0eb7312e80bbb","isMergeCommit":false,"messageTitle":"Added checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":0}}},{"hash":"ce7b75bbd1c244b07105491ee82c9da9b9b94495","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Vanessamae23/cs2103t-ip","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"395c776a1ea5905866ced7acb30710649d9ae292","isMergeCommit":false,"messageTitle":"Added javafx","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":20,"deletions":1},"fxml":{"insertions":51,"deletions":0},"java":{"insertions":369,"deletions":3}}}]},{"date":"2023-09-04","commitResults":[{"hash":"9ae475115f6233efa3be1f9c6c8b2078c3dc35fa","isMergeCommit":false,"messageTitle":"Added a new branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"Vanessamae23":{"java":990,"md":219,"fxml":51,"sh":0,"bat":2,"gradle":27,"txt":15}},"authorContributionVariance":{"Vanessamae23":45107.89},"authorDisplayNameMap":{"Vanessamae23":"CS2103T-T12-1 VANE.. MAE"}} +{"authorDailyContributionsMap":{"Vanessamae23":[{"date":"2023-08-21","commitResults":[{"hash":"988a83ba0317502625238c92205d0f1c51ff5f14","isMergeCommit":false,"messageTitle":"Added level 0 tags","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"448e23ac117e9e23cdc158b848b9afd25e31f22d","isMergeCommit":false,"messageTitle":"Added level 1 tag","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"4b9e49db97e070f7146cdbddf2f8fd98b3d10692","isMergeCommit":false,"messageTitle":"Added feature for level 1 tag","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"c8069dad6e9143569074714f7c42398a56d064f3","isMergeCommit":false,"messageTitle":"Added level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":2}}},{"hash":"26e13bad28eeb1ea259160fc9ebcaabe858d9964","isMergeCommit":false,"messageTitle":"Added level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":3}}},{"hash":"3e137a5a65d0237b493aca3597a12bb080b38700","isMergeCommit":false,"messageTitle":"Added level 4 and fixed sth in level 0","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":9}}},{"hash":"1f6d6a6f80af20453e1e485b3bd8583ede1e6980","isMergeCommit":false,"messageTitle":"Added testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"bat":{"insertions":2,"deletions":2}}},{"hash":"0872499fdef51fc2de9e915b9cca259a454f6ccb","isMergeCommit":false,"messageTitle":"Added exception handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":8}}},{"hash":"ddc634a202a31b2a9b87c5223e3119d26af080d1","isMergeCommit":false,"messageTitle":"Added level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":32,"deletions":11}}},{"hash":"f2030dec4b0a7da85a1cb9fc9b56746dbd06cd27","isMergeCommit":false,"messageTitle":"Added enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":5}}}]},{"date":"2023-08-30","commitResults":[{"hash":"6141730e4063df9e401f4591bf17382c87ec8221","isMergeCommit":false,"messageTitle":"Add level 7 requirements","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":24,"deletions":3}}},{"hash":"3db11fc4b54216fd878a5cb9af168e5a8b70f64f","isMergeCommit":true,"messageTitle":"Fix merging issues","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"7b46a8fc2921c4b7e1d39c54c2e0979d739b05e7","isMergeCommit":false,"messageTitle":"Add level 8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":12,"deletions":5}}},{"hash":"b6262b32627fd69f61cad4a34940e390069a766c","isMergeCommit":true,"messageTitle":"resolve conflicts","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"83781da36396408c2e9aab364689c6efabc1b7a1","isMergeCommit":false,"messageTitle":"More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":305,"deletions":68}}},{"hash":"fbfa5c8a13daa2a5f6250cfc86573c55d6d5aa84","isMergeCommit":false,"messageTitle":"Add package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":6}}},{"hash":"30009e83d6368d8a38a2c7d89db996cd4e8b5325","isMergeCommit":false,"messageTitle":"fix issue","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":41,"deletions":31}}},{"hash":"3380f7be9652e2413620b37878f7dfb6faa6d1d3","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"110f532e0015d1d58f4f85a2bf3dd4462724062d","isMergeCommit":false,"messageTitle":"Add testing","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":7,"deletions":4},"java":{"insertions":70,"deletions":11}}},{"hash":"32415ec91b644814452a4d40b3468cf5ec9f66b4","isMergeCommit":false,"messageTitle":"Added javadoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":0}}},{"hash":"43c40d7dff69031da0fda4505db1318de9a1f80a","isMergeCommit":false,"messageTitle":"Add code standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":26,"deletions":22}}},{"hash":"41984b2c950a6d50d44fb7c9b2ffd0fd6fd1df4a","isMergeCommit":false,"messageTitle":"Add find method","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":3},"java":{"insertions":28,"deletions":1}}},{"hash":"c172dd76b5fdeb4fd682ecf4a25ccbe6c042bdbd","isMergeCommit":true,"messageTitle":"After merging two branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cba2d0de948ab9683c099fb460427d8318f91139","isMergeCommit":true,"messageTitle":"After merge last","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"45caf5b3cedff69b7fd5170894ac757bf68bbcac","isMergeCommit":false,"messageTitle":"After merge last","messageBody":"","tags":["AfterMerge"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-02","commitResults":[{"hash":"5daee0df6a40d547980b00364c16f1513cdf0d72","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":31,"deletions":2}}},{"hash":"47686a936b94d00cbf29f19769e0eb7312e80bbb","isMergeCommit":false,"messageTitle":"Added checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":0}}},{"hash":"ce7b75bbd1c244b07105491ee82c9da9b9b94495","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Vanessamae23/cs2103t-ip","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"395c776a1ea5905866ced7acb30710649d9ae292","isMergeCommit":false,"messageTitle":"Added javafx","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":20,"deletions":1},"fxml":{"insertions":51,"deletions":0},"java":{"insertions":369,"deletions":3}}}]},{"date":"2023-09-04","commitResults":[{"hash":"9ae475115f6233efa3be1f9c6c8b2078c3dc35fa","isMergeCommit":false,"messageTitle":"Added a new branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-05","commitResults":[{"hash":"25818b0fabf6fb98137e4660129650df001f0242","isMergeCommit":false,"messageTitle":"Made changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":69}}}]}]},"authorFileTypeContributionMap":{"Vanessamae23":{"java":1007,"md":219,"fxml":51,"sh":0,"bat":2,"gradle":27,"txt":15}},"authorContributionVariance":{"Vanessamae23":42971.176},"authorDisplayNameMap":{"Vanessamae23":"CS2103T-T12-1 VANE.. MAE"}} diff --git a/aarontxz_ip_master/authorship.json b/aarontxz_ip_master/authorship.json index e06cf76c..9c6f6fa3 100644 --- a/aarontxz_ip_master/authorship.json +++ b/aarontxz_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"aarontxz"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"aarontxz"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"aarontxz"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"aarontxz"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"aarontxz"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"aarontxz"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"aarontxz"},"content":"class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"aarontxz"},"content":" public EmptyDescriptionException(String task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"aarontxz"},"content":" super(\"OOPS The description of a \" + task + \" cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"aarontxz"},"content":"class WrongFormatException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"aarontxz"},"content":" public WrongFormatException(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"aarontxz"},"content":" super(message);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"aarontxz"},"content":"class UnknownCommandException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"aarontxz"},"content":" public UnknownCommandException() {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"aarontxz"},"content":" super(\"OOPS I\u0027m sorry, but I don\u0027t know what that means :-P\");","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"aarontxz"},"content":"enum CommandType {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"aarontxz"},"content":" LIST, MARK, UNMARK, DELETE, TODO, DEADLINE, EVENT, UNKNOWN","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"aarontxz"},"content":"class Duke {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"aarontxz"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"aarontxz"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"aarontxz"},"content":" String botName \u003d \"Aaronbot\";","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"aarontxz"},"content":" String savedString \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"aarontxz"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"aarontxz"},"content":" savedString \u003d storage.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"aarontxz"},"content":" TaskList tasks \u003d new TaskList(savedString);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Hello! I\u0027m \" + botName);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"aarontxz"},"content":" while (true) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"aarontxz"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"aarontxz"},"content":" processUserInput(userInput, tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"aarontxz"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"aarontxz"},"content":" } catch (EmptyDescriptionException | UnknownCommandException | WrongFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"aarontxz"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"aarontxz"},"content":" if (userInput.equals(\"bye\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"aarontxz"},"content":" scanner.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"aarontxz"},"content":" public static void processUserInput(String userInput, TaskList tasks)","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"aarontxz"},"content":" throws EmptyDescriptionException, UnknownCommandException, WrongFormatException {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"aarontxz"},"content":" String[] inputParts \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"aarontxz"},"content":" String commandStr \u003d inputParts[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"aarontxz"},"content":" CommandType commandType \u003d getCommandType(commandStr);","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"aarontxz"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"aarontxz"},"content":" case LIST:","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"aarontxz"},"content":" listTasks(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"aarontxz"},"content":" case MARK:","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"aarontxz"},"content":" case UNMARK:","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"aarontxz"},"content":" int taskIndex \u003d Integer.parseInt(inputParts[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"aarontxz"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"aarontxz"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"aarontxz"},"content":" if (commandType \u003d\u003d CommandType.MARK) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"aarontxz"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"aarontxz"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"aarontxz"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Invalid task index.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"aarontxz"},"content":" case DELETE:","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"aarontxz"},"content":" int index \u003d Integer.parseInt(inputParts[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"aarontxz"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"aarontxz"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Noted. I\u0027ve removed this task: \\n\" + task + \"\\nNow you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"aarontxz"},"content":" case TODO:","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"aarontxz"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"aarontxz"},"content":" case EVENT:","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"aarontxz"},"content":" handleTaskCreation(userInput, tasks, commandType);","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"aarontxz"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"aarontxz"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"aarontxz"},"content":" public static CommandType getCommandType(String commandStr) {","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"aarontxz"},"content":" return CommandType.valueOf(commandStr.toUpperCase());","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"aarontxz"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"aarontxz"},"content":" return CommandType.UNKNOWN;","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"aarontxz"},"content":" public static void listTasks(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"aarontxz"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"aarontxz"},"content":" System.out.println((i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"aarontxz"},"content":" public static void handleTaskCreation(String userInput, TaskList tasks, CommandType commandType)","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"aarontxz"},"content":" throws EmptyDescriptionException, UnknownCommandException, WrongFormatException {","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"aarontxz"},"content":" String[] inputParts \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"aarontxz"},"content":" String command \u003d inputParts[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"aarontxz"},"content":" if (commandType \u003d\u003d CommandType.TODO) {","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"aarontxz"},"content":" if (inputParts.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"aarontxz"},"content":" throw new EmptyDescriptionException(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"aarontxz"},"content":" tasks.add(new Todo(userInput.substring(5)));","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"aarontxz"},"content":" } else if (commandType \u003d\u003d CommandType.DEADLINE) {","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"aarontxz"},"content":" if (inputParts.length \u003c\u003d 1){","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"aarontxz"},"content":" throw new EmptyDescriptionException(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"aarontxz"},"content":" String[] deadlineParts \u003d userInput.split(\" /by \");","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"aarontxz"},"content":" String description \u003d deadlineParts[0].substring(9);","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"aarontxz"},"content":" String by \u003d deadlineParts[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"aarontxz"},"content":" tasks.add(new Deadline(description, by));","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"aarontxz"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"aarontxz"},"content":" throw new WrongFormatException(\"OOPS!!! deadlines need to be in this format, deadline return book /by YYYY-MM-DD\");","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"aarontxz"},"content":" } else if (commandType \u003d\u003d CommandType.EVENT) {","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"aarontxz"},"content":" if (inputParts.length \u003c\u003d 1){","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"aarontxz"},"content":" throw new EmptyDescriptionException(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"aarontxz"},"content":" String[] eventParts \u003d userInput.split(\" /from | /to \");","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"aarontxz"},"content":" String description \u003d eventParts[0].substring(6);","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"aarontxz"},"content":" String from \u003d eventParts[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"aarontxz"},"content":" String to \u003d eventParts[2];","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"aarontxz"},"content":" tasks.add(new Event(description, from, to));","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"aarontxz"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"aarontxz"},"content":" throw new WrongFormatException(\"OOPS events need to be in this format, event project meeting /from Mon 2pm /to 4pm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"aarontxz"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"aarontxz"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"aarontxz"},"content":"class Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"aarontxz"},"content":" protected String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"aarontxz"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"aarontxz"},"content":" public Task(String description) {","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"aarontxz"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"aarontxz"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"aarontxz"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"aarontxz"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"aarontxz"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"aarontxz"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"aarontxz"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"] \" + description;","lastModifiedDate":"2023-09-05"},{"lineNumber":182,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":183,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":184,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":185,"author":{"gitId":"aarontxz"},"content":"class Todo extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":186,"author":{"gitId":"aarontxz"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-05"},{"lineNumber":187,"author":{"gitId":"aarontxz"},"content":" super(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":188,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":189,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":190,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":191,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":192,"author":{"gitId":"aarontxz"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":193,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":194,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":195,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":196,"author":{"gitId":"aarontxz"},"content":"class Deadline extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":197,"author":{"gitId":"aarontxz"},"content":" public LocalDate by;","lastModifiedDate":"2023-09-05"},{"lineNumber":198,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":199,"author":{"gitId":"aarontxz"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-05"},{"lineNumber":200,"author":{"gitId":"aarontxz"},"content":" super(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":201,"author":{"gitId":"aarontxz"},"content":" LocalDate date \u003d LocalDate.parse(by);","lastModifiedDate":"2023-09-05"},{"lineNumber":202,"author":{"gitId":"aarontxz"},"content":" this.by \u003d date;","lastModifiedDate":"2023-09-05"},{"lineNumber":203,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":204,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":205,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":206,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":207,"author":{"gitId":"aarontxz"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":208,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":209,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":210,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":211,"author":{"gitId":"aarontxz"},"content":"class Event extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":212,"author":{"gitId":"aarontxz"},"content":" public String from;","lastModifiedDate":"2023-09-05"},{"lineNumber":213,"author":{"gitId":"aarontxz"},"content":" public String to;","lastModifiedDate":"2023-09-05"},{"lineNumber":214,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":215,"author":{"gitId":"aarontxz"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-05"},{"lineNumber":216,"author":{"gitId":"aarontxz"},"content":" super(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":217,"author":{"gitId":"aarontxz"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-05"},{"lineNumber":218,"author":{"gitId":"aarontxz"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-05"},{"lineNumber":219,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":220,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":221,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":222,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":223,"author":{"gitId":"aarontxz"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":224,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":225,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":226,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":227,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":228,"author":{"gitId":"aarontxz"},"content":"class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":229,"author":{"gitId":"aarontxz"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":230,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":231,"author":{"gitId":"aarontxz"},"content":" public TaskList(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":232,"author":{"gitId":"aarontxz"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":233,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":234,"author":{"gitId":"aarontxz"},"content":" String[] lines \u003d input.split(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":235,"author":{"gitId":"aarontxz"},"content":" for (String line : lines) {","lastModifiedDate":"2023-09-05"},{"lineNumber":236,"author":{"gitId":"aarontxz"},"content":" System.out.print(line);","lastModifiedDate":"2023-09-05"},{"lineNumber":237,"author":{"gitId":"aarontxz"},"content":" Task task \u003d createTaskFromInput(line);","lastModifiedDate":"2023-09-05"},{"lineNumber":238,"author":{"gitId":"aarontxz"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":239,"author":{"gitId":"aarontxz"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":240,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":241,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":242,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":243,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":244,"author":{"gitId":"aarontxz"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":245,"author":{"gitId":"aarontxz"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":246,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":247,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":248,"author":{"gitId":"aarontxz"},"content":" public void remove(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":249,"author":{"gitId":"aarontxz"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":250,"author":{"gitId":"aarontxz"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":251,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":252,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":253,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":254,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":255,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":256,"author":{"gitId":"aarontxz"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":257,"author":{"gitId":"aarontxz"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":258,"author":{"gitId":"aarontxz"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":259,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":260,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":261,"author":{"gitId":"aarontxz"},"content":" return null;","lastModifiedDate":"2023-09-05"},{"lineNumber":262,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":263,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":264,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":265,"author":{"gitId":"aarontxz"},"content":" public int size() {","lastModifiedDate":"2023-09-05"},{"lineNumber":266,"author":{"gitId":"aarontxz"},"content":" return tasks.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":267,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":268,"author":{"gitId":"aarontxz"},"content":" private Task createTaskFromInput(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":269,"author":{"gitId":"aarontxz"},"content":" char type \u003d input.charAt(1);","lastModifiedDate":"2023-09-05"},{"lineNumber":270,"author":{"gitId":"aarontxz"},"content":" boolean isDone \u003d (input.charAt(4) \u003d\u003d \u0027X\u0027);","lastModifiedDate":"2023-09-05"},{"lineNumber":271,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":272,"author":{"gitId":"aarontxz"},"content":" int openParenIndex \u003d input.indexOf(\u0027(\u0027); // Find the index of the open parenthesis","lastModifiedDate":"2023-09-05"},{"lineNumber":273,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":274,"author":{"gitId":"aarontxz"},"content":" String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":275,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":276,"author":{"gitId":"aarontxz"},"content":" if (openParenIndex !\u003d -1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":277,"author":{"gitId":"aarontxz"},"content":" // If there is an open parenthesis, extract description till the open parenthesis","lastModifiedDate":"2023-09-05"},{"lineNumber":278,"author":{"gitId":"aarontxz"},"content":" description \u003d input.substring(7, openParenIndex).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":279,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":280,"author":{"gitId":"aarontxz"},"content":" // If there\u0027s no parenthesis, use the entire string after the type marker","lastModifiedDate":"2023-09-05"},{"lineNumber":281,"author":{"gitId":"aarontxz"},"content":" description \u003d input.substring(7).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":282,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":283,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":284,"author":{"gitId":"aarontxz"},"content":" Task task;","lastModifiedDate":"2023-09-05"},{"lineNumber":285,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":286,"author":{"gitId":"aarontxz"},"content":" if (type \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":287,"author":{"gitId":"aarontxz"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":288,"author":{"gitId":"aarontxz"},"content":" } else if (type \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":289,"author":{"gitId":"aarontxz"},"content":" int byIndex \u003d input.indexOf(\"(by: \");","lastModifiedDate":"2023-09-05"},{"lineNumber":290,"author":{"gitId":"aarontxz"},"content":" String by \u003d input.substring(byIndex + 5, input.length() - 1).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":291,"author":{"gitId":"aarontxz"},"content":" task \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-05"},{"lineNumber":292,"author":{"gitId":"aarontxz"},"content":" } else if (type \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":293,"author":{"gitId":"aarontxz"},"content":" int fromIndex \u003d input.indexOf(\"(from: \");","lastModifiedDate":"2023-09-05"},{"lineNumber":294,"author":{"gitId":"aarontxz"},"content":" int toIndex \u003d input.indexOf(\"to: \");","lastModifiedDate":"2023-09-05"},{"lineNumber":295,"author":{"gitId":"aarontxz"},"content":" String from \u003d input.substring(fromIndex + 7, toIndex).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":296,"author":{"gitId":"aarontxz"},"content":" String to \u003d input.substring(toIndex + 4, input.length() - 1).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":297,"author":{"gitId":"aarontxz"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-05"},{"lineNumber":298,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":299,"author":{"gitId":"aarontxz"},"content":" return null;","lastModifiedDate":"2023-09-05"},{"lineNumber":300,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":301,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":302,"author":{"gitId":"aarontxz"},"content":" if (isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":303,"author":{"gitId":"aarontxz"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":304,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":305,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":306,"author":{"gitId":"aarontxz"},"content":" return task;","lastModifiedDate":"2023-09-05"},{"lineNumber":307,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":308,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":309,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":310,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":311,"author":{"gitId":"aarontxz"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":312,"author":{"gitId":"aarontxz"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":313,"author":{"gitId":"aarontxz"},"content":" stringBuilder.append(task.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":314,"author":{"gitId":"aarontxz"},"content":" stringBuilder.append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":315,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":316,"author":{"gitId":"aarontxz"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":317,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":318,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":319,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":320,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":321,"author":{"gitId":"aarontxz"},"content":"class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":322,"author":{"gitId":"aarontxz"},"content":" private String directory;","lastModifiedDate":"2023-09-05"},{"lineNumber":323,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":324,"author":{"gitId":"aarontxz"},"content":" Storage(String directory) {","lastModifiedDate":"2023-09-05"},{"lineNumber":325,"author":{"gitId":"aarontxz"},"content":" this.directory \u003d directory;","lastModifiedDate":"2023-09-05"},{"lineNumber":326,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":327,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":328,"author":{"gitId":"aarontxz"},"content":" public String load() {","lastModifiedDate":"2023-09-05"},{"lineNumber":329,"author":{"gitId":"aarontxz"},"content":" String fileContent \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":330,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":331,"author":{"gitId":"aarontxz"},"content":" byte[] encodedBytes \u003d Files.readAllBytes(Paths.get(directory));","lastModifiedDate":"2023-09-05"},{"lineNumber":332,"author":{"gitId":"aarontxz"},"content":" fileContent \u003d new String(encodedBytes);","lastModifiedDate":"2023-09-05"},{"lineNumber":333,"author":{"gitId":"aarontxz"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":334,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Error reading file: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":335,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":336,"author":{"gitId":"aarontxz"},"content":" return fileContent;","lastModifiedDate":"2023-09-05"},{"lineNumber":337,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":338,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":339,"author":{"gitId":"aarontxz"},"content":" public void save(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":340,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":341,"author":{"gitId":"aarontxz"},"content":" String content \u003d tasks.toString(); // Get the string representation of tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":342,"author":{"gitId":"aarontxz"},"content":" Files.write(Paths.get(directory), content.getBytes());","lastModifiedDate":"2023-09-05"},{"lineNumber":343,"author":{"gitId":"aarontxz"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":344,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Error writing to file: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":345,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":346,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":347,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"aarontxz":347}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"aarontxz"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"aarontxz"},"content":"/*","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"aarontxz"},"content":" * This file was generated by the Gradle \u0027init\u0027 task.","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"aarontxz"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"aarontxz"},"content":" * This is a general purpose Gradle build.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"aarontxz"},"content":" * To learn more about Gradle by exploring our Samples at https://docs.gradle.org/8.3/samples","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"aarontxz"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"aarontxz"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","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":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"aarontxz"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e ed6d4d25bd4e34461919ffe785a6f10f4c087552","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"aarontxz":9,"-":42}},{"path":"settings.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"aarontxz"},"content":"/*","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"aarontxz"},"content":" * This file was generated by the Gradle \u0027init\u0027 task.","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"aarontxz"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"aarontxz"},"content":" * The settings file is used to specify which projects to include in your build.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"aarontxz"},"content":" * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.3/userguide/building_swift_projects.html in the Gradle documentation.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"aarontxz"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"aarontxz"},"content":"rootProject.name \u003d \u0027ip\u0027","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"aarontxz":8}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"aarontxz"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"aarontxz"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"aarontxz"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"aarontxz"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"aarontxz"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"aarontxz"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"aarontxz"},"content":"class Duke {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"aarontxz"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"aarontxz"},"content":" String botName \u003d \"Aaaronbot\";","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"aarontxz"},"content":" String savedString \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"aarontxz"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"aarontxz"},"content":" savedString \u003d storage.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"aarontxz"},"content":" TaskList tasks \u003d new TaskList(savedString);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Hello! I\u0027m \" + botName);","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"aarontxz"},"content":" while (true) {","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"aarontxz"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"aarontxz"},"content":" processUserInput(userInput, tasks);","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"aarontxz"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"aarontxz"},"content":" } catch (EmptyDescriptionException | UnknownCommandException | WrongFormatException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"aarontxz"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"aarontxz"},"content":" if (userInput.equals(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"aarontxz"},"content":" scanner.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"aarontxz"},"content":" public static void processUserInput(String userInput, TaskList tasks)","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"aarontxz"},"content":" throws EmptyDescriptionException, UnknownCommandException, WrongFormatException {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"aarontxz"},"content":" String[] inputParts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"aarontxz"},"content":" String commandStr \u003d inputParts[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"aarontxz"},"content":" CommandType commandType \u003d getCommandType(commandStr);","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"aarontxz"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"aarontxz"},"content":" case LIST:","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"aarontxz"},"content":" listTasks(tasks);","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"aarontxz"},"content":" case MARK:","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"aarontxz"},"content":" case UNMARK:","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"aarontxz"},"content":" int taskIndex \u003d Integer.parseInt(inputParts[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"aarontxz"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"aarontxz"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"aarontxz"},"content":" if (commandType \u003d\u003d CommandType.MARK) {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"aarontxz"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"aarontxz"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"aarontxz"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Invalid task index.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"aarontxz"},"content":" case DELETE:","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"aarontxz"},"content":" int index \u003d Integer.parseInt(inputParts[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"aarontxz"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"aarontxz"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Noted. I\u0027ve removed this task: \\n\" + task + \"\\nNow you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"aarontxz"},"content":" case TODO:","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"aarontxz"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"aarontxz"},"content":" case EVENT:","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"aarontxz"},"content":" handleTaskCreation(userInput, tasks, commandType);","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"aarontxz"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"aarontxz"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"aarontxz"},"content":" public static CommandType getCommandType(String commandStr) {","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"aarontxz"},"content":" return CommandType.valueOf(commandStr.toUpperCase());","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"aarontxz"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"aarontxz"},"content":" return CommandType.UNKNOWN;","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"aarontxz"},"content":" public static void listTasks(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"aarontxz"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"aarontxz"},"content":" System.out.println((i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"aarontxz"},"content":" public static void handleTaskCreation(String userInput, TaskList tasks, CommandType commandType)","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"aarontxz"},"content":" throws EmptyDescriptionException, UnknownCommandException, WrongFormatException {","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"aarontxz"},"content":" String[] inputParts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"aarontxz"},"content":" String command \u003d inputParts[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"aarontxz"},"content":" if (commandType \u003d\u003d CommandType.TODO) {","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"aarontxz"},"content":" if (inputParts.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"aarontxz"},"content":" throw new EmptyDescriptionException(command);","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"aarontxz"},"content":" tasks.add(new Todo(userInput.substring(5)));","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"aarontxz"},"content":" } else if (commandType \u003d\u003d CommandType.DEADLINE) {","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"aarontxz"},"content":" if (inputParts.length \u003c\u003d 1){","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"aarontxz"},"content":" throw new EmptyDescriptionException(command);","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"aarontxz"},"content":" String[] deadlineParts \u003d userInput.split(\" /by \");","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"aarontxz"},"content":" String description \u003d deadlineParts[0].substring(9);","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"aarontxz"},"content":" String by \u003d deadlineParts[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"aarontxz"},"content":" tasks.add(new Deadline(description, by));","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"aarontxz"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"aarontxz"},"content":" throw new WrongFormatException(\"OOPS!!! deadlines need to be in this format, deadline return book /by YYYY-MM-DD\");","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"aarontxz"},"content":" } else if (commandType \u003d\u003d CommandType.EVENT) {","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"aarontxz"},"content":" if (inputParts.length \u003c\u003d 1){","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"aarontxz"},"content":" throw new EmptyDescriptionException(command);","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"aarontxz"},"content":" String[] eventParts \u003d userInput.split(\" /from | /to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"aarontxz"},"content":" String description \u003d eventParts[0].substring(6);","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"aarontxz"},"content":" String from \u003d eventParts[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"aarontxz"},"content":" String to \u003d eventParts[2];","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"aarontxz"},"content":" tasks.add(new Event(description, from, to));","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"aarontxz"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"aarontxz"},"content":" throw new WrongFormatException(\"OOPS!!! events need to be in this format, event project meeting /from Mon 2pm /to 4pm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":131,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":132,"author":{"gitId":"aarontxz"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"aarontxz"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-24"},{"lineNumber":136,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":138,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":139,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":140,"author":{"gitId":"aarontxz"},"content":"class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"aarontxz"},"content":" public EmptyDescriptionException(String task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"aarontxz"},"content":" super(\"OOPS!!! The description of a \" + task + \" cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"aarontxz"},"content":"class WrongFormatException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"aarontxz"},"content":" public WrongFormatException(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"aarontxz"},"content":" super(message);","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"aarontxz"},"content":"class UnknownCommandException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"aarontxz"},"content":" public UnknownCommandException() {","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"aarontxz"},"content":" super(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-P\");","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"aarontxz"},"content":"enum CommandType {","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"aarontxz"},"content":" LIST, MARK, UNMARK, DELETE, TODO, DEADLINE, EVENT, UNKNOWN","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"aarontxz"},"content":"class Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"aarontxz"},"content":" protected String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"aarontxz"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"aarontxz"},"content":" public Task(String description) {","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"aarontxz"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"aarontxz"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"aarontxz"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"aarontxz"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"aarontxz"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"aarontxz"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"aarontxz"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"] \" + description;","lastModifiedDate":"2023-09-05"},{"lineNumber":182,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":183,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":184,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":185,"author":{"gitId":"aarontxz"},"content":"class Todo extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":186,"author":{"gitId":"aarontxz"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-05"},{"lineNumber":187,"author":{"gitId":"aarontxz"},"content":" super(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":188,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":189,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":190,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":191,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":192,"author":{"gitId":"aarontxz"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":193,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":194,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":195,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":196,"author":{"gitId":"aarontxz"},"content":"class Deadline extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":197,"author":{"gitId":"aarontxz"},"content":" public LocalDate by;","lastModifiedDate":"2023-09-05"},{"lineNumber":198,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":199,"author":{"gitId":"aarontxz"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-05"},{"lineNumber":200,"author":{"gitId":"aarontxz"},"content":" super(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":201,"author":{"gitId":"aarontxz"},"content":" LocalDate date \u003d LocalDate.parse(by);","lastModifiedDate":"2023-09-05"},{"lineNumber":202,"author":{"gitId":"aarontxz"},"content":" this.by \u003d date;","lastModifiedDate":"2023-09-05"},{"lineNumber":203,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":204,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":205,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":206,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":207,"author":{"gitId":"aarontxz"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":208,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":209,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":210,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":211,"author":{"gitId":"aarontxz"},"content":"class Event extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":212,"author":{"gitId":"aarontxz"},"content":" public String from;","lastModifiedDate":"2023-09-05"},{"lineNumber":213,"author":{"gitId":"aarontxz"},"content":" public String to;","lastModifiedDate":"2023-09-05"},{"lineNumber":214,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":215,"author":{"gitId":"aarontxz"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-05"},{"lineNumber":216,"author":{"gitId":"aarontxz"},"content":" super(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":217,"author":{"gitId":"aarontxz"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-05"},{"lineNumber":218,"author":{"gitId":"aarontxz"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-05"},{"lineNumber":219,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":220,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":221,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":222,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":223,"author":{"gitId":"aarontxz"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":224,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":225,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":226,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":227,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":228,"author":{"gitId":"aarontxz"},"content":"class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":229,"author":{"gitId":"aarontxz"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":230,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":231,"author":{"gitId":"aarontxz"},"content":" public TaskList(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":232,"author":{"gitId":"aarontxz"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":233,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":234,"author":{"gitId":"aarontxz"},"content":" String[] lines \u003d input.split(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":235,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":236,"author":{"gitId":"aarontxz"},"content":" for (String line : lines) {","lastModifiedDate":"2023-09-05"},{"lineNumber":237,"author":{"gitId":"aarontxz"},"content":" if (line.equals(\"\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":238,"author":{"gitId":"aarontxz"},"content":" continue;","lastModifiedDate":"2023-09-05"},{"lineNumber":239,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":240,"author":{"gitId":"aarontxz"},"content":" Task task \u003d createTaskFromInput(line);","lastModifiedDate":"2023-09-05"},{"lineNumber":241,"author":{"gitId":"aarontxz"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":242,"author":{"gitId":"aarontxz"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":243,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":244,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":245,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":246,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":247,"author":{"gitId":"aarontxz"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":248,"author":{"gitId":"aarontxz"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":249,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":250,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":251,"author":{"gitId":"aarontxz"},"content":" public void remove(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":252,"author":{"gitId":"aarontxz"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":253,"author":{"gitId":"aarontxz"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":254,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":255,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":256,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":257,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":258,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":259,"author":{"gitId":"aarontxz"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":260,"author":{"gitId":"aarontxz"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":261,"author":{"gitId":"aarontxz"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":262,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":263,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":264,"author":{"gitId":"aarontxz"},"content":" return null;","lastModifiedDate":"2023-09-05"},{"lineNumber":265,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":266,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":267,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":268,"author":{"gitId":"aarontxz"},"content":" public int size() {","lastModifiedDate":"2023-09-05"},{"lineNumber":269,"author":{"gitId":"aarontxz"},"content":" return tasks.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":270,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":271,"author":{"gitId":"aarontxz"},"content":" private Task createTaskFromInput(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":272,"author":{"gitId":"aarontxz"},"content":" char type \u003d input.charAt(1);","lastModifiedDate":"2023-09-05"},{"lineNumber":273,"author":{"gitId":"aarontxz"},"content":" boolean isDone \u003d (input.charAt(4) \u003d\u003d \u0027X\u0027);","lastModifiedDate":"2023-09-05"},{"lineNumber":274,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":275,"author":{"gitId":"aarontxz"},"content":" int openParenIndex \u003d input.indexOf(\u0027(\u0027); // Find the index of the open parenthesis","lastModifiedDate":"2023-09-05"},{"lineNumber":276,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":277,"author":{"gitId":"aarontxz"},"content":" String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":278,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":279,"author":{"gitId":"aarontxz"},"content":" if (openParenIndex !\u003d -1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":280,"author":{"gitId":"aarontxz"},"content":" // If there is an open parenthesis, extract description till the open parenthesis","lastModifiedDate":"2023-09-05"},{"lineNumber":281,"author":{"gitId":"aarontxz"},"content":" description \u003d input.substring(7, openParenIndex).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":282,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":283,"author":{"gitId":"aarontxz"},"content":" // If there\u0027s no parenthesis, use the entire string after the type marker","lastModifiedDate":"2023-09-05"},{"lineNumber":284,"author":{"gitId":"aarontxz"},"content":" description \u003d input.substring(7).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":285,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":286,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":287,"author":{"gitId":"aarontxz"},"content":" Task task;","lastModifiedDate":"2023-09-05"},{"lineNumber":288,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":289,"author":{"gitId":"aarontxz"},"content":" if (type \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":290,"author":{"gitId":"aarontxz"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":291,"author":{"gitId":"aarontxz"},"content":" } else if (type \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":292,"author":{"gitId":"aarontxz"},"content":" int byIndex \u003d input.indexOf(\"(by: \");","lastModifiedDate":"2023-09-05"},{"lineNumber":293,"author":{"gitId":"aarontxz"},"content":" String by \u003d input.substring(byIndex + 5, input.length() - 1).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":294,"author":{"gitId":"aarontxz"},"content":" task \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-05"},{"lineNumber":295,"author":{"gitId":"aarontxz"},"content":" } else if (type \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":296,"author":{"gitId":"aarontxz"},"content":" int fromIndex \u003d input.indexOf(\"(from: \");","lastModifiedDate":"2023-09-05"},{"lineNumber":297,"author":{"gitId":"aarontxz"},"content":" int toIndex \u003d input.indexOf(\"to: \");","lastModifiedDate":"2023-09-05"},{"lineNumber":298,"author":{"gitId":"aarontxz"},"content":" String from \u003d input.substring(fromIndex + 7, toIndex).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":299,"author":{"gitId":"aarontxz"},"content":" String to \u003d input.substring(toIndex + 4, input.length() - 1).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":300,"author":{"gitId":"aarontxz"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-05"},{"lineNumber":301,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":302,"author":{"gitId":"aarontxz"},"content":" return null;","lastModifiedDate":"2023-09-05"},{"lineNumber":303,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":304,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":305,"author":{"gitId":"aarontxz"},"content":" if (isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":306,"author":{"gitId":"aarontxz"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":307,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":308,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":309,"author":{"gitId":"aarontxz"},"content":" return task;","lastModifiedDate":"2023-09-05"},{"lineNumber":310,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":311,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":312,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":313,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":314,"author":{"gitId":"aarontxz"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":315,"author":{"gitId":"aarontxz"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":316,"author":{"gitId":"aarontxz"},"content":" stringBuilder.append(task.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":317,"author":{"gitId":"aarontxz"},"content":" stringBuilder.append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":318,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":319,"author":{"gitId":"aarontxz"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":320,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":321,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":322,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":323,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":324,"author":{"gitId":"aarontxz"},"content":"class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":325,"author":{"gitId":"aarontxz"},"content":" private String directory;","lastModifiedDate":"2023-09-05"},{"lineNumber":326,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":327,"author":{"gitId":"aarontxz"},"content":" Storage(String directory) {","lastModifiedDate":"2023-09-05"},{"lineNumber":328,"author":{"gitId":"aarontxz"},"content":" this.directory \u003d directory;","lastModifiedDate":"2023-09-05"},{"lineNumber":329,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":330,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":331,"author":{"gitId":"aarontxz"},"content":" public String load() {","lastModifiedDate":"2023-09-05"},{"lineNumber":332,"author":{"gitId":"aarontxz"},"content":" String fileContent \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":333,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":334,"author":{"gitId":"aarontxz"},"content":" byte[] encodedBytes \u003d Files.readAllBytes(Paths.get(directory));","lastModifiedDate":"2023-09-05"},{"lineNumber":335,"author":{"gitId":"aarontxz"},"content":" fileContent \u003d new String(encodedBytes);","lastModifiedDate":"2023-09-05"},{"lineNumber":336,"author":{"gitId":"aarontxz"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":337,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Error reading file: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":338,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":339,"author":{"gitId":"aarontxz"},"content":" return fileContent;","lastModifiedDate":"2023-09-05"},{"lineNumber":340,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":341,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":342,"author":{"gitId":"aarontxz"},"content":" public void save(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":343,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":344,"author":{"gitId":"aarontxz"},"content":" String content \u003d tasks.toString(); // Get the string representation of tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":345,"author":{"gitId":"aarontxz"},"content":" Files.write(Paths.get(directory), content.getBytes());","lastModifiedDate":"2023-09-05"},{"lineNumber":346,"author":{"gitId":"aarontxz"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":347,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Error writing to file: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":348,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":349,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":350,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"aarontxz":347,"-":3}},{"path":"src/main/java/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"aarontxz"},"content":"[T][X] homework","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"aarontxz"},"content":"[T][ ] homework","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"aarontxz":2}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"aarontxz"},"content":"java Duke.java","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"aarontxz"},"content":"todo homework","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"aarontxz"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"aarontxz"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"aarontxz"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"aarontxz"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"aarontxz"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"aarontxz"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"aarontxz"},"content":"list","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"aarontxz":9}}] +[{"path":"Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"aarontxz"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"aarontxz"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"aarontxz"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"aarontxz"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"aarontxz"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"aarontxz"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"aarontxz"},"content":"class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"aarontxz"},"content":" public EmptyDescriptionException(String task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"aarontxz"},"content":" super(\"OOPS The description of a \" + task + \" cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"aarontxz"},"content":"class WrongFormatException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"aarontxz"},"content":" public WrongFormatException(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"aarontxz"},"content":" super(message);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"aarontxz"},"content":"class UnknownCommandException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"aarontxz"},"content":" public UnknownCommandException() {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"aarontxz"},"content":" super(\"OOPS I\u0027m sorry, but I don\u0027t know what that means :-P\");","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"aarontxz"},"content":"enum CommandType {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"aarontxz"},"content":" LIST, MARK, UNMARK, DELETE, TODO, DEADLINE, EVENT, UNKNOWN","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"aarontxz"},"content":"class Duke {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"aarontxz"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"aarontxz"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"aarontxz"},"content":" String botName \u003d \"Aaronbot\";","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"aarontxz"},"content":" String savedString \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"aarontxz"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"aarontxz"},"content":" savedString \u003d storage.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"aarontxz"},"content":" TaskList tasks \u003d new TaskList(savedString);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Hello! I\u0027m \" + botName);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"aarontxz"},"content":" while (true) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"aarontxz"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"aarontxz"},"content":" processUserInput(userInput, tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"aarontxz"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"aarontxz"},"content":" } catch (EmptyDescriptionException | UnknownCommandException | WrongFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"aarontxz"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"aarontxz"},"content":" if (userInput.equals(\"bye\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"aarontxz"},"content":" scanner.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"aarontxz"},"content":" public static void processUserInput(String userInput, TaskList tasks)","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"aarontxz"},"content":" throws EmptyDescriptionException, UnknownCommandException, WrongFormatException {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"aarontxz"},"content":" String[] inputParts \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"aarontxz"},"content":" String commandStr \u003d inputParts[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"aarontxz"},"content":" CommandType commandType \u003d getCommandType(commandStr);","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"aarontxz"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"aarontxz"},"content":" case LIST:","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"aarontxz"},"content":" listTasks(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"aarontxz"},"content":" case MARK:","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"aarontxz"},"content":" case UNMARK:","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"aarontxz"},"content":" int taskIndex \u003d Integer.parseInt(inputParts[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"aarontxz"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"aarontxz"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"aarontxz"},"content":" if (commandType \u003d\u003d CommandType.MARK) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"aarontxz"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"aarontxz"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"aarontxz"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Invalid task index.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"aarontxz"},"content":" case DELETE:","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"aarontxz"},"content":" int index \u003d Integer.parseInt(inputParts[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"aarontxz"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"aarontxz"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Noted. I\u0027ve removed this task: \\n\" + task + \"\\nNow you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"aarontxz"},"content":" case TODO:","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"aarontxz"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"aarontxz"},"content":" case EVENT:","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"aarontxz"},"content":" handleTaskCreation(userInput, tasks, commandType);","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"aarontxz"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"aarontxz"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"aarontxz"},"content":" public static CommandType getCommandType(String commandStr) {","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"aarontxz"},"content":" return CommandType.valueOf(commandStr.toUpperCase());","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"aarontxz"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"aarontxz"},"content":" return CommandType.UNKNOWN;","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"aarontxz"},"content":" public static void listTasks(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"aarontxz"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"aarontxz"},"content":" System.out.println((i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"aarontxz"},"content":" public static void handleTaskCreation(String userInput, TaskList tasks, CommandType commandType)","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"aarontxz"},"content":" throws EmptyDescriptionException, UnknownCommandException, WrongFormatException {","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"aarontxz"},"content":" String[] inputParts \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"aarontxz"},"content":" String command \u003d inputParts[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"aarontxz"},"content":" if (commandType \u003d\u003d CommandType.TODO) {","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"aarontxz"},"content":" if (inputParts.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"aarontxz"},"content":" throw new EmptyDescriptionException(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"aarontxz"},"content":" tasks.add(new Todo(userInput.substring(5)));","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"aarontxz"},"content":" } else if (commandType \u003d\u003d CommandType.DEADLINE) {","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"aarontxz"},"content":" if (inputParts.length \u003c\u003d 1){","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"aarontxz"},"content":" throw new EmptyDescriptionException(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"aarontxz"},"content":" String[] deadlineParts \u003d userInput.split(\" /by \");","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"aarontxz"},"content":" String description \u003d deadlineParts[0].substring(9);","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"aarontxz"},"content":" String by \u003d deadlineParts[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"aarontxz"},"content":" tasks.add(new Deadline(description, by));","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"aarontxz"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"aarontxz"},"content":" throw new WrongFormatException(\"OOPS!!! deadlines need to be in this format, deadline return book /by YYYY-MM-DD\");","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"aarontxz"},"content":" } else if (commandType \u003d\u003d CommandType.EVENT) {","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"aarontxz"},"content":" if (inputParts.length \u003c\u003d 1){","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"aarontxz"},"content":" throw new EmptyDescriptionException(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"aarontxz"},"content":" String[] eventParts \u003d userInput.split(\" /from | /to \");","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"aarontxz"},"content":" String description \u003d eventParts[0].substring(6);","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"aarontxz"},"content":" String from \u003d eventParts[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"aarontxz"},"content":" String to \u003d eventParts[2];","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"aarontxz"},"content":" tasks.add(new Event(description, from, to));","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"aarontxz"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"aarontxz"},"content":" throw new WrongFormatException(\"OOPS events need to be in this format, event project meeting /from Mon 2pm /to 4pm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"aarontxz"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"aarontxz"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"aarontxz"},"content":"class Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"aarontxz"},"content":" protected String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"aarontxz"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"aarontxz"},"content":" public Task(String description) {","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"aarontxz"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"aarontxz"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"aarontxz"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"aarontxz"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"aarontxz"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"aarontxz"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"aarontxz"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"] \" + description;","lastModifiedDate":"2023-09-05"},{"lineNumber":182,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":183,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":184,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":185,"author":{"gitId":"aarontxz"},"content":"class Todo extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":186,"author":{"gitId":"aarontxz"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-05"},{"lineNumber":187,"author":{"gitId":"aarontxz"},"content":" super(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":188,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":189,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":190,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":191,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":192,"author":{"gitId":"aarontxz"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":193,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":194,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":195,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":196,"author":{"gitId":"aarontxz"},"content":"class Deadline extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":197,"author":{"gitId":"aarontxz"},"content":" public LocalDate by;","lastModifiedDate":"2023-09-05"},{"lineNumber":198,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":199,"author":{"gitId":"aarontxz"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-05"},{"lineNumber":200,"author":{"gitId":"aarontxz"},"content":" super(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":201,"author":{"gitId":"aarontxz"},"content":" LocalDate date \u003d LocalDate.parse(by);","lastModifiedDate":"2023-09-05"},{"lineNumber":202,"author":{"gitId":"aarontxz"},"content":" this.by \u003d date;","lastModifiedDate":"2023-09-05"},{"lineNumber":203,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":204,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":205,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":206,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":207,"author":{"gitId":"aarontxz"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":208,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":209,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":210,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":211,"author":{"gitId":"aarontxz"},"content":"class Event extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":212,"author":{"gitId":"aarontxz"},"content":" public String from;","lastModifiedDate":"2023-09-05"},{"lineNumber":213,"author":{"gitId":"aarontxz"},"content":" public String to;","lastModifiedDate":"2023-09-05"},{"lineNumber":214,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":215,"author":{"gitId":"aarontxz"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-05"},{"lineNumber":216,"author":{"gitId":"aarontxz"},"content":" super(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":217,"author":{"gitId":"aarontxz"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-05"},{"lineNumber":218,"author":{"gitId":"aarontxz"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-05"},{"lineNumber":219,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":220,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":221,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":222,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":223,"author":{"gitId":"aarontxz"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":224,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":225,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":226,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":227,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":228,"author":{"gitId":"aarontxz"},"content":"class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":229,"author":{"gitId":"aarontxz"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":230,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":231,"author":{"gitId":"aarontxz"},"content":" public TaskList(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":232,"author":{"gitId":"aarontxz"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":233,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":234,"author":{"gitId":"aarontxz"},"content":" String[] lines \u003d input.split(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":235,"author":{"gitId":"aarontxz"},"content":" for (String line : lines) {","lastModifiedDate":"2023-09-05"},{"lineNumber":236,"author":{"gitId":"aarontxz"},"content":" System.out.print(line);","lastModifiedDate":"2023-09-05"},{"lineNumber":237,"author":{"gitId":"aarontxz"},"content":" Task task \u003d createTaskFromInput(line);","lastModifiedDate":"2023-09-05"},{"lineNumber":238,"author":{"gitId":"aarontxz"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":239,"author":{"gitId":"aarontxz"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":240,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":241,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":242,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":243,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":244,"author":{"gitId":"aarontxz"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":245,"author":{"gitId":"aarontxz"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":246,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":247,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":248,"author":{"gitId":"aarontxz"},"content":" public void remove(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":249,"author":{"gitId":"aarontxz"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":250,"author":{"gitId":"aarontxz"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":251,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":252,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":253,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":254,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":255,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":256,"author":{"gitId":"aarontxz"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":257,"author":{"gitId":"aarontxz"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":258,"author":{"gitId":"aarontxz"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":259,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":260,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":261,"author":{"gitId":"aarontxz"},"content":" return null;","lastModifiedDate":"2023-09-05"},{"lineNumber":262,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":263,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":264,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":265,"author":{"gitId":"aarontxz"},"content":" public int size() {","lastModifiedDate":"2023-09-05"},{"lineNumber":266,"author":{"gitId":"aarontxz"},"content":" return tasks.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":267,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":268,"author":{"gitId":"aarontxz"},"content":" private Task createTaskFromInput(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":269,"author":{"gitId":"aarontxz"},"content":" char type \u003d input.charAt(1);","lastModifiedDate":"2023-09-05"},{"lineNumber":270,"author":{"gitId":"aarontxz"},"content":" boolean isDone \u003d (input.charAt(4) \u003d\u003d \u0027X\u0027);","lastModifiedDate":"2023-09-05"},{"lineNumber":271,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":272,"author":{"gitId":"aarontxz"},"content":" int openParenIndex \u003d input.indexOf(\u0027(\u0027); // Find the index of the open parenthesis","lastModifiedDate":"2023-09-05"},{"lineNumber":273,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":274,"author":{"gitId":"aarontxz"},"content":" String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":275,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":276,"author":{"gitId":"aarontxz"},"content":" if (openParenIndex !\u003d -1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":277,"author":{"gitId":"aarontxz"},"content":" // If there is an open parenthesis, extract description till the open parenthesis","lastModifiedDate":"2023-09-05"},{"lineNumber":278,"author":{"gitId":"aarontxz"},"content":" description \u003d input.substring(7, openParenIndex).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":279,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":280,"author":{"gitId":"aarontxz"},"content":" // If there\u0027s no parenthesis, use the entire string after the type marker","lastModifiedDate":"2023-09-05"},{"lineNumber":281,"author":{"gitId":"aarontxz"},"content":" description \u003d input.substring(7).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":282,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":283,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":284,"author":{"gitId":"aarontxz"},"content":" Task task;","lastModifiedDate":"2023-09-05"},{"lineNumber":285,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":286,"author":{"gitId":"aarontxz"},"content":" if (type \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":287,"author":{"gitId":"aarontxz"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":288,"author":{"gitId":"aarontxz"},"content":" } else if (type \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":289,"author":{"gitId":"aarontxz"},"content":" int byIndex \u003d input.indexOf(\"(by: \");","lastModifiedDate":"2023-09-05"},{"lineNumber":290,"author":{"gitId":"aarontxz"},"content":" String by \u003d input.substring(byIndex + 5, input.length() - 1).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":291,"author":{"gitId":"aarontxz"},"content":" task \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-05"},{"lineNumber":292,"author":{"gitId":"aarontxz"},"content":" } else if (type \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":293,"author":{"gitId":"aarontxz"},"content":" int fromIndex \u003d input.indexOf(\"(from: \");","lastModifiedDate":"2023-09-05"},{"lineNumber":294,"author":{"gitId":"aarontxz"},"content":" int toIndex \u003d input.indexOf(\"to: \");","lastModifiedDate":"2023-09-05"},{"lineNumber":295,"author":{"gitId":"aarontxz"},"content":" String from \u003d input.substring(fromIndex + 7, toIndex).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":296,"author":{"gitId":"aarontxz"},"content":" String to \u003d input.substring(toIndex + 4, input.length() - 1).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":297,"author":{"gitId":"aarontxz"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-05"},{"lineNumber":298,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":299,"author":{"gitId":"aarontxz"},"content":" return null;","lastModifiedDate":"2023-09-05"},{"lineNumber":300,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":301,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":302,"author":{"gitId":"aarontxz"},"content":" if (isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":303,"author":{"gitId":"aarontxz"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":304,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":305,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":306,"author":{"gitId":"aarontxz"},"content":" return task;","lastModifiedDate":"2023-09-05"},{"lineNumber":307,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":308,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":309,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":310,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":311,"author":{"gitId":"aarontxz"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":312,"author":{"gitId":"aarontxz"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":313,"author":{"gitId":"aarontxz"},"content":" stringBuilder.append(task.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":314,"author":{"gitId":"aarontxz"},"content":" stringBuilder.append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":315,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":316,"author":{"gitId":"aarontxz"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":317,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":318,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":319,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":320,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":321,"author":{"gitId":"aarontxz"},"content":"class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":322,"author":{"gitId":"aarontxz"},"content":" private String directory;","lastModifiedDate":"2023-09-05"},{"lineNumber":323,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":324,"author":{"gitId":"aarontxz"},"content":" Storage(String directory) {","lastModifiedDate":"2023-09-05"},{"lineNumber":325,"author":{"gitId":"aarontxz"},"content":" this.directory \u003d directory;","lastModifiedDate":"2023-09-05"},{"lineNumber":326,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":327,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":328,"author":{"gitId":"aarontxz"},"content":" public String load() {","lastModifiedDate":"2023-09-05"},{"lineNumber":329,"author":{"gitId":"aarontxz"},"content":" String fileContent \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":330,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":331,"author":{"gitId":"aarontxz"},"content":" byte[] encodedBytes \u003d Files.readAllBytes(Paths.get(directory));","lastModifiedDate":"2023-09-05"},{"lineNumber":332,"author":{"gitId":"aarontxz"},"content":" fileContent \u003d new String(encodedBytes);","lastModifiedDate":"2023-09-05"},{"lineNumber":333,"author":{"gitId":"aarontxz"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":334,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Error reading file: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":335,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":336,"author":{"gitId":"aarontxz"},"content":" return fileContent;","lastModifiedDate":"2023-09-05"},{"lineNumber":337,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":338,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":339,"author":{"gitId":"aarontxz"},"content":" public void save(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":340,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":341,"author":{"gitId":"aarontxz"},"content":" String content \u003d tasks.toString(); // Get the string representation of tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":342,"author":{"gitId":"aarontxz"},"content":" Files.write(Paths.get(directory), content.getBytes());","lastModifiedDate":"2023-09-05"},{"lineNumber":343,"author":{"gitId":"aarontxz"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":344,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Error writing to file: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":345,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":346,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":347,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"aarontxz":347}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"aarontxz"},"content":"/*","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"aarontxz"},"content":" * This file was generated by the Gradle \u0027init\u0027 task.","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"aarontxz"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"aarontxz"},"content":" * This is a general purpose Gradle build.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"aarontxz"},"content":" * To learn more about Gradle by exploring our Samples at https://docs.gradle.org/8.3/samples","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"aarontxz"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":22,"author":{"gitId":"aarontxz"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"aarontxz"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"aarontxz"},"content":" mainClass.set(\"dukey.Duke\")","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"aarontxz":11,"-":41}},{"path":"settings.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"aarontxz"},"content":"/*","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"aarontxz"},"content":" * This file was generated by the Gradle \u0027init\u0027 task.","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"aarontxz"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"aarontxz"},"content":" * The settings file is used to specify which projects to include in your build.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"aarontxz"},"content":" * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.3/userguide/building_swift_projects.html in the Gradle documentation.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"aarontxz"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"aarontxz"},"content":"rootProject.name \u003d \u0027ip\u0027","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"aarontxz":8}},{"path":"src/main/java/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"aarontxz"},"content":"[T][ ] homework","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"aarontxz"},"content":"[D][X] do this (by: 2012-12-20)","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"aarontxz":2}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"aarontxz"},"content":"package dukey;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"aarontxz"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"aarontxz"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"aarontxz"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"aarontxz"},"content":"import dukey.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"aarontxz"},"content":"import dukey.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"aarontxz"},"content":"import dukey.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"aarontxz"},"content":"import dukey.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"aarontxz"},"content":"import dukey.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"aarontxz"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"aarontxz"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"aarontxz"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"aarontxz"},"content":"class Duke {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"aarontxz"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"aarontxz"},"content":" String botName \u003d \"Aaaronbot\";","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"aarontxz"},"content":" String savedString \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"aarontxz"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"aarontxz"},"content":" savedString \u003d storage.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"aarontxz"},"content":" TaskList tasks \u003d new TaskList(savedString);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Hello! I\u0027m \" + botName);","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"aarontxz"},"content":" while (true) {","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"aarontxz"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"aarontxz"},"content":" processUserInput(userInput, tasks);","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"aarontxz"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"aarontxz"},"content":" } catch (EmptyDescriptionException | UnknownCommandException | WrongFormatException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"aarontxz"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"aarontxz"},"content":" if (userInput.equals(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"aarontxz"},"content":" scanner.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"aarontxz"},"content":" public static void processUserInput(String userInput, TaskList tasks)","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"aarontxz"},"content":" throws EmptyDescriptionException, UnknownCommandException, WrongFormatException {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"aarontxz"},"content":" String[] inputParts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"aarontxz"},"content":" String commandStr \u003d inputParts[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"aarontxz"},"content":" CommandType commandType \u003d getCommandType(commandStr);","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"aarontxz"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"aarontxz"},"content":" case LIST:","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"aarontxz"},"content":" listTasks(tasks);","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"aarontxz"},"content":" case MARK:","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"aarontxz"},"content":" case UNMARK:","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"aarontxz"},"content":" int taskIndex \u003d Integer.parseInt(inputParts[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"aarontxz"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"aarontxz"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"aarontxz"},"content":" if (commandType \u003d\u003d CommandType.MARK) {","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"aarontxz"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"aarontxz"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"aarontxz"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Invalid task index.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"aarontxz"},"content":" case DELETE:","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"aarontxz"},"content":" int index \u003d Integer.parseInt(inputParts[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"aarontxz"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"aarontxz"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Noted. I\u0027ve removed this task: \\n\" + task + \"\\nNow you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"aarontxz"},"content":" case TODO:","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"aarontxz"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"aarontxz"},"content":" case EVENT:","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"aarontxz"},"content":" handleTaskCreation(userInput, tasks, commandType);","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"aarontxz"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"aarontxz"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"aarontxz"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"aarontxz"},"content":" public static CommandType getCommandType(String commandStr) {","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"aarontxz"},"content":" return CommandType.valueOf(commandStr.toUpperCase());","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"aarontxz"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"aarontxz"},"content":" return CommandType.UNKNOWN;","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"aarontxz"},"content":" public static void listTasks(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"aarontxz"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"aarontxz"},"content":" System.out.println((i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"aarontxz"},"content":" public static void handleTaskCreation(String userInput, TaskList tasks, CommandType commandType)","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"aarontxz"},"content":" throws EmptyDescriptionException, UnknownCommandException, WrongFormatException {","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"aarontxz"},"content":" String[] inputParts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"aarontxz"},"content":" String command \u003d inputParts[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"aarontxz"},"content":" if (commandType \u003d\u003d CommandType.TODO) {","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"aarontxz"},"content":" if (inputParts.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"aarontxz"},"content":" throw new EmptyDescriptionException(command);","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"aarontxz"},"content":" tasks.add(new Todo(userInput.substring(5)));","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"aarontxz"},"content":" } else if (commandType \u003d\u003d CommandType.DEADLINE) {","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"aarontxz"},"content":" if (inputParts.length \u003c\u003d 1){","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"aarontxz"},"content":" throw new EmptyDescriptionException(command);","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"aarontxz"},"content":" String[] deadlineParts \u003d userInput.split(\" /by \");","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"aarontxz"},"content":" String description \u003d deadlineParts[0].substring(9);","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"aarontxz"},"content":" String by \u003d deadlineParts[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"aarontxz"},"content":" tasks.add(new Deadline(description, by));","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"aarontxz"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"aarontxz"},"content":" throw new WrongFormatException(\"OOPS!!! deadlines need to be in this format, deadline return book /by YYYY-MM-DD\");","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"aarontxz"},"content":" } else if (commandType \u003d\u003d CommandType.EVENT) {","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"aarontxz"},"content":" if (inputParts.length \u003c\u003d 1){","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"aarontxz"},"content":" throw new EmptyDescriptionException(command);","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"aarontxz"},"content":" String[] eventParts \u003d userInput.split(\" /from | /to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":130,"author":{"gitId":"aarontxz"},"content":" String description \u003d eventParts[0].substring(6);","lastModifiedDate":"2023-08-24"},{"lineNumber":131,"author":{"gitId":"aarontxz"},"content":" String from \u003d eventParts[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":132,"author":{"gitId":"aarontxz"},"content":" String to \u003d eventParts[2];","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"aarontxz"},"content":" tasks.add(new Event(description, from, to));","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"aarontxz"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"aarontxz"},"content":" throw new WrongFormatException(\"OOPS!!! events need to be in this format, event project meeting /from Mon 2pm /to 4pm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":138,"author":{"gitId":"aarontxz"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-24"},{"lineNumber":139,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":140,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"aarontxz"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":144,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":145,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":146,"author":{"gitId":"aarontxz"},"content":"class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"aarontxz"},"content":" public EmptyDescriptionException(String task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"aarontxz"},"content":" super(\"OOPS!!! The description of a \" + task + \" cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"aarontxz"},"content":"class WrongFormatException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"aarontxz"},"content":" public WrongFormatException(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"aarontxz"},"content":" super(message);","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"aarontxz"},"content":"class UnknownCommandException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"aarontxz"},"content":" public UnknownCommandException() {","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"aarontxz"},"content":" super(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-P\");","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"aarontxz"},"content":"enum CommandType {","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"aarontxz"},"content":" LIST, MARK, UNMARK, DELETE, TODO, DEADLINE, EVENT, UNKNOWN","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"aarontxz":166,"-":1}},{"path":"src/main/java/duke/Moretask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"aarontxz"},"content":"package dukey;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"aarontxz"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"aarontxz"},"content":"import dukey.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"aarontxz"},"content":"class Todo extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"aarontxz"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"aarontxz"},"content":" super(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"aarontxz"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"aarontxz"},"content":"class Deadline extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"aarontxz"},"content":" public LocalDate by;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"aarontxz"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"aarontxz"},"content":" super(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"aarontxz"},"content":" LocalDate date \u003d LocalDate.parse(by);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"aarontxz"},"content":" this.by \u003d date;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"aarontxz"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"aarontxz"},"content":"class Event extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"aarontxz"},"content":" public String from;","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"aarontxz"},"content":" public String to;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"aarontxz"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"aarontxz"},"content":" super(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"aarontxz"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"aarontxz"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"aarontxz"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"aarontxz":46}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"aarontxz"},"content":"package dukey;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"aarontxz"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"aarontxz"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"aarontxz"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"aarontxz"},"content":"class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"aarontxz"},"content":" private String directory;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"aarontxz"},"content":" Storage(String directory) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"aarontxz"},"content":" this.directory \u003d directory;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"aarontxz"},"content":" public String load() {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"aarontxz"},"content":" String fileContent \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"aarontxz"},"content":" byte[] encodedBytes \u003d Files.readAllBytes(Paths.get(directory));","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"aarontxz"},"content":" fileContent \u003d new String(encodedBytes);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"aarontxz"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Error reading file: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"aarontxz"},"content":" return fileContent;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"aarontxz"},"content":" public void save(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"aarontxz"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"aarontxz"},"content":" String content \u003d tasks.toString(); // Get the string representation of tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"aarontxz"},"content":" Files.write(Paths.get(directory), content.getBytes());","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"aarontxz"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Error writing to file: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"aarontxz":32}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"aarontxz"},"content":"package dukey;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"aarontxz"},"content":"class Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"aarontxz"},"content":" protected String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"aarontxz"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"aarontxz"},"content":" public Task(String description) {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"aarontxz"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"aarontxz"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"aarontxz"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"aarontxz"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"aarontxz"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"aarontxz"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"aarontxz"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"] \" + description;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"aarontxz":25}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"aarontxz"},"content":"package dukey;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"aarontxz"},"content":"import dukey.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"aarontxz"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"aarontxz"},"content":"class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"aarontxz"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"aarontxz"},"content":" public TaskList(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"aarontxz"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"aarontxz"},"content":" String[] lines \u003d input.split(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"aarontxz"},"content":" for (String line : lines) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"aarontxz"},"content":" if (line.equals(\"\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"aarontxz"},"content":" continue;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"aarontxz"},"content":" Task task \u003d createTaskFromInput(line);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"aarontxz"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"aarontxz"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"aarontxz"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"aarontxz"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"aarontxz"},"content":" public void remove(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"aarontxz"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"aarontxz"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"aarontxz"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"aarontxz"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"aarontxz"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"aarontxz"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"aarontxz"},"content":" return null;","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"aarontxz"},"content":" public int size() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"aarontxz"},"content":" return tasks.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"aarontxz"},"content":" private Task createTaskFromInput(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"aarontxz"},"content":" char type \u003d input.charAt(1);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"aarontxz"},"content":" boolean isDone \u003d (input.charAt(4) \u003d\u003d \u0027X\u0027);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"aarontxz"},"content":" int openParenIndex \u003d input.indexOf(\u0027(\u0027); // Find the index of the open parenthesis","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"aarontxz"},"content":" String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"aarontxz"},"content":" if (openParenIndex !\u003d -1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"aarontxz"},"content":" // If there is an open parenthesis, extract description till the open parenthesis","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"aarontxz"},"content":" description \u003d input.substring(7, openParenIndex).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"aarontxz"},"content":" // If there\u0027s no parenthesis, use the entire string after the type marker","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"aarontxz"},"content":" description \u003d input.substring(7).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"aarontxz"},"content":" Task task;","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"aarontxz"},"content":" if (type \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"aarontxz"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"aarontxz"},"content":" } else if (type \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"aarontxz"},"content":" int byIndex \u003d input.indexOf(\"(by: \");","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"aarontxz"},"content":" String by \u003d input.substring(byIndex + 5, input.length() - 1).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"aarontxz"},"content":" task \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"aarontxz"},"content":" } else if (type \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"aarontxz"},"content":" int fromIndex \u003d input.indexOf(\"(from: \");","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"aarontxz"},"content":" int toIndex \u003d input.indexOf(\"to: \");","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"aarontxz"},"content":" String from \u003d input.substring(fromIndex + 7, toIndex).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"aarontxz"},"content":" String to \u003d input.substring(toIndex + 4, input.length() - 1).trim(); // Trim whitespace","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"aarontxz"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"aarontxz"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"aarontxz"},"content":" return null;","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"aarontxz"},"content":" if (isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"aarontxz"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"aarontxz"},"content":" return task;","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"aarontxz"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"aarontxz"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"aarontxz"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"aarontxz"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"aarontxz"},"content":" stringBuilder.append(task.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"aarontxz"},"content":" stringBuilder.append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"aarontxz"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"aarontxz":99}},{"path":"src/main/java/duke/package.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"aarontxz"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"aarontxz"},"content":"class Duke {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"aarontxz"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"aarontxz"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"aarontxz"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"aarontxz"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"aarontxz":7}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"aarontxz"},"content":"java Duke.java","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"aarontxz"},"content":"todo homework","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"aarontxz"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"aarontxz"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"aarontxz"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"aarontxz"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"aarontxz"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"aarontxz"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"aarontxz"},"content":"list","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"aarontxz":9}}] diff --git a/aarontxz_ip_master/commits.json b/aarontxz_ip_master/commits.json index d076ec57..afc7a15f 100644 --- a/aarontxz_ip_master/commits.json +++ b/aarontxz_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"aarontxz":[{"date":"2023-08-23","commitResults":[{"hash":"e8c93ffe24ee1a181f1993bf009da715e324d496","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"d6723e7c678dbeb233ec3c932d401b3247e0181e","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"ea168f27804fd5b9fe6d239317cd182acc2d0438","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"cd902b7a39684e61bb99e19e49ab32ce92cedb5c","isMergeCommit":false,"messageTitle":"Add the ability to store whatever text entered by the user and display them back to the user when requested.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"96c44b651c203be359e758eb1405bea3d1eeb2d7","isMergeCommit":false,"messageTitle":"Add the ability to mark tasks as done. Optionally, add the ability to change the status back to not done.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":6}}},{"hash":"9b04d0f65c4d5bbc7e9fb51546d1e2a69135e522","isMergeCommit":false,"messageTitle":"Add support for tracking three types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":21}}}]},{"date":"2023-08-24","commitResults":[{"hash":"7337274210b59b96f1f5d100186b85014c707d9e","isMergeCommit":false,"messageTitle":"Use the input/output redirection technique to semi-automate the testing of Duke. Fixed missing mark and unmark in level4","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":45,"deletions":34}}},{"hash":"e5e72fd73907c1065cc5059fd485b8dc6c250532","isMergeCommit":false,"messageTitle":"Teach the chatbot to deal with errors such as incorrect inputs entered by the user.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":42}}},{"hash":"738ff8582617a98e0b010faae3ce55b3a08511bf","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":12}}},{"hash":"da6b9c34d25d0d3f35afcfaaddf63922612f8815","isMergeCommit":false,"messageTitle":"Use Java enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":27}}}]},{"date":"2023-09-05","commitResults":[{"hash":"c5b482a8f38023b2f86c3ed098400b283886e3d0","isMergeCommit":false,"messageTitle":"remove !","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":344,"deletions":7}}},{"hash":"aa81618c60ec30275e7335654b75942b5a2e1170","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/aarontxz/ip","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke.java\n","fileTypesAndContributionMap":{}},{"hash":"d6bfe2f328a3a36e2563d5886f0dbc3fd30293bc","isMergeCommit":false,"messageTitle":"remove !!!","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"6de1d50787de9c3ba23ddbc47f60729990774ce2","isMergeCommit":false,"messageTitle":"Remove duplicates","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":19,"deletions":234}}},{"hash":"917fb393ec56ab092e020a144a3edc9c2decdd48","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/aarontxz/ip","messageBody":"# Conflicts:\n#\tbuild.gradle\n#\tgradle/wrapper/gradle-wrapper.jar\n#\tgradle/wrapper/gradle-wrapper.properties\n#\tgradlew\n#\tgradlew.bat\n","fileTypesAndContributionMap":{}},{"hash":"5a79d0332614764d4f765cffdbb2b5b208e72e29","isMergeCommit":false,"messageTitle":"Update Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"1ea2d0b93001f1acafc1c0e6ab7a3aa808ec4628","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/aarontxz/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"aarontxz":{"java":694,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":17,"txt":11}},"authorContributionVariance":{"aarontxz":24072.307},"authorDisplayNameMap":{"aarontxz":"CS2103-W14-1 TENG..HUAN"}} +{"authorDailyContributionsMap":{"aarontxz":[{"date":"2023-08-23","commitResults":[{"hash":"e8c93ffe24ee1a181f1993bf009da715e324d496","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"d6723e7c678dbeb233ec3c932d401b3247e0181e","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"ea168f27804fd5b9fe6d239317cd182acc2d0438","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"cd902b7a39684e61bb99e19e49ab32ce92cedb5c","isMergeCommit":false,"messageTitle":"Add the ability to store whatever text entered by the user and display them back to the user when requested.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"96c44b651c203be359e758eb1405bea3d1eeb2d7","isMergeCommit":false,"messageTitle":"Add the ability to mark tasks as done. Optionally, add the ability to change the status back to not done.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":6}}},{"hash":"9b04d0f65c4d5bbc7e9fb51546d1e2a69135e522","isMergeCommit":false,"messageTitle":"Add support for tracking three types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":21}}}]},{"date":"2023-08-24","commitResults":[{"hash":"7337274210b59b96f1f5d100186b85014c707d9e","isMergeCommit":false,"messageTitle":"Use the input/output redirection technique to semi-automate the testing of Duke. Fixed missing mark and unmark in level4","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":45,"deletions":34}}},{"hash":"e5e72fd73907c1065cc5059fd485b8dc6c250532","isMergeCommit":false,"messageTitle":"Teach the chatbot to deal with errors such as incorrect inputs entered by the user.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":42}}},{"hash":"738ff8582617a98e0b010faae3ce55b3a08511bf","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":12}}},{"hash":"da6b9c34d25d0d3f35afcfaaddf63922612f8815","isMergeCommit":false,"messageTitle":"Use Java enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":27}}}]},{"date":"2023-09-05","commitResults":[{"hash":"c5b482a8f38023b2f86c3ed098400b283886e3d0","isMergeCommit":false,"messageTitle":"remove !","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":344,"deletions":7}}},{"hash":"aa81618c60ec30275e7335654b75942b5a2e1170","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/aarontxz/ip","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke.java\n","fileTypesAndContributionMap":{}},{"hash":"d6bfe2f328a3a36e2563d5886f0dbc3fd30293bc","isMergeCommit":false,"messageTitle":"remove !!!","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"6de1d50787de9c3ba23ddbc47f60729990774ce2","isMergeCommit":false,"messageTitle":"Remove duplicates","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":19,"deletions":234}}},{"hash":"917fb393ec56ab092e020a144a3edc9c2decdd48","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/aarontxz/ip","messageBody":"# Conflicts:\n#\tbuild.gradle\n#\tgradle/wrapper/gradle-wrapper.jar\n#\tgradle/wrapper/gradle-wrapper.properties\n#\tgradlew\n#\tgradlew.bat\n","fileTypesAndContributionMap":{}},{"hash":"5a79d0332614764d4f765cffdbb2b5b208e72e29","isMergeCommit":false,"messageTitle":"Update Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"1ea2d0b93001f1acafc1c0e6ab7a3aa808ec4628","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/aarontxz/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"258595891a6a71912bacb4e6a4d4bdaddeb1b24c","isMergeCommit":false,"messageTitle":"some changes","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":3}}},{"hash":"b3b7b82a53b65e54ed073a8f74cd91331e786f87","isMergeCommit":false,"messageTitle":"group into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":1},"java":{"insertions":216,"deletions":190}}}]}]},"authorFileTypeContributionMap":{"aarontxz":{"java":722,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":19,"txt":11}},"authorContributionVariance":{"aarontxz":57064.973},"authorDisplayNameMap":{"aarontxz":"CS2103-W14-1 TENG..HUAN"}} diff --git a/archive.zip b/archive.zip index 0f0a254e052ad0c93562b04a3c42e7f3d91227a7..4d40ce63f8a5ffdbba6320856370d4a875120fcc 100644 GIT binary patch delta 1157551 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

u`>G$(wo8ZZ zr|fu!)_8l8>Vkw#n9>jNxWwQjQ&UrT(@tQjP_eOceAQ_vZ})QN$t(Q8Q8T}clc#!h+bpj?2jTtG8%liAn=D)`m|R;nEMVMD zR}-GKAC<8IH=~a>ZZG`@ksVbe7w@Ez8!|_OXWQ*;_X`JLI*Byw5z9WAoY3FI#SumL zb}DrQ-oJO}i;!!RH`tN+8%(%!{8n#uD|MoSH6C40+MUmKRd`_qcIE^6~1SG%`J=S(5H|Ck|l4e8iwZOyb3ws^%OoBeb9qg z9GFj+GRAN|eMPP`e(#Yd(3H@SABw^)B-PhUkqvN9xr#IzBqD*yE0D}5IJ0x&6TmhM3h{sNP}c@H^EpOVk!BX~bJ z!GPsBBOZbBI)O5rhc+5`0(Z#iJ5hzw#5f8TaUkr-7G%Z9%tun}>`dc-_n&sV6r?^E z6MQ?5v|DNj1gkUs(Ok4)69~!U=w{KHT_`vLoF!a-)OnHASnWBT#$Aj}mX0VqOU##j zaG63YMwfA44kJ6&oU-^3Fb>_x%^1z6CjE}s2$U-x=eMY<`qAejtYzf};1YZhkac~aw>m)#7!~= z@FlEF(>I1o)0mNxXYmN@SU^&m1!^0bXO_qA^;ndCVUvx-9PlG*x3^@%!|L~TU^3k_ zug6D#yXi6JLtCtGBt?MZ2y#ss^gEo~O_kF!ZpG=2s@m=SV;x&3k$pjb8ac|UwqMS# znfBK={;3&`tzN$+_b$3Ym%?Z-U3LHx&}EO8dW|a>o3>j_c#I}sgn6vq4s*0ez}0ed z`aL*izT@dg?4rVl%y(f6B9T3E>{cG$)%JNHWDleu%MSEb2vPUz0oS?( zazga@IK;E?TF4pV?N_gcU^oVa+j2&YP5T}F0~Ij*X-d2{?fglWXYl@@95ZAcpcPla zeu>}5apQzp+$OsOC>;8_taBOH#nbE1+EYPyo}y*6^uCpXZ>3kvHbLiV%`)F!8;%>_X)O3$3*OB{6Osoy>uzz*Nzq0FbGVAooCZArQ9h$GD(_?#WENB&LEMd^{V zM4DU5@r5WasPrrL7sM>|4Il8~_D?>zR*q*c^_sueGl;xmt)~gr>fMCy5x;CSf5iaB_ z4TRc2?>a{QLSe5916Vhl9DN9*LH+i+o1ctXSOy1G6xB0Xb%+caX11DUw3)B1#BDT> zpgf0TLL@SBmcagJ>w^S0e>&J(Jy`RCfQJ#gR)L%z^GUxZ6{=rm!X?RUENtX;fkbQ~%IP%^Z`W{AImEIpsu0O}%1Na=b?jCVieDV?Oy<=_# z44Iq55IG38@t1UZiPF1OV=Gh8Fy&vT85$HhzM^nSVgeNS_(RO~e9pF9ATEEm16^;N z<<0)HNZ?2sU+GKs1(wpVgoESpwgoAW7hJ3=Of`f)wD^)dqD(3!>XGE(e9v{;m&d%A z6l?$Y<{cMA0622O7-dmj_aN1g0Syy)XNF)p54J7wlm!dV>EZHmYJFUY>f$@(jL(ob zMR_NN`F*CXchEqdw_vuOhWGlWAk5&cGw6%=ietj=Z%G|ei|Gi@lCi5)PG!oP zT4;Y@sBA5m>6A6!4&ES^`Deh0SJ3Vy9+h)w#;}R(7m2c?r?yr z(D}f_p_z<3I?~4b8jqCe861Z9BVWzEmgX5ug{xkykAgv--Ag_!^v@6k=g4cGBG)o` zgt?sxbk7FlD2Ec)o$JjT&>i9(Qx(vRA$+lP&fjql@g@Dm*ktoaQIcS7hIwr z_&u043}7?T9S$SXnLLjT9=;u&y*-~dP&gTeNI!_fZM#xUj}rjq~BFb5rV8|Y=9hbB3gU!_Pcw}iCzgtU4|sb=s;?brmX zTp`4du~8MjyE46Zu9B2DJU6isTLzmE42r|GDzT<5Lb-Y&wDUS`@1I)HL2xG<1wgC>bz&d!kxbscDpc~B% zkv0uC+Xa+1ZWHXU3_{!R0FFkRqZMAh%wcEf=5^7pCyUCh%+K;LvcOQO(qv~Yk0(C+ z3$R^_5$1H}Zj|ej&AAM0zk81^Q7QUiKfFQcis06vS&JC@@!;|Z*L%+k`R>eZmU8t# z*{(bBQiGLz>m9r_>unLxlBAqDt<5m>I-yJ@|F;oaJ>2OMMB0?4^C`uFOgOj+xAfTe zQ-`_z09#yBCm~cSCS)UZWP|(xuR87p9e_?b@of3{3-GHw9q8bUVNA3lNQe2$yAQ7R z7>KY&FaP(`62CwBv=CI4c*6Y7aMoKneT?}Eqs$qXe~&Yjt#}w8v(q@i8rZR-#Nk$>dKw>R^#XMKAjnTd$SbP6k$sh0AIlRl-Czjq8X~Tn<$;Q|D_pCb>ti7Tb6>M4=E*H{ zj=~D4ojD&S?9tumL`|^TCcSX$9FSz&hNdfaYI&7NAtZlP_ULz?R)=?ugJ3jBvEKkiGP zQn(B2oOJ*9TzkY#Tz&Gs75S_ZN{RHUA8mI`;B70d@d)e1wKK z<+2`UCJCFhqqqO=M&Vqf``K>hVN2IjE#7X$*gFi;GIcTun%bTp12H5NsM@D50BR6k zEjO4O89{}AhCHAXz2?5x3Q&{|gA68VJLBEZPO59=VicdK?I@EZ^-=qrqJAD%$#jb^ z7UxAl%>*>c3t`L@hFGXBRdypSp0#czgz{#~aLeDUn?$v*1YRwLue%x-iTjkT>1gIR zC2L{6yZiZ`qoqd*NtF~zHzECs?!=nd(%cUoE27(!Z~ah9(^KvP57-O0Wr;xNa`$We zw__;{*RHELG?m2C7YL8T3l-LIL}EEwr^Daq-wt{T696jj38vzG)}QvrGcJb+kHORd zpNx#n`AV~XAB^aljoc3Qz+V|4$05>-ilS&;Fc~XRXcgw}qpho38|rbLdR`Zb82C}b zNHyLwGkIkBR)s})0GNr!4~Ick_f@>nO{~9nEm~&2#9370yN!YS+>;@PMTfzdr&4tq z=xrkln2m>VEaK&tgD3|6G~XE+OG`2>9ZHtY^F2omoOY&`EjEfoHYGWfxw~2B2u7}< zOtWt)5WGW{lAP+VF!ng5o8_%iw3<*4to`uWe^gjvmu?r$0N{}!_HasBg~*r}s&&^} zIW6m7Vga@FYEu(BhGoCd-Jy2x1Ju7OH4Dx}P&3fz?1>!%+Q;=S8F4c%F}Rev<`TaD z!B@5@cj&9i;75Vb_7FTcf(DTZ?lb=V>;79rI&o!vb;gm@g$Fkz{&090k$}C0t?)$h zJxCk~`gs>c0I;%yY@b$IexM63l~_7qsgznP)sNVFj=b)ChFTs$gQ<^TSOVL8@T)~w zrU;@gzB5d8vGDMh;D>TQdIj__2afF^GqPu50~!u|TQR1Md6cEWwDMePwkf0xjt;X# zr^1FQa?ag$|Gz|_3L-wX13dPEscY{JZdEX8myCt(I6%WMT*2^>tS!#r#dwrT@nwm6 z+`2x{X1B?HnS5~HM%5ZlMw=y09p@;MOqC#`@iBl1Nyywrl7xKm_*EC?J)yEZUTt3Uf$H)*jCUq;@b*+~KjB&Y)X-sLBjNhnSgOKl0Er*0wW#p~AS~ zqDLPDxZ;Az@|O*NHf+j;NSNk)4TEedl|z%%pmu{GmkPg=jGtrj6+)xE$VzpxJl-u1 z&?_(2usUk62!Rkw{J`Q(jZ#UAhJNGLUixGFIsnWFw$V+LBgUQPr0YO4?u`BW;G zY^SI#NYWSCS|y-7#X|GD5#1QgiP&lrjFm`y*1}YCpnccdItWYbo;|n{!o@sXJm1K2 zF*#I;H5^BMoSp1{J~ZoN3oOLqvz>s1T?9~BL2Idd^|1du>|m;p3M>{_H>7kGjuc#g z&CvvP5}<@{J9{Ef+0TO_3OSAi6J>|y9DI&2d~+V^`+GTLJCh`Tx80evB_j|u^d{=c z)l?Sjt*f$rlgYH7RjhmqER{M2=&PyZvsIP%I99g9VooJ_4TNi#w1@LF0np0lgu(q; zf3ft*Qmy>=vjtqIV>CY-!M-8iY`Bq8Um6C7iqr~VBW;))Z>qIzwCPG^ZU}>H(D!dlOhI2CN^FX<>rh--ZnUlg zSFUv-WzTaMH_t_;N)<1vs%38xhAH+)OP0!DL#aZyYLS8|o}EWJi+GY2QD+pDnMeJ{ zPKU0--%6)VU7Yym*{)3SWzU&G(Z0;$m}HDpV!H?FjnfH*wTl|Cg!)^DLTJ7xOE|j(agv?1Ay`pOoB+p?D^HxHPhU8y*ukp$kI@V-yBRbM zdD|L7g@5R>^7#$x&5Er#Xx%!gBgNcYtiZK-ItVC&VLBWb<@uoU?=t!K!s$Louz@W z#n#$Z3Q~59*G7tBbIYBjx-EZ~F*DzclPmCIPOU^xl;jCOeIo>q1LGJi_)>yW3Aaxq z_YG|nUFc=Q&^IJ(Wlh2z#S$0c*7S*8G_b3jyM3vyojY9`&i2rSu+z$xgio~GHAWFJ zp~$xPtrG-t?yox2!{qnHLT*4!-#{DqUQ;V& z65{+xI4fpAmR7O?t*;Bb#JaFgAt7Ktk>A1%Zh$H_j z=!ONWM!XPTpjI_j^AEBMejzE&=!5^ud)0Q&1>1@C-f-=07Xbg0bl@DFUuVsn-!vhukRIdFRx!R^ z*pJ;xStE39%5pt-jQ@I;OqnoiwR`Ay#g>oQIR@+%30oUPRpLwy(j%eOiN;CuB=MUk zI=(Of{S#(#&5yRK^y&OW18Pg1=o9AFP%w5W#;7UOC#d@g6wqjVA^v3{rV0Bw+iZvQ zUa-$7T8x4689>CFo^3X^sF4Q`rDIy(4RZ^zdpE{w6;o0pY{KY_uj!KLP1UXzM9$fy zu&6PMYw=G(q`DiXY)7u)?~nH<9P#4(nK=MVzZ>S4UQu?of2ug_rh$j$j`^}we2>SmW4p90NVMuR!O?`qVF{Q%5@HE9 z)d1du>x7gGuReK#B8`*aJsoz2vz4_Fj&W~pWFkuATWx6D(|SB&?dGvjChitC3V_e8 zztgfb@rMb6qbw6^4~kL0rWW~HD;cg;n6%RV>#J-4ksD*mbtnlDz#l)N>U}1(O|#V1 z0Qq4do^U}gxWNY`kp4FjFeBA5sSvj8R;h?I%Ld%sdZ}uXuw-TMaW-Tdaj-r60rlVl4Ni;`Z;t&KSgMS*n#H4P5Ow91l zc3_YVhbeQR6)gf$vRO)|64NMxtt#IoGF1~|tGIEHdRFMjiZ~!-rVKh`x<(H7sV{LC zhEK?;mUY(jP4urvJ`4aJ$k56H;k3|CT=T7)_yx*Cq8Ca810A^r2^j*oH0X?|XyGsE zM!ql)qiODE;NPxpi>FvEhh!K%?J@eA*e9g=aT?WzUw_qzhRq+;e(r8o1HB6O04FIz zrZEsgl76l$zwd9-b*W-W5woMGrA7N31`zP528cQhn+7zp5fvb#Gv6f>tW$Hpk&IPP zIr0h>UQwMk16+)T6*SAK3|?;r9vQ*65SUu4X3z*eDfWO8h`CftAr#8XsHlAjI(3;a z=UruKP3B7@PC!4@fzRnU|F%&f%34=!=UW z%cnFS4z6F>{I7lSPc3<>b|3j9yH?B=n5Md{SjCE{uRNe&$Zt?r$^+}jGxR;WxW;XX z+vqo$K0%u}QBaE1he*aVZ{Bax2CBn)D%D4&q`O0jpXW-SzQiQC^^3K-=Dk2^ zp?F)D!4Kf;@)M@8Sg>GL1CvgbD^`ZbCQJoq04^;o#y}7V{zT$2$Ryys?OBmxQSb>h zI~zs3H9@{h+5&}9sd?udusXJ%>g94aojF7KcgkRlgq(1T6vk!)@Isi${@`qd)~$`yzNS2dPlnwT znK9ggxk;0T5LIAfbogBkR+J)EZww#C#@H;n^4<@nn!XPMddL9N zuo|{&sC{m}EX`t&;YFWLSe}4=o`Rw%MPc69I>q2?F;64&rzQUJ(11FjpL;Q~@7ak*QKQlD#aIr^ibgBgO@mjLS$$qMSNg;-3 zh^=){{z}NXipvp-Cfsb(=Ip?AkxYd4wU12FPc)dvS92l^;-ykXS(2mH*?2&__}$JO zJZ-#aYm>9S=Oa)@TlRr49E;zva7~&Twd`q(q$Pc!eO}6aw3J!KjLylTsIcHEg|5z@ zuE$pemnq=C^X1mSGK#c9dvV81_EK841)A9R3mm2nidnjd7W^y1j>pHbB#O$U+HPVJ zs1{3)FxsFOAT31sA#5?h!5RR*9B;~sc6~D){Fuw>v88z~s=oJ!;X2bP6zMFf_8C?l zYDgNeOeFER5GHse>G!RhLYU~vNST~-^KZIma5)|_OLfv%#jT64`0_%7 z?U&Sqje=J@*A76&-;fj!GJ;&G+u&-0p=LI6AI>Bn13V(Emt^b`99dJ}{2Ulp z>h6b5@4vx7lSyFt5#Ip;m>mIMS39Ho>?Zy4(*9zTvq%0>j@MH%{%VRx%8ijOtfwF# zoJp+MA-j*tSw;q9*Cl6#+XyFTNJt}ps97^kigHH+H_1C-0USmS^~aD-2z0iSPDb_% zqINikNn^&}uY&Pp$Vc}2M%?hM$*8~Wy^lYh{l9Oht~Ja5^d|z;TojI#ULZ3_y+Mt` zRwkZJy?bZ(ltbNu@6#Gm0;l@C#npot^~_?vk;4TEkf(8Y5>Aa}F(g-@ih3Qe!l)r< z2vM8qcdh?Gm_i3u$w+e&$`EE^=8{Q-!Bpx(Ut{_mZ_S#a-k8n{bHaiahzUZ|O}zU~ zPgeXH<`0QG3m^nIdw=CQwepnE2>O!LQCorW>R<}`W?sOb3PTwZha}MZ`Qq=F>4Z$+ z0E_<1h0P@%hHZxeF_lD~9wnx%vyT8eqm+iqK-s-m+HDbsF*+D~{S&7w>^ zqQK$zsK*E#>Ng9gp%~KnzWc-ahSWfbAN6vP9W6dW+b!S!YVmL$^8D@n>chInO0~RuFpz#j$fqrL^-gyMtaZZEmSK{Di(7h(WCfmsQOLbhi<;? z61%=MQjC+)>eH`rd3t>9p153pJh$U0!AE(`+s)fewWA|V9r@Smzg$t|Q9vQKy3ll^ zqMj0GdUmpv{|T>S&^1CGSlPd^BBiu;WWT1@mu*-) zq|hQR3`?1tX(||SQCx3zc|5-z5Kz=)`OO!_7@#U*=xegK!DRIu#N5w^%rB2jRTRuG z6KrLn@#k94fb|tYwBS`d593ZPBoQ~>bQ0&U38=5yprWDC#1I^$%8s@gBd;qND7<=@ zX`2JY%bT;Q*(^ZP9@LwBOFbA6no$H^u-}*+fAdU%n`HNw4uMmmXMt@t=ypgqHL5i_QP3|2trW0Pv%%JK z74gVjxy+0qB(QxnX@`;9xm+9<-sYm{>EUDZ@c4=S*|^#;=ejN88LZ7h8ua+Q)qF$# zM+G$N?3dj75z&MR0sg;b=UZe&5oiBL!y}MJ#G(F=Ysce^Soc5D-IXWe1L=RrK@Q>z z^nb=y86rCKf5ziF;tk|~#_>KP?*Dp$As{9E4@pBu>Sg)wl#Ucq$^Q^AB_t8<{}8DN zByrgPjJRZ^=l{_T!~Y?z{%yL03i_5YA>A(U>U|BN1G zl<43884B$v6#pB`eE_9R`Ugp2K|mD)#1ZU53y|AbGVnN+UR7h%kwb$6Srz^{*)9Q+ z#u4$SjC~r)J%I?T9GjZ3^2zBd)>D17rcB`|S!}NwueBVv+Vl<_U%h=^?I5d0&7?1X z9J+V`Z2yMV&ipkEhUz%Ap?kABORHX?w(8So-e8mAvj~z7UKPGUWeWWx@1I!*2==H} zq*0Zn3fqFnj#u>KFRf(e%7=M+* z`ZnEuxmn?RTM+hJ>sqekA+F^@SK!EJT(ZoBS zm2a7*&}UVMfuKsERg{<-W`@f*HA!OzjzM(=%^6(dOR$ozLmGGD!+<*no9l* z$BsWy?)^Ael=E4oh@2oxt(MPKW(G5e}# z9pQO8NC$pA!{s9T_K-hAq{y36YlBw0#VWAA4gqtuXj|4Y`g)=}m=(`H`kY!$hmRcOj z>|b5Qq0sk86RtSGO&=b;)Nl8lYOiD2a^1Dz^zJwf$=F!`&`COk<4pLuOYAN?;r;-p z`ddm$Q()D%o!o`?G(kc~*%7a?_#dh2=~Pm-0_l4NOAhJJGSPiXWLiUHbfS#5wPG4A zDKzVwspd@DLxfi!`EkwtxGfPrUIiIyy1jHe|GDNnDCV7#EWQLk7=K~?Akt`(B9e2G zcQZ!egsu*WMKYrj_K@&k9OGZ4q)k=o4k}grd9qPg>c(PLx%^CUNf3k`z94IHP%t@3 z-9L0hmbRPxfJ6f|HjEsB?>e3!8_diJfw{A*Mvi9+M08_FcNFj{Lzq*q;o-geTEXc-F}n{Y=tkiXEkxOCj6F)_d8x=3Vx=TsU) zqfhz>BlFjog2~J$vSgoP`C%h}hTdOE?F(Efc1`Rj079DH%N)nHJgh+toBdb9m`+aU z${ZrO=L363^$OKPMEnwuFxgHSr!poF&D2^{W;)NWIo)-xcv}^hM2l_bq(C^ZiDQ$r z(}BSKmx$(JF%NwlcAxKER-ZiID<~<8a1<2<(p}>vSIum}$|9c#Q6w&$Rr3*)DG~zm zn!i}V0bYhG+)E4_G2TRjXlBVvxFwZh$C()X8KSr}NVK*5iW6x*&B9#WP#KPC`nK2_ z&eM*90?lqcg&`&z_fE|TUh@8hCm3o^=|`$HB8{SK$7C=?s1e%CzNg85v`y?khps6M zvc=v-5^}S5!1r%LhUxzy=s&>m@7OF1k6&H%0W6ZBd9{@ljw~$pGcN?^530##-E00z z@KC7LA)eOiVmPQQx7ra*cEa*VhKY>< z0fbGZ@3%~GD)QBc*LSc)Q#y;xaauHjrw`wJ9uPQ&I67ZDh<)LO<&+;9=9e@h{|?UF zs+zcFL3@dDkt>Hfv9==tel*hC(}E#~eDT=skx;%mzuj=3VDvQ{;(_c_t|k4+d0C|~Dcwe3pyHugUZWpI?=}rZb79g5ewXn>> z$6$h3EGg`gLfJVIQ=terY#$3s1J{tCaDph3XOszO)Q$s|7th$8&Xj$UqfTg!_2%7l zHLw>`HZ2sqZWK>?p;rpL%GX3)og1GB_txxL-h00w2`&-_%JmSe3)!hC=(}=10cojI znf5C^@dta(5K;+ljH_vJ|&jy%zU9_&xn1@9D=t~3Fq-x+V z9Z?L0RMh4^{Vj)tVo8`NqV7#~wIgS~2{-p`%5QF=d!}4v3F$XJZ9bpuE+vZ~ z1$4J1u&dhx7S!_hHd9(@tTZs%!7Sd-|0V>s!qz4SzrWXf+*bUkut`bY%8fqHb`Cw# z(BNNrcB#!O)b`gMXJq-HXO1?!Vz)Rcb-v#m%~xprz82`p*xdR$CiriH70|ss$qWSq zR7mjuD3zy3W1w;YoYuvYub$s&3^&`=8YO}y$LejaL$HV9O)fQ?$CD{oaEp|YR^yQp zemJ_1^$8!(>m?n)Af^d|0-L_*HJU6;VoE3T_R}5$$HxHsN&gG0^TnlC-pt6)aZ)UW zm8GX8F;1frHmKSPiP3KYa zdBVH-3PU`=_CE%XWm+jNr8E1dPd|Z5qCd};-{3!sfW3Ub`~>7RSrPONhGq}Rm1|Z` ztkXB;G(T4ua-MRkB0o1QE(9WTdh8#(_eXjdJwJ?_*f-)`M7mhFifE%LzA3ZfH@%l3 zKFNQJ$qeOg@37Wv7rVHb&VU(B3I(FZ*82}4|i`rKjUt~!;6_) z7=C%vfmuXr56@k=b7$02eaqI;Uo(dtH)vQTJ2;+xv&ZyDe!F3q)5a0ldnqxRy`~Ie zW|spPc;U^BzQ}&4B-fX(c=B(A=h*Ci3Et8!*eD0oK(z-W5`NA+8!URvY6|Yj`VqEVl!btPBZ;uISO+V(XjsM3B3vO`NUU!WjJ& zRxa-AN{((iKQ)80t*`}X?6Nv}!0I92W9;i5R>Ov0-v5GFzS!5yNMn4jQe#9^3-A}y zKtJBxu3K?BojUfxc=_XafoDDaR%Cqmx6b;<-#50*$vXmi|3AXllcyF#zK@kFy_9Qvnst|875M?h#)BI85_>)NFFS1Kw^=>4Jf;Dj9;l4}j0# zv4mdp4{MO4C)Azh0$@}X7o!-LkU(}`a`rtqFD^t%hawVqYLg+ho|i?~{D4oS#}~8# z*7uq}zs>)H{lPt`Wn@s8@g|SVa0QSKuu>zf`dGw?-58ecqCuHA9t{t zs0c((jMyHZ32@Ado@GV!987!34QJhW%lCSrOq|>vj=&T=tHjrT5vHqh4sibS|K%6I zYO5agJC*8IG#r$S@@~b{hg5)OW z>C@+XKa2_4oX2et^6dUQ!Dj04Zo4ajG}}?wm6PscUbDN3BLDX5D*2gBPMl{D(@k<2 z4YyOoW~PLoV!e{zp>CRm{s25>qG0#Sgk|UQiSBvj<<`7or0JV;bPyo>p~RczXmM*W z4w(FHepEn-s8Vz`!0cnO}E)-us_)Yo6M6fcEZGg`?xfhs2{@w7g>}|mU z>*aAmE7|i_@*!}|`OW_0v89Laj{jyLd=ETnGd&!$3|U$E_iHMFVtAz-QD2MUN#OQG z*xl$1d@GX75)T|T1`x;}55jEkjBa}DaAfvja2+mZUdAOB+&oJWcxr&1;Q*eppNnbW zzAS_?>{NYwmyq~&gocGf=cmT;kj=l!M35gg#h8)fl%#|sd^lX4gbL}M_*pWLQURLg zh45R-eKO}VJVIXlQN7Ll^PRyB zDFZmkUfpajgw-xx`690wuTBr>hx9P6f6zJ&95D5>Ny`s#QAT-^WANALxKmou3sd?G2_mfQUyGx!UcE1ST z2RSVoti>nZg5_G3r#s7d^Zlccr_&RPt*;y)2`lZE8??@sv`*Y+7<7%CU$-Es@PJG;nxG;QmK>8L>)l%;|#=dPX zpiyT4a|QMDB^A(3(1!)o)-3xA6wwS-%$gS~mJRrrQoE%AZjh>jnA? zkCW-0lp&oCXjV?3g*-BxN-lMqM4jL}e{!%PCY#BaCbbvK5gNP!;GN9f#LNA)rH ze{zeP9Mh!)z@&e6AW$xJ)4~%HLm|Pn)&TE+CgVx*Y81}3X|z*e^Uu(rEK>=BNY9}w z@4)Pc`WaC?!PZ&gI7uG0Z$x5V3OseVwIdi32OSO4efB+=jk_AEvd&{SFK7c{`>dv$ zk?wI&CK72-z@6^>wc@ZeWu?I#fk=0kjQg(n`uu5b*&c)#Qi%q4l8r|LQ~=4NyWnb2 z;Hj3W`bCpS6-?TA*tabEBhr-ox2FBm>n6nNg1EcCgsJU>)gxTcw*@62B7CSPj>*8m zSh96QMVWF~GAVTmpNL_7hxyYG7lN|wv6>H*r?;!-?~`QQj}3X%yUVT`zj%X=c%)(K zr{wz*{KGF2>F0fERg7;~2?2~`!+NvYkW~DVKoLZY0>}=C5#v?P#etJ3$@P+hr4>4o z?DvMeM+C8vLbx(Hin9Lh0=u|yq!m~oT=CMzP=aQgb&ZT|5NY2w_;l9kIF0!kS>bFU zcC~qay&tbf!nBFk;GrdpkrAbxB^G<&hLD1DmAO!i=nJG*2W9Pr$ACyXdR#BvoBE!5 zNm0x{wnoeI#sOYKQGSkej6^IQFe-h|j!AGGb-uv{s7+USW)A^rCW>r3 zw1^Jng^RNpwrMBLU6~hr*8J-) z!H0CulLG*)xz~k?x`0Hzr??!5WoBo(63Jp$MLgX4;MA|Gz2OBM5Nkt(u%lSRQf&^b z+&1Pl`_f2$i~Ohb(gqylR≦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�Aja?3prTD-IAx1i$`$#vVPjNhKi4NhvU{ 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

(*T-rCVyD;3Qo2mP-LTBV{R>1G_DpOQNgS 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

#4DIo#y>X0`-!f>Vx-Z`~2bQs6Q}QueR;E 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�YZVNyzMIR^aJK@o7ILw=^T)BN)Bc$hUL zI7cs6INqbZT3t=Zqrg%67Ad5XWEtrBYw6*!X>RclIh_lci%%j#N0}n-ZZz?QR{8f2AqwSfin)g`daL<$-=krUOP;RImpiKX z&ZEvlTKykx(@M|TY-JPMY}V}13oYXAXZIty=_C-h3>!(G_J$lSNPjW(|B=4Atc7N2 zM>u{6(`n*&aL(@nW*s+5%hDhKp0{FIi;Pa=u-0=mZL$3r6K(wKg3`n43ys7YV%uKB zg8{2!raTc*j8wg5aCd842TpU|HYf>sV0t@BdP8QpO7 zgPGERa~*2~=RMn}u64g+D1EaM9itJ#^L{Q8fp`8SE2_JFCPT+3p`72ptNoOW>3DvM%*gz3`#8Xl zyWISI;Qo&aql&698G-}>$;bI$RG2Er|8tRjX+?7@Q+-;Sq`!`wB!Ecb!{a+Du5v-B z6NN^+W8Hz!j@nJ6v#0p-4cTRCCCb;DS070?sK98d<;UwPyEn)(fo&#)o-CX?bIosY z9!O8u7p<(1tHX^oN$ban$4c~nbNFk0nf&|i?;YX{`>K!jbY8Jt>~Oy_&oY3oVwZb2 z#w}^QwRI?DBnn6I)b&q*uv!@)bl$GODE3*)B-Ui2emO?ObAEbBQqIC$QBU(b%KhHCK?ja_e_Suotq z5d*S^h)aiTS+IjQ+qAV1K7y@!lY`hjxNds{?M|PkGd@TkfRw=yxskW=V?7RzwcM@U zcR%Kw-BjN}w(pzYw_-lUfmoRbxF@taQ14Xg?cjW^? z10Hy!f>`~aqK!RqsTRfuo(J2^*Pdt6?g&E$fshs9FV*leQ~V9^d`}(|LRmqEmTN(d zwuJlQF9vK`z)gyaYz|mkNM8Tj+F1}qC+1rXl%LX@GhRN=g7u^N(YVWl{ zra0>#;olNZvW92GUC=6#xcGjZiqC*vA&6q*tr)s*2{)IY{FYvwuJ9cMNoN1p#@N4&PU?i$RQmBvw zcA~!mmov%kb-xKu4YQ=%&B4T~U`QRbc+358?xH-kAi0jRG$1LVCqO_%qACcgm!~pa z1)rpX#UXyky61IVS0w3(9&e>QJswivo-2d5atY%jEY27EVRhHf{eyTZT3CKvp?{&L z7a{9!-DH;yMUS%fn|w2+->wS4jQ`v1;l!o~Xzl0EeFr7htoZS~Y)i(AvLyk$w6^K4 zE)J*3l?(EV&3wWgyokkbYPnu71eh@%;x+jph*oU%#-QStE)LHyZd6m0rSA}fP|i@K ze#jD%U2)h?2mI3}X3|^ig+`rsQ<7CF_(uIlNirLz7@XjmD4%#xUR#oo@$f#(rcM_Q5kn&W<(X2CMc%HzXl%N(6?J*H!BSU=g_8bs&|6}@()vxMtXIB;-Th%Vm$MCgbZ zT2n!e2x9I`=*pAb$I1?GNxUV|E&my0Z>BCUbh|&~cYBJa>B)>=(!1j`s`?hpSU0(( z*82PGf(>J{mLOh46)TuuB01?3kZ^d1#4n;j-K@1m>Gwh`-3*@5w0#OEX2j142ZcWx zLDrAv_4u76=->IgliA3OWT;;dyW{7?~L3mp0Eh(A&W|CwHc=RLi8(}D>w{A64F-X)o*hJ_mPfiCA0 zoF$A(qSpnB1WJw61-ks(l6IsMO@{yR7aB>Du5Ufcj}L73yWn@XQPld7&mk?jF{_T> z-g)$X$!q9NWV<()dr^nBfCI8SGuPd+A}7mxF9p9>R^%X$I2(WHTB;OQvE^AnjzELO z1kb(mPR`r+Bm}m}b6iHQVP9|rkv@l35P~tk^zsLuX%o&J2UHp1*nzN`B_%rn7}HV? z1tG5{yK*paSb~MCwd$%t)e2NTe4jFxr)E0j>9JpKR`|viG_+BB6P$%Ga&?3paFeyTeodLOOiJWEyVpXPh{5KjFO%RV8J?zZi7lduw@M;Pv~$kD71o#ZETc1p~ivbNhb|M=oY! zRtS#qmIN=ldxt}S04-FnlrpJG9B3Vm>@l`R`zv)e{yrMtz*AtoFkO4XT3W()DK2b{ zej_4QvKt1oK~1HqGU)SKMV2r|k(Cpjfl8x;HI@-8o9_>`g6frn=uIp#Yhyt*tdgiR zeCt+fMR89>Y`mZW1ECl@+nJQ#s&o1I5Zw@Jgb-G3hini37ts0B%7E?+=axS_r%VsqVlN<|&97{5KQmUmv8bHS%UesRCtZ-aoToj<>vJTHu=uKni)V ze=w^BGZDB@nhi&O%zN`WUE%wn?Vhat4s+-fbN7fAaibM{m|`@;UFg=5q`1bYhX)l0 zfdEqo_7+74*#b0^k-G?8KHtS@(}QswNYMMc#TkSNN&vu z$~KnF5Y$%*pbxyv)APHa8<;BML-FDHz*4={lGnaNyV@xuc5_11Sf7#hu&%dt9ui;E zsh5I}Q3g{7u`t3s_kpf6rDwP>cJ0nm+CgM;xb!aeOakALe8{t}O-MH% zT(%4lWl2FebR9hT4^v3C)iBefU|@ObM9lOb{xmU)h|m#B!cZ_y|GIfP9DfFQ+~eR~ z0W|IAGr%as_vBASL|PbZQ99vUwUdzOd-oIQHfP&t zyCm=R5{oCBmb!Zic(PJ$v9S}gc(1H*k(>`zGm(YyY0)J5x;rlv_bo?;gUuRruC%)p zX3iEZ*(QzeW0J}AUe6wy?_K><{El}^VO91yr$E~0h4r*jp>#pxS!U6prs!f}ZJuA1 zia@7p_WUNVTUKjM(_|4(z}Yb~x}p>EZ}S9_Z+D?r4mlf65XH=k9?{GK8Jq%dPTp>~ z1#9>yjT&R7(}z1c+><}0-Xt$|IqU_V=99{i6u35PUd{el@#b7Uc2;WY3l`r@&+Oq@ z`T*c|sdXbe(uS19iDq+uSF4q)@+VW+R(_1COa=dDT4g^f zN2`jEtq9(%fmaEWC(SIh0Fs)SG}jh?x(*a#<62~L2>b;#;MH}#)f$K3_1q0Qtt7@PBk5k6Aszv>1( zr?uc?rv{P60l{PZ`t*XYhSOl|1xHNuGiVu2EeiD_`vxcn zLK3vkSm*^pf&>y71PlBSv!U2h4Vg*kC6J8J7BNX;;dS+ zqpIRn0!bB%nygS@z{AJd>ugMgR9!zFy(Xz_{l2P^R!pnxxX^VTvQmkRv0&oPobY8i ziqU#5L$8e@U+Z|(nFql2gL<|CPe5NT7?fs!jBk0LiJpbsN!^X??L;voxH4r>d3`Gi ze1d(aK1aG4R$`WB*Pte??|aAX;HrB^gkiPCy;Y$zhyAJO!fOT3bYT3S@^{UH7VMef3YhjK5`3?RLLa+WU4OpMoowW3p3(*JLVy+-`02BQO_KK~pA{!pKD*Tc zA%!SzRPATaTpY{AfIzzKwYV2i8>;oQ!-Nurd=paI6XCB!frvChqaVNfsAEXYZlP@J zKtvHvj)dD=f?ir~xa!)U1%Mg&ecGM#M{#UpDSOL8e{nhNk4Tb5a*GYtu0`>-} zVEEfC``btG^VDQ{atF! zec7Kzrm4&R8s{#9cR=#pK~zPKjjXR}=Wh-aXJLSPc?u?)7=zyQZ_2!I^zE3Tn1sCY z!Q@ILvnDL}944e%E8p)cAk2otU1QH`GxW!n{HM4lHHC-%IWm{~$VvlAiL%i)*Nd%E zCEX1u!3g1p27l^VX{hh|x!H$my~p%gS-&=Qk}AZn{VgkO_<_k(6!wJy*RQWTnR;q)fLf5=dd@_ zB`{8~byp(Pb+uxCYGSbZkT{}Yl`3fvg)eVhrcqj=W^O=y^C#1BzHQ-wkDH3TjA{FF{e&~_^q|2 z7dA5~SPua0df~@Er}~|FS9b&;KqHD8!MEcboKK-U=JMH%FJbj zzK~-06aKS?OhObI-fa`r@bd|19kRKEU0B~*&2p#-i50VWVhQ~6gOV4W(*BuUE{C_I z?Eom{G(9q^!8;^Uw<&R#N)U5&axCU=bu=r@*66M4GJ9FbzR(IENKIX4B$CXXs9vkx zeoP=%N$E!$G9jA$6V%6|I%Z10(+V~q(mZNXadlX}*PI|LgQo<&$n}Rj*fR!^FYicV zBW!|8Htt^mqXJv78A|#XbL5g;B#g)qod8Vz)<)sNbw%+Oq{tL#Lec^gXUBAD%u$js zTpa6Wkm_$y^*cv$?g*?!z>)NxkK`x%9Zo394-GT#liv{TYjtqP>v(MG*E`PjX&?au zG2Pk}MPmXfJeH&P#!7uPRch!qf3qvCV9>Lw9Q>7A9`l1^tTxt$#&9r3j&LxE9l*iZ zte0wH`fzLRd#o5XD;P0n^ASp$4(8ex_eq7i(aKO_9{UFhDcCZ~4fET8=`8zeb$-Cb zfc}xs3Beuq$sOW!Bz~SC3L^Q{?vQC+vmDp>KUF2BA*WFsM|H}V!E_HVsmD`29VhDF z;}4~Te7O-rW-ViRhnZ)-W|7v?VF1>fC$}5zIu&_5r7o*jStG`~+|nUgL?munA-vuG zAgz7pC>`^@8?$^Xx@HQV@=~~1Qu-K==}cYxw7KWHX!#Hh;_{0dsP#q)0^Y8h<35Aa z->;V1Y0u3upVaBdjSP%@(}`qnCrP6d6K>RR8f`fJwE1?ZG>RQNe^(0X7-5z4;e)iU1P%4wo34@!V=i>a%LcNQyj5^#f zQ!11&Py7^0%2i}$e*tF#9#U9CPHeDJ^yYBoC;A#_BhD5S=U~D}aBEo3D8~^JO{%g( zEGCbgMuQ4lK9*7G;rm~0YJ!IlleLT$l4w}{axb=1zSHs0EWQ15P$$+-4Lajl^}v1( zU-zw0{w_rQ>soqqWA7YgcS-BG!9#;MDRoNfgCvT+X@UyUK5p#GRN&v<>|w=!>+9+^ zqx??j{}$BwGv;>~11iRPVVtkV8b67m{OnBkip_0d7$gHHXgyEXkrO+C!q41o-(w+l z)seP@v`d5<3=~KW6eO;jz80OH{XI7_2Ya3Hn;@~Fq1@1h@9fFfE1Yq)Si_XaUaZXD z87I`(YzZu*TFQWnfWe>vxE)8KaY1dVcv5<`%4rGdH}TPPLxW_08I`2Yo>ZjIJHb>t0>}rD5D&$p9Ma`$TXopE#70K_8|pQ z{=`UW5@z)xU%4IDxIc$+$i@`A*3j(!S_!%=m7Nj)mi--&5Yx`11CyXGoU&VsD*%4SBBHS(jY-Z1O@zrS{WdpBh`P#Dt4N0k>p{q+Eg==tU<=5Q zKqF?Uz(OPqg)cW|^~0(8P7WGF5F;dF-3AgUTQ&v|YfaKR|3>UpQKD9l0q1lzK<26y zUu|2wpo~4g?2jZ(5i2X%sk7WH)5FbeYus8K_YUN{;=T zKKBvHN6&N*O+BFCLRUY0$Ef2jo}$wfw(@?LLbcc2I$d>@=yh3@ewvlfl{J@Q_N;iE7-0v7qx}{hp3v z84qr>y*UPZQ5k)_vm~u|$3)Y1gO3XE;MMy5ed}D*DTn!% z$gTN?EDW&;2#L$U371TtlX#9_k+*8D2I;X-mNXyP-*a8JB8!0KT-H-K`zHWh_Yad# zv7}PFh@2k^@VJ9F)0>`LBYVPWcbB;vuM-1CvHpImTW4+sBfK( z8vUv|rRUe;RAOW=)i!^;gS)nf@vIzJI&dhUFDu^#!nl4tFxNM%Qr~~1uKiu|Ukz~T zb2fX-v9{@X3BPY4F$y(Up??R?M(uds&s2|&&!6>avXRl8*6?--MCGw|H5mQ z<6MX>D-vUb#I;s2&)bY3Ahf?N1;5>foR?lj{7}u54bEu#y*u}WlEBTBnezghnt3h6 zthsUcmf<5wo**m^zf6(j@<-nR|ixyhtAVFyHe2}?^_MMRAZXsK!;KK9B zn4Fm}P`430Ka1k#5^K7gNEC!jap|RxIxSTGQ9Q|A#B-cs0;$D7Q{`B;}GHZUFs=7 zze!>Q=@A}q^ShlxUWH5^_B81_kY$gsD@^e^95Y{Jps_`%&nB{QX z61J-DagYAqnl$anCpwmI`4lNGso&1Eud89G&AqRfr{SB5K~G?D6)FDhmm{PRe+0iH ztB5aJKf5z9My68R)6ncKPSkf4o^cD4T+Ye3r8CYi>+Gj7Xn!PI{1Tgl(U0Rj)Oo|8 z3^1_eYD21+th7xUGmYaAYA72=90*~qDXDR~aD#mD%{%Ue4 zyCb0RR6(ly33{9A)b4aX(V;_5vEwiRCID>t z(o%A*LsICcPMEFesKs2*35uWGTGhb3#c6N_K=0=D6X(KNa(whz1;245hZDrmUg2Zv z*HnkbI*kQu-S;Xu&28}rjXw*mx50thd6$u6;iD1t{|pqahhmvUJcmIQGs&GsymAB_ z^~7li5(?*6E*-3cPVQEUx}sZ59)mvrCXk{L`vF$8aXH55IN+_@f0M0OwWOb92)@~hKu*jhE^k~!mjB- z+5Mv&5@F5+?E|(3GJa(c9#eqQ`s~-?DZB#k#MF-e)PF25Z#^q#Z!((bJrk&?gx3+P z&^!vQEr%5UAP~vE;|wdnWbFK#o!>C6!ug*1VRQX@QZ9XSVP@-lg4CyVm?IUU@(ghf zc}J$IO-U$(@7V>oev%dCzz0RnJDd$vTxP!KfcX8#TgS7?D1$o{qtkkf@$~7MIT|EuoRpO%25(* zGa;CbC4C1z5B(Lmc&6|3g+uuI5Qz0Pb6?jmbp)^-sS@%RrryQoSE-_#P3w~-$Hj-9 z#su5fSzSrIUzxIR7>zH~LK4G7$Ay0yHonjzMeF?7b+}oocxr^{&o6TK;^gu46Nl_a z87%AKu=R0YuCAdfT%`UN@Qnxo>YViJT_ZJiRm2Cj%bjkC;71XtyJNEg!%9Q9x3qB0 z-BXTM2^fUZ7;fy7_h)j(&!NA z>icR9Ql?KXIbo;LRp_VG=;MP&U79+gW>8ZtpcKdN_)TA1=6&OPBL3wrU;3z}IF*C* zH>CXxPCMw_DHM+v&5|17nMafc4_{Z1ubBWdlh|bgX%pw*ge zK2wajSIArJk7sr1lgX6;zmLA3_kky!d4?s3rDG^>Rp>ovVWnB)e>Oj zH|++$D19bWBFpUrD)3s)s2d`Ro3%}aN5Ot$fVFLuIATFt>*Q2w;BGt`pqun>BJLj= zQT-cKO75;uy+RGE-Z6J#q`%~LP4oF}Fm4VA8Ttx@$aOi1-%O~d5IZUT^88gr=uidB z`0?dLsLce-_{`OLXeL2z{a4flnMl@DgdpXq@NDMTR>s3gvD(s{W&GkZKXC>;kd);0nbGW1P?(QW(H_<8H_+B9T!C zNF={1#CD;v3qp%c#dIb&UHZGK^ z#DU8?j|-EBtx=;T{&8(PiVX4y4J8`)QXADYdnOqd)k;~FMm4>L=740Aox%s0XG=at0KI(he4%V`cWM;U$2Vi zw-w?ybts(RArqqqw}o2i&-&PzcUsmouF-|sZI-%Blg?Nee!jlN?*vRVJ)-q(OY;gm z3g!?hRu}*DF=ajw(SWmGADE6lh<~@VU_{yCb{t0{xi}WujfXbcP5=(mq2G&AqO*wJ zr?D8MF^T3aCs|2}xon%=U#sBu3K`E3^~2}OSA;GLSwxJj)BM z@$F4#hYKO3^&97qN(O^+*UW-i4!IvOn=m!)2IuO%YM5OU&!zr>rPLzXVVQ&eDqYO; z^+iT`rCF@5%TIi5pZtZ9`q>|%N63@;mDUXJ* z;AM4h5Cyab0-s*TzDun4b8N;fumOrPm}jfV`P>l4SV1U4$7P^Dq}LGekSIqe)?cV+ z3;kLv)6_?`AxJrV8o0L%w(-6%G1P2m7c^u#i&tsI_D7^e=U-orNUE+Gt{P1_(rz8S|@0MKQoECs;OSM6C~tY#IBMqElv2IaWD#+<4A#3KaO zD@h_YfH`3H&+3% z3gH!M==@~}-$3&S6qvC2y1tlcObf7#MTg?-Yj4&K!&Al&gsk|oZaH6dTn74xE$}w4 zWBw-97x$5`_?XC`h?4}u3aDMHhll;s6P>vm092O=I;8QLyScUcD}A)NX_mp~^pDk_ zqt2-4Q_3!k=^Mtg#&M5}Iz0m8&NMSFjbd6`QVK}?LT47GWCgJ?627K;N@I8i6cbx= zyd*Jw3S>&67xOt)tcg4UT&_?me*-G6>PGSnN9KXfK0DXcjkr+`n)=0o^neIZ%B{4o zB79QE$C)Gtn{1DV(>0?OY`&|G_~ z*{=y?qbm{SXpe}SsMF~CuR$dLa2fKj0n$rL)B!HU-}^FW>=k}|QFv=3+cS8^md0Sc ziz1nM84a+s!P9B;aaY+=l$`>oiu5pU9uA`gmRW$ z55|Wm5rbo&`JH^X=0YvyzwAPl@VVfnN~KxS6d^o=fMIe>`cioQuox~}a#E&N3GDoW zUau(Ki`kz-sNa|S+L{pS_aAZoSY_rAu;8u^v@_#c(<8;2Ceb6K;`XVMQvG?3RY)8O z1OIoJhgXHhW#6$p&?t2)2z9jb=lh%1N zO$l-(yoR;tFZE4fnkZ!+sv1IN??KrVZegtsu`v@ovdH=gpX7nX7+~T6wo&V#W+d1y z387#l6cK!3L^g6c-1f3Onm)(3h-X$#k1F$vDU_;(vIQ(+;dDWaj*nqgf-vIXAI#^- z{99#FXClOA7m9@LnqAmuLS?Z*1mFqFg)L-pBNuansPK%O&)*AC_?&>$Yns>3VT+A)43F`WE@S9_Kt0tztq752|883 z)eK-Iu(w*8Dk{WM4s|LjY=5N8lq9n0{Cbmhk4vhgSItDz4|{3{8f!idt?A}fEoIXF zFZmOkIXuFh*fOre{kvOQXsxQsCAhq|`%82X2jsa_1!h{&x@yM?uB`4dg5{s8^3?(O zBB#u>ivrD0FH)ye)25#l8}5~N3GqL(L$!`zmuptwQaI5^Insigg&} z8d?9-gmisAetgxN&g~Tzi1Rdo@93(Z^{W zAJ(?mO+MagK!B746EH|%jkz@73yH(8oyz>wdbMhB<>YlkAYd_zW_1~9VU@t%{M4&N zFP=WA0Rhr+ZE|dOQ3NDIbp;R$Np0X)6q5{-nFZdePGTZhwZWCvkUmJf7jSCG5_-Sr zq6nZob7p_Q+c^Ra2rg=d3^s#)woq*M2C3r&BdD|7Lq#KEBN^VmDAw&XMImCx?f8Et zgnts}&(2}8V@Wb3{L(I9)sC`81u?*K@g?4z9R$D!)JfcV&qXfM#iCFu$(-DXb(f!a z{k|-pkdQN}%#WW1JZp7#&@ZZO_Mh#{TdLsrtR;Sv zsZqc>PGyMddo3v-jxe`n_0y>48hvgql8{*rl-feQVcpR2G}1B&WFa^n8c8tIN7y}d z9;gPfF5cF#*}bO=+?C@QXUK4g)8@3~X|`L^wAr0tZmtP*rH64|5_HLhxiY{xt(ZUW zO9hu}Jd(`dQbEe^v4`?k#S0l;RfieKY=zpx<>$@fY-zdlE1_c0l{AZ8=t~U5qM6i_ zG(+{(k%S>2lfS;CbB?rA<%Ay2&GKFO4QNRturT7yBygX{l49c3iJK1~H8&KjE?V4d zsYb9u`_g9Nx})xo_4=K!RL5N56Xw89V><5P?w}jORF^exl2iiy{ zODl8f#taq-+VaTNLCzZmO^ng!U0$6+?@RoT!yB@+W-%jt5N6vqPjk<52h?G7zq$fW z&aJJL3}0;*qL}(WtY)m4#X{>`JSXe3J&yDeEE}KtF!Odp=TKH`-{bIm42{_b7-98$ zLJqLDx?z;AyasLJt~NVM8Vi7URWId_u(t1+P?IVGqm-&Ts(2a9Nno0-^$zpe-i{M# zZYC1QBgrOQXo|@dU9;qI)!D-CP&3N_;V+a37wiV)+T%rA;(?EqQBhM(KL|!I z?pY+}2$p9#`kjAML_JfsM5P&|Tcw?ilqs*X67p1$y`i&fAvCz(1&;Q$H&ymRaG9=f znfLu=8}ifX7)Ln&6j;Te<&gANEP0slfw{@@^;u8jA;-i?xrt?*6%-c{1Ob&^e?XO} zz}K0MT0{+ch+GuUQQ^C&G;Lrc)$Yrxo=D14BF|r5`ryk$N|R_PRc|J zv9UwhDq6q2e3{+)Rk;%T@fT+SNo1_D2Lg4}NeM;zPt!c46QG6?5jeSg1=%;PnebA~ zrXzF$X!TJfe1j>7a3~=hhwjnAq=@+Yc3vY)Nt}F5i5p~F9?(l6bG6m$JG2d&R3I1L zTLS9%b#hX@F)J+uHO#_jhcD)cHHv6CNg#NKpkImRrd~tn4VW-&E_I+55)W9ny(F%en0pFgA< zhM@ybyF!8iO8Y5ah1Z}1bQuB&>A3HY{VUPEds;mp*45qcrqjiJ3 zc#SGtiYWu!m)NXs5={*IF(>bC&AOry{b~(S$Q(6#P3XKJl4;c)$*`nB))kY9Hhq$= zjF#cwiX!Vh9IdVlm!V%I7t<4Z$_R?Adt;z>SgJw{yYBa1Y8T8RHy7o2E|yiEQRw%) z0sPrPlv)T(;Q>@LSH&~>#rlkyL6lgbu+?I4w8mql(VMDaCqa>l82@9T(2<<1BNPyR zi^f6-%~x0%2tWM47(KItsJ+D493p|JB)P;gyac-Vzl{=bVNO`WBw`yG`ffvGYNvoa zh!OI>VGB!2;@D8KBol=;nYvyQF69%W(44%%nqAP%9ZIr@IEW0U1vn8hST4hohafSG z&8eIu93dB|#)_fclNl0PxL7@#Kt}Y@d_q^Nb<@<-Bw!A zs#+R~W}@&U^pTMu>^PBPO3ABKxw4N0niZJwI^qlAf=Q@sJU_Gw?nK8hz$SrT|6v%g z=;hJ$$!mAqqrncWarQg2B`7dSW14_KRJ_)%g||r~t$em_C-CZE_pqL*WbkrP)XQ0q z7>wDWW4c7hSZkeR#*Q7@JEzUq^+-|qWt?*0>M$vnS2|tZub4O&#vWAwh4Z87XIA-p z?7;r4*%9Qf89C7R2%r;X0a+oj*DjCmUc#C_Z2BPiv;C3&Ih$20>?-FL${mDlg^ z`h2Xr25*CMR?slN7R@k-uHw*WNF=TBZ70p+Zd87$bw*M4m%(8s1cntSY}_Z_Ue8Kv z%!-S+`xneq+N~3D8^E$2zsDc84y+dEI1q|+)N-8F!~XRV>rOZhV39XwHcw?99mjCA zPA=(Y3n>HL^!OX9YYE~s7>q51X0Cda&dno~9R>hVGN6+!*Z8M@w94kz0y2v$oBXJ! zc$topcK_-h8R-q+3!gTh&@O;henoFA^&i@H>+rX?b(C=YeIS7HvwU+1`1i0p{Q3O( zpTLYHDYLhm4Fu#Y3he)ruV{(oY1mlrNC$^S;~g}6na z{_Ai{a+6T}*U`1%zWkp?UDk_xTk2~hnQ@q#70_I_!4pUG-mb>^UY$4h6tVrA1{8lK z40SyMvd+EavI@&o*rDNv@Nn=hApfA?z)C8LXnqBjH2AHF(_2n8lY8+WYk+LG*&1C* zG7(d{^Y)VA{PJX*CnQI`X|~DuB<>nzVcRFC=i_>@raz(Sw240~m#Gco!nqYz`eNB7 z01VpHpSK$>g0(?bhI6@zeS$jV3c&r!oCqt;aBc!MM$)ot6V6t2t*+@D8sE(~nP#Eq z;Z3isIorYAUV5+NeNflwhbwRK zj(Aai3hztnHBc;ghb{=u1vYsB)0o5yiPbXIo7OXvd&us1Xe={zHy{Erl*tG60B9e7 zxM{k2iVI!#HMXkGsCT^#ed8CD`&YY4$ z*9Z(9GavMl;i3&sM0+jS;ZR3}1YSd)S}xl`?=Xe5mMq8aNY=B5%H#%4H(@L#@3-OC zLh?+J!m>dB7EH#{feW5MWJyk?7Egqt2EiwwgwhiZ!ulMSyD}ZSs$*QDfMeg)J?nZm z-m2nT~#Xg}T*mK1$w~5V$;s2YqAsv2TM)O(j7I$vp)& zn=dGYuoDY?k_WzvQz)IWfd?C^~{(`ADdx*5;=7+J zJ=r5J$0~tkw4(;Av}T3yzON;WC3S%|)10pRuRr|MM7VKb58xojUv%vlv#u|@T3D%v5e+@e)2G0H5UXCqp>LJ~bvJdjc5CMyJ3WY6;`Xxapj3Da zbx5l}WRxfh?TOIif6--yR<0ZFLvRm6?q@Nkh{FjI(n3(m^z1;?e`7HYZ^TJ32;;I~ z>Z21Rgotxeo<9;@2CQR3+eq}-18_g|(S@Vmp`RZ8)}^w*ua(FGBPJkB>Jrw%$pa}Y zNfc*un7>(plD5paCe1Ldog~uZdhAxL;N9F-mQ4R3B;s(bW?fF zY>Rl5@icT_bi1NXhZoG9m(wH!_A5z$C!ubya+l9q8F<93C|p* z+&-Udwq4SlD!S02V^ORM@2`y^MzN($bt<;x1xu zM+&na$@mjDa=uOn7)klvr2a6EaOu${I6{fc$;8KcYoyt z7)t*{yz=pfAOVcxzJ*F5`8gNwMCQeZ9~|&?oZr`!xP}~dNZhYww7(qTpiWj5%7s$Q ztd@-AfjqgWOm|+F8UCXwIm5G16yYWW$=brdsH1r-rKI~LFj9v-IJ8o~O`a7GC4(Fn z2YN-5Bz=P3^CZ`Wvu&+-H^ArlE@dc(d%*63dtk@(XAX*uSWAMS2_j=P9U<5WHo!*N z?+?$}F1!?&IClxCB zbds9`@V4}vmuR|tx}z(*8+D?hM2dkp>SvAl9^aX}Yutwy2vOPWv@tAbG;K}`~Z(&sU23UN_McS|eTwesOcU%Q^Td(ETCSx+S1&Mg&cH_+DFR#ybw z$Af2ok7IF~QgNcb(v;}4uC@=c7W&O}n*6rqjT0rm;>c9^ z=4NNWcEFhcAWC?K>Re&Ko-VRa936*)f6MGVV$VVl-rY_+71B+mZa=m!&7TT&^SvDo z=sOVmL~TDZrwnBIJTlNC49wHTEYD5aEz@N@QElnR0s@y+CxH@^b~&MDa!ZNF@!x_#B9?mK&pa9 zU1W%<_WIu0xg%?O;K(g;qVh24caPtYev+ur=4io+K9bnZ&@@a%{n)2JO|{Esb#!v&t<{h7*<%FtWfHvj8RtVWx|E43WI> zN660)i6KY2jOs3JpWo;Av|}q8ecTaJ#UV2e)tvLget)X{|M89jtCOm%T}Ihl*^(3* zR=<*TYIsNZBW%&JD23~4mZS~-)F6+NX~YtKae$_37EQZ3vC9fmt$wtZ+iUCUdq!)& zjxC)ckI2=vk1rvSHO-f*?u*#?fvU1?q!<`aJon3`D;9e2?0TW#9`De zQExa=7-w*A(T0!0`_2nLXHZs^kEpB_MIaZxtFhbdU>H#U1OA7onGkNN*-2SVDJ`4ZDjY;oESB1%WuSekkBRIi)!e4#rY+*-f zH6+Md&k0CwphP4uTeQ8tI#YzAX<3xk5AYoU1JR?AMqMm?MiJbfkF{$A?Q%e=-r=w~ zp}9x$@$FXdovIeCs4@Qbm~iVk>gcQA3>sUKLOM+Z+{{J>buvq#!i!3zvKxEV2<6U_7j!*MX{(>j`%*Cjzu@UdnDf zM?p!4%w2jgRX4yjNy)6k5MgB_KGp6-M{y5Alg!qgsyx}(l za2W&QHqvGnl=A&oSVWkU>8s)DCghjJt-pd6d$jeetqFv1L8pcD?M2)yQEDVZVZpd0=q6Cn3%cL4l_%#*Q3?EL8@V`+>rF5$)v ze}d)PPTUc6_MK$}=c{S2baP#=RlucF20)sn36ZChzsTl%Db47vY4w5L<|4k#6{8EH zp&wBjIhb5+b4rWEE;m4sI2p%jWrfPVm`3US17t|kxiL*pm73|m9YvN!bP;7+?aO>v zQ{)0vsNQL@5OtzNtu)diWmRATIS`D5Uz2&iv_-H{V0vX0>#Y&U*>>1UC(OzhD8_mMd&aD;gGX< z&oh%T?k<55<|1u_Jk+63HAOHv*rhOzNWPuavxN}Q>BUAEkjB1O%68eFLCGzA- z*Rs6laXIpQNYtEqA=4;miGUDZ^%QY5-Mshta3d(2Y zfsNV4&m-Pgomto?;a8~g8d)I%Rl9b6@UCrgxpEbQtpWYnn;}p9G~@Cu8>pzv~NxA6eCKl2({+wvJuBp{4iW};SAjD%Gkn=FG!&N;$l=RKFUaK1lU zoRncitlTwg1mxU{P*vy!SAYx^zWE+$;xwu^u0!|Oq4VS*f*FN(_2&)?6Z2sT9iyIW}Rbw1sXinV6s zmGIO8$NVn_ z3rU6DdZ$Idw?j_mtYGCA*Sos3{yXWtXA72(Yd>-vpVS*RA=$qL;)9W&$9C%+pP<$> zpuS$CZTzH`Kch~?XR1k0ik#^0k(38}ciDm-{xXR0yKjBS-{!-s3Z{b3b1V4VzlLy6 zl*1jyyUdkqI0&Y_jLTqrqzhh7v0+4+ zG>j@$QjBS-@`QysbcU$Ne^$!>qzYfTrtiQ4hcO<~*jJt6m@K0&^k9^!QE_Q9GdU z3~{`{+Q1K9x;dn_LgR~n?y~38!z!n$PYr_%#}10%1sc8^;{E!scPB6}ck7l}MT#v; ziKavdLz0diw<16-P0$oScd*}Nye`36TJkc)3Y~Ik_&subgzG81IaY`JU2xF3niqr| z>H4H)E+Lc7BCux2v;OLKf0Cc~UQ&u$wCd@co*fF1CY@2;U}vxVdusf#!nW%?dmNjG zFlCDR8SEToW0&4j;#Ae?MHDH=fhATCPdB0Ng1ZdTL9RB zgXs9(Wm}d+3Z90%z%PrcVmJMe#d91#kVnb}ZC-Nale2&!luh>MT>KZo)|&zBbqhST zpZr0WL{vpblwdS&^c!wzXIz3M5{#^cP`GtZU4RX^?-*BdsY~8!EfK45N*YW6CX=i- z4SwZuc~iSp`jnPaIkyT2zNKZbMkR5;JY7824`tcHfma%qM@LW5{xVLmMKU_~Q>qb( z`Ny<|asNTi@BWpE>2NV(CrC1+yYV0Ye4NB1bz0L5zC439Fns4`tZ2cq%vx}E>&EG@ z%K_2Vi$wUur1R@B(Urt!!cykkH^)nc z+0YgQu>t0SH)-0qdyAFsf;-Nyz4pGhs{q#Urlt#ynWyQhriL|+iR*A(f5}r*J0|Ix zCVAh={kVFWXx4BjFYClrgsXYyVC4XJ^)hGA*m(yj_4|w6JY4-aYpDf)IfDj5mt^8N z|F<04JkyW>ZxjFt`t8my@^x^KH!B;~j3$;P8(#VZV-FN3u}5f&Zz~@h9P5&B7YG84 zc;WktF}=SIbhCiLaDeEox!6JWed-~*p2UVh~;ma%OnuAsv?=+_J6G^D~qEZH>AsD=1I|TRfyj(k&8jRh5@d9F!AJi+|Z#T?ALuuHg6EG3>Q#e$)z1k{X z&}oR+sx~2{)h1YMzhFN)5jXULYov)CMQ}RG{{ldc+R*ds}hUc>1pupm}*ydJI zq4Y>V*a>0f>lcvslPTaAqj6Ws{qm)DFo(p4R)8SfO#cl5ANhiAyaZq2&ul`U+~s;I zG~tu!;`B=eDw~l$wTN!J5{u2E^Bcv*P#XCZ^HXR$eccf$t)cw1MW%o_$D1E*oEm`} zDS^|!exUZg1gg&~izZ7y1%4@{|1J65g0sQutN)cB$B^8O)B=TBl>djjQrxyu$brMUP8y1E}Q3N*EBfQ)U--CLx*lfV{<~eR+N!r>_u-@ z>EX0ge7JAJkj2EKZ_DSaCA9yreX2}ixuPnDx?tY9FTvIalZgGLQ3dQNDze|h6h3E9 zhI!r?Wq?U2!L%2&)tpWg*7d1wR-T!cVPO$z7DOuEE{vxPJ&bx*vQYe!p>-==^;?#< zqhJHH|q+ z37&;b46K|k1o;E_CqRuv`Jw_#)cRdP2=7X}%QDQBYEPbNTx@GE9nuQNTS$#ae6MVx z(kH2EL!`{%EM!^ptwp`>`0&iAtu*hOe$2TDufQ$ zhb_WS>zp?n%Z+ajE?q0F%-knn2h+nJ{tKyFdPGk^jS3nR21q;du9<^Ky3iRa6Xl(Acz zaND*yZQHhObK07=er?;fZQFKF8`HMU+t2?^-rU^eq-s}H&WAcVA9k(1YAq*9`ZGOS zkk^j8#yoa5kgmEtz(Ffad9Z5O6SZYN=P5okwY=okf|H7KDJOBUq>;N-CFe8~urN&! zp^aFjJTkNq@L-sz>BE!Ip)CnPO`89s%<@$*8cW;=4`7G?r(dhgpX)V-xN$tsrAK2S z@mhg@?NFXV*xL0%a50c$;u-4CKnM)wJo40-LU7FX6k-Bc&j}d~U)1euM}}g_w<=H3 z56QGDPo|WYg>q(isZ7!;x4)L3TCM%|^-3(t7sH-(kBit4#QREtS-acdeN+iE*CI|l zw{sZl614u+AQ^4|l^Hk2oTgEbefYW^hR;^Op~qAYb(DN+vyg`s>(ceIlHaz3va->DZ4LQ5 zM6OUa`E#J&u<3kK!?xMGNB{T6yj?E+#k}2URNp*+9$`JC6;GC&?0(DUT})Tle2s00 zvZ}Tf^Siov9<#OB^p95Pk-|_uQYZKZj3h@Wj&BvxLRd$jKjhq-KLi20Ucuku7HDz= zAdsfG7j_^pOKl~Pu@7b4UJuv$?nRY2=R|@tv-g({z}4UF)5kkva&i#RHhq3Vfn|<4 zrFlxgh6d<6vk`cx=Lf&Go`<8BbN&{|wCm-=%@ig}pe;yH?fP)}0 zc@PNbZkfG3f(=(e96xN!Ra~waVV^Kn0`L;}2D#~qJEH5k#UZSsSc_omE|krd5{ZRI z4iIB-BfR^%H&Dk^1_dNg+FpB9D#oWCYzGQ}K`q?rbHn4f=PuRbRGL<&uf31rr<5{4 z!6b)<1;hc=;SAwtS$O75&jqTlmT8jABWOqHz|$6tsSa~?gd*q})g&69Os&~yVh*pT zi&R|sGO*>3irFy-v(k6RK9B|KQ#@$rgurQEIMZNwJ;i>;7V3J?Y8GJ&w4zgfN~Q>K zS&7|uNUQ|vg}_s`)!~9Yv-k6W!@ILdwO?8^O^hm3czkD5=(BX$y=Uk*CTrT*TG!yV z!$&{wj^q<6sP*3DfeojB?WnZ-J4_d}Rf#a(eS>f&%=1SQ?o0hiv9_n7rgJ0;PdTj8 znyqoO*qYw|%ucKpC=_hp1wNGd7(iJ1#v&WkFdp%=x>O{*(;x`qy(~`_@!8#3pp<|J>EK8L&F!j2Ypc;=pIh9P zjFpH`LaleyQ+xT4PW3@_VwVbFT*P+|w9Y96HuT5X8*nZKbWNwjO^1$GDmEx!PO^JsWrD-LmJ zck%ZeK`nhN4)vQkM+Sx+F)b#59w<*&Gr%c5#{NlAx(YO`NMA1g7AA;|BXd+aG!avO zg6N<`#QnS=`qgpPBy(#jJu-&~9_7~M38rshFi3`!dl{eFAMB=bPBX`O@5=}k zjQ9>3Mq_NaDc@4WAaD*@id`~Il2vdFE$$dCzYpr_oo>nksWBCRk1d0cJ4T9G)Ith@2p)?9}Ljp2U@euPnFllwpWyp8WP{nMTNNtcSu_+xi2W%&XW==G7AVv`!* z1$M7?u+Wjy-l~ydZ5}!3Ve+Yo^M8NF-_k!DVvsVC3N*#~ztD;Rjsd z%(oP4D1@$DjVFM^ z;lPe5yow19`aNj^|L?#P|4`U;P4ymnbo{b@oO^Q^dU7$>;LR@twgbH+ggVJCf#SjZ zE-y@gG^FMrz9c{JSu1Iw_b^)O)-)Bpv`O!*{VB7Ee^_=UGaAUgf7~gwhW|&8zMLou z_h|Ts^`mVHqzCYvV)z^^r6g;Tttka%u>)Nn{?!Gaehc~g{3LSobD0)Y`I6)5IfNhi zfOIM8k<-7-W++2F!MrD~BzwQxVNAsA4PjvbG<~1+0(!^&uXKm;h}oC~cN6s;3lB+v z9P?%80sZgdlPVDZwS@vDPG8hR4XfNT-D8`SA?id!=t1;`l^6vDDw<-k8jX#2dWo9~ zv~u4|4^YLTzw8Oqf}zZRz^Pl^?&0io=3E-V>%5u!QC1^NES@CRnvsVf>U5hE41MGP zY;U%p2hCM#>z9Gfa3O*NFiFPX{{J$GK6NV^h2z=cMn!g)p7xhOoz&0d`PNoH+qtm= z;YSxcQVg3dCU2AaiQoKz64Xv01Jb;N0sQzzc}=9h5+?YERO}@{q;P~1+)sd11W?2_ zzZ6$TM>ow=L>zz0KL@IF`H-CGth>Yj0Yb@rKVBlmjtv9%nnj0Ud(Da8!ZH}Wh-V$! z4K1|3$bQsB35&!@$|~l^9f8;PZ=BUgeZ$%-~1s9K<>T-remA;X4(2A1yeotXblzQ4%G_Ozg}m{iW89r zA|MR~!8E`l90(G1041y{-shTm>a5wXY42x7tdfX4m#~H+dcr2$Giso0qZXG=h8FP? zDdDZgvW*6FQvly+`)fh(0?drDcLXe_nW5l;b@HUoPj0{V)%#7vSlbbaT7A5`U31gk z#&0|_AX=SJfV-P?qT^l5>BOwi|3v#9FS=Y>L9pS=#MoAFrHWF%ExA@j4R*Mz-GeEW zGG6Ksn~6QTc!nzQme$EChNhzddG)2=(#!z#;Y^{U*1+$aEQmLrV1rY;h)^dLum8`XfpQ2Wr z;cwG(VJo8|B0;=F1W7@>MFU$1gZ@?Yc#c-K;g7gVj6a%)zCbh^p#lpgi-zy_M)($7 zeoL;lKHzREHMT5G0PrQ8a}ivU5oZowzz$nhXIlqx>b$~4dUM#W2)6VqYx@x$(<(_I zAb9NO6J>e7K@sq+U64{n#%#Vr^}r{zYcj~m!);oGx@Ah+xsvT04Al-^$Lr{$H~h^~ zX|K9pZ>~U+#WYpHG(Og@DUa)YcZG#_{Cg|QWQl|W)^`a3xYAeQ>EXq|N0t-%7FC~e z=cW`Zp9HF#; z(s}68jYDMsOja$sh12hIx(l9L+OV<4#ULiDHFq4AWlfBz<3QHa8oSL*#{@`o2hiho zyox=HJPg$5zM~!{X|#3}baZUz`R#}J2BKs$9~^_qV}v0fARBCK=lP#1`CAq$wuXA< zW2hvn;oNUbmJB^9dpc=4U`W#~>NbnJhaClQx@B+x?0&b>CV>DU-JHJsz2dfB+Pthc z6J0zgQ&zt~7m=X50-G$qZp-0bB_DuTE^b!w`tDX3qw%UiIVFwu`|{?F+Dp69r5lrhB^NmZC7j6A0NPk#x-$a&#?d#!AxCm$Y!!&wp4_`kWVCxLm z4cvQ}_iK35F31%fvKY7S8(Nu_#5Z`(R9iZA7_D+@KZUx=od|?Vp=e;u$OUi_O}@wg z0Q_cRAx~&u;OZKlziEC*XsSWb6;R*u7#C(z@tI+|9?>vAtYe)gv|EQ>W3mF-G$Gi< zdOx@Bkfio+bSCxg55p_P^i5#`&#HnX?5CfCE_6wWDZ?2J?xd|1=*WfJX63NQUE;&4F{?YjbN za=N(H1>aJWDKTaeJ9g6ILNo1`U>H)rD3Rz%igCOi8AtE!IA{7@MIH|byTv?axbtrv zz+s})9VpK{r2t#y9q79pPT;_c5yjL?r+wny>;>SfRLpd4Pw=V`gO@2v48RY-@66ML zK=U$i+?^?8q(w~RHpVpeu^-AfZzSKKZp&sPk_Jbgbh@x5pIJ9Z_{H1n!fkDsdUsdV z-F7HY*9+sVqUXk$DiHymD)j5&RkTXHa`13-1dmsjwXRU0mk<$qA*{=>4TPLfgL|xw zCD0j9V!+Z)%J^=|;vMC*HVPb&KU#7V-lGUuljnu&;KJ1mKZ(qFKFO`SZT)>98NO5|=7(*99 z#6Z$mwfuZeiSQpWWdjJXOyPO=slGC7DoHH0$J>zl_@lzqyJZBG6}^$BCPvp#6c0^V%E`#w9z4XXu?xd zT*?*Il$K`1B*zSM7z}9*oR!5EwzA|#OQmL56&OQzEM_wq9qkc-eyP2K%nvmv)(+fW zR}{i_dUHtj3r;4z4{!M5dav>RXnJNozKOh4v96BL7A?%LdD_+?CWy|{HyVcZ1u1-= zqL#Zmce-agCzX)iEq1iYyGSOgD||u6l(CD{duzF*-TvsS^4pm5kH91$9ESbX<;Z8a zs2V;D#L~okMbH>vn#}T&C5$7HW5bg2J_+!TLtfcgmlQ~ffrb=ETLEoxYLKh=SX38y zW%EPz3Z$86R#iSqHZA^r{MYygA5~h{-I4$&D2TQD_v_vLqIYN7Tc-{4k-wI>Z8{tOjJR#zns~tHV_M}yZkin9+bO)O|CS*&50~I4>>$2n zs0}989kdSXm+Q*!yTMG&Y<*{rk~9qpV}-4+#N1~oY8cp9t*4Y1ZP z)OTxN-vhk!B8`=HAyC&L$+e#sJS8FmgRNm;uqD>gLvo`tzz_AkQ2|4!ahQ%S5H?mDG75QFNlOHfy7Ak6`r>*B6yJXC7Kqhl+!2iV?sqhUL2?N9Xf0s82KQ^R*T36LM)CL&qg-@x2DznMbnn$5#0bxp6GO}_!@|+ zz-D`%DGP3B|8H<&v!dQmLi~x&q^1)UD-oJ;2q>~PcLTSm#n#=L9~9l^I%wk-HKGkE ztv29Oby#%StrDa_?$YSALJ*`_^J7LQ4h^>d6)w)R`uUQgI%dm%w@hSL&bI?0Du9^l zIq$?LsD>avQLXSA)OklFKv(PgouBLK=gE|bIWMKr{tkC!bN@t?jR4hnoFN~Y7YUeY z#{Q2%FdDF|QFP4Fe9^pzXLVAsLFx?yxU#cuY@h84vHKfhF1R;`?<4_A8iKtDWQ z6p9&p^?WoLHe~G_pojkIumYKB*(PtifOM@$_|cK|XR=Sp_PV+;*Vkq8Y zn~|G2WueRGCfv_>ID^EaIb9WU(<4m(vrEL9^>}&;@SfXV{N8)&fy-fF5V*K=y}KHu zx5vEZ-@ChNYlXh-B5t9b*R?qZ+#db#PpTw%WfEnKz~`rNt!fZx;!11xu;nu>fNAb^p7)LNDM=>C@8nPx-E9W|R`y>_NyNq> zlJWdNBGb9VSewuvAV;o$j7mE`eY6Fw9I5=P@63QS~~{*qQ}OdYQ1g^S5kO)3=u6wZAjtUiaTb{Fl&{Z3AJ9c z%Vf6kExLN$e;T;nz}kcROVxKP8=RZLw%Nb7T&}TIt#{Y*xWVIOru~yEOSh10`u@1j z4qax1S8~W?vUsPyv}(g9Tzq#9x68G&ZmZU5fFo@N;^8~k4hE9}Mhozsy*FxA`hX5L z)U|M&F46m&f{r4j+{f?zd#FM@3cd-#1@eafNHaBsi6?ARw)GSW62U+J6RD4sJ}PK> z2HQQ2WR-QtI1f2$k9stJeHNamMkN=3Y~3*1d9v2GTj3&hv%8jNtvqROw%y{uUy+B= zADx@Vcx{JDZHVmw2#b=}XhiJmd)1!MI0{}hC^+}(tamX}uGLE^kE%5ftJeUDl>!sj9yu?cDB*IsRl&+Qk) zQw=6L_?$ez3KEO2gQ7j$pc#?78p5*^Z;9{?#?>%4f_iEc zo1F|DPo*D);f)(}Ps8?76)Zh`F}EQn8LvG0taYPN^c!GwG1`KiwTOE~TY-*5yJ*dB zyX_r9J| zSlr#{+suRGvTi9L9ssP0RUr^VAlw>-KJ)neehnvvB*R{^Prf>*{g9hFcC=|SKr-?Gl^3&X12Mlfg$VvokYRK*Bq8;%k-wQA&-~UPprnmY4 zIkZ695i92piO?}bIMS26*QMB5k$zzPX6rr=uF98xKodxFy1nTs*T)zL)L5%a!K8Tu zjOFTLNkqR}ZEvaDB2bn3Dg2#wtTWCATE`Rj*Q~%Z1^Ktv7mjt=L21IkZjaDgJ&mr{ox{cP!F?=OgU;8^kZWvov$H@;oVTXng$n1HW>rd4RU{@3V zUyr;lT!RLZ{*@C#%cfRLCM0zr&;^m-$WcCm&}bZ(rrMmHzfDogfnj_2x*BoWHS0ar`Z)po(~z{U(1lV9 z=swTW1{p#%0a_R2sepj3fVbP-SyC zIcG#AItEP|?O9-FFvk3?hIx9S?`_PVrS?7Ud?%l!*4%w`QRBpf!_ii`88ei9NR4%4 z-Ir512{T#uaNKYf7%%n^`6z_rr>l-c8hOy*#LbZ=6MfQT1r%4gF##J`$eY(JGBwtsWhnnz62P)Ig2A-&4{)s6S1 zKNO$VVT^Ieix1IgL3y0;#-Z<@jKInOe^LB2|(6P(HpO zyyXoeUlWKTStnr_?$!)=RlTpNMKuXm6TnwTiJY`ZA@7B?TuZ7n=lh{}|Da=XD2?4~ zs(^bs6cc{ zLkbHCE{4Bu+@+&R%|2(AOfZy~Mkl)^$_%ua9?!*_L$*;EblbpRp`&|NcsqEzoU#FC z`MPk%NzFC)-F=GY-_2NLu3zUi=bDB8B)?0^Y`%akJg{s4Eu$Z=8^EJTMGYRnE{sBD z0*a7{L7qP$S(%RFHIdKQTIPx|Q0PNG+55d-Tm*Ix2mf{SY^{m6J{0L8ZYx)&Y(fGw zE2|^p+vI#w8G4}r;vgwO&|P~S5i6N>Gtt?0XfY8^e&sNy+yGc=0E8P&k-KALEyR3@ zF0oMIp%LKNbsvTp0~XfRj6rtWulQ(!Ay=nbq5{MrE0~1ZVVB!YQ@9gt~j09aS+y! zA-s@Kt6Uoyu418EW#7~$*ZTJ#TfC#KTFy99i|;@# zspwAwhS)vpZ%|!0!*4g63lM10-LKNZ)w9oBw03?FHPlrV4-n%qBg7Vy=|vqw#!&i- z6jT6sHbowV)oc7$#&mZKortm32B8hD4p@CZNu8rclf?VJ9ZY~0#MxlscN@SY^4ZbAXlc~WNHuyaqiei#Nh-%Mu3d{_ zz9CS192GMlTqwbOq=KRQApH9Re3D4N5tDWn((_uVbT?dQr~8fSrY4=Ye_@Gf`T*Me zMVl3s4|lbEAoC!my!P{ui12z(Jt!ElB_ z*ko?PQ1I9I{0B5O74Q%Wy4lr|Lvx~vzgxmoA%N%ixB9=O!8Z8^$ZqetF9*N#{K`j2 z(B-WYM98!SX~^k7eiHgnd<7y@M1_R5L9!gTInz`m9NV{3Z+v-NX6^QG$@? zmf!WMrEbJecTF3sGH9_BVr6Pc4n1PU1qC=ml#1T$f@%q+dSJRqvf9Mufba_?I*)aY z)k8}{qtsITP`#X|l$wXfWo}*D$vk z{uM^!|3B-~LzP$D@D?2Cj{79r3b)wW5IlmwuP@@^cnz+~H+lehK^q-XqbTmw)8VmT zktkX6(}YghwF&-j3+rYDwu_%`9gzsC(>3dMfF(B&3cytndzoE&#T|A@8t4{7vSKZ) zmBB6+hJN%ZuthRh70J0^Iy*n|AgDnDe0ctlqo6Yvu z4Yer%*o!uUCnf{^0&_}=Q|cJeA>x7>(jlt;jcwmfKeQr*1}X`WkUOmeN5-sEb}&Lv zAumzljpLO@0Y|SVJ;m5SvLO5qACM16#0Skqj=v}(A*hV(F6$?nk3L!y$q5lhdyp56 z)EM&Dg49a5ZXdh|!zIrX$U_2G6;bC!*d)0WunL|Qv$Vuc3z382RNRv9r}oXBSWKx! zAm{Nq*>#}ku*OyK7EE{uDjN=RgD~bLEPjfk=Fduwq~=dsC|7pI6$WgM?mq@ogi$S` zo_hut7qh?)l9V2ot^@_yUF>ZKg{^68R_)qFsH)qqIwJy&;ok?6x~7gAe^f05WNIoYXZ@N zq^pck>IE_|nN0wD`yZ5}@6v$cp?JVUc|jNwJx>7p^_x~a0aeWupuz=WtK}GBN#=CO zFv`kKzK#6ED4@V7V<;j&`v~#>pa&p@__NkLa^F}w;e~$fVotq+{97Szk0j9U{~7Gw z!Sx!7V}SIM5xs&M5KW%rLKql#q=UYIg#R9+#1FhCh+_@$|7kCp#Uc6WR5E=)ZV2LT zfQO5hdw5S%|tIOR{}3|LeMetI_?2*a1JkjS$utJ*W_t zukT*iPERY}KaxQnLC9U#r>&1!T zAz3Cy{m1nUuV$P1BO=twh5S9dFTd~WO6$dCr3TH8iAEU=55Nn+6c0w!dMpnz%3zBQ!;4l8PnzE+CbO4%h9VZiL-M^a) z*$L)P+9Il6QbcP$(Ha&jKGqa$HqCUjcE#hg1vYc4-k1au6XWOj(Po08L$0O!=a0kF z(Bs+ttZ@%n!VB5|>N zpSVKk%UAOmKre*5q>SQ?{PJ+)9qrWY6viI+;P4DupRA@mO8> zRqZeP2e7bVl&WWy!IU@K=wvLJoXi2hHYSSNft%e5S&GW=!(l*bdIW?rQ_f5 zW8v;`^_rTliB|9THtLMLPV~1j_3`}d#r`_RAcugkS?A^nA=Q?tD(ytz>*WFPCGelN z#ibMK(j^xV5YOKKqivx9)T;Ev{qKLu6|A4!D184ZS4eX61Va56ObhdTj3c<@~O zPXPldm?uT>znQXO9u3I<0^n($BIf^s(r+HR|Go7Wk~fv%XC~F2gO>qNt+k=NFZrL~ zMcGXw@mWEF>gR~yGZ_9NpXlJl&BMWrb&EU4|~yQ$7ZM>ekq zbK{3k!Moj2CX1f>q>6!?oaI~1gUh=Z136)j!Ux}y%uOQV_b0z&N8orUbg3@h{6|>i zxU=!6x4!F6-eqM?v^s!gYi2IOOd3QEjIA7f09&qloNG2HBxoWEy-Trc7w(vHgJEv7 z&oayEE`Lr9c5xhUU45rdZB5N+8TGg?ep06_@1CuG8~D_`gS6)w!)Ij=kqG{ymI1d3 zmjGoe0i3ny(Z|GpGthDpA!eLWV}6Al??*+V^;h=jd~*(HJtv^@cI(!(G1Q<-XAk2> zsMLOdilVn4Usb~SZpB$S30;>Cb1rAe4!0lO4{*+d&p+7_Oise{N_2NR6dVXAfbHY$ z{c-Nt5$SM;F#wI4=^EtMD zxt&i0jjb8V^fnA(DGEyJ!>0QsXQ5m~p1Nddf;vgNLaVk%F-wr;b2$6)W9L3NmM)Gq z!$@1%5CU-FO<;6!zpcMIF1mrQM?b+aVVXEGR2$?A{|8RjE)2%OqVEy9SbOXZJqy}r z!iA4YfuEn+4$^>zhiXZTe!%_@OCV}pmpPO{@r}9I`Ii4dUMbA?c54(8HnQ#tt@#8Y z-SVrd(ynXftA-U57cY`>0 zLC}$%hHoTASjup(68%~({(+XoJehQ$8lLr|*JG?`iC~!%2wIr{Mu*baN}Dr_DMyQf zl&SP8$Zn66+GC63c_I>Ht8yEBEdLF6o6ngfU(r=66IIz@<)EH(}e) zgs{<|lj6C5)-jX58KeMv%)9%w5xC3Hc94$IwTCh?Y7}=!n(IIVr%<#cX&rjVrI^7S zjj#|GD3lwf>LdbSmutmj}e~ zpC2(=jM^O63epVK;9OHjaTnNA%jRIV7r^*gXB;K`fmuILRQ!jMY06#-k}!2y&A5{{ z$KH1t0!Iidq=5mR&_S?dq8RD%!;|ba=sF2DbO>(@TIWGa7_%QDyprB&t*^3KK|vFy zR{XBK=J)u;_xF=V$ZJxLLc+koLl^ML2sz)~#xT4ZAHYW{z-jd>Y>wJY%!+DKcZPMc ztchLDroT>SnSG1Ub7%9U!$xA2p{ZM}5Z=(F97gcGVx7J}W>lN?*DR4%;T}8rJVe0n zf-D!IdEr^b&|m(GP5GK08<3cl)t>@jC(T(ztE=*5D+58j=;Z2*<|rv)V3h#8LQ$)9 z6SO-J9$FhZM&xr^p;ymP#drhUDr*t@cFmWP$Qmdre?$4z{!3%IFCGh!24c3VJ4o@= z$WtSXhQ}wHL6FgvM;D*=#}{)=%*2VK1(0k{#G?6o@Ka3D=WL13!DFB3m`fsdAI{lE z{M6es(h0I4SD?+L&D58nFd5B>rfN;z5HM%w$0Q4#h! zLtIVe_LpU_djq`Iprf5L>M5t{C=FETL3_%zgHRx-gecxqJtREjiEA3ATbVnfLHqh~ z0L1Cr5xAT=(``w4(}+WH`cO`AIxS=laIlK$*S?7py06;5z5Yb{UwRiW5d}?ThS;c3o-tsE_O`2ZQTDAfRcTSrOve8n$#6^){YV7s~F(O*TxrmWO;{`2Y&D$aKEx)N%> zd#|p!nlZS;l5hXQwyOG_9FhL$p{6k~Mr|&pA^An-ebQ$K-{?XT6PUB=-UkPg#L1eemhY^{MIO zUU|ghAJ)MkAnd9+?OX`yxkIc?2|r@UlyDhXo68~YAhc{XJ}x(?sBi=%LbpTpN#p(u z_xW=T!Wh-e<|lIEw>WmJLEJe*Jhfb=EYs*#Zn;En*u`fP2idR^Vz}hzJ>F7xI#>R) zhyWwhhA-QgI|~N1VM+c$63Ia|-6%e3nxY<0D{61hE)#~WR2@iGD+^KoHNc(Rd(2Hp zlSNz|RGEseAwG`fNnfRr3m2{z`p%tMeSHo&I`c^P)(jWk<|wjuW^ZzWn5^-*$@hq?e>Z!Sy0WmOW0htD zwv&2Gq%?zI?->{G&fkNF1QzO=m@m^0O5)z{*W2^kTY!Ae7q^G^$IAaQG|Z5=YGi02 zAS&GdR6_o5k&rxI-XGO4w~dhm-&}+Ff2d|MOXj07_i3=4Z2+B^Q;|~C+h2g?&Zvk)#gEK~3-zwlN|%k;7! zl;AKP-R}gAeJCtj0h2JcnF}vtAo}K3`NB(^H81f+q@le7>w(uY_M~oH3BK-U<4I z0D@a=#;z>%wXFT|y_a}hLyMZh&9nWvLgHwvpxRGg+J;$?3XX$cxM26x^S1=6d1CuA!9%wg1isd`u6@``v1~#)lSx-} z?|%W(r(yrtZf_lc=OPpwNOUdlWb-+%ro|o^F%0!i6hv}`Eu{9t<=Ey>Nq)f>&fUZ^ z^1|i|9Qq>XZ9($q=R#iCpd7+M%+v&C>D>kW4iFrpx6@?$cR}bxkkKtB{JmT!iF}X? z!B0%`(S+;?E1SvE=x_CAj2#4l+CXCV8WjsDxP|Y`5iNwyG&{}p{*|P0n@Nd1e6Q%u zWyEpHYXSrE00kbN4-*_Cw;0tJhp8-qu{5eY4jQTb!I3>G)>If;9+G6wV&n$N^&6Y; z9xjBRDnjea#*IT(;%E#ZsJi3b*`bYwJV$S)Fz$K+K!`3z~HL?O$0b z+PLMX=z_bj7Yo#fln0X#=sJ}^@1=XVr5wf|i!N$qpqrxvE)-0_S7>Iq*rIN>8p_KQ zrh%uoWd(BFG4O6(WtoTD(Lb=%7Y72|&g^*)ub#ca8_?)}@5L@s+Ve?QI(P1TkagT! z-0%-9p3fkpoJ232s+NiFIhS*|FW5!ZmhwQtyDPh0T0Qq?H@uzB{5u;%PHT?ylW>|& z(_|$E3}q_C)xjd!_Nflql4B@*#LX(#XGlxKqN{{G(q;$9&N_WOC~>2G-C_a6!al2d zCiEkB8h3^<=MEGr=6jn)&yx&p-H+u_TRiNU)~B-*x;>b;uqSPNktImkK?IN&c|Yt# zBouj@gd%Pm``f$CwVcUv#>6pCvv&kn)@Q-Vv@y@^eOtvuA3k; zR&XHCPdcmZUB0vDVuvXO;kT`ZnQ_$dV!>uf3uh=kv~|b6FpLTvcWVQbmVC-!WIj#wf+wL+;#2u_)^0$>4`g;;W$fHiW% zET@~ell#3J_@Z2@$%U#}Dwa{6maA>p39OqRFOm4J5s}co;&8A{_x{Y>XcL(X3jN~v zxzJ;&TxX(N+Hz113q{l)IAdWvHi1M&3NmKIkA8vmXy70X?9~zFuI}iDR1ny`1hn=X zIxp$-dWw=V^F3_Db{9|#PRp6x+-;R2bRjtc8hozedWam2-ai>-YC2M2hytGRKx0x2 z2RoZRWzD*q`)Z+o({qrzA#PzG*<26>b{)@Adq~QIBl>!K9M+=X&fo(Xv)+eI@GqHZ zRQVM-2ij`elp>k%p9hJ)A>V+b5U>BJT>$>i2KEiLNse}l<^Tc6yN-Y;VT7tHot z#L?zUCcKO5TYQ0%Z1CUz;&piiK)|Q5B#&i!{23{e0)g;Ahku8q;Y()w`!RK@)#G4n zDE;`;x>M9n?2lgBp@Z&T5d{BJloZ6eTlc0V^Oj|N(dE*?VWowfNl84Q4kN8Ec%_Uy z_?`Vp4?lGk`3evi%fXcS4(;9npSf&3aJxOxu)OtQ4XlIu{02ttBKr*t%La(Y;C$f( z@?;4G697wk2mf|YdIsCywjd9^EollyVdd@NK`iIOqgM96o!!GVCXMb7(2&{!-{9cI zEp=!m^gOrla-{uwY8z?7f{Tp}DW#~5p@Qm>po2QKDfjbbX%q1|j96}4 z(8gmpa@l^DtBcKDy*|wXkC!iGSml&1@Fpp)-35>ZAm84kzg)5VTCi$N@BPxf6V3^` zD^_6ERB13HqE1G$q6<=_20sx2@#Ls>mu2zXA^ zXe9s%9|XMftvq&@aj^5)Zn9obZ}H$@=iwc1KXBJ*Twj-v8^_5N#MV|`C;hzM9G|I6 z5PZ`+n^31RfwxZE6-akt;yvV+QNQ64T8D`6pt~&uG{im`?~EUjklUCbll2LLrL1Be zPf@#JUT08wB zQ?I3%IJY2*fc+@2r5U~IikY%4V1#BKnb1>+rVT$=+&MeY^>&1DUYRw2LFd3_qdM+$D=gfq znjyI>M0K|(&lgY7W!tFe~#jX2Hxub_v;o&j&EHY|w@%^xqBnkDc zY!#I$9xz;AMRAgGWuK2fU@nuXvbg}qjOe1vL2<{7dv??zh$zy3JX>6L@H@!7Lt?xs zqj4Ul->iH*OboGo2>SQV&=;Ilc*d~Hz`#2W_|Tb88C+X}h}nB5Jc0;)_>?>^Utl&M zmaq+edL@?b#5G+ZsyDh*9&b%-jK6`4Hjiz@ggID<_lCCvS$|uX*=$+Pl#rBAk+N^}@A2daiRbq=% zS(ffmwG;A8hnYx8D7ySrpS_ypa@&~T`UsU4amH?gV0n#NW&hiUv6{{cMbqD0?QPA2 z?yC~4QMIz|nSz{Xign}x5qLM5&8A6qyi_$7!-S-RI?#pDYp@tiLn-j7bsp)0nDFtmjy#3$A2``eb%q* z1^3!dzz=&lIGy6Y9A=NY-pp(X%F0B4Q5Ps`>~;dCM2;ngigcA9$4b9ABn}7+yqM?r z3ay5ne)9Dmu{j=~67coz_}%5^I5_JS#0ZEo5bO$}xZchp`1~3@9q(ijV#7Fsj;4(% z@8$J;-wD`c9pj%L`?oapT+7<;AxsgjLKPb_C_rQ{ffUTjjw6+o0{ttrgP@hjdVOk6 za=%G|h>ivZx}yPzB$`sb7mpy9Ah$eyr0axP;oNl9KwcjJ58m&X6cmuPa-p#k?_Sc+ zwY_YL?t9F0H6vR&P;cGFL3IM3YkP#S-Sc}|O7f`T9)j%eKi9Z1*l4q4f)aL^2L`jl zGKHT5pUkjFz`iPX=twdE>ChT#EwNoAC~VaWyHev3u4mSxq=DgHK08B~=vl_lUwHzS zV3eyf#hwOmivIcosS_X2)qvlukjfl6b~#U=+~)Fvf87E==;iPJ4_WUJris!->y~ZX zW|wW-wr%q(+qTu^F1yRNZQI7_{ogw}XOd4&bCQ{{BG$Vk&narvnzf(3)MLx--q?tj znkU6D29SoeQY{egweW-%)FdIzA;Es%)GkE2>3ID^HB|$mA6~TFWFYour@XdzNRB+` zne~UpZZ!I2nn6DSCqg+dN87%uACkC8-FJY4T9censB%lXRg%e5IsCPG=8EH8eI-XgEZcreR}w+DV-8`gVu4;YhIIl!xDhK z_DQ~He4p?DXg^4-WKGa@<2ZH^NfG=Iy zhDUA-HoJ*Mc<$gG@=NdjP^pA-&JpTGTpD7oyC*rZZnjW7?{G|P!TqX{!fH}6prbno zxAY|cXDZSHEU7|-df+7aK@J8l_E`XtM&TeqX&mPEZ5T@d8?ToBY|L+cJ9&h3W}+^K z!!(kBlWx>!X#OB!7t&t+^r(liao;+YJ_>t=woi4eP*C^&{-)1ks?k@$#`oJboQoGV zj8~bIGaLH3mxLM&G*cd1Ks4VYK5RFZNe$kv*NjVQ&;9y@R~7vEjx#DX=^Y>=UI>U5 ze;H=bWw}AUzq`c1Glt$fNFBN$qJxb$oNBN|gcEoFi z4Ia%-VIC(AG}6_;F#7ca4k)ntvJRjSACSR;K;Lh;f}VTpL4CqyA($67k~*>`{P}u>!{B^tO`B zgYWp`uZllDpr7A+18ippo`m{K@TFNk%M?CTbz?0ln&~H#iBR?qQFn&EA;=aL}k64HoH**(% z=5d|lRzhS}$^4aXfwKXN3XjEeUissAtgSFMu(b%iS~~p@(U6qvk6=@ayz7CURGX#v zr|jmdl{+B+gb1_FDs=|~^7&$Q2fOi=ChxQMHk}&E9O|xpJ^YdIZe=;%o3C+}X^=Ys zFtQ^WBo*=A02dk)F2shp!!@rP8S~6_jT}?>IiwG;Sl~MBk4Av!C9KjieO~CXkBlwE z@ZcXv;>ng+Eip>MQG8#%@8D}zZW&*!MQ6g{W z;8#a4zUL;gH__0+cJA**B8-6~{I-qG2b9l7DffoVY>61~y0P{_O~>c@7lg1L{JoNK zR?D5%(mMPrsF7qr3m)og+k2U20RCacV=HVJei^jGG&4ZY!FZ7;6Qt~-mkjnibXOj( zNvxk}_P5IR){X%U53Ei}Boad4fh5Kr66bW&_9dOLeaglqT@Yn6o&#j7;e>L)XXTqs(~nd0aSz=*%Xi7hv#hHx1Zv_GogCi({(db+Bwk>L1g zQK7Zmn-c&X&mBKgrUdM_oc25gy;X8rla!1#vE$4_()Pr^*z^i_&?WnVbqDxLH4h$* zDK~i8sz4oLgZYrzQ9sb7THs2(Uq=qe)q0cmpey#f>pzxl?tO)3t@<_GjMiq@{8yC> z1-LovhDM5DFW{waiaFN7^Y)7C@X|gvirPzJrvdd~Vp zmSzTCx?CU7XNqGX1|M`7_){YJPab@ z^U9+yI`}y~m?G-XX1BT*y!|>{43mpt*mlV)RG!Je2TlH%pBGVF?w75jpUK-4If+hd zC$j_iw{&dg#jXF_^XFz1b@=v4TV7x3UY@0Rup;4vA5vH~-_13ZEFF#El+?-vu^|R# z<*x^Iv!S|V#I4Kr>dkx{pYYHG6cB7nEna$11t=o3X&25qUUASmX)8{Z^MtbtOWclu zk0eO_R-%R_TSQCwI>pdKc6pB688!S@e>J0GQUM=pU};6e#yIvzM_>0>P%zlHlfi~h zql6DNs&TB1q}^ALu-Iq*$vy4Oj>jkhr7VZ~w`BW9QCJiei+D7v%`qMRuc*bn+mrHD zEghzsV&qNW}|!c1xp3$MrehUSsjl9nuM1Y&BfpWV(q>6#*cV@6?8> zgv)Y(j0+3WgQ=V`S)?NqO)CmOd}?j1*ELTKLRLmgYTV8JQVf5V8(835=YU_t`?n~x zHaevF9w2~^@Uc0hZBpSLgb^j>I6WbdOVQ}!8)y0>PkyLre}d$-JH!_HxF#;ve&2J? z|AL>G^@#s-l`8X>cd7Pe3&1>%@3uuxx@m==Gy`0*#nnXXae;VMEh;Wz*6DC)aA86a zb*VAVnRd@6dp;vr9AYCIM=eDd+W!hG?0JgAVp@3^AG+N+O_xb?)##d0`-jI@>irGg zsJYW6GtC8p15Kfa2eTvgvxt&2k6W0pEA_Jo9zM|DBh3xhPbEEE5YWZ*(h>VgG7}=W zoi~u#F%$Bb_>tJKkaf~_c}7gfl37|4R|Y*x8WS;jws{iRQN?JRx_7|Sc>=70lj>|D zX*Y7HHhC=8b4n}_&L|Zh_S)JQgQ@2|x?u+5H4WmN&>tanR%n{wdLqV#tK{%|1wrK1 z;(+ege4m6m!%FyHXTUD*v=2Aqp`7OHBM|FTZVBnIIy6(D`8>B;xZ}~R-)z^(YD5*K zrrfWkX#FWsH6Ea<8$Mu(7~$JLUTGPJE6(8}{0CA{Ceo;E)h%WMn)vYC#7@-6wR2pn za2FgQv}#?G0f#eS29^%j%fDb<=lAF7)QugvXA1Dx{AW*DM*zckgV!SJ4CvWr!{&1P zq0r3b60j*Ni>9L3e{J|AeD2#D z=8!4XXk8bjg#hkAY}F$T3Nz)H1_S(mI!ye9lt_>}%F|wE8QlZtchZ{#tyADh_s%XF z1Vtik8#3$@D$j(yrX#lKSZkugAaN9` z@dp6>za)}tH&(h1ZY(7hZGM!8zo<8M|7g9xu*S-tagLOaSft1Zn)t|E^f=CMci&s5 zq?maur?m93D5%^XHvBl>Td%g9!mq)x=Cw8fPR(>SdD8L3B{gp;33vd_jSAxUgv? zS}No($P=> zLgs|kuH@;NnOyh*v%l5j{hkg2~TajLW%A; z&-;pphG20sP{T`fRh18!#(B_HmjJ5+Fuu0zvnI?TD^fG1n4RCtQLT2vfwSPAvthtB zeQ06mMOtKO5-1ixdsj+CfMMgAJ0~o@KhZ7}wY@^sY(`6^AO_?)xuT{o+EIE`tupQ) z>!E!|ATG?St(lQKYr)c-ZgVd5C^D0CBN8H%7CkKD#ma}2`xpdgnVvm}rS5nG?p(&7 z{sHolZDJOFt#ph{Fx0{;B>I1@Gk(AjvZ~|xhp@J)61Huy<3c)3w|)+z)sP}V=_65W zrY~(xS>OCvZpUMgcPe-}YstRrTo!(Q4TRgopa!iBJ?-MObo^Bn)x|)<^cX}#Hc;SH zG*jIt$_uiI5zc_v@TQmRV(nA{vk=!!@pu3i(x+5OD7rCB3KsCquimLMf6P z{BaXK80|362$w^RCeHiFH*Q%64l5+5#@JU-LNo99Z>{5gk6X@0LF;yi+jM2! z)>V(RyPt@R!Xsn`^^*Y!!y~cGVPLRvx;U4+cMj^|04x_%eTdlfe(|2U0hWIhD3{SY z!0HDl5^9#a;-)&WZ?q-3=Wi;&GDoo8&SV(zEGhexj5xxW=NvmAuSq%&tGek^TQW)r zDJ%(m6iT^S4Dtv=sYv~_Pi_g*aW0j@+S>Eu==S`L>my|%63Vs1rcEZA1}??_XoUA& zpigQw4r?E%LrJ-Wk;&TnO$=(ckmdROLbzTvC?5qG?1<<2_gQH$W9JYNhpq+B^M>R7 zq#HwUQhM!U3koTK5TWL}4WE#`u6fJJC(llwXhpS3i!{7b*IO7X7MCB9@r=FPIk()t zjjND154T75kXzv@lRmGEFF$p&LIv!bhSpnprMRjNLcK)ze&aRaZ8s6##M^piZm*eP z_;C^b!$8{uaePFD11`T8Vzb_!1oyQs4)&n@12lIFC1MRgCMZRldHM6&C+GBeY_afG z5vGQj9{!632bcVkps>4+g<}Shb+}owT$38Mx`RD_;gXrYAWNu>NaRSVZ)y*v)H2Q{h4emReG&>xF?5?A;SV zenANdG?WE!ry^76S2c}Fn=;aH@Z3AA4&SzMk41;8T0pp!>!gAcW2jA@N+ram&iS8w zFS{oB%k!?g97#5P)(57~j<7zz4uoo` zc%IAJXy#~-bqjfy4kat3je2?R(^lKpEmkOP1PL%xf+U6a`kVOc?rHXpHJYKAEMh6% z!0t#t13MJj1ciO~DFC{goU!4p0tpj42q74JMw;>au($=GSuR*GeSR>xcV$FXY0Sy7 z&&1ps=$tFN0{x#jnC$%hDzrDDS1FWATZ`zlOh$J*&?kAhnuLm~#gW%I( zM*(m+mKjeeV7E>bA$m0L$ACBIW-H!wirrtrY7F{*Kjzu66{{I^K!caSEji#wA_@`P zj#!zVNaryc_5X6?Mpt**2x5Z=bNDk3UiIMCXq!uxVYe?;MZDq3jI>7iYQYnmWNVLk z%Gy|x83OnYktO;6`wN2)+S)Xc{F8tu#kUrBSGmPIUCDn_i`~S@f2NY)8NjciMZHv>9|4NZQUdHbUTb+rW?djUGgyFcGp(gxVZOOJd_NYk#M+#d%fhw#B8_ zL^2atGBR$2?~T0MRc$qW4^6SSt&MUM{=umpu6w7A5|;z^e7h${?f>z(GfoBo9sb38 zS@wz#Xy&qYS?Q9ye&1vh*ikCx5nY&+z~|nQLet{z;Xt~F5dKahHuW0)>-MQBUmAvg zB1RMkpMy2C`=`X9#O)j}3ogNur)tG0o{R^mHh1ZwUM$Y0x48o)t)dy$6g#d)L-oyl zerU@rKMPt%X!_S0TkjNnN-PLKs^DT=)4G4~6IaGF#0&gb9xJ^y6wbLA`SfXTtTkxU zdHg%jlm&shd)p07^ZC}f^jUH|jz_AJqDWpvK3gh5Sze9PhSVGZw!3>5#)gL36gn3* z(ePj1T)@^>r~WvL(N9Y--}%N!f`u=Sov3VHnh=}Q zOT7CchbYF4qWYyfXq97zC#)9rc#aPJmz~_ zj<*#I3>Z(;4?CyMr#y6#cckXrJI3`8o(L4_MBSDSp~3Vvv?pR-Yfxbqj6%8N%J|xl zd#2dqH|$0X5p;Gr&HLu&CyfvBsRCG-jzy#Jsv^*4a97OPe~0fKhQwbwJ6a+ zLf1u~raRof5p?oPu}Gc?9YshxwmLNW9|Xt!M9aeHHJ%mar;Uipl}sh`WxQPo^P+7fL~-?rT1GpSk(h-A#~EYE(c6 zuJl7sLZIV=zWi}lh`c|gQk3WdqRgaFYV@0j`Jx<(-^sGHVtv~7fOJnuifQ&QJ4)E5 z7#(pmbwYdK>^W8NWRCDJ%txS4_lBo*Y?BS)Y`}bVcow#byVW41IO!(is|9II;+EI} zxzl^W5t>1hZof)-Y4_$fq@5>jD;C9`obLq0)uJ?-P z2@pC6Gz&C-=c>Lb=+j*)3F0kcRvr-<9k(&z5wysgnU%9Ir%IeF7LxZ5Ax&R$6TZlT zk8k6Q7S=9=*oV!4M(|EA7~JTIV#(V=@{@%}_G_=c-I&C;EbyF5K?d)4Wca8lo@>R?dIUu$Oa`x{+$Oys=yXM+tXT(&~baMDfp zCF?eGClEa-T8BhPuwZNHToMB7JOMrod?KY<1515|Em z+S&+Hro}@-@E%Cm{|dDYETg&h~ zG(@l3cD-}o;G5xrVN687(ZK+W0gOSS-@Nh%nsD6n;>@q={zc8CWiGm1SftO$;h2e~ zB-~L4`F4HEJk4;nMD6ze)^iuQ`s4zsPafKt)TZV0@_(YkcB~W1mvTae>cKhmeClq( zmUt|&G7V3TU@)ldzUa6t=d)5&%W?M}3Z*}_vl={l)@M&d{ zgjud*PF&|{vI8cJb#xe$@P=XrMKVmIAl?^U7|P*BU8z>U1iWk;Z9v{5Y;E*p7Lyv! zC8UhhgBG1LkgT%=l?*gp0Li$&IgG=vP_>~^XxdlWU*)3~ z>afeGvnr6W%rpJIFM>%cx#x#oLAB}HE046>-;_hGe4uEidOb7Q5J-MSEdy^NQJy&! zW2Tm#Jlp0oR{8J|-;h{V(Ozr%_qSe;l~C6zvdx$g z^cN)qgco{9N29VLdpRL})sIC#q|AiSFni`erFG!!V#bc}q7se*b?VY++>3inW)xE? zY|XTrOXHR4g#AYLg{0~M0_OO7*k1E;fX#;uL(QZh5KX{M0*vk*7C)xKXpfNn)9?wr zrwmPKo8gL0*(pnMxM^rCa|hKk6Sxk)&L<_6Ggf5Eu2Y|~2jk@~Q4N*8|1GUID}3oWJrFa45bZKIZ3VYh0O zhRRB>#%K$)OC;|=rn z1nr;S)e${QB!A%4=QfLcRmcPR{FT#kZ%+|;DN~+;I6AhR)~qUEdXtHo!H^`y0S85B z%Oc*?c!-O~Oq_9>O6k2lFY{udy_eT+o832EIm1-5Twx@k#XAiaNCHG`CGL z3NMn<<-mTtvc-mGwSrRV*a}xwc3$e0r=rwk;F~VKTlJa`Um*X5oY@mQ(A63 z9u6|_u=CS6(n92ED?FLI{;>25d**$Yp1Mpes=g5yO1izIr5}^ND=n72#B>tL?|GrT z^hSxL*nc2e%m6U>_&0b>v-omxrRX6z{>a`!3NhzmCb^DU^zVlBo&AzJI6^K9H7v0b z2SDk2fTOQ^m+39S4W$^8hxm}ZN}|(x5-PzJeH^51Z!JxN%KK5lhB-4h2vTxnG>_SD z?yp0#{5P#&F8NlW?JEaZ2Y4i7`f^90NQVsgRW7V=o*a@)3Cp)#4hq*ig=&y`f4^Vd zzS7gmkbN25aSJGDdw;DPL%dq-jA+*a98y@R_-d4YrI>B*3h&1c`qds(Qbd+}7(};> z*8`~MKg{Ss*hbh=t(I(+acq{z^ zKLR!DRcUF8x4hI1tg1sSwUUT(1SywEQ7wrEfZP}VBc~ky z5%~3h!0&nTWu)ZmUlkUINM^yOk zr1liMbHgIb#^mI*1$=eK(hU;;R(M8x&g^?$Lj5%3vF%KHm>V!ZJA)}Dc-bBLt=;3 zAsDgr;T*mRUq4hWcrDjwTlhLwx5zCpG<(;i7kSHDG65J>vxdq~at$8~u z%l3H&o^LkP+lUpSs^FwgXw@!pk_Yic3Cy zun@(my&-<+a&Z6JBXf&p>$>&t$EEs8{fAqvB9qUme9Z>FRu2gPd?wnPC|tH++}%vx z#C>>W%|;{9{vZWjDZTbJW2$c@5Z}t3>(wPs)OhW$zF_9Qx|$(VzZgktNAK0fJQIFgPu1qVPy%n?`ROf}PybMd36IW>U?8hpSjIndw+aY>oJ0e_)L{Oyi*pE9d!8$tb|R`qOmD9i=8 z1r5MAE@*5QO|y=ONQ-#zI93g#*Oi8CA~fl;3h_~0)~;pe8AC}D;V>1VDv587Ule*d-gN7ySBoa7 zW1D&2ih`N8iuzn%B6^+KA(y*4WSseNF`R%@JA2yXB=mkM7UvD0J$;k(!4FxQKjb$L zN?6*YTb>)+3v$C7j}s>v64lk?Bp^9Kt@94p@VAiI5v2zq&xp^@S#RJ*DW2@U7gR^h z1~`=Uz;{~o!@mRRksz)Yu1oI~;jh#2gAQS?9Mq!jZL5O#2v;T4^Vr5O@3u>M#68XH znfs00LaG5y4>4aXlB;iZwLK< zu4c*@Ud;cwqXmWqqjX+2PoyP@ zT#C%d#)qIoR{$xdO_cuhz)L&BMUfEKJ`)KCXk&GGZGGtn?@-iVPM;q`jlZp6x-GGp zX}X)~H9PDXJHOfm$@wj(og9&~CJ+4mD~ICB$&~{|ahTHnTQNCUsv0x8;UnP6dAk`< zRl#C8Lj^-ZRh+Ae<;u=2Q%Vm4RTl~)#e~j6CMy3zwb8novmd=wLlKUBOiv(-vD)Go zHDbnbqwy7hPIp`I+AVa65S6Zh_Re=|;Px)fNQOdzG_~j{nD4_`JXsXL^xgI4`}_MY&o2hM!|~|Ru9N~77$IO4ElUQX z`RxMOX)OVa)d^4a8}a@Z(f)A7L7*r>?7s6H6NEXI6Hixl%0!Y@ekj!Lril5NP-dC4 z0#B6|(hTH}e=!Wa){^im$}kMws04k1?6T39yfQH-roPV7xS{TJd9AZKn2jv}&PrN3 z|KGPV$S1QcLrhI4;3XkvD_fFBd6LaoL{Fe4ag=?*6Vh7!!%Y^2f6;=$WW#E+s&k~g z=;jaJE9`$)GWJHU@XU$dAD4igFm&Z;vJ}I$$x+A{aJY1jlv~hi5ZQ`sCN3^lM=U$I(HXr-(>Hi)HpIvu=)51Vt6=%&QGX zFDY|q^<?O?=B-7xBL{Q6S_$t}nQf#w*VJ31g;znWVBEb4N6EzLBt?*q(!?YmyW7IR_9i_0f z1yiFq*h;=%xOZ&D3^w_u<#ZYp!j}hhQwOHadMV9><*7gsmFKvKof)Y1y3E#KZm5GL zPRGqLRzj_VgTj5iwdLpysnlI%&*^dC{lcaq2pCC2M4CdX1X} ztbT*|Q3^7{A>CY=+rk~~Ej%_?*VTSR_;2bQq6Efdkv9cKjcyLxNyGcGEHi4}pQp`aoROWweAQirts2~rl+esbLR{;)nEOh1KHFdIqn9}%x!qu}LfpX#i7w_P!UL(r$gIV~ z61GU0&nvT+tN1XU{}gO?{Xc4g)QpnU=w~niO>{Jl;|V_GfN5jJQ#8vVLKf>fLjw@G z^1I*F*-knDbNOI`&|kui76-xfMs9w9OX^IkA~uTLPSpwdI6(y{%bN``ELcg6`0${w#ne)-MQO}^ z9E?H&@^swEDaj?V#M#)QWbI$<4<<-9>1|v?3{E)_`W! zjcbZ!;}^G=m-2bQ3}1Td&cvs?&jfrct}ly=hsVXETxTgnb{)op+R8OYGy-tP(w#g= zNQd3SSEUE+ciU|KY>H~IrvuwSNYYGO)6UOTg)QUp?bA+uuUtHb*IgoBFmK-X(3>hc zp*f((`}s27gHT_-whr*l_}@brO5Q{C2>}EYg7g1G*Efyv@&LsDQT6^BS1+n5#eqdO z*iLjHc1D`r(BO{LYX0u#o-h*`lnj9f(e0949)7#w-~&|z;v$altevlyJaCVC&t^!X{;~J;voJ+Cfy&H^n%Mg7A^d^dyv-vR%Ukau+p(9j7eu%9pSHZ1PgC~1By`{?{Y^gtwF z*nAX<&d!S+kgfRnfSn;?NLJPBkuHrv@1{Z$cwK3%^8)O%3NSvuAQD)RJX10weVZ|; zB*vG%Z4b_fOEGNcR=jzgME(t3VaC8@mbMScmqs4e%EKt;mED&m`-4?=;YAW9`$hAz z8t=V2^2ulGwBXQ#TxXUSewRvBcK&iKz~g(=A1a5_^#tbzaUFb1ZavJXo@9`4eIWPi?$OhQ7;6+ESJq`VXGjqxGB^&8d62i!H zjMxVg=^}z8T%p9vwjdhp^*4t$4aGV*C~VdS+p4;f&k>2Hb~5?VUEWtelaaOvrAb9_AfLG%!< z>PP&L;&~Zs#<~RydUj*hC*hEzP~^azd4sXAh1fS@r!X;gO2T&EV2w_2L%^%$d(8e? zrM|cL%fHN>cnHitMfVDd4bJcG`%9Tu><}=b5egs|BdaqjDeJwoBCqTQ)R>p)=Dm<) z9@84xoki4O^{9Gz?nd5>%Pq`!h^E9qIX*cyxHfSpJ#@VYU6uNjn0P*3cN3ADOO)&_ zaqh6u5gd~b#G``bzX)LdQJ3a@|LA-6fp>CUP(q>7g%KtvZ91^9o*)lUhUHS@KnF0( zC9B@qf@> z^U610SiXp<@2wIUM+(ij=j*4;%U<`sK3;s^tQ$#x`~2wjS&=ZL+CE4%t>vRZ-^q82 zzGZbACG%J|I#u8TC`e9DvgSKy&H)EJa`_5%M+|rEZ-4pzl%GAEHE+_P!GCEUm;cIs zi7@wyS7wdRN!0c^x(NcGkOZ!{`)amz6$ZOasRn-u5X<_x^P=Wl;X3eaJKB0 zKw@K>ZvM)FBX1?8hh~K4sqvdow82Vts+I|^vYj$Rd?3o-V{@0dDM);kkM+z%mVlOENpx1$~2 z=dkU*EMOW%er1yo+maoBffhxYaw%~hQz~S8+xBRx15K>~g{70lc!-JEAciyqz`RZ- z&Sz&!;*TIrG;zWmRQ7XASTH~l!rq@dQ{1_z)~X#%!%A5;UPelCp7urrIlTRyOYPXv zn&HM0Q{svID|G7~w)2~{x<^%7?WsF_+i_>qf= zNu?N20eJnB-;b1;Op*W)r!xs`!EXALTc@W2cxRwiJ5YSzr7n2o#YHEe7=l|85%H;i zLmW}k$7algISy8>aNwfTt!boh%r7Is?2df~@sM_cf&Y#v>>!&&_=%J@7hL{SaUhTKQS-K>IBIXIg)F z(9bCC$AFW~huDv^SVDg+LY?ngNTBz&0Mn4u78K43`GM=UzH~swlzcaTc!8uY?dxBN z)I=oauy044W55|a_hy|>Fo*!-*8E#}*BJscrY_jZ%%BC6>W?0oRn}$&ASvD!xLJN# zIf^oBz32UgIR-FbOE(J6A63%vtJv{hZR^_gcLow>nKLg{K_A?aLfP8lb6@Z@TH*q- zsV!F%*!xHssU}+$JCY zdu7F(NoBkJL7q$`Oj)Ob0%$jtR5f3CRBfQpa~}hwwGX zi7h2kF9&QQ4O|$DzE{knq~1~6_xo1ADQ8M7sQQJort5Y}v)~tDkUkxdjEylilY|?s zdDd7TMBOpO&(IeeE)mUF*2mIYsou-8mq7JOstMwi+haJx?{de`@rmJ zb?W$#V-K~}QS;PGk7bS0sX&dN2z35a2Xvb1=oO440-I2c*c+X)UN`mb| z3_M>|xGJO@$*7$bLQ9T@Y=l+hZhn6a1B zr42iW>k``nq4QvpC2Iu6?7T5XaH>$GTLSS?Gshv)A^QMiGb&p!e;{w}WY2u|ggB1> zFhVU&qGkW`Sh*5cs32SqDIzbfYaPeWJbs*Tz&zo^XlC@Gp65O%6_q;!9B#55t^=S? zP*;77*H;w&uSI-x*0WI}`Bc$hGCJuU@s>QQ#Y*Jht2uP={8R2NkTsQ*9{QtxT=_oL zx+BaI=9QW@xlW|o%eSd6Fx|=vde9iCKjw>M5Bl&Dff$69C9pq0Bv^7HxJ}BxO{_Ca z3N}BeRiq>+`{`Sv08_@S}elMku+`SI|_f}kNk+)3~@hpW$a z0tx@U*&?In3mHARdDvd28hs#-zkY+6Q_$`Ly^~%9%(V-n-kNwYoG$Sbkjw7(I-k?NLX02ZzULZQNENl93gX^bDZ&lG+$-c##&rMf~T zh$trvfgK2VytjB?@l?SsDjoowjRuT4seOHLcXk^U3^s6(vwXPh=-aoTk(!RuoV&Av zP65crHFNVjrJ`?7rv=IMlGinqJ|xZ8Uv_QvOO~;_Iydbc}XaxN72JP(i>Q zMWa_-Od0Cst<5yK9P{0Yrxf|xq@`3ZuRpOmTBRL_E45&8;=qDL(ijjqHs_dMcXtPF z)pqkvGynq3A0(97_7QPXO(7$;sg@P?5s(BPiAtDjyZ!69N zjGuh_laOrXztIPQ$GosFq+~`h0t&`%0)Y@1^CYcWmqgaqb_H;biOC#8fTd+A#wY5P z$n`S%%FdjU&!$P*?vd45ihX}i9|B_7mXzpP?NpU_?v<&29 ziZimLtt9JGN(;A#cMZUTAYt+}LTD!bml+@A(QXl(=49F<(>Z_FEw4mc+#}@9aQNJ> zV}Vy7zAYFHbm8C`igFxZI-#=q;0#ALBP+Qvsy+9RW@TT1ENrHD#$rEE2Z|d`=ahui%oV82 z!~R2@paOUhW(9XuPf%h~7m0%$O|+f_SK2rCqarUsFkb+LgP7?09cbw%$d-eja_}@N z08+XJH1edePNrU9;!XbgazcuyiUZO|FLV`9L8yR|pzT@gqqcPxkh)#I@nuSpZ*+WF zSs#9B`J?>;gY$8Rt|l#S{uey1k#rO)=i&NzOA-)`p)j}fJ+h+rZE@LBO zS`2}ZSrx3cH@^hhur4zS4ZulQBdV;>VCd4AfN2Vp+Z{V&1DXIi8h`k zHwNe@oD2f_{4j~+iRNUz*$0m^>1a+C6g8zM^uae z+HK5pLZA`>LLUZFyzIFPN?lj562n2vcvttPErZUTl4hV~gR002#A@}WNjTP6PxALR z%i~&n8d(|)H+wNL&0m_XUPN=$?@*iJEJrUocsVYO<%UFQvIFpE zxyH0aT7FZkhK(wjO)AotHR~{UX#Vz9tAc=wx#kus;8kqs{t|Qyp1d_YipEN*M7r-)}9LatClLwqcu_eNn#^M}R5o;3IEv8|i zQZ7y9wp&N)@{*2pC{+(lJaKj|Fe^Bcmmmo5UV}M}+HC06qCBTwS ztXO23P{E+iXAC!S%RIx+LQD8)x{^+U$_ti`Ns;TNoZGDw?nnJynLSq6x}C0K>k2q2 z6D&`fDf#r`I%BEe5o+i1FE~Ja&ZQZcRpE+aQo@AkS3ER5cUm(0JxgUl3Z;;9ErSEm zR<(C%x^cnET(qfgYJ3$*9OUf60T=e8c1%q6Lehy2qd||i-_17P);VLs8WnsjDo1-s zti}|Mou4Y|u5gw}^s1NG;iukJ>Ufu=NdTRG3Dzl9VCrX6ox;c@cnRP_ws~R&1tS6& z4)rf~k62isQIVfC2Cb?+-GJQ~4x9CEyX+&-!}hxoIh^O2TcPV$bF4Z&nh(Dl97S8I zj#R-VW(RIVuIs3_OGj>ilns7svi0$%Ewx}UKBf*#21U3XwIPWvBPS5Wz?@B)mjQ;7 zE6L4$NL9^|{Ks}@8#+L-&#pvD!Ne2ZpMFFmwl$Q-9vc}U2mYt5fST#RN|(c`C3p=> z=W;epXdlMjWPn!8M=^U4pUp93#!;=6Fc(;AO@|?*`wUKU+Q2|F(DXZ%QPIMX0@$AB zPu(K+VRJ_e6`Uk$(fyICksuCojcL6)OmH4M$2tg0qT@HPq8$ME)K|6pbsc1Nu!0b* zSEw;Gsle|he@H*ia9lY2Sgf`gtX>MaJ4-t#FM0bBtYApVB*QzRNw*nz9l`?$9zi4d zf~P(#y9`1kxubYE)-~Vx%-XSVgeW&XZ9v4q8*aYfHzS&fyHjO6_@c??vs=R^;lNSm zP4IaQX%yUQbtFJv9v!=$alsiOTf$@~UpPgvU(1R-PGk18!9}U8-a6{9D$^x*zOs@?Qq00eqTtF2)bsw>n z6v0`+va>-4fvduOwpR`p_SRCHEPnRJujF{~&MQF`sKdV&0wc7t8A5q?UdSyQbHh^n zE+B;i!ZF(uhI;NS!mO}m_EEpP*`b~l--1R`OJ1|Cewebt|%JPx7D6^LLMyysA7O{(j(%=Pat%l#j& z-Z40k<_r6dHnweSY;!kuHnwd$nb@{%+qP|ElWefT#(s1EpL#z$&zGsLGgCFw(=}bw zeXeu;M!$*FWSX9D^#|UaR16A5d%#%nmUl~_)h;I*S)2yLpFb8plG1m39x>WJ)`mFW z=Y^9^54hK@rP3fa69qcJp0TO+2$^JUI>QssjX!GTy>Klc0ac#dDr4>RgZjsM`SF>Q z?&d%VM{cN?M zVp`y|xgT&=$%#w&myY|lVV2tGEILvt}p6$*6r_}@rw zzpsl?R$Q(0?Qz!$>Ar|2k!}4!olLol6Q}GjQ*Mldh_wTi;#24($R8Nw3JN%HptY-f z<(FM?9`||Dmn9f(AXx)sNQP^M2hZ<628LdH+Pad;;eAtl{hUL8+kAH#%B>v!33JGf zDLwEB$PD6>M5U@J2g&Qr;D6U^>pCFK{KpX%Tr;#=Twc%P&-X2erTm4^;@!{iT)DRS zIl}`ML9ss0qG%QuX4OjNECWymjrDw9iug=^zo;3o!YMrZOmpQ`j7tdRj}Ay$HU=S- zapUK`cs$WMb^9A)mMv`23!z-tV|15kAq%n$;9EDXbt`|yLrjfFU3$fz+wK|gWu8=6 zwAG}vr=oM~vZ0+NOqK@R^;bV0WUqML7*@N35|JrlqW;;o(Jwe-<)u>E6msay*$y}7 z-E>IvXdJGZ@f@7n?{KQlmYBtzQ`>G=y_#3K<=E)H|0WHmd1i^XS_uueT{p7S8eMAw zWIU@!!jvh|=SpEYlfDOoiL#o62waEO;W&dC;@ziob$}kqoO5t979nNwrLHduV=UE` zF{k7$0JqFwdVH+Db3bYna)^qT^G%jo2^9 zR!vsRj@~!p&UU%cD1S( z)fsH8gIXDL<&Uv+!{u4vHf6+kHNqTZ#2x<9O0m|y1`6dVN2BSM;ZeA&^wPZ$+X#7) z=Lwuf0c-t!wra8o=`67y%mC=4jYDllFKGmE%2kOtjm_h76;dK0jSVar`#{$gw<|o? z>koy~PWrtumKj^gBe#(s+2N{f)-xaVq`i_TAz{{DTPw)lYx-d3EaU9HHs5YuEfYR*C~N!7fq}(JxaOffZlezlr61 zvgcXMNLWxKOOtW%*Z^S{8;kx~BZzVTT{h9QT5|h?0;;|xUjwDUyHTZn+0i<4qWno$ z8nI9{ya?X=M8kx45E!biX9yuN+Bbi~?+zkaX@OOgo=#XSAizIW4lrJYg|NyxXh#{$ zarOPzjFk{k+>>O^Q~|}?PEa1uI1I2R?Z4dH2ofuPMMP3=g&ic(e`{y=yZlm$ee}-HOTdOv)ioe zjC<>UKc`9EH36t3GnEP>^FW$JAQXRkwsiSvBYdZTkSb$xiNUQ?(A9(p5mbK(!V`Kr zTclzmPCBaM`2m)}#*74Wqz=Lb!b0s=T{h(B2{qfb?wTTq3=#F@ z4&q#0c?eqlpkF`9y)+0nsm4+#io`UQNe_)#VF(hrJ+L@md!|7~H}h9fRgi`i>lh{5*xjx$h2=&_~b($IY(K#kXl zAePZKzeR=tx$5A}v{j#-7-Zbf)JDjuJ|`ajPf`dm&H~wA-*s_c>ZsE#Eabs7`XwQF zVchcj00RlT=FS0VW4#roD1lq?x#73TM9PR`7(w9Bf)$f^4!Sy~pd|U(6Po>f`kY`R z-&ae=dKgwQxB5>HVjj($l?_3Krs{Y(f<^nMskKBA_`1)JWh1=23P$r@)T8P1-*p@@ zvmS83? zrUei(#R2=)L<-CbZ-$X1)inm*4`J}POKflwVZ_Jq^2u2L$iJ`0|JsOX$4}Vmo*3Dl z%Fn{*LAn;_PI78`%{$M>fB2iuKD>ICoC0tmKJN8T<(soy4@RBwLzJxLm3MMKI5C$r z=xPwkMM@z2D9;*kB(Wi$8hLA@K;vJf5yZqo@`W|vp!la$Q<)TRU9(jlRt~5yh?!pVjXWfeKL=LG_E+2x&U3T!OG^ zj9{sLO=t~MHVc$BGa{@syPFhVtlgMW9Vl`(Z0E+R0zMw}i)`?!DG*I);INu%?C$J` zGwZGAT+19ma=~~rtvgv={JW^TxWGzwYpaXSPv*8Ze#{r?h~7UF56_r=Ix&^}YvI>% zRtO9ij2Rf-W0vDO9ENqf)xT>r{l{I9>dS6~@&=>dav65ocQEhRkkuLEp#jVsERn z6OMjnCo+7Hh8(D0sHx$F=^AeGFg5cBIY~64?Elb&tFiqH=WgFNf{|y$3IH#lzF58> zbzGs~SfH;DT|P+lJZ&XD>2P%m?|Y?+Q6}hN)->Xl_+%)5v;)@MNuOL{oTR~>jdy%k zt_9OzPLI7ow!q@TVF<{{uE3KMz%RxHW@0qPK+Hx{o`}BZA-WUym?DAF?`kxVn1R%} zOQgq)93*?-^fhqv<6aH*hy!b2l@kUI_&5|H^1Y#rH<&a!QjTqRxIdb?d5qmP#6W_w zZr~Z=d>}$WdNHi;1ZX-vLVxMO{TcwT@+o zKF1jOZw(B5a_3MKTk4mLA=JT zFloWf{f;C&ovk-{&dprg7REoOT4nw)7r{DFJEGkwy_ukMe1$+fdHkJ`fl#dcrpd)v zG-I`@b6hT+4H1NU2oU2M(owH@HkQ4Ddo!S7M9tYUA#+^_uWsKbII5PNCcyRazOR`w zgKj=V=2p4@Zz>g`Sp4}|{VQCH=jX-X>55#Pcf9R~7#*TG$T3sg95|Ea>{D>*`4mmQ z%Kc~@UnpYVGDIXFJxCSEmbcJLKxfnstZ~j;Y4zpEpDDG%RDc{ zDoYtpKf8xruxAo=B5Ix7^8Vz~Gg@U%?b_@YCMF}?9?=9&iUj= z`B}kiBqjL0aR9)8MMNjdp~ejAVs@AA3x+gX0psq=a^vM(-J5hY7B;u+$c?kob6!eT ztMdfa(014A*{EmVBVopVla**j(j?!9ND4yC&OTwSq4hV{=A2VMI0(FN`%?var>LQ$ z2@81*9K1hgP0+28Zsbn|97Qmvf2%;{jn~L)y^~7!0YWC|5aS|2PkM?lN0&W8x|lnH z;|YF}4dP{K-WaP8pbNy3G$+0Kp%+y(Xi0$5FdW8#t*BnYQ|sHEp(^^B4Ck{Fm5xUr zKP`SwQ1iXh@l;U|J;$!%;lV+uQhm>zlm`s_MWVGAvLd5gZ2V7Zm zWbjnT1TYERcdkRYO|b76xz`Z+a+thDxwCB{P{>T5)tMrlvM$Wl0M$~gi82vV@q~G87V(bx= zsiqTPYKAj&uXcnv$<;#DU%nGv-{;s;-{Ry|0LKgk=gSXQq@y^{UEn`-Qo~bi4UgPw z7?B~}aw_JiU;lZZPp?O4>k-qmhkHAi{>dU5JEzy%605T6ai_8Z=iYA^*f7t)rB`x| zSEzI_U5}Z@{~ii(!R+jjt|8KcI&aED<*Mt---W|dG};B9T2o1Wh3;u`hWhOyEwl(yn&t$>utmD7R=d@cG`e^PeG7+v!0 zYd8PmZ*%NuIEioQu4cGoZ?9y<_e=NMUsVaQ_+W0iPugGv^_+)o@J52Ds@y1&@51y$ zM(+dD5>;|^Q^p^Y=x1>V$1j(E!*flLOB{}UTWX@`o)W^beY=b)g}2S9H<2X(j0SrZV)!$IrX7D%9FkTGb2c^hUm7d|b!jrT z;g|Y&=0VFo=Ui(jP+=S`>Ao0x+1z3E(1gwldwOkK} z9d$=99P3#vavoi#Zl%cYaDu8@b}yqFzc~+yR>pJ86bxl%Kaj_YE8o*1fOJy3l~*fa zUG3Bf?B4_1Q7v~W&+b?gW=nn`H!`5b1NHRvT7$oS_K_TW4gPDeQmOg|x>4 z_mr8{MJ};hEhlths~tsm00@uc;U5?xm|(jqmyk%;m$Xe+v;Hvra=;kDIp8s7^fBMC zC*&)6U+X&8$lhn&R4eY$E|z4bKZ$a+e;&`3A%l@4kXNlW$xsoWMIyv<(6H2jB)-oH zPNNzu&!W^wqq6vpvU0+UL;2Ahm0K}ePK40%y7I&K(KlE~&IEtV9SEvM%EOL(aF!Yn zJ;{B0i@C*OJ285bc7AlO)wJeF&uFtO{nh{*-jwMZS$fcjwxzp$FZv%FLU|r4~8j zxkvVPGu#q-S>iq*+y1m{Az1+v6z;IUsxB^9x7nP2M+GlKxvfj;s)>O&u|7aU_8=IuI+swWMb>I0dNKNECbk4mx#0K9KhIDhn_EA{A=LjvL z_%a(ag2^kh$AfdA7^2z5c_`8tH7aaeypst|EGW*xdYl0shk%`XVW( z-cx<)3u{6DZ}3H{^);Uu?0*{krWZaZ_5T{wO8i*=ljr}`&ykDB%9TYt}FXtXaPzsbZ1>%z%!(k@y#uOwa!<%B-WZ zqSxIBhoaKljB+AQN3`?H8KDN!u21a2#C0z0GlxZgfPF+ypTxfwZ&%>n;Vi3X7s`7( zTfT(I-Pys31;=giSI?zb;>`t_9zskHQVFNG2M0G1{`<*mo+DLYAt-iVezk=%5~^M#(XRoS0#qpgSqr{d|4zS*+^p}n^&PKRV=N1QVq#}4 zE8Aj!J5$%0vypTIN9oO5H7+Y z6_F6q2=TXDMrAY&_E<%N(5uzY$ut5qjo`T{%4|5f+HeprVW=MV^@-$Y$DJ%zQVq42 zqS_!yM0F$lxmb;+lF8;{n#D5r=W^_;bmDV%Pr_1Q0#{JPL`4`=q~zdXNYebK+pH^* z#!*%3Md6n1B46FzX?8pG#7kMu#SR-?o>Eh7V}u{8y)YpcBLmv`wX?m?=;7X1Qh!Mc zU<0kcJ5}}`$D6L~a(?Dgq!VBpB_p71OyJ}%9k2i1kcoknRcJRGozQ82_C4zG!K

{p<0j*dihs4WVd5n3-=2#V4iw$~thhh9S$`FtI0J|#|li{H+LsIx_!@rF2 za7~LG6~$Gc72_o@Q&(`*yY+xr-a~r^>BGwgKIoNm5UT8P)wMRJ2U&S6{T4lemuNmJGCUm~@k&v#TXAQIvH8*ATQJ74npGd|tRUuG!zE7dXh1J* zWaRjhx=W+rK#M#A0#5QqB45)5a;(|Eb$Cr7gR|QHmfXQg^<5Mf>nJraQF1%fKsA^k zbpWwm@J|*iO>DJmC=#R-+_$f++7S>4&7n3o5sA`@IX5~On^^As@pkJO-=N-9D#Kbc z8|HKL0|yp!R|dpPU7OMmnN+G#)#fLNRpn8NYX!yjt1t=w<%g^#GYXR`kjV-V{au0Ew9PL{aNjgIk?7q7?e=(5l%LIGCMs0!OX1HM2PczsU~;fi%l&1)Fn`L(Xcx`4^L40Q@J>Y01kuowe_uj{YwNwYUCy|+qqkl z^@KWC82#+ZJxugfGtIQ%Wb;>w8kr<3@P$0qi>luT4*5QNUGMw7>0{3~xuAL>+?tQ2 zkUh^6{-QPi@+CuC25kcSVN%@Sq?&d?m%5i-4jsBuYuzRm85>p>|0iVDn+D4}z)$h^O|#Y$rP7TeXdMZsBP2`zrK(GkCJ@^Zd) z!-!Cv(^aRT+3^cq(W`7&GcEdl;XK`NVXWA|&$OpCL}SIZ6jX9%&sO?aen}ZhCyu4@ z_r!P0ywWb57|{X<(OSGMhA7!;=&WX&3IMhihx2)0f(!(&>DwqsO`5WQm(XC@sK*t%fB)bCt%Bt4(>%!2Nx_Uunp0pSxnQM#=0f zQi&Q*aV4N?TwRGpb4oiBv*e|eAa~g2#(3WL*8JvMGBhA9kAmCWo zN^R)l#^ByiQNvEcPK{kEQhlb7Gqe_q#m%i3i#jtmV#nm0@(sQ1;~mH6!Knm_D!;_XWa#|GS%96uO);IFwf($VQ{K-%tAkjqsF9fS!L4XagaNAT(`TO`ttKZG&OsYg`V`UGNIr2Gg(aLpMbF17B zRJ9TxNd1Hdvj$n3Q+dAfq4ERy7O{rc)$dX<|C)6>Dd=|W>sx2WhDcrP!=U|LGL?ZLdUeS-x&i;@CwCo>*t zy>P#G`PQF(+{`kD+QXcl&-pa7LLH9ZmH3Be|2;|~=LD0w|2?S)zWH$f9RIkbIz0I| zdnQlR>fS-6XRs%W`TBY|xcer(`v%c^k8U%WJ6mXfc4B~P)yp9*0*mTmbfCdxhCFur%j2zZLZ%d{0(ZfYP`oiF#*~H@%bru-Pbw-dk1F) zEZ?o4=0~fEy0r&*WBzuSioMRg97&?SYined4tvHtY+h^~Gc*C9CHGd1mqRfd#Hb%j z9BYXY9tpu72_XUg3%|7L(w|dFeJKF>ck^p(yHXU^4tZ}fa_5|9f zR9YwlGdA1`BR`^tU$2WbtNbvS@mrcL`+6x@6(UOa%WUB+x5qVVuh$oznC!kxXg|zr z5B2shV>bh#W9orJG50@E#-lb&q{#nrU`6AMGIz zE;Pa6dD)X22@)yS!ST2){rxo<%ox0S`=fHp%k;k+Vg3MuRp;0c;FA)0OY-lwkvtm( zYpxCDp<`xdQH)Kqkr$AdIZEN7qCB&}s~>J;Bw;+$25V71Xpn(OB!KDVT~Drn5g5$C>xU6Z%De2>sNA zkb@lS0!A>qAtXMWCe%05_;3(~ax?gpY)yh^N=hW-8ZeB->`nj4x~>u1`jUW0v}@am zpuA^wQ-wghCvW4l7tMUs`q2$yx0r2nRITdq z^U`O;P=p*zxA6ZK+ne@{SoVc$eESS`auP4slY4VMT(OF)&1v`dHUw+Lbfm?Xf;-y|_34TKDjGd+eQdBfm@GAE?*k87|M*u?v-yNc_3BD#;Ye-!SP^Zl2rfEuj23GL)3x)#o*vKQQris_Po>af?XKyjLm*zz%tji zlwU-J#M6X7GMIJ+ZS8EjdjLfC9+vxd&PKf(veCJtl;JnOiRQ}VeohC_oLTEjyW!TM z8|hT;^?EX(B>N6kh2Fd?d|kL{mub%-zn~qf&n0WhO8sgwsCFERAbjS$sIo~f%buQ+ zD#ePj!r55({!3u2C5XMx&!@+NtwVp@~g`X z_rzJ$bRL|WLFCgmgV3s0y#MSHLCstVBO)|84pgnqu7v67o2nu#c#y%+P&BpwnP%B2=>6$oiOt>Gq@1f zb%;GBam3PWOzqlLv5I8?l2x>VbRAzZ(`?n7OCFe{2%9ajUu$|SbA`FN42w5}MJtmn zEx``=*OD6wv@4G+Ezt*~qbHY*PY3J^d$d)5(uagIYBvscn4G`JDG7WQBmLA)cY}Hs zO+%O!t)Z_A96cM2C6&fJRqmRK0vwsv*B4WbS{^q(tA^e@yam<)k2mbzij4Q|Ii@7% z4IgaH@}p3HP+jJzV)r8x0`h88yO)ubWc&SZ`9u^a6NJPr;RqR;PKVe`n9-?***hT{ zj6a*ENlH*Ex@CqyY4tc?*R<%`=B#AP(Whq~bE5DrkE%@F-gF-Qwvsh+7)nsdx>=tE zUBqroe>qfAiNEOp;IHRf^6%-TQD#JMZv&HzK_A15Vw`J2LH+aM{)SbtoYbJQ)qxGEhJn;ijK*OTNBURWKh_DhhSn~wcegTsX4SZs#x+ANe;^(m z6}{{uacGN9cY+F+GA#rlf5ti%$W}LSWJVJZ(e<>B{0!ZrC zJ;K43vO(szAijgBfEa?4I-8(1i3Uk-A2J>Zy@mM7fvJ4X&290cwhNh?+u{XM@HOnU z4_;TFbW4d(#{lX)o>-yn=sUvGk;z~~e6lme%KoiejegE}4~XiZeV zCseNSCR&wnPe!r1qpnSTj&S%8JY%XDbi@gl}8;1Lk+XrpN%AyI_*Xr-P+V z*kaQ{UOri6Vr7QkAz1&?LFaRGY>s7X^yW}ahejl<1a^VOeP3nSZYtc8=G=(h(gkF2&l(8yQx(VOv7%SLvFd8y8Dvzv~`jp?G9L1JS(G(tmHn=N=rTw{OU^9!EhrdoRCG%%>##cZL-iN04lAZcxGN9SPBV{DDf@QsJr`D9BMmtEM?whtHMo;?PMI$4oYq_Gb^&F-=MPk_exKyu;{2sIZ1?CFjdjNAJ z5Fx1%9a#|~Uu8Nw(^nFiO{ybVc7tBx$`k8zTbq%wr;gB^`Lp6$FV}r}2|~1M!ck8* zVtcj53{zDJ4Zk$6$JNY&#Yt+!aeAP@71DaAqTwWwxZJZ-d$FD)y}nbaCdKq(VmX3y zqw=bz9cIF<6&(z!l_D%!_oKu%PN2I2$TGG0m2Hd@H>dm{9Eoef;jevpGLAU!S<7)( z0*N00-=|>s1CpF(`NwhdHTZp@EIPt1*)QL*&W!6X#E7Be{Q?@ZRC3B#W!svf-x_xs)(qmV%3nQa&qFckbo_S0i2gg_7)@{GzylNXwn(vadMLiH?6o|e4btq=^?6q#BZ~XLM>6O(4 zV%If$X{vMOwO>w*9<}rz9yldri)Ejkb{m- zu}vHg6aTvmuvr)8XW+(B^@=4iY|JND1*1vm zg9slpRFdN1Ol+$>Rv~DVFwyLxCZ~)^`W7PWq{fR2Apce28Z)7j?T=N=g{Lu`Mza%% z!i$c3fXzuu|NCRI#Vb7fVe4jiuFS$Nnem~6g&>9c*ymiMT{D4zyb7gYvO45HR_a>&riGR_NOeKIQX_1j0U;DfZK7`JU6L8?C%B9vst1 z1_G;^ILVd8EX{#0du8eh2?d6kbY1*+cL7qkBr_fG+s^Vz{e?zJr48!Yd^arnrHgQY z%AZw!xS4jyUJh(McPS`$`BjEnr;-Cv5?C*SaI=vtWhwD8k*cM&ie%L0zR2x{ zO;U;3N55Kt9C5v(;h}Vz&pfGl*=aR!#FdB@<;xvG#yCCYN)|GZDH9O?Ku8?y^QlHx zaI?Jg+1y8+Sr^Q_x>HG|Bb*_7g|RE2H=BIlIoauTLsW@0t>oe;%LS7HBe&|paI$$% zyW@sXq5eti{C&_*3Z>X`pe4oE(SvKY7s(9nlsgp)j!VbMqmEnTg=uSkMs6)Y#2CRL zZE~=i4&0N6w@vvI;T-7kpZVp~kQ1#XH#vekshucCi|blmbo$)1bTy5N*2 zOv0O^H@;EA`_cSc$;RG1?3DL>t^wLu*nF%3noQ!4-%s{oboxDTG^0?lbkfs^cFWw} zev+FH&PR4LC`2f`D z5P0Od{Ln$g*Bi%N{c8IU-%}Yl+~6YoDO=;wfuGISK!VWBgsmSdNOOxB0QDgX8t>)T zZGTWxpaig^wHqfD(l!E82iZHP_>KJ$;}9=cU>jcaQ|I-E8YZ>LCc9^bZ+7H+`Tp1; z4K+X+uCIid0Lf&JP{&Etm9eaeg`ePxlO0PTj`Gm`%N*Iedb(hi-ZRCN0+f| zsT;cF3`5ZVAnOYaM{VHLxs<_CAydTIkWG}hm@uNY+fP?9DU~0Z@yw6@2*P0b$(wIE zqI@}M;!(dn@RmO!cZ%XppY~xHz0a;Evxyrx!N%zL8xX$Pg)3iyr{uN#%c&x9Dx640 zM};VDA25LqPse5tA)H}uAU1j&mmGMQ7edUtEKX1Lpk*O~oPvF8>A<;mk7(q3b zl)*d`N-0u*&`YJ0R1UP%d8$$@k4*9l^ZbP;mFMyKvMTkX+Jv9hBT~x3u*NC^1HeRo zZ12&h25hl&=%)3te+kJ(dMy95u!1d3KgtUNi!&O9frQANp*y=9h@BlS-I~Q(cQkQ} zJR*y**dNGij4)}lR(ESrDK&BXOZ|sMqvo5K-^xiw*C=!pm)C54B?9F``|*9dTXVj# zV8~=xzFO#n5jNMox<^z9Y0JMfD`StHudl683LvzxZ>G-{@nXl(m%eNEgTIGAp~>By z7SJY)=G<%8%1M`a6!-(QK#Y`33xeF{6Fb27I*hy6&zdPj@=Xn}eD3&JSPg3>xse?m2_MMjt@y=Qy6AA1Z8qcF)Xo;jM<7y2X;Aq4D zDs+XB{?u<1w0=0!_M#O{xTE`Q_^e!9pqTMMoly10I9`Oao6EmMmojawEzgB%2P9Qy zcEaDx;mE@qzC;qszGUk;QVs%haFYrc_JPVbJhH)`!`$44CL8j05bWn%>NaUEHef|& z1fvx(jWLQ0XN@&$&{Iu?QIXS&HG%1C7UHKk{4%_1a^rGdIS?@Hf3xH0k$v-W#G0q_ zGi@}qCt}M?Jv@NENlOurJ`AP64EG+Mt&DJ>`gK5_Kh#;Lqz7#vJJ>-;*82*i)Uxg0VvmcT@Ga`P z8u84VXc8LQjI?>>Mp0WwHnMBO?V>!90Kezm*efzjGrOaS0?*^%Q#|4x5Q0PgUASPs zxL|ZQ+rm+qPGpZ7VKmWlMU=U~dNp%%hsL!FclSx*{KreFI66J7iK2T_Vn$7;MW|d9 zT%eSp3`6t_vEV?+W7S%nrGirHyLC8kK38-H|D;8g5}LR&BiEnC%~J-Z>kk8q@J6P| zq`xDKRh-t$YJQpX5YUMP0G!-ETGHfgW*HTiPz|kXwA)FG1bctfS%;)yqzO>O=;>E6 zcO%nLeES1~O#-KVJ(|a!gSrvU;h6C?dZ)h1vCVZBsLi~2!Z{1-Wk>2RTGa_`ZSh_f zGMDU%e|-i8wcwBCG)Q~O$%3137u7Cfm7{K3nz+OfTGF2^ z1vOQ|+QviuZ*wG{hsaoqp2>MJTt}D*d3Oua)vZZIQ!z!~%E@-Vw*}LC1Vws0rSLhb zcbOJXG~Ug7&%s1qufknK+H964x+Siz59x!RQ>RUO zuXTjCGbtm3mJChF!xyfGu@2}X@)yi8&B?`;r9AVXS>IqH030UBydix8mWP0@+Zs&cyxJU_o z8NKlf-)(rfJIX%_eW>IR;Y5O!t$-uj@%ayqEqpRIi{BgF!j`9GY$XBljW3F`;^tYy zYHJ+kd64ZkKu--N|4%ZOKAl4$CZc?ol-`k@^$-SrFhilR&|Ov=&)+NqMj}D(T=UD~ z=Ko}B^-O$3AOfvN0y!#}M)hz}49JHh!3V^`LKih8oipeWl-UU~GsIWZrNkH-O=DW( zIGln`rmL)0d7g2qZ`uxusa7=B2^qoXvhQ4Sj>+|+Q^(KK_KVX?bS0=iNFXY} zeh`ZcxkF{E&K$F(-m;X1FDi~=}?=)@_DBlF*YcI5#CGU_Nb-f_k5c|oi z>AipCx!5){%3-x*jqw*D(?^xge`QV*4e|JK7cAXFzb73ut77bSZ3pUKy}x#6;$6L7 znc;DMWCZWYq)v^v!7LbGNK!LPpfJpy;lQfK0t1}Og+fzoC?*XT1u2=pota5G$hHAZ z$XPpwI%VyArc?Fuv0+cx7cktKLAv}P+cuMdoBO(;}CcN+c- zbc~dJGEYsSag-iauS25GIIqL^*HL`;xP2}NcjS7uUN6##AzXry67fC#+^|e)h8)vx z$8=wu8D$sHjNUjZXT9gL%M>t6%WXOXK$WLpnKG;NfUXNOy;Qu^@w4(*-9KvVzQsFD zvfQ(5;$WrQS{hmXBgO5%xB(R?cO;cy{XcbLqbG|@%;yvw;D57Kw)?2LFeG>CZgv4Y zm07T+0o-?L{F8~%?+c;v)XgUgC&44wDohq8%p%NC+9`akm>3kOnTZzH!;=gNfN0U; z3=B2wz8uvd@E}qshM;APm+U*%NyO@4EnIJV@1X(?Z&P5&xR{y4mM_fV`%lyFSmo5N^x*R zl+NI+eM)dSYx$po$9TjHRfnonK*11Arx?-0WeFaOYE_)$Z(EN-%FJ#0O)+mO1^J+m zZM`z6pK~3Tp9~7MmLW^7pK0swBJi5wsgk4J@aoyV z>zy+2vrC~`BF)ExvXhBPXN6;X!ptrSwBspiqA4ci2u0t!Kw9FpLNg}gzPRWt7lQ#3 z1?pumT4Yy@oUqUz$Of^F3VCLiS1UxSRNv6)6itUXHV4sXMq%()F=A4zdtccINwu7g zYoiTWH%Dyriw+n1c@Aa-w19?gO^+4}=Z(43-uN0Z?ZjH-^B#{=H`hYf@L~ih#i*zBTPmVOIhK1HL6di3~OGqCXAYc^;g?+%LOAy&c zFrV8z+ny^=d%>;_7=lNhiQTx`_QT|MbmZ(KaT?kN`2wH%aQ^8~a9f^2yB zh2$2QQCq>WO-*Wp7s=xRY%H%y2r5ufZz5 z3goL+QdHTtt^v=&TV!}kCo%~r_m0}Ef$k$4h~~=aOQYMq<%$0pdM}ZgyF8&-T*OQ5 zefGu@jY^}nAH;^lJQZ4u#3FFm6=&Qgzp4`zsW`>pnw@0<4{?l)WQW8=-|=B}Q>XT? zcH!DNzhxTm0%~$}_>`KTJI_Y9W{>Q6HF&l&pAEVmGlA2qZ;_0KjFX8=f>>U;Q@z6X z;nr_-QA6X?+U%CQzl6tKb>A9(ewgzYwF|zJ;$16O3UAWXFK$)Kdu>6R-HQC;TarM} zC&BA!>2DR0oJXwg`IW_8u%i=7sggob5T>4rnMe$fRBX3xQvD?vKold$Gf0EqonRFu z_qtlxik1A}&=~sRQOo2J*y+4yXYpM{pVH;~=2>TM2Yd^Ek8-98d6q%6mN*;2;cSD2 z@C(k4;V+hT{W9ILNh;hP8KqCLXZZ9gaPP)k^vM|9O5qulKFGS`mU3(2+Y5G?Vf7|k zhXf@coM@A5o;;PN{@`a0#jiXGtMF1=Z#4Z15x9V92=*C!T0h7LFz^3TXE_7hyow`| zm+tEzRBw*!OJSCgm{0BU>i@JEHNDo%b=l6uAiW=+8aEFi+X;}<6kG?%QzD)WY23he zFhj80hGP7G8W1Q~e*B;jp7&j+&nbc;142d{BhPJbhv3c;O%J!Vmw!O(sHwJV*VakQrsdc(f9tjW9zM$3`d)=S2VmxZ|yPw(n zir74K-vtUh5XQeis8Ke`+cXUlV=fd?$N|nql;`f-be&`3B-~t?uAL;yvT-kPi9i)OF`R0B}l8dLA5(Vl?OLq&Bq=@bVq{pHuOZo=9&#loQEfo!h^(^vR?e3bh~jp(utz@ zc%ge<1|?*)Bp#P1$d2*Z4PxaJNQ^#W76?%tWNGY1efDw~wArz^K&~kHS#)MQ*}fnBy;Lj{nr^wG#bAzfZtES%5s)OCQCtd$5s3fdSlIzys{ zVd~VB0r
uU$PGCbFO5Y^D>6Qeon-vhH-`Qmr|Q^fzbHeO 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 z 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

TzIDq@;vMNp0H0}f_7ztymRpOp3Bu* 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

RkRJ2) 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

uhV&`L_0mf7d*J0w#1N+F-uh7vl|b zKXpK)=9g~R;urA& z@P-`~V=$*Ey}Ml3uP=(v^6%7}4qe2ruUbcHX_)@qO{rPbbqU7WK}xFdNteZ6as*Pv?Rqg2?=+muKRmwnKG3 zNxr0GN&XG>9d9-M)D+!wu?C=H5RNCA_C#t0i_ZE~8Cg^eiu&qCaeqNKYjsBOqht6J z#E*QLJHlBL#OI8EFU?0{c38|07xyxb1HVqSUfyr)keDKW4o=HBjq*43*+nkeh&#*% z-f1)~6ig@1=HID+tnU-V64bT;Stx+Utj^KaFQ=b%XpBCg1|Z?y^FO)9J`nwD2cNf&}E~xHYP zL~Yy?rB}&+H{*uVi(<__sHf;FApq3ZYHzWfQ;-J?u(!${u+XASt^cdK@oBr;%@1rV zzA3g@e^ae9%t&ohE+@;GnSwi6nv70Z0%C#K0TSPN2so$M&cp7`SAOyrFjGiQMKecYo1=s8`9i#iT#Rht zMFf*1I`JYR!CVzD;w3HVMy|x-Tn;|x zRtG7f3-L;BE3)q$!S!78!hG{-CfF?>*<}RytzC=fW}&h7Sn5~ z)=|di3rGp3jhjeHUZIL#>1Whv_%zH7wUVnJSUI(kmBp z<-zwP)zh{?r=~6(iNH=->)i+2Gl%RHe$zMCPNCusjdu%ZBmgC(_}hhD7^=KovXCSL zZ561)TX%{nyFe7+FI{Wg3%jfnv{%-bXMkN0@(V02UJx#CP^~uSDFub01#H%T4P+It zYc4gv41~;iR)HoIpxAYq@LNE3wWbbl0r};bDz{SlK50?qr`x2@`Bl@RbAgYT?AlIz z#AMZK>h6Z=#mnY5Ou7T@@3&0YEmNz`AZSODww)TfJH@-{H&X3WGq^_QN^H zG}2Ft8E0=V?Pvw8ZWl@-B^)PzU0~{k-fg8e8uf7~EC4EE1T?GT1>XaW>R3>-c!8&- z1N3uXTM(w7!xQz{>UQdi-r^u5wi`mj-cSDsZ5{djW?NTzD3(x@rV;>ufGxr&g4cGS zv3>B&kc)vj`bhv>0nKXpRM=NVrF%1)_i{@K5(Lz_04X|X!lLs%Tq=@(Xj@$r3<2T9 zNa+Twwm(#?p%}idoNC5yRfD|BCD2m?>SgaL@Bg<|B~-C~BWT_KCu;r|B~a%jcDt

o|N60v)ntSJ^i5zHztM$_ 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�wShhDW+P-PEQhEyMwBJssEeWdc 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%0DTzI|(D?u3Z(WAdm7$V6hrSh+*+k9CMQT&u?EZ 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

6`sh% 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%0DTQYtE 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[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 diff --git a/brendanneojw_ip_master/authorship.json b/brendanneojw_ip_master/authorship.json index d5912b52..da0c6649 100644 --- a/brendanneojw_ip_master/authorship.json +++ b/brendanneojw_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":"brendanneojw"},"content":"mainClassName \u003d \"duke.Duke\";","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"brendanneojw"},"content":" archiveFileName \u003d \"duke.jar\"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"brendanneojw":4,"-":41}},{"path":"data/storageTestNumberOfTasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"T | | buy book","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"D | | cs2103t ip | Feb 22 2023 10:00PM","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"T | | sell book","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"E | | project meeting | Feb 22 2023 06:00PM to Feb 22 2023 09:00PM","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"brendanneojw":4}},{"path":"data/storageTestRewrite.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"T | | do well in CS2103T","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"brendanneojw":1}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"T | | buy book","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"D | | cs2103t ip | Feb 22 2023 10:00PM","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"brendanneojw":2}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates a Deadline task that has the date/time to indicate when the task is due.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":" * Constructor for Deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" * @param description the description of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" * @param by the date/time of when the deadline task is due.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" return \"[D]\" + super.toString() + \" (by: \" + convertDateToString(this.by) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"brendanneojw"},"content":" public String lineToWriteFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":" return \"D | \" + super.lineToWriteFile() + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":" + convertDateToString(this.by);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"brendanneojw":33}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates the main program that will run.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"public class Duke {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" * Constructor for Duke","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" * @param filePath the path of the file for the Storage object to load from.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" tasks \u003d new TaskList(storage.loadFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" Ui.showTaskList(tasks.taskArray, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" Ui.horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" Ui.showExceptionError(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":" * Runs the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"brendanneojw"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"brendanneojw"},"content":" ui.welcomeMessage();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"brendanneojw"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"brendanneojw"},"content":" while (true) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"brendanneojw"},"content":" String userInput \u003d sc.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"brendanneojw"},"content":" Parser parser \u003d new Parser(userInput, this.tasks, this.storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"brendanneojw"},"content":" parser.parse();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"brendanneojw"},"content":" if (parser.isBye()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"brendanneojw"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"brendanneojw"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"brendanneojw":50,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates the created exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"public class DukeException extends RuntimeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":" * Constructor for DukeException","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":" * @param e the message to be used when an exception occur.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":" public DukeException(String e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" super(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"brendanneojw":16}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates an Event task that has the date/time to indicate when the event starts and end.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" * Constructor for Event.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" * @param description the description of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" * @param from the date/time of when the event task starts.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" * @param to the date/time of when the event task ends.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":" return \"[E]\" + super.toString() + \" (from: \" + convertDateToString(this.from)","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"brendanneojw"},"content":" + \" to: \" + convertDateToString(this.to) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":" public String lineToWriteFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"brendanneojw"},"content":" return \"E | \" + super.lineToWriteFile() + \" | \" + convertDateToString(this.from)","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"brendanneojw"},"content":" + \" to \" + convertDateToString(this.to);","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"brendanneojw":37}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates making sense of the user command.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":" private String userInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":" private boolean bye;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" * Constructor for Parser","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" * @param userInput the user input that will be going through the validation check","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" * @param taskList the corresponding TaskList object that contains the tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" * @param storage the corresponding Storage object that contains the file","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" public Parser(String userInput, TaskList taskList, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" this.bye \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"brendanneojw"},"content":" * Checks the user input and perform the corresponding action based on the input.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":" public void parse() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":" String[] input \u003d this.userInput.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":" Ui.horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"brendanneojw"},"content":" switch (input[0]) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"brendanneojw"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"brendanneojw"},"content":" this.taskList.listTasks(this.taskList, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"brendanneojw"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"brendanneojw"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"brendanneojw"},"content":" int taskNum \u003d Integer.parseInt(input[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"brendanneojw"},"content":" this.taskList.markOrUnmarkTask(input[0], taskNum);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"brendanneojw"},"content":" storage.rewriteFile(this.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"brendanneojw"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"BEEPBEEP! You forgot to give a task number!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"brendanneojw"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"WOIWOI! That is an invalid input!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"brendanneojw"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"brendanneojw"},"content":" Ui.goodbyeMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"brendanneojw"},"content":" this.bye \u003d true;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"brendanneojw"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"brendanneojw"},"content":" this.taskList.addTodoTask(input[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"brendanneojw"},"content":" Ui.addedTaskOutput(this.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"brendanneojw"},"content":" storage.addLineToFile(this.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"brendanneojw"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"BEEPBEEP! You forgot to give a description!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"brendanneojw"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"brendanneojw"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"brendanneojw"},"content":" String[] remainLine \u003d input[1].split(\" /\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"brendanneojw"},"content":" this.taskList.addDeadlineOrEventTask(input[0], remainLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"brendanneojw"},"content":" Ui.addedTaskOutput(this.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"brendanneojw"},"content":" storage.addLineToFile(this.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"brendanneojw"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"BEEPBEEP! You forgot to give a description or date/time!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"brendanneojw"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"brendanneojw"},"content":" int taskNum \u003d Integer.parseInt(input[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"brendanneojw"},"content":" this.taskList.deleteTasks(taskNum);","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"brendanneojw"},"content":" storage.rewriteFile(this.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"brendanneojw"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"BEEPBEEP! You forgot to give a task number!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"brendanneojw"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"WOIWOI! That is an invalid input!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"brendanneojw"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"brendanneojw"},"content":" if (input[1].isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"brendanneojw"},"content":" throw new ArrayIndexOutOfBoundsException();","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"brendanneojw"},"content":" this.taskList.findTasks(input[1].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"brendanneojw"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"BEEPBEEP! You forgot to give a keyword for me to search!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"brendanneojw"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"Can you hear the siren? \"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"brendanneojw"},"content":" + \"Because I don\u0027t know what that means!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"brendanneojw"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"brendanneojw"},"content":" Ui.showExceptionError(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"brendanneojw"},"content":" Ui.horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"brendanneojw"},"content":" public boolean isBye() {","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"brendanneojw"},"content":" return this.bye;","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"brendanneojw":109}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates dealing with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" private final String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" * Constructor for Storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" * @param filePath the path of the file to be opened.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" private void createDirectory() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":" File f \u003d new File(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":" if (!hasDirectory() \u0026\u0026 !f.mkdir()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"brendanneojw"},"content":" return;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":" private boolean hasDirectory() {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"brendanneojw"},"content":" File f \u003d new File(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"brendanneojw"},"content":" if (f.exists() \u0026\u0026 f.isDirectory()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"brendanneojw"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"brendanneojw"},"content":" Ui.directoryNotFound();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"brendanneojw"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"brendanneojw"},"content":" private Scanner createOrGetFile() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"brendanneojw"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"brendanneojw"},"content":" if (!f.createNewFile()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"brendanneojw"},"content":" Ui.savedFileFound();","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"brendanneojw"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"brendanneojw"},"content":" Ui.savedFileNotFound();","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"brendanneojw"},"content":" return new Scanner(f);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"brendanneojw"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"HEYHEY! Seems like I couldn\u0027t create the file for you. \"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"brendanneojw"},"content":" + \"Please manually add the file!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"brendanneojw"},"content":" private LocalDateTime undoDateFormatInputFile(String lineInFile) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"brendanneojw"},"content":" return LocalDateTime.parse(lineInFile, DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mma\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"brendanneojw"},"content":" * Returns an array list that contains the tasks being loaded from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"brendanneojw"},"content":" * @return an array list containing the tasks retrieved from the saved file.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"brendanneojw"},"content":" public ArrayList\u003cTask\u003e loadFile() {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"brendanneojw"},"content":" createDirectory();","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"brendanneojw"},"content":" Scanner s \u003d createOrGetFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"brendanneojw"},"content":" ArrayList\u003cTask\u003e taskArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"brendanneojw"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"brendanneojw"},"content":" String[] line \u003d s.nextLine().trim().split(\" \\\\| \", 3);","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"brendanneojw"},"content":" switch (line[0]) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"brendanneojw"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"brendanneojw"},"content":" taskArray.add(new Todo(line[2]));","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"brendanneojw"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"brendanneojw"},"content":" String[] remainLine \u003d line[2].split(\" \\\\| \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"brendanneojw"},"content":" taskArray.add(new Deadline(remainLine[0], undoDateFormatInputFile(remainLine[1])));","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"brendanneojw"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"brendanneojw"},"content":" String[] remainingLine \u003d line[2].split(\" \\\\| \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"brendanneojw"},"content":" String[] getDateTime \u003d remainingLine[1].split(\" to \");","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"brendanneojw"},"content":" taskArray.add(new Event(remainingLine[0],","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"brendanneojw"},"content":" undoDateFormatInputFile(getDateTime[0]), undoDateFormatInputFile(getDateTime[1])));","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"brendanneojw"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"brendanneojw"},"content":" if (line[1].equals(\"X\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"brendanneojw"},"content":" taskArray.get(taskArray.size() - 1).markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"brendanneojw"},"content":" return taskArray;","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"brendanneojw"},"content":" * Appends a new line into the file based off the latest task added into the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"brendanneojw"},"content":" * @param taskList the corresponding task list to read the tasks from.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"brendanneojw"},"content":" * @throws DukeException if the attempt to write to the file fails.","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"brendanneojw"},"content":" public void addLineToFile(TaskList taskList) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"brendanneojw"},"content":" FileWriter fw \u003d new FileWriter(this.filePath, true);","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"brendanneojw"},"content":" if (taskList.taskArray.size() \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"brendanneojw"},"content":" fw.write(taskList.taskArray.get(0).lineToWriteFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"brendanneojw"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"brendanneojw"},"content":" fw.write(\"\\n\" + taskList.taskArray.get(taskList.taskArray.size() - 1).lineToWriteFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"brendanneojw"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"brendanneojw"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"UHOH! Something went wrong when attempting to write to file!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"brendanneojw"},"content":" * Rewrites the entire file based off the changes made in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"brendanneojw"},"content":" * @param taskList the corresponding task list to read the tasks from.","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"brendanneojw"},"content":" * @throws DukeException if the attempt to write to the file fails.","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"brendanneojw"},"content":" public void rewriteFile(TaskList taskList) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"brendanneojw"},"content":" FileWriter fw \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"brendanneojw"},"content":" for (int i \u003d 0; i \u003c taskList.taskArray.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"brendanneojw"},"content":" if (i !\u003d taskList.taskArray.size() - 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"brendanneojw"},"content":" fw.write(taskList.taskArray.get(i).lineToWriteFile() + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"brendanneojw"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"brendanneojw"},"content":" fw.write(taskList.taskArray.get(i).lineToWriteFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"brendanneojw"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"brendanneojw"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"UHOH! Something went wrong when attempting to write to file!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"brendanneojw":140}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates the description of the task and the status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" * Constructor for Task.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" * Returns the string representation of the status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":" * @return a string consisting of the string representation of the status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"brendanneojw"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"brendanneojw"},"content":" * Returns the string representation of the Task.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"brendanneojw"},"content":" * @return a string consisting of the string representation of the Task instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"brendanneojw"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"brendanneojw"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"brendanneojw"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"brendanneojw"},"content":" public void markDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"brendanneojw"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"brendanneojw"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"brendanneojw"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"brendanneojw"},"content":" * Returns the string representation of the line that will be written into a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"brendanneojw"},"content":" * @return a string consisting of the string representation that will be written into a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"brendanneojw"},"content":" public String lineToWriteFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"brendanneojw"},"content":" return (isDone ? \"X\" : \" \") + \" | \" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"brendanneojw"},"content":" * Returns the string representation of the date/time in the format MMM dd yyyy hh:mm.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"brendanneojw"},"content":" * Time is in 12-hours format.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"brendanneojw"},"content":" * @param dateTime the date/time object.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"brendanneojw"},"content":" * @return a string consisting of the date/time in given format.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"brendanneojw"},"content":" public String convertDateToString(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"brendanneojw"},"content":" return dateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mma\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"brendanneojw":70}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates the array list that contains the tasks and operations that operates on the array list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":" protected final ArrayList\u003cTask\u003e taskArray;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" private String[] dateFormats \u003d { \"dd-MM-yyyy\", \"yyyy-MM-dd\", \"dd/MM/yyyy\", \"yyyy/MM/dd\" };","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" private String[] timeFormats \u003d { \"HHmm\", \"HH:mm\" };","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" * Constructor for TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" * @param taskArray the corresponding array list that contains the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" public TaskList(ArrayList\u003cTask\u003e taskArray) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" this.taskArray \u003d taskArray;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":" * Constructor for TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"brendanneojw"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":" this.taskArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":" private LocalDateTime findDateFormatInput(String input) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"brendanneojw"},"content":" LocalDateTime dateTime \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"brendanneojw"},"content":" for (int i \u003d 0; i \u003c dateFormats.length; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"brendanneojw"},"content":" for (int j \u003d 0; j \u003c timeFormats.length; j++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"brendanneojw"},"content":" dateTime \u003d LocalDateTime.parse(input,","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"brendanneojw"},"content":" DateTimeFormatter.ofPattern(dateFormats[i] + \" \" + timeFormats[j]));","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"brendanneojw"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"brendanneojw"},"content":" if (dateTime \u003d\u003d null \u0026\u0026 i \u003d\u003d dateFormats.length - 1 \u0026\u0026 j \u003d\u003d timeFormats.length - 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"HOHOHO! The date/time format seems to be wrong!\"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"brendanneojw"},"content":" + \"\\nPermitted formats for date: dd-mm-yyyy | yyyy-mm-dd | dd/mm/yyyy | yyyy/mm/dd\"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"brendanneojw"},"content":" + \"\\nPermitted formats for time (Only 24-hours format): HH:MM | HHMM\"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"brendanneojw"},"content":" + \"\\nE.g. 22/09/2023 22:00 | 2023-08-30 0100\");","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"brendanneojw"},"content":" return dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"brendanneojw"},"content":" * Adds a Todo task into the array list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"brendanneojw"},"content":" * @param description the description of the task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"brendanneojw"},"content":" public void addTodoTask(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"brendanneojw"},"content":" this.taskArray.add(new Todo(description));","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"brendanneojw"},"content":" * Displays the contents of the array list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"brendanneojw"},"content":" * @param taskList the TaskList object that contains the array list containing the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"brendanneojw"},"content":" * @param isMatch true if the user command is a \"find\" command, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"brendanneojw"},"content":" public void listTasks(TaskList taskList, boolean isMatch) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"brendanneojw"},"content":" Ui.showTaskList(taskList.taskArray, isMatch);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"brendanneojw"},"content":" * Marks or unmarks a task in the array list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"brendanneojw"},"content":" * @param action the string to determine it is to mark or unmark the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"brendanneojw"},"content":" * @param taskNum the task number to be marked or unmarked.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"brendanneojw"},"content":" * @throws DukeException if task number does not exist in the array list.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"brendanneojw"},"content":" public void markOrUnmarkTask(String action, int taskNum) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"brendanneojw"},"content":" if (action.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"brendanneojw"},"content":" Ui.taskMarked(this.taskArray.get(taskNum - 1).isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"brendanneojw"},"content":" this.taskArray.get(taskNum - 1).markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"brendanneojw"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"brendanneojw"},"content":" Ui.taskNotMarked(!this.taskArray.get(taskNum - 1).isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"brendanneojw"},"content":" this.taskArray.get(taskNum - 1).markNotDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"brendanneojw"},"content":" Ui.print(this.taskArray.get(taskNum - 1).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"brendanneojw"},"content":" } catch (NullPointerException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"WARBLE WARBLE! This task number does not exist!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"brendanneojw"},"content":" * Adds a Deadline or Event task into the array list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"brendanneojw"},"content":" * @param action the string to determine where is a deadline or event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"brendanneojw"},"content":" * @param remainLine the string array from splitting that will have the date/time string representation","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"brendanneojw"},"content":" * @throws DukeException if the string doesn\u0027t have a date/time string representation or in an invalid format.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"brendanneojw"},"content":" public void addDeadlineOrEventTask(String action, String[] remainLine)","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"brendanneojw"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"brendanneojw"},"content":" if (action.equals(\"deadline\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"brendanneojw"},"content":" String dateTime \u003d remainLine[1].substring(3);","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"brendanneojw"},"content":" this.taskArray.add(new Deadline(remainLine[0], findDateFormatInput(dateTime)));","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"brendanneojw"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"BEEPBEEP! You forgot to give a \\\"/by date/time\\\" for the deadline!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"brendanneojw"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"brendanneojw"},"content":" if (!remainLine[1].contains(\"from \")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"BEEPBEEP! You forgot to give a \\\"/from date/time\\\" for the event\");","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"brendanneojw"},"content":" String[] splitTo \u003d remainLine[1].split(\"/to \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"brendanneojw"},"content":" String fromDateTime \u003d splitTo[0].substring(5, splitTo[0].length() - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"brendanneojw"},"content":" this.taskArray.add(new Event(remainLine[0],","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"brendanneojw"},"content":" findDateFormatInput(fromDateTime), findDateFormatInput(splitTo[1])));","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"brendanneojw"},"content":" } catch (StringIndexOutOfBoundsException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"BEEPBEEP! You forget to give a \\\"/to date/time\\\" for the event!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"brendanneojw"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"HOHOHO! The date/time format seems to be wrong! \"","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"brendanneojw"},"content":" + \"Please use the format yyyy-mm-dd HH:MM instead! E.g. 2023-08-21 01:00\");","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"brendanneojw"},"content":" * Deletes the task from the array list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"brendanneojw"},"content":" * @param taskNum the corresponding task number to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"brendanneojw"},"content":" * @throws DukeException if the task number does not exist.","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"brendanneojw"},"content":" public void deleteTasks(int taskNum) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"brendanneojw"},"content":" Task taskDeleted \u003d this.taskArray.get(taskNum - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"brendanneojw"},"content":" this.taskArray.remove(taskNum - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"brendanneojw"},"content":" Ui.deleteTaskOutput(taskDeleted.toString(), this.taskArray.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"brendanneojw"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"WARBLE WARBLE, this task number does not exist!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"brendanneojw"},"content":" * Displays the tasks that contains the keyword given by the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"brendanneojw"},"content":" * @param keyword the keyword to find in the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"brendanneojw"},"content":" public void findTasks(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"brendanneojw"},"content":" ArrayList\u003cTask\u003e foundTasksArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"brendanneojw"},"content":" for (int i \u003d 0; i \u003c this.taskArray.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"brendanneojw"},"content":" if (this.taskArray.get(i).toString().contains(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"brendanneojw"},"content":" foundTasksArray.add(this.taskArray.get(i));","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"brendanneojw"},"content":" Ui.showTaskList(foundTasksArray, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"brendanneojw":157}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates a Todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":" * Constructor for Todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":" * @param description the description of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" public String lineToWriteFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" return \"T | \" + super.lineToWriteFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"brendanneojw":26}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates the interactions with the user by displaying lines into the output.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":" * Prints the welcome message when the user starts the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":" public void welcomeMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"WEEWOOWEEWOO WELCOME! I\u0027m Siren\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" * Prints the string that is given.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" * @param string the string to be printed out.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" public static void print(String string) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" System.out.println(string);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"brendanneojw"},"content":" * Prints out a horizontal line.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":" public static void horizontalLine() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"brendanneojw"},"content":" * Prints the goodbye message when the user exits the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"brendanneojw"},"content":" public static void goodbyeMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"WEEEWOOWEEWOO GOODBYE! Hope to see you again soon!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"brendanneojw"},"content":" * Prints the exception\u0027s message.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"brendanneojw"},"content":" * @param e the exception that will have its message printed.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"brendanneojw"},"content":" public static void showExceptionError(DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"brendanneojw"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"brendanneojw"},"content":" * Prints the message to indicate a saved file is found.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"brendanneojw"},"content":" public static void savedFileFound() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"brendanneojw"},"content":" horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"BLINGBLING! You have a saved file! Displaying the contents to you (if any)!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"brendanneojw"},"content":" * Prints the message to indicate there is no saved file found.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"brendanneojw"},"content":" public static void savedFileNotFound() {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"brendanneojw"},"content":" horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"OH NO! I couldn\u0027t find a \\\"duke.txt\\\" file in your data directory, \"","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"brendanneojw"},"content":" + \"I\u0027ll be creating one for you!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"brendanneojw"},"content":" horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"brendanneojw"},"content":" * Prints the message to indicate the specific directory cannot be found.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"brendanneojw"},"content":" public static void directoryNotFound() {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"brendanneojw"},"content":" horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"OH NO! I couldn\u0027t find a \\\"data\\\" directory in your project root directory, \"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"brendanneojw"},"content":" + \"I\u0027ll be creating one for you!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"brendanneojw"},"content":" * Prints the message when the user deletes a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"brendanneojw"},"content":" * @param description the description of task that was deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"brendanneojw"},"content":" * @param arraySize the number of tasks left.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"brendanneojw"},"content":" public static void deleteTaskOutput(String description, int arraySize) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"ALRIGHTY! I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"brendanneojw"},"content":" System.out.println(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"Now you have \" + arraySize + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"brendanneojw"},"content":" * Prints the message when the user adds a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"brendanneojw"},"content":" * @param taskList the TaskList object that contains the array list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"brendanneojw"},"content":" public static void addedTaskOutput(TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"DINGDONG GOT IT! I\u0027ve added this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"brendanneojw"},"content":" System.out.println(taskList.taskArray.get(taskList.taskArray.size() - 1));","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"Now you have \" + taskList.taskArray.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"brendanneojw"},"content":" * Prints the message when the user marks a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"brendanneojw"},"content":" * @param marked true if the task was previously marked, false otherwise.","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"brendanneojw"},"content":" public static void taskMarked(boolean marked) {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"brendanneojw"},"content":" if (marked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"WEEYA! Task was already marked as done!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"brendanneojw"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"GOTCHYA! I\u0027ve marked this task as done!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"brendanneojw"},"content":" * Prints the message when the user unmarks a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"brendanneojw"},"content":" * @param notMarked true if the task was previously unmarked, false otherwise.","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"brendanneojw"},"content":" public static void taskNotMarked(boolean notMarked) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"brendanneojw"},"content":" if (notMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"OOPSIE! Task was already marked as not done!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"brendanneojw"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"HONKHONK! I\u0027ve marked this task as not done yet!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"brendanneojw"},"content":" * Prints the message when the array list containing the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"brendanneojw"},"content":" * @param taskArray the TaskList object that contains the array list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"brendanneojw"},"content":" * @param isMatch true if the user command is a \"find\" command, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"brendanneojw"},"content":" public static void showTaskList(ArrayList\u003cTask\u003e taskArray, boolean isMatch) {","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"brendanneojw"},"content":" if (taskArray.isEmpty() \u0026\u0026 !isMatch) {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"HEYYYYYYYY! There\u0027s nothing to show in your list!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"brendanneojw"},"content":" } else if (taskArray.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"HAIYAAAA! There\u0027s nothing in your list that matches the keyword!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"brendanneojw"},"content":" if (!taskArray.isEmpty() \u0026\u0026 !isMatch) {","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"WHEET WHEET WHEET! Here are the tasks in your list:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"brendanneojw"},"content":" } else if (!taskArray.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"HOOOOOYEAAAAA! Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"brendanneojw"},"content":" for (int i \u003d 0; i \u003c taskArray.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"brendanneojw"},"content":" System.out.println(i + 1 + \".\" + taskArray.get(i));","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"brendanneojw":148}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" public void testSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" Storage storage \u003d new Storage(\"data/storageTestNumberOfTasks.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" ArrayList\u003cTask\u003e taskArray \u003d storage.loadFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" assertEquals(4, taskArray.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" public void testRewrite() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" Storage storage \u003d new Storage(\"data/storageTestRewrite.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" ArrayList\u003cTask\u003e taskArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" taskArray.add(new Todo(\"do well in CS2103T\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":" TaskList tasks \u003d new TaskList(taskArray);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":" FileWriter fw \u003d new FileWriter(new File(\"data/storageTestRewrite.txt\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":" fw.write(\"test\\nto\\nsee\\nif\\noverwrite\\nworks\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"brendanneojw"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"brendanneojw"},"content":" storage.rewriteFile(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"brendanneojw"},"content":" assertEquals(\"[T][ ] do well in CS2103T\", storage.loadFile().get(0).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"brendanneojw":40}},{"path":"src/test/java/duke/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":" public void testMarkDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" Event temp \u003d new Event(\"CS2103T Project Meeting\", LocalDateTime.parse(\"2023-08-31T12:00:00\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" LocalDateTime.parse(\"2023-08-31T15:00:00\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" temp.markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" String expectedOutput \u003d \"[E][X] CS2103T Project Meeting (from: Aug 31 2023 12:00PM to: Aug 31 2023 03:00PM)\";","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" assertEquals(expectedOutput, temp.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" public void testLineToBeWritten() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" Deadline temp \u003d new Deadline(\"iP Tasks\", LocalDateTime.parse(\"2023-09-01T23:59:50\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" String expectedOutput \u003d \"D | | iP Tasks | Sep 01 2023 11:59PM\";","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" assertEquals(expectedOutput, temp.lineToWriteFile());","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"brendanneojw":27}},{"path":"text-ui-test/data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"T | | borrow book","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"T | | borrow book","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"brendanneojw":2}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"event project meeting /from Monday 3pm /to 5pm","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"deadline CS2103T iP /by Aug 24th 2359hrs","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":"unmark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"brendanneojw":12}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":"mainClassName \u003d \"duke.Duke\";","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"brendanneojw"},"content":" mainClass.set(\"duke.Duke\")","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":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"brendanneojw"},"content":" archiveFileName \u003d \"duke.jar\"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"brendanneojw":7,"-":43}},{"path":"data/storageTestNumberOfTasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"T | | buy book","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"D | | cs2103t ip | Feb 22 2023 10:00PM","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"T | | sell book","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"E | | project meeting | Feb 22 2023 06:00PM to Feb 22 2023 09:00PM","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"brendanneojw":4}},{"path":"data/storageTestRewrite.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"T | | do well in CS2103T","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"brendanneojw":1}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"T | | buy book","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"D | | cs2103t ip | Feb 22 2023 10:00PM","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"brendanneojw":2}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates a Deadline task that has the date/time to indicate when the task is due.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":" * Constructor for Deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" * @param description the description of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" * @param by the date/time of when the deadline task is due.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" return \"[D]\" + super.toString() + \" (by: \" + convertDateToString(this.by) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"brendanneojw"},"content":" public String lineToWriteFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":" return \"D | \" + super.lineToWriteFile() + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":" + convertDateToString(this.by);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"brendanneojw":33}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates the main program that will run.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"public class Duke {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" * Constructor for Duke","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" * @param filePath the path of the file for the Storage object to load from.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" tasks \u003d new TaskList(storage.loadFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" Ui.showTaskList(tasks.taskArray, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" Ui.horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" Ui.showExceptionError(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":" * Runs the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"brendanneojw"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"brendanneojw"},"content":" ui.welcomeMessage();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"brendanneojw"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"brendanneojw"},"content":" while (true) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"brendanneojw"},"content":" String userInput \u003d sc.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"brendanneojw"},"content":" Parser parser \u003d new Parser(userInput, this.tasks, this.storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"brendanneojw"},"content":" parser.parse();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"brendanneojw"},"content":" if (parser.isBye()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"brendanneojw"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"brendanneojw"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"brendanneojw":50,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates the created exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"public class DukeException extends RuntimeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":" * Constructor for DukeException","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":" * @param e the message to be used when an exception occur.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":" public DukeException(String e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" super(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"brendanneojw":16}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates an Event task that has the date/time to indicate when the event starts and end.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" * Constructor for Event.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" * @param description the description of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" * @param from the date/time of when the event task starts.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" * @param to the date/time of when the event task ends.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":" return \"[E]\" + super.toString() + \" (from: \" + convertDateToString(this.from)","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"brendanneojw"},"content":" + \" to: \" + convertDateToString(this.to) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":" public String lineToWriteFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"brendanneojw"},"content":" return \"E | \" + super.lineToWriteFile() + \" | \" + convertDateToString(this.from)","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"brendanneojw"},"content":" + \" to \" + convertDateToString(this.to);","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"brendanneojw":37}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates making sense of the user command.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":" private String userInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":" private boolean bye;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" * Constructor for Parser","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" * @param userInput the user input that will be going through the validation check","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" * @param taskList the corresponding TaskList object that contains the tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" * @param storage the corresponding Storage object that contains the file","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" public Parser(String userInput, TaskList taskList, Storage storage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" this.bye \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"brendanneojw"},"content":" * Checks the user input and perform the corresponding action based on the input.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":" public void parse() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":" String[] input \u003d this.userInput.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":" Ui.horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"brendanneojw"},"content":" switch (input[0]) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"brendanneojw"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"brendanneojw"},"content":" this.taskList.listTasks(this.taskList, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"brendanneojw"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"brendanneojw"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"brendanneojw"},"content":" int taskNum \u003d Integer.parseInt(input[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"brendanneojw"},"content":" this.taskList.markOrUnmarkTask(input[0], taskNum);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"brendanneojw"},"content":" storage.rewriteFile(this.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"brendanneojw"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"BEEPBEEP! You forgot to give a task number!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"brendanneojw"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"WOIWOI! That is an invalid input!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"brendanneojw"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"brendanneojw"},"content":" Ui.goodbyeMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"brendanneojw"},"content":" this.bye \u003d true;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"brendanneojw"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"brendanneojw"},"content":" this.taskList.addTodoTask(input[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"brendanneojw"},"content":" Ui.addedTaskOutput(this.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"brendanneojw"},"content":" storage.addLineToFile(this.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"brendanneojw"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"BEEPBEEP! You forgot to give a description!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"brendanneojw"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"brendanneojw"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"brendanneojw"},"content":" String[] remainLine \u003d input[1].split(\" /\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"brendanneojw"},"content":" this.taskList.addDeadlineOrEventTask(input[0], remainLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"brendanneojw"},"content":" Ui.addedTaskOutput(this.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"brendanneojw"},"content":" storage.addLineToFile(this.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"brendanneojw"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"BEEPBEEP! You forgot to give a description or date/time!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"brendanneojw"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"brendanneojw"},"content":" int taskNum \u003d Integer.parseInt(input[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"brendanneojw"},"content":" this.taskList.deleteTasks(taskNum);","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"brendanneojw"},"content":" storage.rewriteFile(this.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"brendanneojw"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"BEEPBEEP! You forgot to give a task number!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"brendanneojw"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"WOIWOI! That is an invalid input!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"brendanneojw"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"brendanneojw"},"content":" if (input[1].isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"brendanneojw"},"content":" throw new ArrayIndexOutOfBoundsException();","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"brendanneojw"},"content":" this.taskList.findTasks(input[1].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"brendanneojw"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"BEEPBEEP! You forgot to give a keyword for me to search!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"brendanneojw"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"Can you hear the siren? \"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"brendanneojw"},"content":" + \"Because I don\u0027t know what that means!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"brendanneojw"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"brendanneojw"},"content":" Ui.showExceptionError(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"brendanneojw"},"content":" Ui.horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"brendanneojw"},"content":" public boolean isBye() {","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"brendanneojw"},"content":" return this.bye;","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"brendanneojw":109}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates dealing with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" private final String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" * Constructor for Storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" * @param filePath the path of the file to be opened.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" private void createDirectory() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":" File f \u003d new File(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":" if (!hasDirectory() \u0026\u0026 !f.mkdir()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"brendanneojw"},"content":" return;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":" private boolean hasDirectory() {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"brendanneojw"},"content":" File f \u003d new File(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"brendanneojw"},"content":" if (f.exists() \u0026\u0026 f.isDirectory()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"brendanneojw"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"brendanneojw"},"content":" Ui.directoryNotFound();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"brendanneojw"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"brendanneojw"},"content":" private Scanner createOrGetFile() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"brendanneojw"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"brendanneojw"},"content":" if (!f.createNewFile()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"brendanneojw"},"content":" Ui.savedFileFound();","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"brendanneojw"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"brendanneojw"},"content":" Ui.savedFileNotFound();","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"brendanneojw"},"content":" return new Scanner(f);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"brendanneojw"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"HEYHEY! Seems like I couldn\u0027t create the file for you. \"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"brendanneojw"},"content":" + \"Please manually add the file!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"brendanneojw"},"content":" private LocalDateTime undoDateFormatInputFile(String lineInFile) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"brendanneojw"},"content":" return LocalDateTime.parse(lineInFile, DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mma\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"brendanneojw"},"content":" * Returns an array list that contains the tasks being loaded from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"brendanneojw"},"content":" * @return an array list containing the tasks retrieved from the saved file.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"brendanneojw"},"content":" public ArrayList\u003cTask\u003e loadFile() {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"brendanneojw"},"content":" createDirectory();","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"brendanneojw"},"content":" Scanner s \u003d createOrGetFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"brendanneojw"},"content":" ArrayList\u003cTask\u003e taskArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"brendanneojw"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"brendanneojw"},"content":" String[] line \u003d s.nextLine().trim().split(\" \\\\| \", 3);","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"brendanneojw"},"content":" switch (line[0]) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"brendanneojw"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"brendanneojw"},"content":" taskArray.add(new Todo(line[2]));","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"brendanneojw"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"brendanneojw"},"content":" String[] remainLine \u003d line[2].split(\" \\\\| \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"brendanneojw"},"content":" taskArray.add(new Deadline(remainLine[0], undoDateFormatInputFile(remainLine[1])));","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"brendanneojw"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"brendanneojw"},"content":" String[] remainingLine \u003d line[2].split(\" \\\\| \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"brendanneojw"},"content":" String[] getDateTime \u003d remainingLine[1].split(\" to \");","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"brendanneojw"},"content":" taskArray.add(new Event(remainingLine[0],","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"brendanneojw"},"content":" undoDateFormatInputFile(getDateTime[0]), undoDateFormatInputFile(getDateTime[1])));","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"brendanneojw"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"brendanneojw"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"brendanneojw"},"content":" if (line[1].equals(\"X\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"brendanneojw"},"content":" taskArray.get(taskArray.size() - 1).markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"brendanneojw"},"content":" return taskArray;","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"brendanneojw"},"content":" * Appends a new line into the file based off the latest task added into the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"brendanneojw"},"content":" * @param taskList the corresponding task list to read the tasks from.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"brendanneojw"},"content":" * @throws DukeException if the attempt to write to the file fails.","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"brendanneojw"},"content":" public void addLineToFile(TaskList taskList) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"brendanneojw"},"content":" FileWriter fw \u003d new FileWriter(this.filePath, true);","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"brendanneojw"},"content":" if (taskList.taskArray.size() \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"brendanneojw"},"content":" fw.write(taskList.taskArray.get(0).lineToWriteFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"brendanneojw"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"brendanneojw"},"content":" fw.write(\"\\n\" + taskList.taskArray.get(taskList.taskArray.size() - 1).lineToWriteFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"brendanneojw"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"brendanneojw"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"UHOH! Something went wrong when attempting to write to file!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"brendanneojw"},"content":" * Rewrites the entire file based off the changes made in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"brendanneojw"},"content":" * @param taskList the corresponding task list to read the tasks from.","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"brendanneojw"},"content":" * @throws DukeException if the attempt to write to the file fails.","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"brendanneojw"},"content":" public void rewriteFile(TaskList taskList) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"brendanneojw"},"content":" FileWriter fw \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"brendanneojw"},"content":" for (int i \u003d 0; i \u003c taskList.taskArray.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"brendanneojw"},"content":" if (i !\u003d taskList.taskArray.size() - 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"brendanneojw"},"content":" fw.write(taskList.taskArray.get(i).lineToWriteFile() + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"brendanneojw"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"brendanneojw"},"content":" fw.write(taskList.taskArray.get(i).lineToWriteFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"brendanneojw"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"brendanneojw"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"UHOH! Something went wrong when attempting to write to file!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"brendanneojw":140}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates the description of the task and the status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" * Constructor for Task.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" * Returns the string representation of the status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":" * @return a string consisting of the string representation of the status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"brendanneojw"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"brendanneojw"},"content":" * Returns the string representation of the Task.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"brendanneojw"},"content":" * @return a string consisting of the string representation of the Task instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"brendanneojw"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"brendanneojw"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"brendanneojw"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"brendanneojw"},"content":" public void markDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"brendanneojw"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"brendanneojw"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"brendanneojw"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"brendanneojw"},"content":" * Returns the string representation of the line that will be written into a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"brendanneojw"},"content":" * @return a string consisting of the string representation that will be written into a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"brendanneojw"},"content":" public String lineToWriteFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"brendanneojw"},"content":" return (isDone ? \"X\" : \" \") + \" | \" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"brendanneojw"},"content":" * Returns the string representation of the date/time in the format MMM dd yyyy hh:mm.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"brendanneojw"},"content":" * Time is in 12-hours format.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"brendanneojw"},"content":" * @param dateTime the date/time object.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"brendanneojw"},"content":" * @return a string consisting of the date/time in given format.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"brendanneojw"},"content":" public String convertDateToString(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"brendanneojw"},"content":" return dateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mma\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"brendanneojw":70}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates the array list that contains the tasks and operations that operates on the array list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":" protected final ArrayList\u003cTask\u003e taskArray;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" private String[] dateFormats \u003d { \"dd-MM-yyyy\", \"yyyy-MM-dd\", \"dd/MM/yyyy\", \"yyyy/MM/dd\" };","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" private String[] timeFormats \u003d { \"HHmm\", \"HH:mm\" };","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" * Constructor for TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" * @param taskArray the corresponding array list that contains the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" public TaskList(ArrayList\u003cTask\u003e taskArray) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" this.taskArray \u003d taskArray;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":" * Constructor for TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"brendanneojw"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":" this.taskArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":" private LocalDateTime findDateFormatInput(String input) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"brendanneojw"},"content":" LocalDateTime dateTime \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"brendanneojw"},"content":" for (int i \u003d 0; i \u003c dateFormats.length; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"brendanneojw"},"content":" for (int j \u003d 0; j \u003c timeFormats.length; j++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"brendanneojw"},"content":" dateTime \u003d LocalDateTime.parse(input,","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"brendanneojw"},"content":" DateTimeFormatter.ofPattern(dateFormats[i] + \" \" + timeFormats[j]));","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"brendanneojw"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"brendanneojw"},"content":" if (dateTime \u003d\u003d null \u0026\u0026 i \u003d\u003d dateFormats.length - 1 \u0026\u0026 j \u003d\u003d timeFormats.length - 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"HOHOHO! The date/time format seems to be wrong!\"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"brendanneojw"},"content":" + \"\\nPermitted formats for date: dd-mm-yyyy | yyyy-mm-dd | dd/mm/yyyy | yyyy/mm/dd\"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"brendanneojw"},"content":" + \"\\nPermitted formats for time (Only 24-hours format): HH:MM | HHMM\"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"brendanneojw"},"content":" + \"\\nE.g. 22/09/2023 22:00 | 2023-08-30 0100\");","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"brendanneojw"},"content":" return dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"brendanneojw"},"content":" * Adds a Todo task into the array list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"brendanneojw"},"content":" * @param description the description of the task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"brendanneojw"},"content":" public void addTodoTask(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"brendanneojw"},"content":" this.taskArray.add(new Todo(description));","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"brendanneojw"},"content":" * Displays the contents of the array list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"brendanneojw"},"content":" * @param taskList the TaskList object that contains the array list containing the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"brendanneojw"},"content":" * @param isMatch true if the user command is a \"find\" command, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"brendanneojw"},"content":" public void listTasks(TaskList taskList, boolean isMatch) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"brendanneojw"},"content":" Ui.showTaskList(taskList.taskArray, isMatch);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"brendanneojw"},"content":" * Marks or unmarks a task in the array list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"brendanneojw"},"content":" * @param action the string to determine it is to mark or unmark the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"brendanneojw"},"content":" * @param taskNum the task number to be marked or unmarked.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"brendanneojw"},"content":" * @throws DukeException if task number does not exist in the array list.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"brendanneojw"},"content":" public void markOrUnmarkTask(String action, int taskNum) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"brendanneojw"},"content":" if (action.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"brendanneojw"},"content":" Ui.taskMarked(this.taskArray.get(taskNum - 1).isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"brendanneojw"},"content":" this.taskArray.get(taskNum - 1).markDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"brendanneojw"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"brendanneojw"},"content":" Ui.taskNotMarked(!this.taskArray.get(taskNum - 1).isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"brendanneojw"},"content":" this.taskArray.get(taskNum - 1).markNotDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"brendanneojw"},"content":" Ui.print(this.taskArray.get(taskNum - 1).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"brendanneojw"},"content":" } catch (NullPointerException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"WARBLE WARBLE! This task number does not exist!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"brendanneojw"},"content":" * Adds a Deadline or Event task into the array list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"brendanneojw"},"content":" * @param action the string to determine where is a deadline or event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"brendanneojw"},"content":" * @param remainLine the string array from splitting that will have the date/time string representation","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"brendanneojw"},"content":" * @throws DukeException if the string doesn\u0027t have a date/time string representation or in an invalid format.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"brendanneojw"},"content":" public void addDeadlineOrEventTask(String action, String[] remainLine)","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"brendanneojw"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"brendanneojw"},"content":" if (action.equals(\"deadline\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"brendanneojw"},"content":" String dateTime \u003d remainLine[1].substring(3);","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"brendanneojw"},"content":" this.taskArray.add(new Deadline(remainLine[0], findDateFormatInput(dateTime)));","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"brendanneojw"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"BEEPBEEP! You forgot to give a \\\"/by date/time\\\" for the deadline!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"brendanneojw"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"brendanneojw"},"content":" if (!remainLine[1].contains(\"from \")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"BEEPBEEP! You forgot to give a \\\"/from date/time\\\" for the event\");","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"brendanneojw"},"content":" String[] splitTo \u003d remainLine[1].split(\"/to \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"brendanneojw"},"content":" String fromDateTime \u003d splitTo[0].substring(5, splitTo[0].length() - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"brendanneojw"},"content":" this.taskArray.add(new Event(remainLine[0],","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"brendanneojw"},"content":" findDateFormatInput(fromDateTime), findDateFormatInput(splitTo[1])));","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"brendanneojw"},"content":" } catch (StringIndexOutOfBoundsException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"BEEPBEEP! You forget to give a \\\"/to date/time\\\" for the event!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"brendanneojw"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"HOHOHO! The date/time format seems to be wrong! \"","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"brendanneojw"},"content":" + \"Please use the format yyyy-mm-dd HH:MM instead! E.g. 2023-08-21 01:00\");","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"brendanneojw"},"content":" * Deletes the task from the array list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"brendanneojw"},"content":" * @param taskNum the corresponding task number to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"brendanneojw"},"content":" * @throws DukeException if the task number does not exist.","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"brendanneojw"},"content":" public void deleteTasks(int taskNum) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"brendanneojw"},"content":" Task taskDeleted \u003d this.taskArray.get(taskNum - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"brendanneojw"},"content":" this.taskArray.remove(taskNum - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"brendanneojw"},"content":" Ui.deleteTaskOutput(taskDeleted.toString(), this.taskArray.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"brendanneojw"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"brendanneojw"},"content":" throw new DukeException(\"WARBLE WARBLE, this task number does not exist!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"brendanneojw"},"content":" * Displays the tasks that contains the keyword given by the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"brendanneojw"},"content":" * @param keyword the keyword to find in the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"brendanneojw"},"content":" public void findTasks(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"brendanneojw"},"content":" ArrayList\u003cTask\u003e foundTasksArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"brendanneojw"},"content":" for (int i \u003d 0; i \u003c this.taskArray.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"brendanneojw"},"content":" if (this.taskArray.get(i).toString().contains(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"brendanneojw"},"content":" foundTasksArray.add(this.taskArray.get(i));","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"brendanneojw"},"content":" Ui.showTaskList(foundTasksArray, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"brendanneojw":157}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates a Todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":" * Constructor for Todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":" * @param description the description of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" public String lineToWriteFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" return \"T | \" + super.lineToWriteFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"brendanneojw":26}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":" * This class encapsulates the interactions with the user by displaying lines into the output.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":" * Prints the welcome message when the user starts the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":" public void welcomeMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"WEEWOOWEEWOO WELCOME! I\u0027m Siren\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" * Prints the string that is given.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" * @param string the string to be printed out.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" public static void print(String string) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" System.out.println(string);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"brendanneojw"},"content":" * Prints out a horizontal line.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":" public static void horizontalLine() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"brendanneojw"},"content":" * Prints the goodbye message when the user exits the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"brendanneojw"},"content":" public static void goodbyeMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"WEEEWOOWEEWOO GOODBYE! Hope to see you again soon!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"brendanneojw"},"content":" * Prints the exception\u0027s message.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"brendanneojw"},"content":" * @param e the exception that will have its message printed.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"brendanneojw"},"content":" public static void showExceptionError(DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"brendanneojw"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"brendanneojw"},"content":" * Prints the message to indicate a saved file is found.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"brendanneojw"},"content":" public static void savedFileFound() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"brendanneojw"},"content":" horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"BLINGBLING! You have a saved file! Displaying the contents to you (if any)!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"brendanneojw"},"content":" * Prints the message to indicate there is no saved file found.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"brendanneojw"},"content":" public static void savedFileNotFound() {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"brendanneojw"},"content":" horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"OH NO! I couldn\u0027t find a \\\"duke.txt\\\" file in your data directory, \"","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"brendanneojw"},"content":" + \"I\u0027ll be creating one for you!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"brendanneojw"},"content":" horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"brendanneojw"},"content":" * Prints the message to indicate the specific directory cannot be found.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"brendanneojw"},"content":" public static void directoryNotFound() {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"brendanneojw"},"content":" horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"OH NO! I couldn\u0027t find a \\\"data\\\" directory in your project root directory, \"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"brendanneojw"},"content":" + \"I\u0027ll be creating one for you!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"brendanneojw"},"content":" * Prints the message when the user deletes a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"brendanneojw"},"content":" * @param description the description of task that was deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"brendanneojw"},"content":" * @param arraySize the number of tasks left.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"brendanneojw"},"content":" public static void deleteTaskOutput(String description, int arraySize) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"ALRIGHTY! I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"brendanneojw"},"content":" System.out.println(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"Now you have \" + arraySize + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"brendanneojw"},"content":" * Prints the message when the user adds a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"brendanneojw"},"content":" * @param taskList the TaskList object that contains the array list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"brendanneojw"},"content":" public static void addedTaskOutput(TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"DINGDONG GOT IT! I\u0027ve added this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"brendanneojw"},"content":" System.out.println(taskList.taskArray.get(taskList.taskArray.size() - 1));","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"Now you have \" + taskList.taskArray.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"brendanneojw"},"content":" * Prints the message when the user marks a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"brendanneojw"},"content":" * @param marked true if the task was previously marked, false otherwise.","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"brendanneojw"},"content":" public static void taskMarked(boolean marked) {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"brendanneojw"},"content":" if (marked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"WEEYA! Task was already marked as done!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"brendanneojw"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"GOTCHYA! I\u0027ve marked this task as done!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"brendanneojw"},"content":" * Prints the message when the user unmarks a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"brendanneojw"},"content":" * @param notMarked true if the task was previously unmarked, false otherwise.","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"brendanneojw"},"content":" public static void taskNotMarked(boolean notMarked) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"brendanneojw"},"content":" if (notMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"OOPSIE! Task was already marked as not done!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"brendanneojw"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"HONKHONK! I\u0027ve marked this task as not done yet!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"brendanneojw"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"brendanneojw"},"content":" * Prints the message when the array list containing the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"brendanneojw"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"brendanneojw"},"content":" * @param taskArray the TaskList object that contains the array list containing the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"brendanneojw"},"content":" * @param isMatch true if the user command is a \"find\" command, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"brendanneojw"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"brendanneojw"},"content":" public static void showTaskList(ArrayList\u003cTask\u003e taskArray, boolean isMatch) {","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"brendanneojw"},"content":" if (taskArray.isEmpty() \u0026\u0026 !isMatch) {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"HEYYYYYYYY! There\u0027s nothing to show in your list!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"brendanneojw"},"content":" } else if (taskArray.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"HAIYAAAA! There\u0027s nothing in your list that matches the keyword!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"brendanneojw"},"content":" if (!taskArray.isEmpty() \u0026\u0026 !isMatch) {","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"WHEET WHEET WHEET! Here are the tasks in your list:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"brendanneojw"},"content":" } else if (!taskArray.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"brendanneojw"},"content":" System.out.println(\"HOOOOOYEAAAAA! Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"brendanneojw"},"content":" for (int i \u003d 0; i \u003c taskArray.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"brendanneojw"},"content":" System.out.println(i + 1 + \".\" + taskArray.get(i));","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"brendanneojw":148}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" public void testSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" Storage storage \u003d new Storage(\"data/storageTestNumberOfTasks.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" ArrayList\u003cTask\u003e taskArray \u003d storage.loadFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" assertEquals(4, taskArray.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" public void testRewrite() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" Storage storage \u003d new Storage(\"data/storageTestRewrite.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" ArrayList\u003cTask\u003e taskArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" taskArray.add(new Todo(\"do well in CS2103T\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":" TaskList tasks \u003d new TaskList(taskArray);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"brendanneojw"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"brendanneojw"},"content":" FileWriter fw \u003d new FileWriter(new File(\"data/storageTestRewrite.txt\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"brendanneojw"},"content":" fw.write(\"test\\nto\\nsee\\nif\\noverwrite\\nworks\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"brendanneojw"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"brendanneojw"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"brendanneojw"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"brendanneojw"},"content":" storage.rewriteFile(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"brendanneojw"},"content":" assertEquals(\"[T][ ] do well in CS2103T\", storage.loadFile().get(0).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"brendanneojw":40}},{"path":"src/test/java/duke/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"brendanneojw"},"content":" public void testMarkDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"brendanneojw"},"content":" Event temp \u003d new Event(\"CS2103T Project Meeting\", LocalDateTime.parse(\"2023-08-31T12:00:00\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"brendanneojw"},"content":" LocalDateTime.parse(\"2023-08-31T15:00:00\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"brendanneojw"},"content":" temp.markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"brendanneojw"},"content":" String expectedOutput \u003d \"[E][X] CS2103T Project Meeting (from: Aug 31 2023 12:00PM to: Aug 31 2023 03:00PM)\";","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"brendanneojw"},"content":" assertEquals(expectedOutput, temp.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"brendanneojw"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"brendanneojw"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"brendanneojw"},"content":" public void testLineToBeWritten() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"brendanneojw"},"content":" Deadline temp \u003d new Deadline(\"iP Tasks\", LocalDateTime.parse(\"2023-09-01T23:59:50\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"brendanneojw"},"content":" String expectedOutput \u003d \"D | | iP Tasks | Sep 01 2023 11:59PM\";","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"brendanneojw"},"content":" assertEquals(expectedOutput, temp.lineToWriteFile());","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"brendanneojw"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"brendanneojw"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"brendanneojw":27}},{"path":"text-ui-test/data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"T | | borrow book","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"T | | borrow book","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"brendanneojw":2}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"brendanneojw"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"brendanneojw"},"content":"event project meeting /from Monday 3pm /to 5pm","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"brendanneojw"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"brendanneojw"},"content":"deadline CS2103T iP /by Aug 24th 2359hrs","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"brendanneojw"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"brendanneojw"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"brendanneojw"},"content":"unmark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"brendanneojw"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"brendanneojw"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"brendanneojw"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"brendanneojw"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"brendanneojw"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"brendanneojw":12}}] diff --git a/brendanneojw_ip_master/commits.json b/brendanneojw_ip_master/commits.json index 5ecd4166..7a2de9de 100644 --- a/brendanneojw_ip_master/commits.json +++ b/brendanneojw_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"brendanneojw":[{"date":"2023-08-23","commitResults":[{"hash":"a0b2704e711258f82760676da617a1c7de170c6e","isMergeCommit":false,"messageTitle":"Implemented Level 0: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"e1fa0d3c153280418f9cd53d130cbe4035209218","isMergeCommit":false,"messageTitle":"Implemented Level 1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}},{"hash":"cdf4007c8d72be40f30a8e93cb448ba80247d628","isMergeCommit":false,"messageTitle":"Implemented Level 2: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":3}}},{"hash":"5aff3f13392465b61f381a2b88170d91e66c676a","isMergeCommit":false,"messageTitle":"Implemented Level 3: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":13}}},{"hash":"238a9da46444bc54a622ef35b82e0c9fbfb40886","isMergeCommit":false,"messageTitle":"Implemented Level 4: ToDo, Event, Deadline Changed if-else statements to switch statement","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":95,"deletions":30}}},{"hash":"9ca456def2fff3287785a8bcf0bf6cdf027c6003","isMergeCommit":false,"messageTitle":"Implemented A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"fea06461c5933a49c576170085c129a6c4845d5b","isMergeCommit":false,"messageTitle":"Implemented Level 5: Handle Errors Made changes to follow Java coding standard","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":50}}},{"hash":"2e6762c1f9b9c8e1f80e5b980c98738a0da7db40","isMergeCommit":false,"messageTitle":"Implemented Level 6: Delete Handled more invalid inputs for deadline and event actions","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":27}}}]},{"date":"2023-08-27","commitResults":[{"hash":"d8b83e8c28e545144aeb3975b527a456cf54ee38","isMergeCommit":false,"messageTitle":"Implement Level 7: Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":141,"deletions":9}}},{"hash":"7ba8838027566cca955ffb828835ea5d24a151d4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"b6c6ab3bab63dfc926469d62cd2e5798c068364a","isMergeCommit":false,"messageTitle":"Implement Level 8: Date and Time of various formats","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":4},"java":{"insertions":79,"deletions":18}}},{"hash":"e123817bf717628a3d59a279bc95be36c7de6023","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"2927653ec6cce85df8017ca515eeb92a96339d44","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP by adding extracting classes from Duke.java","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":5},"java":{"insertions":419,"deletions":292}}},{"hash":"5e6847e0b6cd46918598ad8a1be7de417fdc4291","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"c83ce95a4919212ccfd08d901a9261e00c4b725d","isMergeCommit":false,"messageTitle":"Implement A-Packages by putting all classes into one package duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"bd28bc316beff0ceca6e7e48f7d6618f65b0d255","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"e270942eba6aa727277b0b1e24fcc90ded1f079b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3e8326f553cd2345690828eb9168c46868ac0828","isMergeCommit":false,"messageTitle":"Implement A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"1eff3de11834e361b6f8978be812165732a3bfdb","isMergeCommit":false,"messageTitle":"Implement A-JUnit tests on Task.java and Storage.java","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":67,"deletions":10}}},{"hash":"40f0f5a94930ef5e4e9fd77c5c4227c5027d98a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["v0.1","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"bc9f59cfb62a969ef7b9e7d9b337ef822979eee5","isMergeCommit":false,"messageTitle":"Implement A.jar by adding details into build.gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0}}},{"hash":"67f8899f440ec311a66fd0e25afb7478f13b16c1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"7bebe31158756857d71f4b0fb9cd467e5836e762","isMergeCommit":false,"messageTitle":"Implement A-JavaDoc into all class files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":262,"deletions":47}}},{"hash":"334c4a33608282eb456f98c6dfc3f7ed1abeeb63","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"79d7f880fd5b440403fa86970cd947ab25d2af1c","isMergeCommit":false,"messageTitle":"Implement A-CodingStandard by following Java coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":10}}},{"hash":"cd0e37e5647ab289d78e76d86536a012254b3432","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"9c7a352b25c10320dd4bd3e1ac9ccc6e2dfa5d31","isMergeCommit":false,"messageTitle":"Implement Level 9: Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":23}}},{"hash":"6c16d2dbe8db477c183f567438ce010b02ef54dc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"brendanneojw":{"java":853,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":4,"txt":21}},"authorContributionVariance":{"brendanneojw":44501.23},"authorDisplayNameMap":{"brendanneojw":"CS2103T-W16-3 BREN.. WEI"}} +{"authorDailyContributionsMap":{"brendanneojw":[{"date":"2023-08-23","commitResults":[{"hash":"a0b2704e711258f82760676da617a1c7de170c6e","isMergeCommit":false,"messageTitle":"Implemented Level 0: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"e1fa0d3c153280418f9cd53d130cbe4035209218","isMergeCommit":false,"messageTitle":"Implemented Level 1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}},{"hash":"cdf4007c8d72be40f30a8e93cb448ba80247d628","isMergeCommit":false,"messageTitle":"Implemented Level 2: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":3}}},{"hash":"5aff3f13392465b61f381a2b88170d91e66c676a","isMergeCommit":false,"messageTitle":"Implemented Level 3: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":13}}},{"hash":"238a9da46444bc54a622ef35b82e0c9fbfb40886","isMergeCommit":false,"messageTitle":"Implemented Level 4: ToDo, Event, Deadline Changed if-else statements to switch statement","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":95,"deletions":30}}},{"hash":"9ca456def2fff3287785a8bcf0bf6cdf027c6003","isMergeCommit":false,"messageTitle":"Implemented A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"fea06461c5933a49c576170085c129a6c4845d5b","isMergeCommit":false,"messageTitle":"Implemented Level 5: Handle Errors Made changes to follow Java coding standard","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":50}}},{"hash":"2e6762c1f9b9c8e1f80e5b980c98738a0da7db40","isMergeCommit":false,"messageTitle":"Implemented Level 6: Delete Handled more invalid inputs for deadline and event actions","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":27}}}]},{"date":"2023-08-27","commitResults":[{"hash":"d8b83e8c28e545144aeb3975b527a456cf54ee38","isMergeCommit":false,"messageTitle":"Implement Level 7: Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":141,"deletions":9}}},{"hash":"7ba8838027566cca955ffb828835ea5d24a151d4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"b6c6ab3bab63dfc926469d62cd2e5798c068364a","isMergeCommit":false,"messageTitle":"Implement Level 8: Date and Time of various formats","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":4},"java":{"insertions":79,"deletions":18}}},{"hash":"e123817bf717628a3d59a279bc95be36c7de6023","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"2927653ec6cce85df8017ca515eeb92a96339d44","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP by adding extracting classes from Duke.java","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":5},"java":{"insertions":419,"deletions":292}}},{"hash":"5e6847e0b6cd46918598ad8a1be7de417fdc4291","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"c83ce95a4919212ccfd08d901a9261e00c4b725d","isMergeCommit":false,"messageTitle":"Implement A-Packages by putting all classes into one package duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"bd28bc316beff0ceca6e7e48f7d6618f65b0d255","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"e270942eba6aa727277b0b1e24fcc90ded1f079b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3e8326f553cd2345690828eb9168c46868ac0828","isMergeCommit":false,"messageTitle":"Implement A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"1eff3de11834e361b6f8978be812165732a3bfdb","isMergeCommit":false,"messageTitle":"Implement A-JUnit tests on Task.java and Storage.java","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":67,"deletions":10}}},{"hash":"40f0f5a94930ef5e4e9fd77c5c4227c5027d98a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["v0.1","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"bc9f59cfb62a969ef7b9e7d9b337ef822979eee5","isMergeCommit":false,"messageTitle":"Implement A.jar by adding details into build.gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0}}},{"hash":"67f8899f440ec311a66fd0e25afb7478f13b16c1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"7bebe31158756857d71f4b0fb9cd467e5836e762","isMergeCommit":false,"messageTitle":"Implement A-JavaDoc into all class files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":262,"deletions":47}}},{"hash":"334c4a33608282eb456f98c6dfc3f7ed1abeeb63","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"79d7f880fd5b440403fa86970cd947ab25d2af1c","isMergeCommit":false,"messageTitle":"Implement A-CodingStandard by following Java coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":10}}},{"hash":"cd0e37e5647ab289d78e76d86536a012254b3432","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"9c7a352b25c10320dd4bd3e1ac9ccc6e2dfa5d31","isMergeCommit":false,"messageTitle":"Implement Level 9: Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":23}}},{"hash":"6c16d2dbe8db477c183f567438ce010b02ef54dc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"f16db20285ea070da2f630c9e9958fb725403de3","isMergeCommit":false,"messageTitle":"Implement A-CheckStyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"3cb40e896732890cd706892f165feedf7ee8de08","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"brendanneojw":{"java":853,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":7,"txt":21}},"authorContributionVariance":{"brendanneojw":36572.62},"authorDisplayNameMap":{"brendanneojw":"CS2103T-W16-3 BREN.. WEI"}} diff --git a/butteredyakiimo_ip_master/authorship.json b/butteredyakiimo_ip_master/authorship.json index 6047e444..b712ef3f 100644 --- a/butteredyakiimo_ip_master/authorship.json +++ b/butteredyakiimo_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"butteredyakiimo":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":"butteredyakiimo"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"butteredyakiimo":2}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"import duke.exceptions.InvalidStartEndException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":"//copy this into the actual duke.Duke file later!1!!!!","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" private Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" storage \u003d new Storage(filePath, ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" tasks \u003d new TaskList(storage.loadTasks(), ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" this.ui.greeting();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" Parser parser \u003d new Parser(this.storage, this.tasks, this.ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" if (parser.isGoodbye(input)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" parser.parseInput(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" this.ui.bye();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":" new Duke(\"./data/duke.txt\").run();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"butteredyakiimo":36,"-":3}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import duke.exceptions.*;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":" * deals with making sense of the user commands","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":"public class Parser {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" public Parser(Storage storage, TaskList tasks, Ui ui) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" //credit: https://www.freecodecamp.org/news/java-string-to-int-how-to-convert-a-string-to-an-integer/","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" private static boolean isNumber(String s) {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" return s !\u003d null \u0026\u0026 s.matches(\"[0-9.]+\");","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" public boolean isGoodbye(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":" public static LocalDateTime stringToDateTime(String str) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" //check if dateTime has correct format: ie. YYYY-MM-DD 00:00","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime dateTime \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":" dateTime \u003d LocalDateTime.parse(str, formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":" return dateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":" public void parseInput(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"butteredyakiimo"},"content":" String[] inputArr \u003d input.split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"butteredyakiimo"},"content":" String command \u003d inputArr[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"butteredyakiimo"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"butteredyakiimo"},"content":" if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"butteredyakiimo"},"content":" tasks.listTasks();","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"butteredyakiimo"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"butteredyakiimo"},"content":" if (inputArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoTaskIDException();","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"butteredyakiimo"},"content":" String strIndex \u003d inputArr[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"butteredyakiimo"},"content":" if (isNumber(strIndex)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"butteredyakiimo"},"content":" int index \u003d Integer.parseInt(strIndex) - 1; //because index starts from 1","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"butteredyakiimo"},"content":" tasks.deleteTask(index, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"butteredyakiimo"},"content":" //case where a number was not provided","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"butteredyakiimo"},"content":" throw new InvalidTaskIDException();","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"butteredyakiimo"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"butteredyakiimo"},"content":" if (inputArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoTaskIDException();","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"butteredyakiimo"},"content":" String strIndex \u003d inputArr[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"butteredyakiimo"},"content":" if (isNumber(strIndex)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"butteredyakiimo"},"content":" int index \u003d Integer.parseInt(strIndex) - 1; //because index starts from 1","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"butteredyakiimo"},"content":" if (tasks.isValidTaskID(index)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"butteredyakiimo"},"content":" tasks.markTask(index, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"butteredyakiimo"},"content":" throw new InvalidTaskIDException();","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"butteredyakiimo"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"butteredyakiimo"},"content":" if (inputArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoTaskIDException();","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"butteredyakiimo"},"content":" String strIndex \u003d inputArr[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"butteredyakiimo"},"content":" if (isNumber(strIndex)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"butteredyakiimo"},"content":" int index \u003d Integer.parseInt(strIndex) - 1; //because index starts from 1","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"butteredyakiimo"},"content":" if (tasks.isValidTaskID(index)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"butteredyakiimo"},"content":" tasks.unmarkTask(index, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"butteredyakiimo"},"content":" throw new InvalidTaskIDException();","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"butteredyakiimo"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"butteredyakiimo"},"content":" parseToDo(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"butteredyakiimo"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"butteredyakiimo"},"content":" parseDeadline(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"butteredyakiimo"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"butteredyakiimo"},"content":" parseEvent(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"butteredyakiimo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"butteredyakiimo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"butteredyakiimo"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"butteredyakiimo"},"content":" public void parseToDo(String input) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"butteredyakiimo"},"content":" String[] inputArr \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"butteredyakiimo"},"content":" if (inputArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoDescException();","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"butteredyakiimo"},"content":" if (inputArr[1].isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoDescException();","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"butteredyakiimo"},"content":" //0 for unmarked, any other number for marked","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"butteredyakiimo"},"content":" ToDo toDo \u003d new ToDo(0, inputArr[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"butteredyakiimo"},"content":" tasks.addTask(toDo, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"butteredyakiimo"},"content":" public void parseDeadline(String input) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"butteredyakiimo"},"content":" String[] inputArr \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"butteredyakiimo"},"content":" if (inputArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoDescException();","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"butteredyakiimo"},"content":" String afterCommand \u003d inputArr[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"butteredyakiimo"},"content":" String[] arr \u003d afterCommand.split(\" /by \", 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"butteredyakiimo"},"content":" if (arr.length \u003c 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"butteredyakiimo"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"butteredyakiimo"},"content":" String desc \u003d arr[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"butteredyakiimo"},"content":" String date \u003d arr[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"butteredyakiimo"},"content":" if (desc.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoDescException();","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"butteredyakiimo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime dateTime \u003d stringToDateTime(date);","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"butteredyakiimo"},"content":" Deadline deadline \u003d new Deadline(0, desc, dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"butteredyakiimo"},"content":" tasks.addTask(deadline, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"butteredyakiimo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"butteredyakiimo"},"content":" ui.showInvalidDateFormat();","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"butteredyakiimo"},"content":" public void parseEvent(String input) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"butteredyakiimo"},"content":" String[] inputArr \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"butteredyakiimo"},"content":" if (inputArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoDescException();","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"butteredyakiimo"},"content":" } else if (inputArr[1].isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoDescException();","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"butteredyakiimo"},"content":" String afterCommand \u003d inputArr[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"butteredyakiimo"},"content":" String[] arr \u003d afterCommand.split(\" /from \", 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"butteredyakiimo"},"content":" if (arr[0].isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoDescException();","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"butteredyakiimo"},"content":" } else if (arr.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"butteredyakiimo"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"butteredyakiimo"},"content":" String task \u003d arr[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"butteredyakiimo"},"content":" String start \u003d arr[1].split(\" /to \", 2)[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"butteredyakiimo"},"content":" if (start.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoStartException();","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"butteredyakiimo"},"content":" String[] arrWithEnd \u003d afterCommand.split(\" /to \", 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"butteredyakiimo"},"content":" if (arrWithEnd.length \u003d\u003d 1) { //no end date added","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoEndException();","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"butteredyakiimo"},"content":" String end \u003d arrWithEnd[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"butteredyakiimo"},"content":" if (end.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoEndException();","lastModifiedDate":"2023-09-04"},{"lineNumber":175,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":176,"author":{"gitId":"butteredyakiimo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime startDateTime \u003d stringToDateTime(start);","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime endDateTime \u003d stringToDateTime(end);","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"butteredyakiimo"},"content":" Event event \u003d new Event(0, task, startDateTime, endDateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":180,"author":{"gitId":"butteredyakiimo"},"content":" tasks.addTask(event, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"butteredyakiimo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":182,"author":{"gitId":"butteredyakiimo"},"content":" ui.showInvalidDateFormat();","lastModifiedDate":"2023-09-04"},{"lineNumber":183,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":185,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":186,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":187,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":190,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":190}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import duke.exceptions.InvalidStartEndException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"import duke.tasks.*;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" * deals with loading tasks from the file, and saving tasks in the file","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":"public class Storage {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" private String path;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" public Storage(String path, Ui ui) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" this.path \u003d path;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" public static LocalDateTime stringToDateTime(String str) throws DateTimeParseException {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" //check if dateTime has correct format: ie. YYYY-MM-DD 00:00","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(str, formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" return dateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" public File createDataFile() {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" File dataFile \u003d new File(this.path);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" Path dirPath \u003d Paths.get(\"./data/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":" if (!Files.exists(dirPath)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" Files.createDirectory(dirPath);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":" dataFile.createNewFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"Unable to create file!!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"butteredyakiimo"},"content":" return dataFile;","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"butteredyakiimo"},"content":" public ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"butteredyakiimo"},"content":" File dataFile \u003d new File(this.path);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"butteredyakiimo"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"butteredyakiimo"},"content":" dataFile \u003d createDataFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"butteredyakiimo"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"butteredyakiimo"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"butteredyakiimo"},"content":" Scanner sc \u003d new Scanner(dataFile);","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"butteredyakiimo"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"butteredyakiimo"},"content":" String task \u003d sc.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"butteredyakiimo"},"content":" if (!task.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"butteredyakiimo"},"content":" // | is a special symbol","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"butteredyakiimo"},"content":" String[] taskDetails \u003d task.split(\" \" + \"\\\\|\" + \" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"butteredyakiimo"},"content":" String type \u003d taskDetails[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"butteredyakiimo"},"content":" int status \u003d Integer.parseInt(taskDetails[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"butteredyakiimo"},"content":" String desc \u003d taskDetails[2];","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"butteredyakiimo"},"content":" switch (type) {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"butteredyakiimo"},"content":" case \"T\":","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"butteredyakiimo"},"content":" ToDo toDo \u003d new ToDo(status, desc);","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"butteredyakiimo"},"content":" list.add(toDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"butteredyakiimo"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"butteredyakiimo"},"content":" case \"D\":","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime date \u003d stringToDateTime(taskDetails[3]);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"butteredyakiimo"},"content":" Deadline deadline \u003d new Deadline(status, desc, date);","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"butteredyakiimo"},"content":" list.add(deadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"butteredyakiimo"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"butteredyakiimo"},"content":" case \"E\":","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime start \u003d stringToDateTime(taskDetails[3]);","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime end \u003d stringToDateTime(taskDetails[4]);","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"butteredyakiimo"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"butteredyakiimo"},"content":" Event event \u003d new Event(status, desc, start, end);","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"butteredyakiimo"},"content":" list.add(event);","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"butteredyakiimo"},"content":" } catch (InvalidStartEndException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"butteredyakiimo"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"butteredyakiimo"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"butteredyakiimo"},"content":" sc.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"butteredyakiimo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"butteredyakiimo"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"butteredyakiimo"},"content":" return list;","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"butteredyakiimo"},"content":" //this method should be called by the tasklist class ONLY!!! because we want to","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"butteredyakiimo"},"content":" //keep the tasklist private","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"butteredyakiimo"},"content":" public void updateFile(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"butteredyakiimo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"butteredyakiimo"},"content":" //check if file exists, else create","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"butteredyakiimo"},"content":" File dataFile \u003d new File(\"./data/duke.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"butteredyakiimo"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"butteredyakiimo"},"content":" dataFile \u003d createDataFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"butteredyakiimo"},"content":" //create a FileWriter object to write to file. Note that this overwrites the existing data!","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"butteredyakiimo"},"content":" FileWriter file \u003d new FileWriter(\"./data/duke.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"butteredyakiimo"},"content":" BufferedWriter writer \u003d new BufferedWriter(file);","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"butteredyakiimo"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"butteredyakiimo"},"content":" Task task \u003d list.get(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"butteredyakiimo"},"content":" String taskStr \u003d task.convertTask();","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"butteredyakiimo"},"content":" writer.write(taskStr);","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"butteredyakiimo"},"content":" writer.newLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"butteredyakiimo"},"content":" writer.flush();","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"butteredyakiimo"},"content":" writer.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"butteredyakiimo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":121}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import duke.exceptions.InvalidTaskIDException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" * contains the task list, and methods to modify the tasks in the list","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":"public class TaskList {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" //case where there are no existing tasks in storage","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" public TaskList(ArrayList\u003cTask\u003e list, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" public boolean isValidTaskID(int taskID) throws InvalidTaskIDException {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" if (taskID \u003e this.list.size() - 1 || taskID \u003c 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" throw new InvalidTaskIDException();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" public void listTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" if (list.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" ui.showNoTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" String result \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" int index \u003d i + 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" Task task \u003d list.get(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":" result +\u003d index + \". \" + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":" ui.showTasks(result);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":" public void addTask(Task task, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":" this.list.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":" storage.updateFile(this.list);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":" ui.showTaskAdded(task, this.getListSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"butteredyakiimo"},"content":" //might remove returning of boolean!! see first","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"butteredyakiimo"},"content":" public void deleteTask(int taskID, Storage storage) throws InvalidTaskIDException {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"butteredyakiimo"},"content":" if (isValidTaskID(taskID)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"butteredyakiimo"},"content":" Task toRemove \u003d list.get(taskID);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"butteredyakiimo"},"content":" list.remove(taskID);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"butteredyakiimo"},"content":" storage.updateFile(this.list);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"butteredyakiimo"},"content":" ui.showDeleteTask(toRemove, this.getListSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"butteredyakiimo"},"content":" public void markTask(int taskID, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"butteredyakiimo"},"content":" this.list.get(taskID).mark(ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"butteredyakiimo"},"content":" storage.updateFile(this.list);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"butteredyakiimo"},"content":" public void unmarkTask(int taskID, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"butteredyakiimo"},"content":" this.list.get(taskID).unmark(ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"butteredyakiimo"},"content":" storage.updateFile(this.list);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"butteredyakiimo"},"content":" public int getListSize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"butteredyakiimo"},"content":" return this.list.size();","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":70}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" * deals with interactions with the user","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"public class Ui {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" public static String line \u003d \"--------------------------------------------------------------------\";","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" public void greeting() {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":" String intro \u003d \"(。・o・。)ノ Hey there! I\u0027m BUTTER.\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" \"How can I help you today?\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line + \"\\n\" + intro + line);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" public void bye() {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" String bye \u003d \"彡໒(⊙ᴗ⊙)७彡 Signing off, see you later!\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(bye + line);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" //get the size by calling storage.getListSize() later in duke.Duke","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" public void showNumberOfTasks(int size) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(size \u003d\u003d 1","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" ? \"Now you have \" + size + \" task in the list!\\n\" + line","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" : \"Now you have \" + size + \" tasks in the list!\\n\" + line);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" public void showNoTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"(o´ω`o)ノ You have no upcoming tasks!\\n\" + Ui.line);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" public void showTasks(String tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"(⇀‸↼‶)⊃━☆゚.*・。゚ Here are your tasks for the day:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(tasks + Ui.line);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" public void showTaskAdded(Task task, int listSize) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"(`・ω・´)ノ New task added:\\n\" + task);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":" this.showNumberOfTasks(listSize);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":" public void showDeleteTask(Task toRemove, int listSize) {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"ଘ(੭ˊᵕˋ)੭ Ok! I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(toRemove);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":" this.showNumberOfTasks(listSize);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"butteredyakiimo"},"content":" public void showMarkTask(boolean isMarked, Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"butteredyakiimo"},"content":" if (!isMarked) {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"ଘ(੭ˊᵕˋ)੭ Yay! This task is completed:\\n\" + task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"┐(´~`)┌ This task is already marked as completed!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"butteredyakiimo"},"content":" public void showUnmarkTask(boolean isMarked, Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"butteredyakiimo"},"content":" if (isMarked) {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"໒( ̿・ ᴥ ̿・ )ʋ All righty, I\u0027ve marked this task as uncompleted:\\n\" + task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"┐(´~`)┌ This task is already marked as uncompleted!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"butteredyakiimo"},"content":" public void showError(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"butteredyakiimo"},"content":" public void showInvalidDateFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"(・´з`・) Uh oh...dates must be of YYYY-MM-DD HH:mm format\");","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"butteredyakiimo"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"(・´з`・) Uh oh... error loading BUTTER\");","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":80}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" private static String line \u003d \"--------------------------------------------------------------------\";","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" public DukeException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh... please add a start date\\n\" + line);","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":12}},{"path":"src/main/java/duke/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" super(\"Sorry, I don\u0027t understand what you mean \u003e\u003c\");","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"butteredyakiimo":7}},{"path":"src/main/java/duke/exceptions/InvalidDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"public class InvalidDeadlineException extends DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" public InvalidDeadlineException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh... make sure your deadline has a description and date\");","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"butteredyakiimo":7}},{"path":"src/main/java/duke/exceptions/InvalidEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"public class InvalidEventException extends DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" public InvalidEventException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh...improper event format!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":8}},{"path":"src/main/java/duke/exceptions/InvalidStartEndException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"public class InvalidStartEndException extends DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" public InvalidStartEndException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh...start must be after end!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":7}},{"path":"src/main/java/duke/exceptions/InvalidTaskIDException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"public class InvalidTaskIDException extends DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" public InvalidTaskIDException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh... invalid taskID\");","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":8}},{"path":"src/main/java/duke/exceptions/NoDescException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"public class NoDescException extends DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" public NoDescException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh... please add a description\");","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"butteredyakiimo":7}},{"path":"src/main/java/duke/exceptions/NoEndException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"public class NoEndException extends DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" public NoEndException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh... please add an end date\");","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"butteredyakiimo":7}},{"path":"src/main/java/duke/exceptions/NoStartException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"public class NoStartException extends DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" public NoStartException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh... please add a start date\");","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"butteredyakiimo":7}},{"path":"src/main/java/duke/exceptions/NoTaskIDException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"public class NoTaskIDException extends DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" public NoTaskIDException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh... please provide a taskID\");","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":7}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":" private LocalDateTime date;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" private DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" public Deadline(int status, String task, LocalDateTime date) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" super(status, task);","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" public String convertTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" return \"D | \" + super.getStatus() + \" | \" + super.getTask() +","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" \" | \" + this.date.format(formatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" return \"[D] \" + super.toString() + \" (by: \" + this.date.format(formatter) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"butteredyakiimo":25}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import duke.exceptions.InvalidStartEndException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" private DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" private LocalDateTime start;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" private LocalDateTime end;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" public Event(int status, String task, LocalDateTime start, LocalDateTime end) throws InvalidStartEndException {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" super(status, task);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" if (start.isAfter(end)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" throw new InvalidStartEndException();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" public String convertTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" return \"E | \" + super.getStatus() + \" | \" + super.getTask() +","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" \" | \" + this.start.format(formatter) + \" | \" + this.end.format(formatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" return \"[E] \" + super.toString() + \" (from: \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" this.start.format(formatter) + \" to: \" + this.end.format(formatter) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"butteredyakiimo":34}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"abstract public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" private int status; //0 for uncompleted, 1 (or any other number) for completed","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":" private String task;","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" public Task(int status, String task) {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" this.status \u003d status;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" abstract public String convertTask();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" public void mark(Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" if (this.status \u003d\u003d 0) {","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" this.status \u003d 1;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" ui.showMarkTask(false, this);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" ui.showMarkTask(true, this);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" public void unmark(Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" if (this.status !\u003d 0) {","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" this.status \u003d 0;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" ui.showUnmarkTask(true, this);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" ui.showUnmarkTask(false, this);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" public int getStatus() {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":" return this.status;","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" public String getTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":" return this.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":" if (status \u003d\u003d 0) {","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":" return \"[ ] \" + task;","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"butteredyakiimo"},"content":" return \"[X] \" + task;","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"butteredyakiimo":49}},{"path":"src/main/java/duke/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" public ToDo(int status, String task) {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" super(status, task);","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" public String convertTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" return \"T | \" + super.getStatus() + \" | \" + super.getTask();","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" return \"[T] \" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"butteredyakiimo":17}},{"path":"src/test/java/duke/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" private DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" public void testConvertTask1() {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":" Deadline deadline \u003d new Deadline(0,\"bake cookies\", LocalDateTime.now());","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"D | 0 | bake cookies | \" + LocalDateTime.now().format(formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, deadline.convertTask());","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" public void testConvertTask2() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" Deadline deadline \u003d new Deadline(1,\"bake cookies\", LocalDateTime.now());","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"D | 1 | bake cookies | \" + LocalDateTime.now().format(formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, deadline.convertTask());","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" public void testToString1() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" Deadline deadline \u003d new Deadline(0,\"bake cookies\", LocalDateTime.now());","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"[D] [ ] bake cookies (by: \" + LocalDateTime.now().format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, deadline.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" public void testToString2() {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" Deadline deadline \u003d new Deadline(1,\"bake cookies\", LocalDateTime.now());","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"[D] [X] bake cookies (by: \" + LocalDateTime.now().format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, deadline.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":37}},{"path":"src/test/java/duke/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import duke.exceptions.InvalidStartEndException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":"public class EventTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" private DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" public void testStartEndException1() throws InvalidStartEndException {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime end \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime start \u003d end.plusHours(9);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" InvalidStartEndException ex \u003d assertThrows(InvalidStartEndException.class,","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" () -\u003e new Event(0, \"bake cookies\", start, end));","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(\"(・´з`・) Uh oh...start must be after end!\", ex.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" public void testStartEndException2() throws InvalidStartEndException {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime end \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime start \u003d end.plusMinutes(1);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" InvalidStartEndException ex \u003d assertThrows(InvalidStartEndException.class,","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" () -\u003e new Event(0, \"bake cookies\", start, end));","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(\"(・´з`・) Uh oh...start must be after end!\", ex.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" public void testConvertTask1() throws InvalidStartEndException {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime start \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime end \u003d start.plusHours(9);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":" Event event \u003d new Event(0, \"bake cookies\", start, end);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"E | 0 | bake cookies | \" + start.format(formatter) +","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":" \" | \" + end.format(formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, event.convertTask());","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":" public void testConvertTask2() throws InvalidStartEndException {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime start \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime end \u003d start.plusHours(9);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":" Event event \u003d new Event(1, \"bake cookies\", start, end);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"E | 1 | bake cookies | \" + start.format(formatter) +","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"butteredyakiimo"},"content":" \" | \" + end.format(formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, event.convertTask());","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"butteredyakiimo"},"content":" public void testToString1() throws InvalidStartEndException {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime start \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime end \u003d start.plusHours(9);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"butteredyakiimo"},"content":" Event event \u003d new Event(0, \"bake cookies\", start, end);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"[E] [ ] bake cookies (from: \" + start.format(formatter) +","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"butteredyakiimo"},"content":" \" to: \" + end.format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, event.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"butteredyakiimo"},"content":" public void testToString2() throws InvalidStartEndException {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime start \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime end \u003d start.plusHours(9);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"butteredyakiimo"},"content":" Event event \u003d new Event(1, \"bake cookies\", start, end);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"[E] [X] bake cookies (from: \" + start.format(formatter) +","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"butteredyakiimo"},"content":" \" to: \" + end.format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, event.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":70}},{"path":"src/test/java/duke/tasks/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" public class stubUi extends Ui {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" public String line \u003d \"--------------------------------------------------------------------\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" public void showMarkTask(boolean isMarked, Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" if (!isMarked) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"ଘ(੭ˊᵕˋ)੭ Yay! This task is completed:\\n\" + task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"┐(´~`)┌ This task is already marked as completed!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" public void showUnmarkTask(boolean isMarked, Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" if (isMarked) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"໒( ̿・ ᴥ ̿・ )ʋ All righty, I\u0027ve marked this task as uncompleted:\\n\" + task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"┐(´~`)┌ This task is already marked as uncompleted!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" //this is the concrete implementation of Task, used for testing","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":" public class concreteTask extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" public concreteTask(int status, String task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":" super(status, task);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":" public String convertTask() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":" return \"task converted\";","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"butteredyakiimo"},"content":" public void testMarkSuccess() {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"butteredyakiimo"},"content":" //whatever is printed to the console is written to outContent","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"butteredyakiimo"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"butteredyakiimo"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"butteredyakiimo"},"content":" stubUi ui \u003d new stubUi();","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(0, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"butteredyakiimo"},"content":" task.mark(ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"ଘ(੭ˊᵕˋ)੭ Yay! This task is completed:\\n\" + task + \"\\n\" + ui.line + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, outContent.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(1, task.getStatus());","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"butteredyakiimo"},"content":" public void testMarkNotSuccessful() {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"butteredyakiimo"},"content":" //whatever is printed to the console is written to outContent","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"butteredyakiimo"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"butteredyakiimo"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"butteredyakiimo"},"content":" stubUi ui \u003d new stubUi();","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(1, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"butteredyakiimo"},"content":" task.mark(ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"┐(´~`)┌ This task is already marked as completed!\\n\" + ui.line + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, outContent.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(1, task.getStatus());","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"butteredyakiimo"},"content":" public void testUnmarkSuccessful() {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"butteredyakiimo"},"content":" //whatever is printed to the console is written to outContent","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"butteredyakiimo"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"butteredyakiimo"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"butteredyakiimo"},"content":" stubUi ui \u003d new stubUi();","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(1, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"butteredyakiimo"},"content":" task.unmark(ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"໒( ̿・ ᴥ ̿・ )ʋ All righty, I\u0027ve marked this task as uncompleted:\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"butteredyakiimo"},"content":" task + \"\\n\" + ui.line + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, outContent.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(0, task.getStatus());","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"butteredyakiimo"},"content":" public void testUnmarkNotSuccessful() {","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"butteredyakiimo"},"content":" //whatever is printed to the console is written to outContent","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"butteredyakiimo"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"butteredyakiimo"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"butteredyakiimo"},"content":" stubUi ui \u003d new stubUi();","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(0, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"butteredyakiimo"},"content":" task.unmark(ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"┐(´~`)┌ This task is already marked as uncompleted!\\n\" + ui.line + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, outContent.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(0, task.getStatus());","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"butteredyakiimo"},"content":" public void testGetStatus1() {","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(0, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(0, task.getStatus());","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"butteredyakiimo"},"content":" public void testGetStatus2() {","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(1, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(1, task.getStatus());","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"butteredyakiimo"},"content":" public void testTask1() {","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(1, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(\"Set up unit tests\", task.getTask());","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"butteredyakiimo"},"content":" public void testToString1() {","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(0, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(\"[ ] \" + \"Set up unit tests\", task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"butteredyakiimo"},"content":" public void testToString2() {","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(1, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(\"[X] \" + \"Set up unit tests\", task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"butteredyakiimo"},"content":" public void testToString3() {","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(3, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(\"[X] \" + \"Set up unit tests\", task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":137}},{"path":"src/test/java/duke/tasks/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" public void testConvertTask1() {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" ToDo todo \u003d new ToDo(0, \"bake cookies!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"T | 0 | bake cookies!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, todo.convertTask());","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" public void testConvertTask2() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" ToDo todo \u003d new ToDo(1, \"bake cookies!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"T | 1 | bake cookies!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, todo.convertTask());","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" public void testToString1() {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" ToDo todo \u003d new ToDo(0, \"bake cookies!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"[T] [ ] bake cookies!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, todo.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" public void testToString2() {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" ToDo todo \u003d new ToDo(1, \"bake cookies!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"[T] [X] bake cookies!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, todo.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":35}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"hahahhah","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"wow so cool","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"todo","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"deadline","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"event","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"todo watch lecture","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"todo eat lunch","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":"deadline bake cookies /by tmr","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":"deadline bake cookies /by 2023-09-03 18:00","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":"deadline /by 2023-09-03 18:00","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":"deadline bake cookies /by 2023-20-03 18:00","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":"deadline bake cookies /by 2023-09-03 29:00","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":"deadline go fishing /by 2024-02-05","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":"list","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":"event math meeting! /from now /to tmr","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":"event math meeting! /from 2023-08-25 7:00 /to 2023-08-25 23:00","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":"event math meeting! /from 2023-08-25 07:00 /to 2023-08-25 23:00","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":"event /from 2023-08-25 7:00 /to 2023-08-25 23:00","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":"event math meeting! /from 2023-08-25 07:00","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":"event math meeting! /to 2023-08-25 23:00","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":"event math meeting! 2023-08-25 7:00 2023-08-25 23:00","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":"list","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":"event dinner w choir gals! /from 2023-09-25 23:00 /to 2023-09-25 17:00","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":"event dinner w choir gals! /from 2023-09-25 17:00 /to 2023-09-25 23:00","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":"mark 3","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":"unmark 4","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":"delete 1","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":"delete 7","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":"bye","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"butteredyakiimo":45}},{"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":"butteredyakiimo"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":20,"butteredyakiimo":1}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/duke/*.java","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":37,"butteredyakiimo":1}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"butteredyakiimo":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":"butteredyakiimo"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"butteredyakiimo":2}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"T | 0 | eat cookies","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"T | 0 | bake cookie","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"T | 1 | bake more cookies","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"E | 0 | cookie baking event | 2023-09-08 18:00 | 2023-09-09 01:00","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"D | 0 | cookies marathon | 2023-09-08 17:00","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"butteredyakiimo":5}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" * Main class to run BUTTER.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" private Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" * Class constructor for Duke.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" * Initialises the ui, storage and tasks used in for the BUTTER chatbot program.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" * @param filePath the path of the file containing results from previous interactions.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" storage \u003d new Storage(filePath, ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" tasks \u003d new TaskList(storage.loadTasks(), storage, ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" * Runs the main logic of the program.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" * Uses a scanner object to scan user input, and passes it to the","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" * parser object for interpretation.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" this.ui.greeting();","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" Parser parser \u003d new Parser(this.storage, this.tasks, this.ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" if (parser.isGoodbye(input)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":" parser.parseInput(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":" this.ui.bye();","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"butteredyakiimo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"butteredyakiimo"},"content":" new Duke(\"./data/duke.txt\").run();","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"butteredyakiimo":47,"-":3}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import duke.exceptions.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" * Interprets user commands, and controls what the user can or cannot do. An object acts as a","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" * parser to parse commands and carry them out.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":"public class Parser {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" public Parser(Storage storage, TaskList tasks, Ui ui) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" * Returns true if the string can be parsed as an integer.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" * @param s the string to be tested.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" * @return true if s can be parsed as an integer.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" //credit: https://www.freecodecamp.org/news/java-string-to-int-how-to-convert-a-string-to-an-integer/","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":" private static boolean isNumber(String s) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" return s !\u003d null \u0026\u0026 s.matches(\"[0-9.]+\");","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":" * Returns true if the input string is \"bye\".","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":" * @param input the input entered by user.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":" * @return true if input is \"bye\".","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"butteredyakiimo"},"content":" public boolean isGoodbye(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"butteredyakiimo"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"butteredyakiimo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"butteredyakiimo"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"butteredyakiimo"},"content":" * Converts a string of the format YYYY-MM-dd HH:mm to a LocalDateTime object.","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"butteredyakiimo"},"content":" * @param str a datetime string.","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"butteredyakiimo"},"content":" * @return the corresponding LocalDateTime object.","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"butteredyakiimo"},"content":" * @throws DateTimeParseException if str is not of the correct format.","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"butteredyakiimo"},"content":" public static LocalDateTime convertToDateTime(String str) {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"butteredyakiimo"},"content":" //check if dateTime has correct format: ie. YYYY-MM-DD 00:00","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"butteredyakiimo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(str, formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"butteredyakiimo"},"content":" return dateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"butteredyakiimo"},"content":" * Takes in the user input, and identifies whether it is a valid command.","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"butteredyakiimo"},"content":" * If commands are valid, calls the corresponding methods to carry out","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"butteredyakiimo"},"content":" * them out. Else, will throw an InvalidCommandException.","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"butteredyakiimo"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"butteredyakiimo"},"content":" * This method catches all DukeExceptions, and displays the error","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"butteredyakiimo"},"content":" * messages using the ui.showError() command.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"butteredyakiimo"},"content":" * @param input user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"butteredyakiimo"},"content":" public void parseInput(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"butteredyakiimo"},"content":" String[] inputs \u003d input.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"butteredyakiimo"},"content":" String command \u003d inputs[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"butteredyakiimo"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"butteredyakiimo"},"content":" if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"butteredyakiimo"},"content":" tasks.listTasks();","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"butteredyakiimo"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"butteredyakiimo"},"content":" parseDelete(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"butteredyakiimo"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"butteredyakiimo"},"content":" parseMark(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"butteredyakiimo"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"butteredyakiimo"},"content":" parseUnMark(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"butteredyakiimo"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"butteredyakiimo"},"content":" parseToDo(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"butteredyakiimo"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"butteredyakiimo"},"content":" parseDeadline(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"butteredyakiimo"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"butteredyakiimo"},"content":" parseEvent(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"butteredyakiimo"},"content":" } else if (command.equals(\"find\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"butteredyakiimo"},"content":" findTask(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"butteredyakiimo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"butteredyakiimo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"butteredyakiimo"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"butteredyakiimo"},"content":" * Handles the deleting of a specified task.","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"butteredyakiimo"},"content":" * Checks if a taskID is provided. Calls tasks.deleteTask(index) function to","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"butteredyakiimo"},"content":" * attempt task deletion.","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"butteredyakiimo"},"content":" * @param input user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"butteredyakiimo"},"content":" * @throws NoTaskIdException if no taskID is provided.","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"butteredyakiimo"},"content":" * @throws InvalidTaskIdException if a non-numerical id is provided.","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"butteredyakiimo"},"content":" public void parseDelete(String input) throws NoTaskIdException, InvalidTaskIdException {","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"butteredyakiimo"},"content":" String[] inputArr \u003d input.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"butteredyakiimo"},"content":" if (inputArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoTaskIdException();","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"butteredyakiimo"},"content":" String strIndex \u003d inputArr[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"butteredyakiimo"},"content":" if (isNumber(strIndex)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"butteredyakiimo"},"content":" int index \u003d Integer.parseInt(strIndex) - 1; //because index starts from 1","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"butteredyakiimo"},"content":" tasks.deleteTask(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"butteredyakiimo"},"content":" //case where a number was not provided","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"butteredyakiimo"},"content":" throw new InvalidTaskIdException();","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"butteredyakiimo"},"content":" * Handles the marking of a specified task.","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"butteredyakiimo"},"content":" * Checks if a taskID is provided. Calls the tasks.markTask(index) function to","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"butteredyakiimo"},"content":" * attempt task marking.","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"butteredyakiimo"},"content":" * @param input user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"butteredyakiimo"},"content":" * @throws NoTaskIdException if no taskID is provided.","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"butteredyakiimo"},"content":" * @throws InvalidTaskIdException If a non-numerical id is provided.","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"butteredyakiimo"},"content":" public void parseMark(String input) throws NoTaskIdException, InvalidTaskIdException {","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"butteredyakiimo"},"content":" String[] inputArr \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"butteredyakiimo"},"content":" if (inputArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoTaskIdException();","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"butteredyakiimo"},"content":" String strIndex \u003d inputArr[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"butteredyakiimo"},"content":" if (isNumber(strIndex)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"butteredyakiimo"},"content":" int index \u003d Integer.parseInt(strIndex) - 1; //because index starts from 1","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"butteredyakiimo"},"content":" if (tasks.isValidTaskId(index)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"butteredyakiimo"},"content":" tasks.markTask(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"butteredyakiimo"},"content":" throw new InvalidTaskIdException();","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"butteredyakiimo"},"content":" * Handles the unmarking of a specified task.","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"butteredyakiimo"},"content":" * Checks if a taskID is provided. Calls tasks.unMarkTask(index)","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"butteredyakiimo"},"content":" * to attempt task unmarking.","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"butteredyakiimo"},"content":" * @param input user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"butteredyakiimo"},"content":" * @throws NoTaskIdException if no taskID is provided.","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"butteredyakiimo"},"content":" * @throws InvalidTaskIdException If a non-numerical id is provided.","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"butteredyakiimo"},"content":" public void parseUnMark(String input) throws NoTaskIdException, InvalidTaskIdException {","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"butteredyakiimo"},"content":" String[] inputs \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"butteredyakiimo"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoTaskIdException();","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"butteredyakiimo"},"content":" String strIndex \u003d inputs[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"butteredyakiimo"},"content":" if (isNumber(strIndex)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"butteredyakiimo"},"content":" int index \u003d Integer.parseInt(strIndex) - 1; //because index starts from 1","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"butteredyakiimo"},"content":" if (tasks.isValidTaskId(index)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"butteredyakiimo"},"content":" tasks.unMarkTask(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"butteredyakiimo"},"content":" throw new InvalidTaskIdException();","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":180,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":181,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":182,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":183,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":184,"author":{"gitId":"butteredyakiimo"},"content":" * Handles the creation of a ToDo.","lastModifiedDate":"2023-09-05"},{"lineNumber":185,"author":{"gitId":"butteredyakiimo"},"content":" * Creates successfully if a description is provided.","lastModifiedDate":"2023-09-05"},{"lineNumber":186,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":187,"author":{"gitId":"butteredyakiimo"},"content":" * @param input user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":188,"author":{"gitId":"butteredyakiimo"},"content":" * @throws NoDescException if no description is provided.","lastModifiedDate":"2023-09-05"},{"lineNumber":189,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":190,"author":{"gitId":"butteredyakiimo"},"content":" public void parseToDo(String input) throws NoDescException {","lastModifiedDate":"2023-09-05"},{"lineNumber":191,"author":{"gitId":"butteredyakiimo"},"content":" String[] inputs \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":192,"author":{"gitId":"butteredyakiimo"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":193,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoDescException();","lastModifiedDate":"2023-09-04"},{"lineNumber":194,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"butteredyakiimo"},"content":" if (inputs[1].isBlank()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":196,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoDescException();","lastModifiedDate":"2023-09-04"},{"lineNumber":197,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":198,"author":{"gitId":"butteredyakiimo"},"content":" //0 for unmarked, any other number for marked","lastModifiedDate":"2023-09-04"},{"lineNumber":199,"author":{"gitId":"butteredyakiimo"},"content":" ToDo toDo \u003d new ToDo(0, inputs[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":200,"author":{"gitId":"butteredyakiimo"},"content":" tasks.addTask(toDo);","lastModifiedDate":"2023-09-05"},{"lineNumber":201,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":202,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":203,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":204,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":205,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":206,"author":{"gitId":"butteredyakiimo"},"content":" * Handles the creation of a Deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":207,"author":{"gitId":"butteredyakiimo"},"content":" * Creates successfully if a description and an appropriate datetime is provided","lastModifiedDate":"2023-09-05"},{"lineNumber":208,"author":{"gitId":"butteredyakiimo"},"content":" * in the format \u0027deadline desc /by datetime\u0027 is provided.","lastModifiedDate":"2023-09-05"},{"lineNumber":209,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":210,"author":{"gitId":"butteredyakiimo"},"content":" * @param input user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":211,"author":{"gitId":"butteredyakiimo"},"content":" * @throws NoDescException if no description is provided.","lastModifiedDate":"2023-09-05"},{"lineNumber":212,"author":{"gitId":"butteredyakiimo"},"content":" * @throws InvalidDeadlineException if command is not of the correct format.","lastModifiedDate":"2023-09-05"},{"lineNumber":213,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":214,"author":{"gitId":"butteredyakiimo"},"content":" public void parseDeadline(String input) throws NoDescException, InvalidDeadlineException {","lastModifiedDate":"2023-09-05"},{"lineNumber":215,"author":{"gitId":"butteredyakiimo"},"content":" String[] inputs \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":216,"author":{"gitId":"butteredyakiimo"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":217,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoDescException();","lastModifiedDate":"2023-09-04"},{"lineNumber":218,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":219,"author":{"gitId":"butteredyakiimo"},"content":" String afterCommand \u003d inputs[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":220,"author":{"gitId":"butteredyakiimo"},"content":" String[] details \u003d afterCommand.split(\" /by \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":221,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":222,"author":{"gitId":"butteredyakiimo"},"content":" if (details.length \u003c 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":223,"author":{"gitId":"butteredyakiimo"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-09-04"},{"lineNumber":224,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":225,"author":{"gitId":"butteredyakiimo"},"content":" String desc \u003d details[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":226,"author":{"gitId":"butteredyakiimo"},"content":" String date \u003d details[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":227,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":228,"author":{"gitId":"butteredyakiimo"},"content":" if (desc.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":229,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoDescException();","lastModifiedDate":"2023-09-04"},{"lineNumber":230,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":231,"author":{"gitId":"butteredyakiimo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":232,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime dateTime \u003d convertToDateTime(date);","lastModifiedDate":"2023-09-05"},{"lineNumber":233,"author":{"gitId":"butteredyakiimo"},"content":" Deadline deadline \u003d new Deadline(0, desc, dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":234,"author":{"gitId":"butteredyakiimo"},"content":" tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":235,"author":{"gitId":"butteredyakiimo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":236,"author":{"gitId":"butteredyakiimo"},"content":" ui.showInvalidDateFormat();","lastModifiedDate":"2023-09-04"},{"lineNumber":237,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":238,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":239,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":240,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":241,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":242,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":243,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":244,"author":{"gitId":"butteredyakiimo"},"content":" * Handles the creation of an Event.","lastModifiedDate":"2023-09-05"},{"lineNumber":245,"author":{"gitId":"butteredyakiimo"},"content":" * Creates successfully if a description, appropriate start datetime and end","lastModifiedDate":"2023-09-05"},{"lineNumber":246,"author":{"gitId":"butteredyakiimo"},"content":" * date time is provided in the format \u0027event desc /from start /to end\u0027.","lastModifiedDate":"2023-09-05"},{"lineNumber":247,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":248,"author":{"gitId":"butteredyakiimo"},"content":" * @param input user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":249,"author":{"gitId":"butteredyakiimo"},"content":" * @throws NoDescException if no description provided.","lastModifiedDate":"2023-09-05"},{"lineNumber":250,"author":{"gitId":"butteredyakiimo"},"content":" * @throws NoStartException if no start datetime provided.","lastModifiedDate":"2023-09-05"},{"lineNumber":251,"author":{"gitId":"butteredyakiimo"},"content":" * @throws NoEndException if no end datetime provided.","lastModifiedDate":"2023-09-05"},{"lineNumber":252,"author":{"gitId":"butteredyakiimo"},"content":" * @throws InvalidStartEndException if start datetime is after end datetime.","lastModifiedDate":"2023-09-05"},{"lineNumber":253,"author":{"gitId":"butteredyakiimo"},"content":" * @throws InvalidEventException if command is not of the correct format.","lastModifiedDate":"2023-09-05"},{"lineNumber":254,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":255,"author":{"gitId":"butteredyakiimo"},"content":" public void parseEvent(String input) throws NoDescException, NoStartException, NoEndException,","lastModifiedDate":"2023-09-05"},{"lineNumber":256,"author":{"gitId":"butteredyakiimo"},"content":" InvalidStartEndException, InvalidEventException {","lastModifiedDate":"2023-09-05"},{"lineNumber":257,"author":{"gitId":"butteredyakiimo"},"content":" String[] inputs \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":258,"author":{"gitId":"butteredyakiimo"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":259,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoDescException();","lastModifiedDate":"2023-09-04"},{"lineNumber":260,"author":{"gitId":"butteredyakiimo"},"content":" } else if (inputs[1].isBlank()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":261,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoDescException();","lastModifiedDate":"2023-09-04"},{"lineNumber":262,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":263,"author":{"gitId":"butteredyakiimo"},"content":" String afterCommand \u003d inputs[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":264,"author":{"gitId":"butteredyakiimo"},"content":" String[] details \u003d afterCommand.split(\" /from \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":265,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":266,"author":{"gitId":"butteredyakiimo"},"content":" if (details[0].isBlank()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":267,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoDescException();","lastModifiedDate":"2023-09-04"},{"lineNumber":268,"author":{"gitId":"butteredyakiimo"},"content":" } else if (details.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":269,"author":{"gitId":"butteredyakiimo"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-09-04"},{"lineNumber":270,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":271,"author":{"gitId":"butteredyakiimo"},"content":" String task \u003d details[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":272,"author":{"gitId":"butteredyakiimo"},"content":" String start \u003d details[1].split(\" /to \", 2)[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":273,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":274,"author":{"gitId":"butteredyakiimo"},"content":" if (start.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":275,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoStartException();","lastModifiedDate":"2023-09-04"},{"lineNumber":276,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":277,"author":{"gitId":"butteredyakiimo"},"content":" String[] endDetails \u003d afterCommand.split(\" /to \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":278,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":279,"author":{"gitId":"butteredyakiimo"},"content":" if (endDetails.length \u003d\u003d 1) { //no end date added","lastModifiedDate":"2023-09-05"},{"lineNumber":280,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoEndException();","lastModifiedDate":"2023-09-04"},{"lineNumber":281,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":282,"author":{"gitId":"butteredyakiimo"},"content":" String end \u003d endDetails[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":283,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":284,"author":{"gitId":"butteredyakiimo"},"content":" if (end.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":285,"author":{"gitId":"butteredyakiimo"},"content":" throw new NoEndException();","lastModifiedDate":"2023-09-04"},{"lineNumber":286,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":287,"author":{"gitId":"butteredyakiimo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":288,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime startDateTime \u003d convertToDateTime(start);","lastModifiedDate":"2023-09-05"},{"lineNumber":289,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime endDateTime \u003d convertToDateTime(end);","lastModifiedDate":"2023-09-05"},{"lineNumber":290,"author":{"gitId":"butteredyakiimo"},"content":" Event event \u003d new Event(0, task, startDateTime, endDateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":291,"author":{"gitId":"butteredyakiimo"},"content":" tasks.addTask(event);","lastModifiedDate":"2023-09-05"},{"lineNumber":292,"author":{"gitId":"butteredyakiimo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":293,"author":{"gitId":"butteredyakiimo"},"content":" ui.showInvalidDateFormat();","lastModifiedDate":"2023-09-04"},{"lineNumber":294,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":295,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":296,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":297,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":298,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":299,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":300,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":301,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":302,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":303,"author":{"gitId":"butteredyakiimo"},"content":" * Handles the finding of tasks that match the specified keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":304,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":305,"author":{"gitId":"butteredyakiimo"},"content":" * @param input user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":306,"author":{"gitId":"butteredyakiimo"},"content":" * @throws InvalidFindTaskException if 0 or more than 1 keyword is specified.","lastModifiedDate":"2023-09-05"},{"lineNumber":307,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":308,"author":{"gitId":"butteredyakiimo"},"content":" public void findTask(String input) throws InvalidFindTaskException {","lastModifiedDate":"2023-09-05"},{"lineNumber":309,"author":{"gitId":"butteredyakiimo"},"content":" String[] inputs \u003d input.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":310,"author":{"gitId":"butteredyakiimo"},"content":" if (inputs.length !\u003d 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":311,"author":{"gitId":"butteredyakiimo"},"content":" throw new InvalidFindTaskException();","lastModifiedDate":"2023-09-05"},{"lineNumber":312,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":313,"author":{"gitId":"butteredyakiimo"},"content":" String keyword \u003d inputs[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":314,"author":{"gitId":"butteredyakiimo"},"content":" ArrayList\u003cTask\u003e matches \u003d tasks.findMatches(keyword);","lastModifiedDate":"2023-09-05"},{"lineNumber":315,"author":{"gitId":"butteredyakiimo"},"content":" ui.showMatches(tasks.listTasks(matches));","lastModifiedDate":"2023-09-05"},{"lineNumber":316,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":317,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":318,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":318}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import duke.exceptions.InvalidStartEndException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" * Handles interactions between task list and hard drive.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":"public class Storage {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" private String path;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" public Storage(String path, Ui ui) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" this.path \u003d path;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":" * Converts a string of the format YYYY-MM-dd HH:mm to a LocalDateTime object.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":" * @param str a datetime string.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" * @return the corresponding LocalDateTime object.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":" * @throws DateTimeParseException if str is not of the correct format.","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":" public static LocalDateTime convertToDateTime(String str) throws DateTimeParseException {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(str, formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":" return dateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"butteredyakiimo"},"content":" * Creates a file with the path .data/duke.txt (hardcoded value).","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"butteredyakiimo"},"content":" * @return a File object to store tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"butteredyakiimo"},"content":" public File createDataFile() {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"butteredyakiimo"},"content":" File dataFile \u003d new File(this.path);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"butteredyakiimo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"butteredyakiimo"},"content":" Path dirPath \u003d Paths.get(\"./data/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"butteredyakiimo"},"content":" if (!Files.exists(dirPath)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"butteredyakiimo"},"content":" Files.createDirectory(dirPath);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"butteredyakiimo"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"butteredyakiimo"},"content":" dataFile.createNewFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"butteredyakiimo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"Unable to create file!!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"butteredyakiimo"},"content":" return dataFile;","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"butteredyakiimo"},"content":" * Retrieves the tasks stored in the ./data/duke.txt file.","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"butteredyakiimo"},"content":" * Converts each task string into their corresponding Task object.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"butteredyakiimo"},"content":" * Tasks are then added to an ArrayList.","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"butteredyakiimo"},"content":" * @return an ArrayList of Task objects.","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"butteredyakiimo"},"content":" public ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"butteredyakiimo"},"content":" File dataFile \u003d new File(this.path);","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"butteredyakiimo"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"butteredyakiimo"},"content":" dataFile \u003d createDataFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"butteredyakiimo"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"butteredyakiimo"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"butteredyakiimo"},"content":" Scanner sc \u003d new Scanner(dataFile);","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"butteredyakiimo"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"butteredyakiimo"},"content":" String task \u003d sc.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"butteredyakiimo"},"content":" if (!task.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"butteredyakiimo"},"content":" // | is a special symbol","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"butteredyakiimo"},"content":" String[] taskDetails \u003d task.split(\" \" + \"\\\\|\" + \" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"butteredyakiimo"},"content":" String type \u003d taskDetails[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"butteredyakiimo"},"content":" int status \u003d Integer.parseInt(taskDetails[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"butteredyakiimo"},"content":" String desc \u003d taskDetails[2];","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"butteredyakiimo"},"content":" switch (type) {","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"butteredyakiimo"},"content":" case \"T\":","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"butteredyakiimo"},"content":" ToDo toDo \u003d new ToDo(status, desc);","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"butteredyakiimo"},"content":" list.add(toDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"butteredyakiimo"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"butteredyakiimo"},"content":" case \"D\":","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime date \u003d convertToDateTime(taskDetails[3]);","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"butteredyakiimo"},"content":" Deadline deadline \u003d new Deadline(status, desc, date);","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"butteredyakiimo"},"content":" list.add(deadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"butteredyakiimo"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"butteredyakiimo"},"content":" case \"E\":","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime start \u003d convertToDateTime(taskDetails[3]);","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime end \u003d convertToDateTime(taskDetails[4]);","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"butteredyakiimo"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"butteredyakiimo"},"content":" Event event \u003d new Event(status, desc, start, end);","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"butteredyakiimo"},"content":" list.add(event);","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"butteredyakiimo"},"content":" } catch (InvalidStartEndException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"butteredyakiimo"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"butteredyakiimo"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"butteredyakiimo"},"content":" sc.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"butteredyakiimo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"butteredyakiimo"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"butteredyakiimo"},"content":" return list;","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"butteredyakiimo"},"content":" * Writes the tasks in the given list to the data file.","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"butteredyakiimo"},"content":" * This overwrites the existing data in the file.","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"butteredyakiimo"},"content":" * @param list list of Task objects.","lastModifiedDate":"2023-09-06"},{"lineNumber":129,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"butteredyakiimo"},"content":" public void updateFile(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"butteredyakiimo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"butteredyakiimo"},"content":" //check if file exists, else create","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"butteredyakiimo"},"content":" File dataFile \u003d new File(\"./data/duke.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"butteredyakiimo"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"butteredyakiimo"},"content":" dataFile \u003d createDataFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"butteredyakiimo"},"content":" //create a FileWriter object to write to file. Note that this overwrites the existing data!","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"butteredyakiimo"},"content":" FileWriter file \u003d new FileWriter(\"./data/duke.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"butteredyakiimo"},"content":" BufferedWriter writer \u003d new BufferedWriter(file);","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"butteredyakiimo"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"butteredyakiimo"},"content":" Task task \u003d list.get(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"butteredyakiimo"},"content":" String taskStr \u003d task.convertTask();","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"butteredyakiimo"},"content":" writer.write(taskStr);","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"butteredyakiimo"},"content":" writer.newLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"butteredyakiimo"},"content":" writer.flush();","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"butteredyakiimo"},"content":" writer.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"butteredyakiimo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":156}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import duke.exceptions.InvalidTaskIdException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" * Contains the task list, and methods to modify the tasks in the list","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":"public class TaskList {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" public TaskList(ArrayList\u003cTask\u003e list, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" * Returns true if the input taskID is in the range [0, list.size() -1].","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" * @param taskId id to be checked.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" * @return true if the taskID is valid.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" * @throws InvalidTaskIdException if taskID is out of range.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" public boolean isValidTaskId(int taskId) throws InvalidTaskIdException {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" if (taskId \u003e this.list.size() - 1 || taskId \u003c 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" throw new InvalidTaskIdException();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":" * Appends all the tasks into a string, and passes it to ui object for printing.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" * If no tasks, calls ui.showNoTasks().","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":" public void listTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":" if (list.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":" ui.showNoTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":" String result \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"butteredyakiimo"},"content":" int index \u003d i + 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"butteredyakiimo"},"content":" Task task \u003d list.get(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"butteredyakiimo"},"content":" result +\u003d index + \". \" + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"butteredyakiimo"},"content":" ui.showTasks(result);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"butteredyakiimo"},"content":" * Appends all tasks in the given list into a single string.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"butteredyakiimo"},"content":" * @param tasks list of Tasks to be printed.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"butteredyakiimo"},"content":" * @return a String of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"butteredyakiimo"},"content":" public String listTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"butteredyakiimo"},"content":" String result \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"butteredyakiimo"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"butteredyakiimo"},"content":" int index \u003d i + 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"butteredyakiimo"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"butteredyakiimo"},"content":" result +\u003d index + \". \" + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"butteredyakiimo"},"content":" return result;","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"butteredyakiimo"},"content":" * Adds a task to the list. Calls storage.updateFile() to update the data file.","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"butteredyakiimo"},"content":" * @param task id of task to be added.","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"butteredyakiimo"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"butteredyakiimo"},"content":" this.list.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"butteredyakiimo"},"content":" this.storage.updateFile(this.list);","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"butteredyakiimo"},"content":" ui.showTaskAdded(task, this.getListSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"butteredyakiimo"},"content":" * Deletes a task from the list if the input taskID is valid.","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"butteredyakiimo"},"content":" * Calls storage.updateFile() to update the data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"butteredyakiimo"},"content":" * @param taskId if of task to delete.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"butteredyakiimo"},"content":" * @throws InvalidTaskIdException if taskID is invalid.","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"butteredyakiimo"},"content":" public void deleteTask(int taskId) throws InvalidTaskIdException {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"butteredyakiimo"},"content":" if (isValidTaskId(taskId)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"butteredyakiimo"},"content":" Task toRemove \u003d list.get(taskId);","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"butteredyakiimo"},"content":" list.remove(taskId);","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"butteredyakiimo"},"content":" this.storage.updateFile(this.list);","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"butteredyakiimo"},"content":" ui.showDeleteTask(toRemove, this.getListSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"butteredyakiimo"},"content":" * Marks a task as completed, and updates storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"butteredyakiimo"},"content":" * @param taskId id of task to mark.","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"butteredyakiimo"},"content":" public void markTask(int taskId) {","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"butteredyakiimo"},"content":" Task task \u003d this.list.get(taskId);","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"butteredyakiimo"},"content":" if (task.canMark()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"butteredyakiimo"},"content":" ui.showMarkTask(false, task);","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"butteredyakiimo"},"content":" this.storage.updateFile(this.list);","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"butteredyakiimo"},"content":" ui.showMarkTask(true, task);","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"butteredyakiimo"},"content":" * Marks a task as uncompleted, and updates storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"butteredyakiimo"},"content":" * @param taskId id of task to unmark.","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"butteredyakiimo"},"content":" public void unMarkTask(int taskId) {","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"butteredyakiimo"},"content":" Task task \u003d this.list.get(taskId);","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"butteredyakiimo"},"content":" if (task.canUnMark()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"butteredyakiimo"},"content":" ui.showUnmarkTask(true, task);","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"butteredyakiimo"},"content":" this.storage.updateFile(this.list);","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"butteredyakiimo"},"content":" ui.showUnmarkTask(false, task);","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":128,"author":{"gitId":"butteredyakiimo"},"content":" * Returns a list of tasks that contains the keyword.","lastModifiedDate":"2023-09-06"},{"lineNumber":129,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"butteredyakiimo"},"content":" * @param keyword specified keyword to be searched for.","lastModifiedDate":"2023-09-06"},{"lineNumber":131,"author":{"gitId":"butteredyakiimo"},"content":" * @return list of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":132,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":133,"author":{"gitId":"butteredyakiimo"},"content":" public ArrayList\u003cTask\u003e findMatches(String keyword) {","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"butteredyakiimo"},"content":" ArrayList\u003cTask\u003e matches \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"butteredyakiimo"},"content":" for (Task task : list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"butteredyakiimo"},"content":" String desc \u003d task.getTask();","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"butteredyakiimo"},"content":" if (desc.contains(keyword)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"butteredyakiimo"},"content":" matches.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"butteredyakiimo"},"content":" return matches;","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"butteredyakiimo"},"content":" * Returns the size of the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"butteredyakiimo"},"content":" * @return size of list.","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"butteredyakiimo"},"content":" public int getListSize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"butteredyakiimo"},"content":" return this.list.size();","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":152}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" * Handles interactions with the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"public class Ui {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" private String line \u003d \"--------------------------------------------------------------------\";","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":" * Prints welcome words to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" public void greeting() {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" String intro \u003d \"(。・o・。)ノ Hey there! I\u0027m BUTTER.\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" \"How can I help you today?\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line + \"\\n\" + intro + line);","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" * Prints goodbye words to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" public void bye() {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" String bye \u003d \"彡໒(⊙ᴗ⊙)७彡 Signing off, see you later!\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(bye + line);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" * Prints the number of tasks the user has in their list.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" * Called to update the user when the number of tasks in the list changes.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" * @param size the size of the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" public void showNumberOfTasks(int size) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(size \u003d\u003d 1","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" ? \"Now you have \" + size + \" task in the list!\\n\" + line","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":" : \"Now you have \" + size + \" tasks in the list!\\n\" + line);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":" * Prints when there are 0 tasks in the list, and list is the command.","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":" public void showNoTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"(o´ω`o)ノ You have no upcoming tasks!\\n\" + line);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"butteredyakiimo"},"content":" * Prints when there are at least 1 task in the list, and list is the command.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"butteredyakiimo"},"content":" * @param tasks tasks to be printed.","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"butteredyakiimo"},"content":" public void showTasks(String tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"(⇀‸↼‶)⊃━☆゚.*・。゚ Here are your tasks for the day:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(tasks + line);","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"butteredyakiimo"},"content":" * Prints when the user adds a tasks successfully.","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"butteredyakiimo"},"content":" * @param task task that was added.","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"butteredyakiimo"},"content":" * @param listSize task list size.","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"butteredyakiimo"},"content":" public void showTaskAdded(Task task, int listSize) {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"(`・ω・´)ノ New task added:\\n\" + task);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"butteredyakiimo"},"content":" this.showNumberOfTasks(listSize);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"butteredyakiimo"},"content":" * Prints when the user deletes a task successfully.","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"butteredyakiimo"},"content":" * @param toRemove task to remove.","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"butteredyakiimo"},"content":" * @param listSize task list size.","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"butteredyakiimo"},"content":" public void showDeleteTask(Task toRemove, int listSize) {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"ଘ(੭ˊᵕˋ)੭ Ok! I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(toRemove);","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"butteredyakiimo"},"content":" this.showNumberOfTasks(listSize);","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"butteredyakiimo"},"content":" * Prints when the user attempts to mark a task as completed.","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"butteredyakiimo"},"content":" * If task is not marked, success message is printed out. Else,","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"butteredyakiimo"},"content":" * unsuccessful message printed.","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"butteredyakiimo"},"content":" * @param isMarked true if the task is already marked.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"butteredyakiimo"},"content":" * @param task task to be marked.","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"butteredyakiimo"},"content":" public void showMarkTask(boolean isMarked, Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"butteredyakiimo"},"content":" if (!isMarked) {","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"ଘ(੭ˊᵕˋ)੭ Yay! This task is completed:\\n\" + task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"┐(´~`)┌ This task is already marked as completed!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"butteredyakiimo"},"content":" * Prints when the user attempts to unmark a task.","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"butteredyakiimo"},"content":" * If task is marked, success message is printed out. Else,","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"butteredyakiimo"},"content":" * an unsuccessful message is printed.","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"butteredyakiimo"},"content":" * @param isMarked true if the task is already marked.","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"butteredyakiimo"},"content":" * @param task task to be unmarked.","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"butteredyakiimo"},"content":" public void showUnmarkTask(boolean isMarked, Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"butteredyakiimo"},"content":" if (isMarked) {","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"໒( ̿・ ᴥ ̿・ )ʋ All righty, I\u0027ve marked this task as uncompleted:\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"butteredyakiimo"},"content":" task.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"┐(´~`)┌ This task is already marked as uncompleted!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"butteredyakiimo"},"content":" * Prints the inputted error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"butteredyakiimo"},"content":" * @param message error message to be printed.","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"butteredyakiimo"},"content":" public void showError(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"butteredyakiimo"},"content":" * Prints a custom error message for invalid datetime formats.","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"butteredyakiimo"},"content":" public void showInvalidDateFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"(・´з`・) Uh oh...dates must be of YYYY-MM-DD HH:mm format\");","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":135,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":136,"author":{"gitId":"butteredyakiimo"},"content":" * Prints the given list of tasks, which contain tasks matching the","lastModifiedDate":"2023-09-06"},{"lineNumber":137,"author":{"gitId":"butteredyakiimo"},"content":" * keyword specified by user.","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"butteredyakiimo"},"content":" * @param tasks String format of tasks that match keyword.","lastModifiedDate":"2023-09-06"},{"lineNumber":140,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":141,"author":{"gitId":"butteredyakiimo"},"content":" public void showMatches(String tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"butteredyakiimo"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"(⇀‸↼‶)⊃━☆゚.*・。゚ Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(tasks + line);","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(\"(・´з`・) Uh oh...there are no matching tasks!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"butteredyakiimo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":150}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" * This is the parent exception of all exceptions created in this duke program.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" public DukeException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh...smt went wrong\");","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":14}},{"path":"src/main/java/duke/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" * This exception is thrown when the user input does not match valid command.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" super(\"Sorry, I don\u0027t understand what you mean \u003e\u003c\");","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"butteredyakiimo":10}},{"path":"src/main/java/duke/exceptions/InvalidDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" * This exception is thrown when the deadline command is of the incorrect format.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"public class InvalidDeadlineException extends DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":" public InvalidDeadlineException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh... make sure your deadline has a description and date\");","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"butteredyakiimo":10}},{"path":"src/main/java/duke/exceptions/InvalidEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" * This exception is thrown when the event command is of the incorrect format.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"public class InvalidEventException extends DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" public InvalidEventException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh...improper event format!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":11}},{"path":"src/main/java/duke/exceptions/InvalidFindTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" * This exception is thrown when no/more than one keyword is provided","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" * when user enters the find command.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"public class InvalidFindTaskException extends DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" public InvalidFindTaskException() {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh...please provide exactly one keyword\");","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"butteredyakiimo":11}},{"path":"src/main/java/duke/exceptions/InvalidStartEndException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" * This exception is thrown when start datetime is after end datetime when creating","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" * an Event.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"public class InvalidStartEndException extends DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" public InvalidStartEndException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh...start must be after end!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":11}},{"path":"src/main/java/duke/exceptions/InvalidTaskIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" * This exception is thrown when the task id provided is out of range","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" * when attempting actions such as delete, mark and unmark.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"public class InvalidTaskIdException extends DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" public InvalidTaskIdException() {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh... invalid taskID\");","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"butteredyakiimo":12}},{"path":"src/main/java/duke/exceptions/NoDescException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" * This exception is thrown when no description is provided when attempting to","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" * create any Task object.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"public class NoDescException extends DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" public NoDescException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh... please add a description\");","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"butteredyakiimo":11}},{"path":"src/main/java/duke/exceptions/NoEndException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" * This exception is thrown when no end datetime is provided when attempting","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" * to create an Event.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"public class NoEndException extends DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" public NoEndException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh... please add an end date\");","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"butteredyakiimo":11}},{"path":"src/main/java/duke/exceptions/NoStartException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" * This exception is thrown when no start datetime is provided when attempting","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" * to create an Event.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"public class NoStartException extends DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" public NoStartException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh... please add a start date\");","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"butteredyakiimo":11}},{"path":"src/main/java/duke/exceptions/NoTaskIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" * This exception is thrown when no task id is provided when attempting actions","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" * such as delete, mark and unmark.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"public class NoTaskIdException extends DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" public NoTaskIdException() {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" super(\"(・´з`・) Uh oh... please provide a taskID\");","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":11}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":" * Encapsulates a Deadline. Contains the task description, completion status","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" * and date of deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" private LocalDateTime date;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":" private DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" * Class constructor for Deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" * @param status 0 for uncompleted, 1 or other numbers for completed.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" * @param task task description.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" * @param date deadline of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" public Deadline(int status, String task, LocalDateTime date) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" super(status, task);","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" * Converts Deadline to the correct string format to write to data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" * @return string to write to data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" public String convertTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" return \"D | \" + super.getStatus() + \" | \" + super.getTask()","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" + \" | \" + this.date.format(formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" * Returns string representation of a Deadline object.","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":" * @return string Deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":" return \"[D] \" + super.toString() + \" (by: \" + this.date.format(formatter) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"butteredyakiimo":46}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import duke.exceptions.InvalidStartEndException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" * Encapsulates an Event. Contains the task description, completion status,","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" * start and end date times.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" private DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" private LocalDateTime start;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" private LocalDateTime end;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" * Class constructor for Event.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" * @param status 0 for uncompleted, 1 or other numbers for completed.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" * @param task task description.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" * @param start start datetime.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" * @param end end datetime.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" * @throws InvalidStartEndException if start after end.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" public Event(int status, String task, LocalDateTime start, LocalDateTime end) throws InvalidStartEndException {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" super(status, task);","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" if (start.isAfter(end)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" throw new InvalidStartEndException();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":" * Converts Event to the correct string format to write to data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":" * @return string to write to data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":" public String convertTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":" return \"E | \" + super.getStatus() + \" | \" + super.getTask()","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":" + \" | \" + this.start.format(formatter) + \" | \" + this.end.format(formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"butteredyakiimo"},"content":" * Returns string representation of an Event object.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"butteredyakiimo"},"content":" * @return string Event.","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"butteredyakiimo"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"butteredyakiimo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"butteredyakiimo"},"content":" return \"[E] \" + super.toString() + \" (from: \" + this.start.format(formatter)","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"butteredyakiimo"},"content":" + \" to: \" + this.end.format(formatter) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"butteredyakiimo":57}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" * Encapsulates a Task. Contains methods that allows users to interact with a Task","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" * object, such as marking, unmarking or deleting tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"abstract public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" private int status;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" private String task;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":" * Class constructor for Task.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" * @param status 0 for uncompleted, 1 or other number for completed.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" * @param task task description.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" public Task(int status, String task) {","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" this.status \u003d status;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" abstract public String convertTask();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" * Marks this task as completed.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" * @return true if the task is marked successfully.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" public boolean canMark() {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" if (this.status \u003d\u003d 0) {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" this.status \u003d 1;","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" return true;","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":" * Marks this task as uncompleted.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":" * @return true if task is unmarked.","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":" public boolean canUnMark() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":" if (this.status !\u003d 0) {","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":" this.status \u003d 0;","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"butteredyakiimo"},"content":" return true;","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"butteredyakiimo"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"butteredyakiimo"},"content":" * Returns the status of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"butteredyakiimo"},"content":" * @return 0 if uncompleted, 1 or other number for completed.","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"butteredyakiimo"},"content":" public int getStatus() {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"butteredyakiimo"},"content":" return this.status;","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"butteredyakiimo"},"content":" * Returns the task description.","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"butteredyakiimo"},"content":" * @return task description.","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"butteredyakiimo"},"content":" public String getTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"butteredyakiimo"},"content":" return this.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"butteredyakiimo"},"content":" * Returns the string representation of a task object.","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"butteredyakiimo"},"content":" * @return a string task.","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"butteredyakiimo"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"butteredyakiimo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"butteredyakiimo"},"content":" if (status \u003d\u003d 0) {","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"butteredyakiimo"},"content":" return \"[ ] \" + task;","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"butteredyakiimo"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"butteredyakiimo"},"content":" return \"[X] \" + task;","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"butteredyakiimo":83}},{"path":"src/main/java/duke/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":" * Encapsulates a ToDo. Contains the task description, and","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":" * completion status.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" * Class constructor for ToDo.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":" * @param status 0 for uncompleted, 1 or other numbers for completed.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" * @param task task description.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" public ToDo(int status, String task) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" super(status, task);","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" * Converts ToDo to the correct string format to write to the data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" * @return string to write to data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" public String convertTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" return \"T | \" + super.getStatus() + \" | \" + super.getTask();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" * Returns string representation of a ToDo object.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" * @return string ToDo.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" return \"[T] \" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"butteredyakiimo":38}},{"path":"src/test/java/duke/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" private DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" public void convertTask_uncompleted() {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" Deadline deadline \u003d new Deadline(0, \"bake cookies\", LocalDateTime.now());","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"D | 0 | bake cookies | \" + LocalDateTime.now().format(formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, deadline.convertTask());","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" public void convertTask_completed() {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" Deadline deadline \u003d new Deadline(1, \"bake cookies\", LocalDateTime.now());","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"D | 1 | bake cookies | \" + LocalDateTime.now().format(formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, deadline.convertTask());","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" public void toString_uncompleted() {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" Deadline deadline \u003d new Deadline(0, \"bake cookies\", LocalDateTime.now());","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"[D] [ ] bake cookies (by: \" + LocalDateTime.now().format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, deadline.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":" public void toString_completed() {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" Deadline deadline \u003d new Deadline(1, \"bake cookies\", LocalDateTime.now());","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"[D] [X] bake cookies (by: \" + LocalDateTime.now().format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, deadline.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":40}},{"path":"src/test/java/duke/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import duke.exceptions.InvalidStartEndException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":"public class EventTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":" private DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" public void event_exceptionThrown_hours() {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime end \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime start \u003d end.plusHours(9);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" InvalidStartEndException ex \u003d assertThrows(InvalidStartEndException.class,","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" () -\u003e new Event(0, \"bake cookies\", start, end));","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(\"(・´з`・) Uh oh...start must be after end!\", ex.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" public void event_exceptionThrown_minutes() {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime end \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime start \u003d end.plusMinutes(1);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" InvalidStartEndException ex \u003d assertThrows(InvalidStartEndException.class,","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" () -\u003e new Event(0, \"bake cookies\", start, end));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(\"(・´з`・) Uh oh...start must be after end!\", ex.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":" public void convertTask_uncompleted() throws InvalidStartEndException {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime start \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime end \u003d start.plusHours(9);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" Event event \u003d new Event(0, \"bake cookies\", start, end);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"E | 0 | bake cookies | \" + start.format(formatter) +","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":" \" | \" + end.format(formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, event.convertTask());","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":" public void convertTask_completed() throws InvalidStartEndException {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime start \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime end \u003d start.plusHours(9);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"butteredyakiimo"},"content":" Event event \u003d new Event(1, \"bake cookies\", start, end);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"E | 1 | bake cookies | \" + start.format(formatter) +","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"butteredyakiimo"},"content":" \" | \" + end.format(formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, event.convertTask());","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"butteredyakiimo"},"content":" public void toString_uncompleted() throws InvalidStartEndException {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime start \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime end \u003d start.plusHours(9);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"butteredyakiimo"},"content":" Event event \u003d new Event(0, \"bake cookies\", start, end);","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"[E] [ ] bake cookies (from: \" + start.format(formatter) +","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"butteredyakiimo"},"content":" \" to: \" + end.format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, event.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"butteredyakiimo"},"content":" public void toString_completed() throws InvalidStartEndException {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime start \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"butteredyakiimo"},"content":" LocalDateTime end \u003d start.plusHours(9);","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"butteredyakiimo"},"content":" Event event \u003d new Event(1, \"bake cookies\", start, end);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"[E] [X] bake cookies (from: \" + start.format(formatter) +","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"butteredyakiimo"},"content":" \" to: \" + end.format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, event.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":73}},{"path":"src/test/java/duke/tasks/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" //this is the concrete implementation of Task, used for testing","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" public class concreteTask extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" public concreteTask(int status, String task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":" super(status, task);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" public String convertTask() {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" return \"task converted\";","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" public void canMark_successful() {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(0, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" task.canMark();","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(1, task.getStatus());","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" public void canMark_unsuccessful() {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(1, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" task.canMark();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(1, task.getStatus());","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":" public void canUnMark_successful() {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(1, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":" task.canUnMark();","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(0, task.getStatus());","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":" public void canUnMark_unsuccessful() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(0, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":" task.canUnMark();","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(0, task.getStatus());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"butteredyakiimo"},"content":" public void getStatus_uncompleted() {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(0, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(0, task.getStatus());","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"butteredyakiimo"},"content":" public void getStatus_completed() {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(1, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(1, task.getStatus());","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"butteredyakiimo"},"content":" public void getTask_completed() {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(1, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(\"Set up unit tests\", task.getTask());","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"butteredyakiimo"},"content":" public void toString_uncompleted() {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(0, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(\"[ ] \" + \"Set up unit tests\", task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"butteredyakiimo"},"content":" public void toString_completed() {","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"butteredyakiimo"},"content":" concreteTask task \u003d new concreteTask(1, \"Set up unit tests\");","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(\"[X] \" + \"Set up unit tests\", task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":78}},{"path":"src/test/java/duke/tasks/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":" public void convertTask_uncompleted() {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":" ToDo todo \u003d new ToDo(0, \"bake cookies!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"T | 0 | bake cookies!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, todo.convertTask());","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":" public void convertTask_completed() {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":" ToDo todo \u003d new ToDo(1, \"bake cookies!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"T | 1 | bake cookies!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, todo.convertTask());","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":" public void toString_uncompleted() {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":" ToDo todo \u003d new ToDo(0, \"bake cookies!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"[T] [ ] bake cookies!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, todo.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":" public void toString_completed() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":" ToDo todo \u003d new ToDo(1, \"bake cookies!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":" String expected \u003d \"[T] [X] bake cookies!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":" assertEquals(expected, todo.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"butteredyakiimo":36}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"butteredyakiimo"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"butteredyakiimo"},"content":"hahahhah","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"butteredyakiimo"},"content":"wow so cool","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"butteredyakiimo"},"content":"todo","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"butteredyakiimo"},"content":"deadline","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"butteredyakiimo"},"content":"event","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"butteredyakiimo"},"content":"todo watch lecture","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"butteredyakiimo"},"content":"todo eat lunch","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"butteredyakiimo"},"content":"deadline bake cookies /by tmr","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"butteredyakiimo"},"content":"deadline bake cookies /by 2023-09-03 18:00","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"butteredyakiimo"},"content":"deadline /by 2023-09-03 18:00","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"butteredyakiimo"},"content":"deadline bake cookies /by 2023-20-03 18:00","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"butteredyakiimo"},"content":"deadline bake cookies /by 2023-09-03 29:00","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"butteredyakiimo"},"content":"deadline go fishing /by 2024-02-05","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"butteredyakiimo"},"content":"list","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":"event math meeting! /from now /to tmr","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"butteredyakiimo"},"content":"event math meeting! /from 2023-08-25 7:00 /to 2023-08-25 23:00","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"butteredyakiimo"},"content":"event math meeting! /from 2023-08-25 07:00 /to 2023-08-25 23:00","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"butteredyakiimo"},"content":"event /from 2023-08-25 7:00 /to 2023-08-25 23:00","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"butteredyakiimo"},"content":"event math meeting! /from 2023-08-25 07:00","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"butteredyakiimo"},"content":"event math meeting! /to 2023-08-25 23:00","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"butteredyakiimo"},"content":"event math meeting! 2023-08-25 7:00 2023-08-25 23:00","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"butteredyakiimo"},"content":"list","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"butteredyakiimo"},"content":"event dinner w choir gals! /from 2023-09-25 23:00 /to 2023-09-25 17:00","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"butteredyakiimo"},"content":"event dinner w choir gals! /from 2023-09-25 17:00 /to 2023-09-25 23:00","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"butteredyakiimo"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"butteredyakiimo"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"butteredyakiimo"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"butteredyakiimo"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"butteredyakiimo"},"content":"mark 3","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"butteredyakiimo"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"butteredyakiimo"},"content":"unmark 4","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"butteredyakiimo"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"butteredyakiimo"},"content":"delete 1","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"butteredyakiimo"},"content":"delete 7","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"butteredyakiimo"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"butteredyakiimo"},"content":"bye","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"butteredyakiimo"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"butteredyakiimo":45}},{"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":"butteredyakiimo"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":20,"butteredyakiimo":1}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"butteredyakiimo"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/duke/*.java","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":37,"butteredyakiimo":1}}] diff --git a/butteredyakiimo_ip_master/commits.json b/butteredyakiimo_ip_master/commits.json index a93be691..4e99304e 100644 --- a/butteredyakiimo_ip_master/commits.json +++ b/butteredyakiimo_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"butteredyakiimo":[{"date":"2023-08-22","commitResults":[{"hash":"3455fd8e1eb028451856bf1cd9035f5c9b2d3a9e","isMergeCommit":false,"messageTitle":"Change name of chatbot and add greetings","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}}]},{"date":"2023-08-23","commitResults":[{"hash":"9400b64b4b63a7dd332b2b299e34302b4d558ac1","isMergeCommit":false,"messageTitle":"Add user input, chatbot echos command, exits with bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}},{"hash":"15a2322a8616a46e3fd602bc08561e434dfe2aab","isMergeCommit":false,"messageTitle":"Store user input, list out all tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":4}}},{"hash":"439f39c64cc6dadabfbef52a9e3ecf885f5c8de0","isMergeCommit":false,"messageTitle":"Add a Task class, users can mark tasks as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":9}}},{"hash":"91ae7f757aa577d9755302d8f42028417cda648e","isMergeCommit":false,"messageTitle":"Add commands todo, deadline and event, created these classes too","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":15}}},{"hash":"06eec0531c99597c65a1426b06517cd0c88a672d","isMergeCommit":false,"messageTitle":"Add TextUiTesting, made some fields private","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":39,"deletions":0},"java":{"insertions":78,"deletions":57}}},{"hash":"755476cc60daae07c7070fc55a6cc85fd05cdfa0","isMergeCommit":false,"messageTitle":"Handle errors, such as invalid and incomplete commands","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":38,"deletions":0},"java":{"insertions":76,"deletions":25}}}]},{"date":"2023-08-24","commitResults":[{"hash":"b57d752a3044553a1805b9fb7f5e1d958a78beae","isMergeCommit":false,"messageTitle":"Add delete function, fix invalid task id for mark, unmark and delete","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"6d75b93a51181ff96ec64f50f2239fb65e298b37","isMergeCommit":false,"messageTitle":"Update changes to Duke.java, include fixes mark, unmark and delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":7}}}]},{"date":"2023-08-26","commitResults":[{"hash":"7ea3176baf739a7b3026a65ce09c30a84ef0e0ef","isMergeCommit":false,"messageTitle":"Add exceptions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":43},"java":{"insertions":245,"deletions":143}}}]},{"date":"2023-09-03","commitResults":[{"hash":"6ecc10f882dbc0f43a35bb25f8700a8bc121d5ed","isMergeCommit":false,"messageTitle":"Tasks are saved in another file, updates when list changes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":147,"deletions":24}}},{"hash":"9fbaf7a41c76ed270fbae6f3e1fce73a60e01271","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"a73c97df6af2f4d3a76c27de69055df1311d56a8","isMergeCommit":false,"messageTitle":"Change date to LocalDateTime for deadline","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":4},"java":{"insertions":53,"deletions":27}}},{"hash":"95ffd61d87dfb62d6ec25e35dba4f1af0fe0da39","isMergeCommit":false,"messageTitle":"Dates in Events are now LocalDateTime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":37,"deletions":43},"java":{"insertions":31,"deletions":16}}},{"hash":"e0cdfbf04c92d2285d2365709960b6bb98ad624f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"062d9fece9ea0f75032697a4924824cdedf9d5a3","isMergeCommit":false,"messageTitle":"Extract out Ui, Storage, Parser and TaskList classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":829,"deletions":365}}},{"hash":"3039976b54c1f174582658e17a74faf153a283af","isMergeCommit":false,"messageTitle":"Add new exceptions, improve abtraction of ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":448}}},{"hash":"f0ecace0c42e8f2a7f673c87708ac2168ac65c58","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"1a5f2bad4081fd9401ca26cff40f6c2962081bc7","isMergeCommit":false,"messageTitle":"Create packages: duke, exceptions and tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":12},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":2,"deletions":2},"md":{"insertions":2,"deletions":2}}},{"hash":"a7139c2e6eab17243c5385169bcf5458eb73dc66","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"d6b8bb9e7f759a0a56399a4f83288eb18f454a71","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027 into A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c1a458f2377985cf58244865078149695f92e051","isMergeCommit":false,"messageTitle":"Set up gradle to build and run Duke","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"28a429086c804c105366f1ae050461a35a1d0ffb","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"208fb22a949fcbefaeec04c6c4442bff13684ed5","isMergeCommit":false,"messageTitle":"Add tests for all classes under tasks package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":298,"deletions":12}}},{"hash":"746e4284520f5dc5bad6c27457ef31de9b6eacd6","isMergeCommit":false,"messageTitle":"Add tests for all classes under tasks package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"94edef4f57a7f016528a4008ee5ae8deaea55a1c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"071cd0e598f6e81cbf5e74552e278f98282a6470","isMergeCommit":false,"messageTitle":"No exceptions are caught in Duke class, handled instead by parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":106}}},{"hash":"3980ff37535851aa973eeaa4f07a4d65d615bc67","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Fix-Exceptions\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"butteredyakiimo":{"java":978,"md":2,"fxml":0,"sh":1,"bat":1,"gradle":2,"txt":45}},"authorContributionVariance":{"butteredyakiimo":236546.88},"authorDisplayNameMap":{"butteredyakiimo":"CS2103T-T13-4 NICO..N YI"}} +{"authorDailyContributionsMap":{"butteredyakiimo":[{"date":"2023-08-22","commitResults":[{"hash":"3455fd8e1eb028451856bf1cd9035f5c9b2d3a9e","isMergeCommit":false,"messageTitle":"Change name of chatbot and add greetings","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}}]},{"date":"2023-08-23","commitResults":[{"hash":"9400b64b4b63a7dd332b2b299e34302b4d558ac1","isMergeCommit":false,"messageTitle":"Add user input, chatbot echos command, exits with bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}},{"hash":"15a2322a8616a46e3fd602bc08561e434dfe2aab","isMergeCommit":false,"messageTitle":"Store user input, list out all tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":4}}},{"hash":"439f39c64cc6dadabfbef52a9e3ecf885f5c8de0","isMergeCommit":false,"messageTitle":"Add a Task class, users can mark tasks as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":9}}},{"hash":"91ae7f757aa577d9755302d8f42028417cda648e","isMergeCommit":false,"messageTitle":"Add commands todo, deadline and event, created these classes too","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":15}}},{"hash":"06eec0531c99597c65a1426b06517cd0c88a672d","isMergeCommit":false,"messageTitle":"Add TextUiTesting, made some fields private","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":39,"deletions":0},"java":{"insertions":78,"deletions":57}}},{"hash":"755476cc60daae07c7070fc55a6cc85fd05cdfa0","isMergeCommit":false,"messageTitle":"Handle errors, such as invalid and incomplete commands","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":38,"deletions":0},"java":{"insertions":76,"deletions":25}}}]},{"date":"2023-08-24","commitResults":[{"hash":"b57d752a3044553a1805b9fb7f5e1d958a78beae","isMergeCommit":false,"messageTitle":"Add delete function, fix invalid task id for mark, unmark and delete","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"6d75b93a51181ff96ec64f50f2239fb65e298b37","isMergeCommit":false,"messageTitle":"Update changes to Duke.java, include fixes mark, unmark and delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":7}}}]},{"date":"2023-08-26","commitResults":[{"hash":"7ea3176baf739a7b3026a65ce09c30a84ef0e0ef","isMergeCommit":false,"messageTitle":"Add exceptions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":43},"java":{"insertions":245,"deletions":143}}}]},{"date":"2023-09-03","commitResults":[{"hash":"6ecc10f882dbc0f43a35bb25f8700a8bc121d5ed","isMergeCommit":false,"messageTitle":"Tasks are saved in another file, updates when list changes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":147,"deletions":24}}},{"hash":"9fbaf7a41c76ed270fbae6f3e1fce73a60e01271","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"a73c97df6af2f4d3a76c27de69055df1311d56a8","isMergeCommit":false,"messageTitle":"Change date to LocalDateTime for deadline","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":4},"java":{"insertions":53,"deletions":27}}},{"hash":"95ffd61d87dfb62d6ec25e35dba4f1af0fe0da39","isMergeCommit":false,"messageTitle":"Dates in Events are now LocalDateTime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":37,"deletions":43},"java":{"insertions":31,"deletions":16}}},{"hash":"e0cdfbf04c92d2285d2365709960b6bb98ad624f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"062d9fece9ea0f75032697a4924824cdedf9d5a3","isMergeCommit":false,"messageTitle":"Extract out Ui, Storage, Parser and TaskList classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":829,"deletions":365}}},{"hash":"3039976b54c1f174582658e17a74faf153a283af","isMergeCommit":false,"messageTitle":"Add new exceptions, improve abtraction of ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":448}}},{"hash":"f0ecace0c42e8f2a7f673c87708ac2168ac65c58","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"1a5f2bad4081fd9401ca26cff40f6c2962081bc7","isMergeCommit":false,"messageTitle":"Create packages: duke, exceptions and tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":12},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":2,"deletions":2},"md":{"insertions":2,"deletions":2}}},{"hash":"a7139c2e6eab17243c5385169bcf5458eb73dc66","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"d6b8bb9e7f759a0a56399a4f83288eb18f454a71","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027 into A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c1a458f2377985cf58244865078149695f92e051","isMergeCommit":false,"messageTitle":"Set up gradle to build and run Duke","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"28a429086c804c105366f1ae050461a35a1d0ffb","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"208fb22a949fcbefaeec04c6c4442bff13684ed5","isMergeCommit":false,"messageTitle":"Add tests for all classes under tasks package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":298,"deletions":12}}},{"hash":"746e4284520f5dc5bad6c27457ef31de9b6eacd6","isMergeCommit":false,"messageTitle":"Add tests for all classes under tasks package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"94edef4f57a7f016528a4008ee5ae8deaea55a1c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"071cd0e598f6e81cbf5e74552e278f98282a6470","isMergeCommit":false,"messageTitle":"No exceptions are caught in Duke class, handled instead by parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":106}}},{"hash":"3980ff37535851aa973eeaa4f07a4d65d615bc67","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Fix-Exceptions\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"feb7a331c9c678fb6f2297647df7c3eb08837979","isMergeCommit":false,"messageTitle":"Add Java docs for all classes, except exceptions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":423,"deletions":142}}},{"hash":"f495558eeec3b42a0b40b39a74d708dcfd8f809c","isMergeCommit":false,"messageTitle":"Edit code to adhere to coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":270,"deletions":242}}},{"hash":"12be5fe5e71e0d37913757b15940e41cc7fd386c","isMergeCommit":false,"messageTitle":"Add find feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":152,"deletions":132}}},{"hash":"08fa791b2b3965d938f0c382d547e2542f9aa508","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"64a4897a141a13a0e1446c7bd38796ccbdeb00d8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/duke/Parser.java\n#\tsrc/main/java/duke/Storage.java\n#\tsrc/main/java/duke/TaskList.java\n#\tsrc/main/java/duke/Ui.java\n#\tsrc/main/java/duke/tasks/Task.java\n#\tsrc/test/java/duke/tasks/TaskTest.java\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"196720d93309e2b475498cc874b4ca4d60b0ca8f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tdata/duke.txt\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/duke/Parser.java\n#\tsrc/main/java/duke/TaskList.java\n#\tsrc/main/java/duke/Ui.java\n#\tsrc/main/java/duke/tasks/Task.java\n#\tsrc/test/java/duke/tasks/TaskTest.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"28b6492e49544f0ff717da5e4bc3006adc98dbba","isMergeCommit":false,"messageTitle":"Fix renaming of ID to id in exceptions and methods","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":48,"deletions":55}}},{"hash":"fc3d1f6244d9f93a6ba96923dc64aedd89ceb250","isMergeCommit":false,"messageTitle":"Add more JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":110}}},{"hash":"a076c3539c3753fb019c48028e0bf053eb5848bf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Fix-Merge-Bugs\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"0bc4f5ea5ecfbdf86220e2c08d1efd99ea0e5537","isMergeCommit":false,"messageTitle":"Fix cosmetic issues for javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":29}}}]}]},"authorFileTypeContributionMap":{"butteredyakiimo":{"java":1397,"md":2,"fxml":0,"sh":1,"bat":1,"gradle":2,"txt":50}},"authorContributionVariance":{"butteredyakiimo":371419.06},"authorDisplayNameMap":{"butteredyakiimo":"CS2103T-T13-4 NICO..N YI"}} diff --git a/dhruvir29_ip_master/authorship.json b/dhruvir29_ip_master/authorship.json index 24b97bfa..157398cc 100644 --- a/dhruvir29_ip_master/authorship.json +++ b/dhruvir29_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"dhruvir29":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" archiveBaseName \u003d \"dukeNew\"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" archiveFileName \u003d \u0027dukeNew.jar\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"dhruvir29":3,"-":40}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"T | 0 | hi","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":1}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"public class Duke {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks\u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" boolean isRunning \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" storage.saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" ui.printWelcomeMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" while (isRunning) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" ui.printGoodByeMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" parser.addToList(input, storage, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":30}},{"path":"src/main/java/duke/Exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.Exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":" private String message;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":" this.message \u003d message;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" public void printMessage() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" System.out.println(this.message);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" return this.message;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":18}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.Exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" public static Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" public static void userCommand(String input, Storage storage, TaskList tasks) throws DukeException, NumberFormatException {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" int taskIndex \u003d Integer.parseInt(input.substring(5));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" if (tasks.getTask(taskIndex - 1).getStatusIcon() \u003d\u003d \"X\") {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\tThis task has already been marked as done!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" tasks.markTaskAsDone(taskIndex - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" ui.printMarkTasksAsDone(taskIndex, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" int taskIndex \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" if (tasks.getTask(taskIndex - 1).getStatusIcon() \u003d\u003d \" \") {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\tThis task has already been marked as not done!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" tasks.markTaskAsNotDone(taskIndex - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" ui.printMarkTasksAsNotDone(taskIndex, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" int pos \u003d Integer.parseInt(input.substring(7).trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" if (pos \u003e tasks.getSize() || pos \u003d\u003d 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\tThis number is out of bounds! \");","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" Task element \u003d tasks.getTask(pos - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" tasks.deleteTask(pos - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" ui.printDeleteTasks(pos, tasks, element);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" ui.printListMessage(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\tHey bud! Sorry I don\u0027t quite know what you mean :-(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" catch (DukeException | DateTimeException | IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" handleException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" public static void addToList(String input, Storage storage, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":" if (input.trim().length() \u003c\u003d 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Sorry! The description of a todo cannot be empty :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":" Task task \u003d new ToDo(input.substring(5));","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":" ui.printAddTaskToList(tasks, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"dhruvir29"},"content":" int index \u003d input.lastIndexOf(\"/by\");","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"dhruvir29"},"content":" if (input.trim().length() \u003c\u003d 8 || (input.substring(9, index).isEmpty())) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Sorry! The description of a deadline cannot be empty :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"dhruvir29"},"content":" if (!input.contains(\"/by\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Hey bud! Please include when the deadline is! \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"dhruvir29"},"content":" \"\\n\\t For example you can type: deadline read /by 2023-09-01 1700\");","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dhruvir29"},"content":" Task task \u003d new Deadline(input.substring(9, index - 1), input.substring(index + 4));","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"dhruvir29"},"content":" ui.printAddTaskToList(tasks, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"dhruvir29"},"content":" int indexFrom \u003d input.lastIndexOf(\"/from\");","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"dhruvir29"},"content":" int indexTo \u003d input.lastIndexOf(\"/to\");","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"dhruvir29"},"content":" if ((input.trim().length() \u003c\u003d 5) || (input.substring(6, indexFrom).isEmpty())) {","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Sorry! The description of an event cannot be empty :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"dhruvir29"},"content":" if (!input.contains(\"/from\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Hey bud! Please include when the event is!\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"dhruvir29"},"content":" \"\\n\\t For example you can type: event hangout /from 2023-09-01 1700 /to 2023-09-01 2000\");","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"dhruvir29"},"content":" if (!input.contains(\"/to\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Hey bud! Please include when the end date of the event is!\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"dhruvir29"},"content":" \"\\n\\t For example you can type: event hangout /from 2023-09-01 1700 /to 2023-09-01 2000\");","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"dhruvir29"},"content":" Task task \u003d new Event(input.substring(6, indexFrom - 1),","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"dhruvir29"},"content":" input.substring(indexFrom + 6, indexTo - 1), input.substring(indexTo + 4));","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"dhruvir29"},"content":" ui.printAddTaskToList(tasks, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"dhruvir29"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"dhruvir29"},"content":" userCommand(input, storage, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"dhruvir29"},"content":" } catch (DukeException | DateTimeException | IOException | NumberFormatException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"dhruvir29"},"content":" handleException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"dhruvir29"},"content":" private static void handleException(Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"dhruvir29"},"content":" if (e instanceof DukeException) {","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"dhruvir29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"dhruvir29"},"content":" } else if (e instanceof DateTimeException) {","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tPlease put a valid date and time in the format YYYY-MM-DD HHMM.\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"dhruvir29"},"content":" \"\\n\\tFor example: 2023-08-08 1800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"dhruvir29"},"content":" } else if (e instanceof IOException) {","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tAn error occurred while performing a file operation: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"dhruvir29"},"content":" } else if (e instanceof NumberFormatException ) {","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tYou can only perform this action on an integer!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"dhruvir29"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tAn unexpected error occurred: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":123}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" private String filepath;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" public Storage(String filepath, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" public void saveTasks() throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" if (!Files.isDirectory(Paths.get(\"data/\"))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" Files.createDirectories(Paths.get(\"data/\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" if (!Files.exists(Paths.get(\"data/duke.txt\"))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" Files.createFile(Paths.get(\"data/duke.txt\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"New file created\");","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" Scanner scanner \u003d new Scanner(new File(filepath));","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" String[] split \u003d scanner.nextLine().split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" for (int i \u003d 0; i \u003c split.length; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" split[i] \u003d split[i].strip();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" String description \u003d split[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" boolean isDone \u003d split[1].equals(\"X\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" switch (split[0]) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" case \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new ToDo(description, isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" case \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" String by \u003d split[3];","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new Deadline(description, by, isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" case \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":" String from \u003d split[3];","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" String to \u003d split[4];","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new Event(description, split[3], split[4], isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"dhruvir29"},"content":" public void writeTasksToFile(TaskList tasks) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"dhruvir29"},"content":" FileWriter fileWriter \u003d new FileWriter(filepath);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"dhruvir29"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i ++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"dhruvir29"},"content":" fileWriter.write(tasks.getTask(i).toWriteString()+\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"dhruvir29"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":75}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.Exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" public int getSize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" public void markTaskAsNotDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" this.tasks.get(index).markAsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" public void printTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tHere are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Seems like you have no tasks at the moment :) \");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" for (int i \u003d 1; i \u003c\u003d tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t\" + i + \". \" + tasks.get(i - 1).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" e.printMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":65}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.Exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" public void printWelcomeMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t \" + \"Hey there amigo, excited to meet you! I\u0027m Buddy, your friendly chat companion!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" \"\\t \" + \"What can I do for you?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" public void printGoodByeMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t \" + \"Bye! Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" public void printMarkTasksAsDone(int index, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tGreat! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t\" + index + \".\" + tasks.getTask(index - 1).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" public void printMarkTasksAsNotDone(int index, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tOk! I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t\" + index + \".\" + tasks.getTask(index - 1).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" public void printListMessage(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" tasks.printTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" public void printAddedTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tNo problem! I have added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" public void printHorizontalLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\" __________________________________________________________________\");","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" public void printDeleteTasks(int pos, TaskList tasks, Task element) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tOkie I\u0027ve removed this task:\\n\\t\" + element.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tNow you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" public void printAddTaskToList(TaskList tasks, Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":" printAddedTask();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t\" + task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tNow you have \" + tasks.getSize() + \" tasks in the list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":71}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" public Deadline(String description, String by, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy ha\")) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" public String toWriteString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" return \"D | \" + (isDone ? \"X\" : \"0\") + \" | \" + description + \" | \" + by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":32}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" this.from \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" this.to \u003d LocalDateTime.parse(to, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" public Event(String description, String from, String to, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" this.from \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" this.to \u003d LocalDateTime.parse(to, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy ha\")) + \" to: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" + to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy ha\")) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" public String toWriteString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" return \"E | \" + (isDone ? \"X\" : \"0\") + \" | \" + this.description + \" | \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\")) + \" | \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":36}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" return (isDone ? \"X\" : \" \"); // mark done duke.task with X","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" public abstract String toWriteString();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":41}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" public String toWriteString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" return \"T | \" + (isDone ? \"X\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":30}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"import duke.Exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" public void testMarkCommand() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"mark 1\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[T][X] do econs\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" public void testUnmarkCommand() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"mark 1\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"unmark 1\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[T][ ] do econs\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" public void testDeleteCommand() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"delete 1\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" assertEquals(0, tasks.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" public void testRandomCommand() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"add\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"Hey bud! Sorry I don\u0027t quite know what you mean :-(\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" public void testAddToList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" parser.addToList(\"todo hi\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[T][ ] hi\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dhruvir29":64}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" public void testMark(){","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" tasks.markTaskAsDone(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"X\", tasks.getTask(0).getStatusIcon());","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" public void testMarkAsNotDone(){","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\" \", tasks.getTask(0).getStatusIcon());","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" public void testAddTodo() {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[T][ ] do econs\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" public void testAddEvent() {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" Event sampleEvent \u003d new Event(\"read book\", \"2020-03-19 1800\", \"2020-03-20 1800\");","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleEvent);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[E][ ] read book (from: Mar 19 2020 6PM to: Mar 20 2020 6PM)\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" public void testAddDeadline() {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" Deadline sampleDeadline \u003d new Deadline(\"homework\", \"2020-03-19 1800\");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleDeadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[D][ ] homework (by: Mar 19 2020 6PM)\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" public void testDeleteTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new Deadline(\"homework\", \"2020-03-19 1800\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new ToDo(\"do econs\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new Event(\"read book\", \"2020-03-19 1800\", \"2020-03-20 1800\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" tasks.deleteTask(1);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":" assertEquals(2, tasks.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dhruvir29":62}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"deadline return book /by Monday","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"event for rc /from Saturday 9am /to 1pm","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"delete 5","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"book","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"bye","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":8}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"dhruvir29":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" archiveBaseName \u003d \"dukeNew\"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" archiveFileName \u003d \u0027dukeNew.jar\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"dhruvir29":3,"-":40}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"T | 0 | hi","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"T | 0 | run with friends","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"dhruvir29":2}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":" * Main class of the chatbot.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"public class Duke {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" boolean isRunning \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" storage.saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" ui.printWelcomeMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" while (isRunning) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" ui.printGoodByeMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" parser.addToList(input, storage, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":34}},{"path":"src/main/java/duke/Exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.Exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":" * Class that handles the exception.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":" private String message;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" * The constructor for DukeException.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" * @param message String.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" this.message \u003d message;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" * Prints the message being thrown by the exception.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" public void printMessage() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" System.out.println(this.message);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" * Returns the message of the DukeException.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" * @return String message.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" return this.message;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":33}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.Exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" * Interpretes and executes the inputs that the user passes in.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" public static Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" * Deals with user inputs beginning with mark, unmark,","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" * delete, list.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" * It also deals with what happens when the user types in an unrecognised","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" * command.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" * @param input what the user is typing in.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" * @param storage the storage that is being used.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" * @param tasks the TaskList that is being used to store the tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" * @throws NumberFormatException","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" public static void userCommand(String input, Storage storage, TaskList tasks) throws DukeException, NumberFormatException {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" int taskIndex \u003d Integer.parseInt(input.substring(5));","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" if (tasks.getTask(taskIndex - 1).getStatusIcon() \u003d\u003d \"X\") {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\tThis task has already been marked as done!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" tasks.markTaskAsDone(taskIndex - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" ui.printMarkTasksAsDone(taskIndex, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" int taskIndex \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" if (tasks.getTask(taskIndex - 1).getStatusIcon() \u003d\u003d \" \") {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\tThis task has already been marked as not done!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" tasks.markTaskAsNotDone(taskIndex - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" ui.printMarkTasksAsNotDone(taskIndex, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" int pos \u003d Integer.parseInt(input.substring(7).trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" if (pos \u003e tasks.getSize() || pos \u003d\u003d 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\tThis number is out of bounds! \");","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" Task element \u003d tasks.getTask(pos - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":" tasks.deleteTask(pos - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" ui.printDeleteTasks(pos, tasks, element);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":" ui.printListMessage(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"dhruvir29"},"content":" String keyword \u003d input.substring(5).trim();","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"dhruvir29"},"content":" TaskList foundTasks \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"dhruvir29"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"dhruvir29"},"content":" Task task \u003d tasks.getTask(i);","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"dhruvir29"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"dhruvir29"},"content":" foundTasks.addTask(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"dhruvir29"},"content":" if (foundTasks.getSize() \u003e 0) {","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"dhruvir29"},"content":" ui.printFindTask(foundTasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"dhruvir29"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tNo tasks found containing the keyword: \" + keyword);","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"dhruvir29"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\tHey bud! Sorry I don\u0027t quite know what you mean :-(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"dhruvir29"},"content":" } catch (DukeException | DateTimeException | IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"dhruvir29"},"content":" handleException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"dhruvir29"},"content":" * Deals with user commands to add a task to the tasklist.","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"dhruvir29"},"content":" * If the command is not one that adds a task, it will call the userCommand","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"dhruvir29"},"content":" * method.","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"dhruvir29"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"dhruvir29"},"content":" * @param input what the user is typing in.","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"dhruvir29"},"content":" * @param storage the storage that is being used.","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"dhruvir29"},"content":" * @param tasks the TaskList that is being used to store the tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"dhruvir29"},"content":" public static void addToList(String input, Storage storage, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"dhruvir29"},"content":" if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"dhruvir29"},"content":" if (input.trim().length() \u003c\u003d 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Sorry! The description of a todo cannot be empty :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"dhruvir29"},"content":" Task task \u003d new ToDo(input.substring(5));","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"dhruvir29"},"content":" ui.printAddTaskToList(tasks, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"dhruvir29"},"content":" int index \u003d input.lastIndexOf(\"/by\");","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"dhruvir29"},"content":" if (input.trim().length() \u003c\u003d 8 || (input.substring(9, index).isEmpty())) {","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Sorry! The description of a deadline cannot be empty :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"dhruvir29"},"content":" if (!input.contains(\"/by\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Hey bud! Please include when the deadline is! \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"dhruvir29"},"content":" \"\\n\\t For example you can type: deadline read /by 2023-09-01 1700\");","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"dhruvir29"},"content":" Task task \u003d new Deadline(input.substring(9, index - 1), input.substring(index + 4));","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"dhruvir29"},"content":" ui.printAddTaskToList(tasks, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"dhruvir29"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"dhruvir29"},"content":" int indexFrom \u003d input.lastIndexOf(\"/from\");","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"dhruvir29"},"content":" int indexTo \u003d input.lastIndexOf(\"/to\");","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"dhruvir29"},"content":" if ((input.trim().length() \u003c\u003d 5) || (input.substring(6, indexFrom).isEmpty())) {","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Sorry! The description of an event cannot be empty :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"dhruvir29"},"content":" if (!input.contains(\"/from\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Hey bud! Please include when the event is!\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"dhruvir29"},"content":" \"\\n\\t For example you can type: event hangout /from 2023-09-01 1700 /to 2023-09-01 2000\");","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"dhruvir29"},"content":" if (!input.contains(\"/to\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Hey bud! Please include when the end date of the event is!\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"dhruvir29"},"content":" \"\\n\\t For example you can type: event hangout /from 2023-09-01 1700 /to 2023-09-01 2000\");","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"dhruvir29"},"content":" Task task \u003d new Event(input.substring(6, indexFrom - 1),","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"dhruvir29"},"content":" input.substring(indexFrom + 6, indexTo - 1), input.substring(indexTo + 4));","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"dhruvir29"},"content":" ui.printAddTaskToList(tasks, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"dhruvir29"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"dhruvir29"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"dhruvir29"},"content":" userCommand(input, storage, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"dhruvir29"},"content":" } catch (DukeException | DateTimeException | IOException | NumberFormatException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"dhruvir29"},"content":" handleException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"dhruvir29"},"content":" * Handles the various exceptions being thrown.","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"dhruvir29"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"dhruvir29"},"content":" * @param e Exception that is being handled.","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"dhruvir29"},"content":" private static void handleException(Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"dhruvir29"},"content":" if (e instanceof DukeException) {","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"dhruvir29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"dhruvir29"},"content":" } else if (e instanceof DateTimeException) {","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tPlease put a valid date and time in the format YYYY-MM-DD HHMM.\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"dhruvir29"},"content":" \"\\n\\tFor example: 2023-08-08 1800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"dhruvir29"},"content":" } else if (e instanceof IOException) {","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tAn error occurred while performing a file operation: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"dhruvir29"},"content":" } else if (e instanceof NumberFormatException ) {","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tYou can only perform this action on an integer!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"dhruvir29"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tAn unexpected error occurred: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":169}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" * Handles the storage and loading of the text file.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" private String filepath;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" * Constructor for storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" * @param filepath the filepath of the file that will be used for storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" * @param tasks the TaskList that will be used.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" public Storage(String filepath, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" * Creates the file and loads tasks from the file to the taskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" * @throws IOException","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" public void saveTasks() throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" if (!Files.isDirectory(Paths.get(\"data/\"))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" Files.createDirectories(Paths.get(\"data/\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" if (!Files.exists(Paths.get(\"data/duke.txt\"))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" Files.createFile(Paths.get(\"data/duke.txt\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"New file created\");","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" Scanner scanner \u003d new Scanner(new File(filepath));","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":" String[] split \u003d scanner.nextLine().split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" for (int i \u003d 0; i \u003c split.length; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":" split[i] \u003d split[i].strip();","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":" String description \u003d split[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":" boolean isDone \u003d split[1].equals(\"X\");","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dhruvir29"},"content":" switch (split[0]) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"dhruvir29"},"content":" case \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new ToDo(description, isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"dhruvir29"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"dhruvir29"},"content":" case \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"dhruvir29"},"content":" String by \u003d split[3];","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new Deadline(description, by, isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"dhruvir29"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"dhruvir29"},"content":" case \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"dhruvir29"},"content":" String from \u003d split[3];","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dhruvir29"},"content":" String to \u003d split[4];","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new Event(description, split[3], split[4], isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"dhruvir29"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"dhruvir29"},"content":" * Writes the data from the tasklist into the file.","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"dhruvir29"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"dhruvir29"},"content":" * @param tasks TaskList being used to store the data.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"dhruvir29"},"content":" * @throws IOException","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"dhruvir29"},"content":" public void writeTasksToFile(TaskList tasks) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"dhruvir29"},"content":" FileWriter fileWriter \u003d new FileWriter(filepath);","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"dhruvir29"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"dhruvir29"},"content":" fileWriter.write(tasks.getTask(i).toWriteString()+\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"dhruvir29"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":98}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.Exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" * Data Structure that stores the chatbot\u0027s tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" * Constructor for TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" * Returns the size of the tasklist.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" * @return the integer size of the tasklist.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" public int getSize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" * Returns the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" * @param index the task\u0027s index in the TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" * @return the Task.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" * Adds the task to the TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" * @param task the Task that will be added.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" * Deletes the task from the TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" * @param index the task\u0027s index in the TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" * Marks a particular task as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" * @param index the index of the task that is to be marked.","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":" * Marks a particular task as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"dhruvir29"},"content":" * @param index the index of the task that is to be unmarked.","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"dhruvir29"},"content":" public void markTaskAsNotDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"dhruvir29"},"content":" this.tasks.get(index).markAsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"dhruvir29"},"content":" * Prints the TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"dhruvir29"},"content":" public void printTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tHere are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"dhruvir29"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"dhruvir29"},"content":" throw new DukeException(\"\\t Seems like you have no tasks at the moment :) \");","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"dhruvir29"},"content":" for (int i \u003d 1; i \u003c\u003d tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t\" + i + \". \" + tasks.get(i - 1).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"dhruvir29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"dhruvir29"},"content":" e.printMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":91}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.Exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":" * The class that handles the UI aspects of the chatbot like the messages","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" * that will be printed.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" * Prints the welcome message.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" public void printWelcomeMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t \" + \"Hey there amigo, excited to meet you! I\u0027m Buddy, your friendly chat companion!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" \"\\t \" + \"What can I do for you?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" * Prints the goodbye message.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" public void printGoodByeMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t \" + \"Bye! Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" * Prints the task as being marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" * @param index the index of the task that is to be marked.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" * @param tasks the TaskList being used.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" public void printMarkTasksAsDone(int index, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tGreat! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t\" + index + \".\" + tasks.getTask(index - 1).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" * Prints the task as being marked as not done yet.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" * @param index the index of the task is to be marked as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" * @param tasks the TaskList being used.","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" public void printMarkTasksAsNotDone(int index, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tOk! I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t\" + index + \".\" + tasks.getTask(index - 1).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" * Prints the TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":" * @param tasks the TaskList being used.","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":" public void printListMessage(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dhruvir29"},"content":" tasks.printTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"dhruvir29"},"content":" * Prints message that the task is added.","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"dhruvir29"},"content":" public void printAddedTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tNo problem! I have added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"dhruvir29"},"content":" * Prints the horizontal line.","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"dhruvir29"},"content":" public void printHorizontalLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\" __________________________________________________________________\");","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"dhruvir29"},"content":" * Prints that a task has been deleted.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"dhruvir29"},"content":" * @param pos the index of the element.","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"dhruvir29"},"content":" * @param tasks the TaskList being used.","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"dhruvir29"},"content":" * @param element the Task that is to be deleted.","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"dhruvir29"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"dhruvir29"},"content":" public void printDeleteTasks(int pos, TaskList tasks, Task element) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tOkie I\u0027ve removed this task:\\n\\t\" + element.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tNow you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"dhruvir29"},"content":" * Prints that a task has been added.","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"dhruvir29"},"content":" * @param tasks the TaskList being used.","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"dhruvir29"},"content":" * @param task the task that is to be added.","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"dhruvir29"},"content":" public void printAddTaskToList(TaskList tasks, Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"dhruvir29"},"content":" printAddedTask();","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t\" + task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tNow you have \" + tasks.getSize() + \" tasks in the list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"dhruvir29"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"dhruvir29"},"content":" public void printFindTask(TaskList foundTasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tSure, I can do that! What are buddies for afterall?\");","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\tHere are the matching tasks in your list:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"dhruvir29"},"content":" for (int i \u003d 0; i \u003c foundTasks.getSize(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"dhruvir29"},"content":" Task task \u003d foundTasks.getTask(i);","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"dhruvir29"},"content":" System.out.println(\"\\t\" + (i + 1) + \". \" + task.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dhruvir29":122}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" * The Deadline class that inherits from Task.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" * Constructor with description and by.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" * @param description the description of the deadline being added.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" * @param by the deadline of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" * Constructor with description, by and whether it has been marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" * @param description the description of the deadline being added.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" * @param by the deadline of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" * @param isDone whether it has been marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" public Deadline(String description, String by, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" * Returns the toString representation of a deadline task.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" * @return the String representation of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy ha\")) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" * Returns the String representation of the task that will be written to the","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" * text file.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" * @return The String representation of the task for the text file.","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" public String toWriteString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" return \"D | \" + (isDone ? \"X\" : \"0\") + \" | \" + description + \" | \"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" + by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":57}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":" * The Event class that inherits from Task.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" * Constructor with description, from and to.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" * @param description the description of the event being added.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" * @param from the start time of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" * @param to the end time of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" this.from \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" this.to \u003d LocalDateTime.parse(to, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" * Constructor with description, from, to and whether it has been marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" * @param description the description of the event being added.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" * @param from the start time of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" * @param to the end time of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" * @param isDone whether it has been marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" public Event(String description, String from, String to, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" this.from \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" this.to \u003d LocalDateTime.parse(to, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" * Returns the toString representation of an event task.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" * @return the String representation of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy ha\"))","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" + \" to: \" + to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy ha\")) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" * Returns the String representation of the task that will be written to the","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" * text file.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" * @return The String representation of the task for the text file.","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":" public String toWriteString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" return \"E | \" + (isDone ? \"X\" : \"0\") + \" | \" + this.description + \" | \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":" from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\")) + \" | \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":" to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":64}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":" * Abstract Task class.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" * Constructor with description.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" * @param description the description of the task being added.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" * Constructor with description and whether it has been marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" * @param description the description of the task being added.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" * @param isDone whether it has been marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" * Returns the status icon of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" * @return \"X\" if the task is marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" return (isDone ? \"X\" : \" \"); // mark done duke.task with X","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" * @return te description of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" * Marks the task as done by changing the boolean value to true.","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" * Marks the task as not done by changing the boolean value to false.","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":" * Returns the toString representation of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"dhruvir29"},"content":" * @return the String representation of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"dhruvir29"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"dhruvir29"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"dhruvir29"},"content":" * Creates the String representation of the task that will be written to the","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"dhruvir29"},"content":" * text file.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"dhruvir29"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"dhruvir29"},"content":" public abstract String toWriteString();","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":79}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":" * The ToDo class that inherits from Task.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" * Constructor with description.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" * @param description the description of the todo being added.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" * Constructor with description and whether it has been marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" * @param description the description of the todo being added.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" * @param isDone whether it has been marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" * Returns the toString representation of a todo task.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" * @return the String representation of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" * Returns the String representation of the task that will be written to the","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" * text file.","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" * @return The String representation of the task for the text file.","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":" public String toWriteString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" return \"T | \" + (isDone ? \"X\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":54}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"import duke.Exception.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" public void testMarkCommand() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"mark 1\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[T][X] do econs\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" public void testUnmarkCommand() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"mark 1\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"unmark 1\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[T][ ] do econs\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" public void testDeleteCommand() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"delete 1\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" assertEquals(0, tasks.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" public void testRandomCommand() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" parser.userCommand(\"add\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"Hey bud! Sorry I don\u0027t quite know what you mean :-(\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" public void testAddToList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" Storage storage \u003d new Storage(\"data/duke.txt\", tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" parser.addToList(\"todo hi\", storage, tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[T][ ] hi\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dhruvir29":64}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"dhruvir29"},"content":" public void testMark(){","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"dhruvir29"},"content":" tasks.markTaskAsDone(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"X\", tasks.getTask(0).getStatusIcon());","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"dhruvir29"},"content":" public void testMarkAsNotDone(){","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\" \", tasks.getTask(0).getStatusIcon());","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"dhruvir29"},"content":" public void testAddTodo() {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"dhruvir29"},"content":" ToDo sampleToDo \u003d new ToDo(\"do econs\");","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleToDo);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[T][ ] do econs\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"dhruvir29"},"content":" public void testAddEvent() {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"dhruvir29"},"content":" Event sampleEvent \u003d new Event(\"read book\", \"2020-03-19 1800\", \"2020-03-20 1800\");","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleEvent);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[E][ ] read book (from: Mar 19 2020 6PM to: Mar 20 2020 6PM)\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"dhruvir29"},"content":" public void testAddDeadline() {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"dhruvir29"},"content":" Deadline sampleDeadline \u003d new Deadline(\"homework\", \"2020-03-19 1800\");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(sampleDeadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"dhruvir29"},"content":" assertEquals(\"[D][ ] homework (by: Mar 19 2020 6PM)\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"dhruvir29"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"dhruvir29"},"content":" public void testDeleteTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"dhruvir29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new Deadline(\"homework\", \"2020-03-19 1800\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new ToDo(\"do econs\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"dhruvir29"},"content":" tasks.addTask(new Event(\"read book\", \"2020-03-19 1800\", \"2020-03-20 1800\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"dhruvir29"},"content":" tasks.deleteTask(1);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"dhruvir29"},"content":" assertEquals(2, tasks.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"dhruvir29"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"dhruvir29"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"dhruvir29":62}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"dhruvir29"},"content":"deadline return book /by Monday","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"dhruvir29"},"content":"event for rc /from Saturday 9am /to 1pm","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"dhruvir29"},"content":"delete 5","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"dhruvir29"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"dhruvir29"},"content":"book","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dhruvir29"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dhruvir29"},"content":"bye","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dhruvir29"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dhruvir29":8}}] diff --git a/dhruvir29_ip_master/commits.json b/dhruvir29_ip_master/commits.json index 6b91e352..4bdbb86b 100644 --- a/dhruvir29_ip_master/commits.json +++ b/dhruvir29_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"dhruvir29":[{"date":"2023-08-24","commitResults":[{"hash":"672ce29b4ec1e634bdcf649e45bf8a6aca54d32b","isMergeCommit":false,"messageTitle":"greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"b0a9ad1b32a7d3ff9e24a4be64d9653fd86cf85f","isMergeCommit":false,"messageTitle":"echo user\u0027s input","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":5}}},{"hash":"d6dc8b6495df240d668fb90b2770c81cb478de61","isMergeCommit":false,"messageTitle":"adds user input to a list and displays it when requested","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":6}}},{"hash":"ddea2e61cd42fb4ba7e983d253eaaf97678f6b7b","isMergeCommit":false,"messageTitle":"mark tasks as done/ change status back","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":7}}},{"hash":"6704375dbcb902b233d989f9a29fb51b865bb308","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines included","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":14}}},{"hash":"61badd138053b51f0098ee396244e92345a87961","isMergeCommit":false,"messageTitle":"handling input errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":34}}},{"hash":"b8c5cc4170e34150247e79f22750ab4fa890c97d","isMergeCommit":false,"messageTitle":"can delete tasks from the list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":10}}},{"hash":"2b262b71ce022cb3bb17f0a9acce9537482da764","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"d62e616c79f7e547b3069a8db13dd59ec11a3736","isMergeCommit":false,"messageTitle":"Optimisations done on Week 1 Code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":58}}}]},{"date":"2023-09-01","commitResults":[{"hash":"33937392362668c29227a72e6fde2d50dc182ef3","isMergeCommit":false,"messageTitle":"Save tasks in hard disk","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":123,"deletions":16}}},{"hash":"3d7bbe8e8e7681441fbf8fdef4ba4333b6805ccb","isMergeCommit":false,"messageTitle":"Revert \"Save tasks in hard disk\"","messageBody":"This reverts commit 33937392362668c29227a72e6fde2d50dc182ef3.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"java":{"insertions":16,"deletions":123}}},{"hash":"ddf52fd757bd92e0f5ff77bb08dbaf4466aeb532","isMergeCommit":false,"messageTitle":"save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"e4e6fe1b4e07172bb7244b6ad3e3ac10604b2b50","isMergeCommit":false,"messageTitle":"Merge branch 7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":0,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"48dbc9be94a017f8475ffeb4b7ebae920bef6cdb","isMergeCommit":false,"messageTitle":"Save Task","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":124,"deletions":20}}},{"hash":"58ce1fa21068ad9cfc1e2aa56f712add9a7da7cd","isMergeCommit":false,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"fd82fb5c5e0aaff4378d02b37d4d8ace65692b54","isMergeCommit":false,"messageTitle":"First iteration of Save Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":4},"java":{"insertions":73,"deletions":36}}},{"hash":"0070b65fb188522622b2baab493d8542ec002126","isMergeCommit":false,"messageTitle":"Save Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":1,"deletions":1}}},{"hash":"7b089e7c409d0c80711b86b8f60fec41febb9bec","isMergeCommit":false,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"f170be5e172bc9bb64dcec7a337d3c9a977ee6cc","isMergeCommit":false,"messageTitle":"Add class Storage","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":122,"deletions":55}}},{"hash":"cced30bd5fa709a35a81cab7a75e7e1841ec85d2","isMergeCommit":false,"messageTitle":"Add class TaskList","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":88,"deletions":27}}},{"hash":"ac4f03fe12b3d952e321bc1704e892bbb5bacf51","isMergeCommit":false,"messageTitle":"Add class Ui","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":77,"deletions":95}}},{"hash":"88f3a0d1d9182281d9978ca0a5b639833c510573","isMergeCommit":false,"messageTitle":"Add Parser class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":149,"deletions":155}}},{"hash":"fa695c740ab5d5eccaba9ef9cf4695f56ea7015e","isMergeCommit":false,"messageTitle":"Clean up Parser class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":81,"deletions":117}}},{"hash":"217ec42f400be0c5ac87e656c801f194e7d29b0b","isMergeCommit":false,"messageTitle":"Use more Oop","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":11,"deletions":12}}},{"hash":"651b710ac518afd4a791497c1f988a1a84816cc1","isMergeCommit":false,"messageTitle":"Add Packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":5},"java":{"insertions":274,"deletions":12},"md":{"insertions":2,"deletions":2}}},{"hash":"70393a33ae3f5478f91f47b954434d807aef3cda","isMergeCommit":false,"messageTitle":"Add Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":205}}}]},{"date":"2023-09-04","commitResults":[{"hash":"75cac09369e7418d814956f0dd81bd7a7445e952","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"14195d0077f71e490c8da9e10fa3360b185a487e","isMergeCommit":false,"messageTitle":"Add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":131,"deletions":0}}},{"hash":"652fd491919dae29c573293786f40acd4f09bb02","isMergeCommit":false,"messageTitle":"Create Jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"dhruvir29":{"java":647,"md":2,"fxml":0,"sh":0,"bat":0,"gradle":3,"txt":9}},"authorContributionVariance":{"dhruvir29":123488.695},"authorDisplayNameMap":{"dhruvir29":"CS2103T-F10-3 DHRU..THOD"}} +{"authorDailyContributionsMap":{"dhruvir29":[{"date":"2023-08-24","commitResults":[{"hash":"672ce29b4ec1e634bdcf649e45bf8a6aca54d32b","isMergeCommit":false,"messageTitle":"greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"b0a9ad1b32a7d3ff9e24a4be64d9653fd86cf85f","isMergeCommit":false,"messageTitle":"echo user\u0027s input","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":5}}},{"hash":"d6dc8b6495df240d668fb90b2770c81cb478de61","isMergeCommit":false,"messageTitle":"adds user input to a list and displays it when requested","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":6}}},{"hash":"ddea2e61cd42fb4ba7e983d253eaaf97678f6b7b","isMergeCommit":false,"messageTitle":"mark tasks as done/ change status back","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":7}}},{"hash":"6704375dbcb902b233d989f9a29fb51b865bb308","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines included","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":14}}},{"hash":"61badd138053b51f0098ee396244e92345a87961","isMergeCommit":false,"messageTitle":"handling input errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":34}}},{"hash":"b8c5cc4170e34150247e79f22750ab4fa890c97d","isMergeCommit":false,"messageTitle":"can delete tasks from the list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":10}}},{"hash":"2b262b71ce022cb3bb17f0a9acce9537482da764","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"d62e616c79f7e547b3069a8db13dd59ec11a3736","isMergeCommit":false,"messageTitle":"Optimisations done on Week 1 Code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":58}}}]},{"date":"2023-09-01","commitResults":[{"hash":"33937392362668c29227a72e6fde2d50dc182ef3","isMergeCommit":false,"messageTitle":"Save tasks in hard disk","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":123,"deletions":16}}},{"hash":"3d7bbe8e8e7681441fbf8fdef4ba4333b6805ccb","isMergeCommit":false,"messageTitle":"Revert \"Save tasks in hard disk\"","messageBody":"This reverts commit 33937392362668c29227a72e6fde2d50dc182ef3.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"java":{"insertions":16,"deletions":123}}},{"hash":"ddf52fd757bd92e0f5ff77bb08dbaf4466aeb532","isMergeCommit":false,"messageTitle":"save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"e4e6fe1b4e07172bb7244b6ad3e3ac10604b2b50","isMergeCommit":false,"messageTitle":"Merge branch 7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":0,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"48dbc9be94a017f8475ffeb4b7ebae920bef6cdb","isMergeCommit":false,"messageTitle":"Save Task","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":124,"deletions":20}}},{"hash":"58ce1fa21068ad9cfc1e2aa56f712add9a7da7cd","isMergeCommit":false,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"fd82fb5c5e0aaff4378d02b37d4d8ace65692b54","isMergeCommit":false,"messageTitle":"First iteration of Save Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":4},"java":{"insertions":73,"deletions":36}}},{"hash":"0070b65fb188522622b2baab493d8542ec002126","isMergeCommit":false,"messageTitle":"Save Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":1,"deletions":1}}},{"hash":"7b089e7c409d0c80711b86b8f60fec41febb9bec","isMergeCommit":false,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"f170be5e172bc9bb64dcec7a337d3c9a977ee6cc","isMergeCommit":false,"messageTitle":"Add class Storage","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":122,"deletions":55}}},{"hash":"cced30bd5fa709a35a81cab7a75e7e1841ec85d2","isMergeCommit":false,"messageTitle":"Add class TaskList","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":88,"deletions":27}}},{"hash":"ac4f03fe12b3d952e321bc1704e892bbb5bacf51","isMergeCommit":false,"messageTitle":"Add class Ui","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":77,"deletions":95}}},{"hash":"88f3a0d1d9182281d9978ca0a5b639833c510573","isMergeCommit":false,"messageTitle":"Add Parser class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":149,"deletions":155}}},{"hash":"fa695c740ab5d5eccaba9ef9cf4695f56ea7015e","isMergeCommit":false,"messageTitle":"Clean up Parser class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":81,"deletions":117}}},{"hash":"217ec42f400be0c5ac87e656c801f194e7d29b0b","isMergeCommit":false,"messageTitle":"Use more Oop","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":11,"deletions":12}}},{"hash":"651b710ac518afd4a791497c1f988a1a84816cc1","isMergeCommit":false,"messageTitle":"Add Packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":5},"java":{"insertions":274,"deletions":12},"md":{"insertions":2,"deletions":2}}},{"hash":"70393a33ae3f5478f91f47b954434d807aef3cda","isMergeCommit":false,"messageTitle":"Add Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":205}}}]},{"date":"2023-09-04","commitResults":[{"hash":"75cac09369e7418d814956f0dd81bd7a7445e952","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"14195d0077f71e490c8da9e10fa3360b185a487e","isMergeCommit":false,"messageTitle":"Add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":131,"deletions":0}}},{"hash":"652fd491919dae29c573293786f40acd4f09bb02","isMergeCommit":false,"messageTitle":"Create Jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2}}}]},{"date":"2023-09-05","commitResults":[{"hash":"a7fa6d36a4c9b271edc7cf6c131c942b6bfedd57","isMergeCommit":false,"messageTitle":"Add JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":268,"deletions":1}}},{"hash":"39f50e835da61141afa37aef916c87166b5043bd","isMergeCommit":false,"messageTitle":"Improve the Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":33}}},{"hash":"846aafb270dc69031ee9aafd81d6ab8389482b0d","isMergeCommit":false,"messageTitle":"Add improvements to the JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":43}}}]},{"date":"2023-09-06","commitResults":[{"hash":"0b99e8b906dc3f11b817fa75ebf79342458f5bc8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b98cd5cd78de204b460547746e555db1770b8940","isMergeCommit":false,"messageTitle":"Add Find function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":24,"deletions":0}}},{"hash":"25dfa95d066835ae0ca1b006be0c1dd03549bcfa","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-9\u0027","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"dhruvir29":{"java":927,"md":2,"fxml":0,"sh":0,"bat":0,"gradle":3,"txt":10}},"authorContributionVariance":{"dhruvir29":115200.64},"authorDisplayNameMap":{"dhruvir29":"CS2103T-F10-3 DHRU..THOD"}} diff --git a/erohsikivar_ip_master/authorship.json b/erohsikivar_ip_master/authorship.json index 352e6213..6235f0e9 100644 --- a/erohsikivar_ip_master/authorship.json +++ b/erohsikivar_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"# 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":"erohsikivar"},"content":"3. After that, locate the `src/main/java/duke.java` file, right-click it, and choose `Run duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-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":{"erohsikivar":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":"erohsikivar"},"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":"erohsikivar"},"content":" archiveBaseName \u003d \"Duke.jar\"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"erohsikivar":2,"-":40}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"T | 1 | borrow book","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"D | 0 | finish article | 2023-09-04T16:00","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"E | 1 | project meeting | 2023-09-04T16:00 | 18:00","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"T | 0 | write reflection","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"T | 0 | read book","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":5}},{"path":"settings.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"include \u0027src:untitled\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"findProject(\u0027:src:untitled\u0027)?.name \u003d \u0027untitled\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":3}},{"path":"src/main/java/Command/UserInterface.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"import task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":" * The User interface class deals with common print statements that chatbot uses.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":"public class UserInterface {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" * Show welcome message.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" public void showWelcomeMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"- - - - - - - - - - - - - - - - - - - - - - - - -\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Hello! I am Nila\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"- - - - - - - - - - - - - - - - - - - - - - - - -\");","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":" * Show command line.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"erohsikivar"},"content":" public void showCommandLine(){","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"- - - - - - - - - - - - - - - - - - - - - - - - -\");","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"erohsikivar"},"content":" * Show message.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"erohsikivar"},"content":" * @param message the message","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"erohsikivar"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"erohsikivar"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"erohsikivar"},"content":" * Show error.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"erohsikivar"},"content":" * @param errorMessage the error message","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"erohsikivar"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Error: \" + errorMessage);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"erohsikivar"},"content":" * Show task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"erohsikivar"},"content":" * @param taskList the task list","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"erohsikivar"},"content":" public void showTaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Here are your tasks:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"erohsikivar"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"erohsikivar"},"content":" System.out.println((i + 1) + \". \" + taskList.get(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"erohsikivar"},"content":" * To show matching results.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"erohsikivar"},"content":" public void showFindTasks(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Here are the matching tasks:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"erohsikivar"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"erohsikivar"},"content":" System.out.println((i + 1) + \". \" + taskList.get(i));","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"erohsikivar"},"content":" public void showTaskAddedMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Got it! I\u0027ve added the task to your list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"erohsikivar"},"content":" * Show current status.","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"erohsikivar"},"content":" * @param taskList the task list","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"erohsikivar"},"content":" public void showCurrentStatus(ArrayList\u003cTask\u003e taskList){","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"erohsikivar"},"content":" System.out.println(taskList.get(taskList.size() - 1).getStatusIcon());","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\" Now you have \" + taskList.size() +\" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"erohsikivar"},"content":" * Show task deleted message.","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"erohsikivar"},"content":" public void showTaskDeletedMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Noted! I\u0027ve removed the task from your list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"erohsikivar"},"content":" * Show task marked message.","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"erohsikivar"},"content":" public void showTaskMarkedMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"erohsikivar"},"content":" * Show task unmarked message.","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"erohsikivar"},"content":" public void showTaskUnmarkedMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"erohsikivar"},"content":" * Show unknown command message.","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"erohsikivar"},"content":" public void showUnknownCommandMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Sorry, I don\u0027t understand that command.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"erohsikivar"},"content":" * Show loading error.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"erohsikivar"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Error loading tasks. Starting with an empty list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"erohsikivar"},"content":" * Show goodbye message.","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"erohsikivar"},"content":" public void showGoodbyeMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"\\nBye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":135}},{"path":"src/main/java/Duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import command.UserInterface;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":" * Duke is main class that controls the whole flow of the chatbot which makes of other classes like","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":" * Storage, TaskManager, UserInterface.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" private TaskManager taskManager;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" private UserInterface userInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" * Constructor which instantiates a new Duke.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" * @param filePath the file path","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":" userInterface \u003d new UserInterface();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"erohsikivar"},"content":" taskManager \u003d new TaskManager(storage.load());","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"erohsikivar"},"content":" * Run method is where the whole chatbot starts from loading the file to saving changes to the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"erohsikivar"},"content":" public void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"erohsikivar"},"content":" userInterface.showWelcomeMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"erohsikivar"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"erohsikivar"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"erohsikivar"},"content":" while(!command.equals(\"bye\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"erohsikivar"},"content":" Parser.parseCommand(command, taskManager, userInterface);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"erohsikivar"},"content":" command \u003d sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"erohsikivar"},"content":" userInterface.showGoodbyeMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"erohsikivar"},"content":" storage.save(taskManager.displayList());","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"erohsikivar"},"content":" * main method which is the entry point of chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"erohsikivar"},"content":" * @param args the input arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"erohsikivar"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"erohsikivar"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"erohsikivar":55,"-":1}},{"path":"src/main/java/Duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":" * DukeException is the class which deals with some exceptions.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"public class DukeException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":" * Instantiates a new Duke exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":" public DukeException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" super();","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" * Instantiates a new Duke exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" * @param message the message","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"erohsikivar":24}},{"path":"src/main/java/Duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import command.UserInterface;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":" * Parser class will parse the input data and generate a taskList from the input the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" * parseCommand method reads the tasks in the input file and generates a taskList so that the chatbot","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" * can load the tasks from input file.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" * @param command the command","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" * @param taskManager the task manager","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" * @param userInterface the user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" public static void parseCommand(String command, TaskManager taskManager, UserInterface userInterface) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":" String[] parts \u003d command.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" String action \u003d parts[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":" switch (action) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"erohsikivar"},"content":" case \"todo\":","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"erohsikivar"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"erohsikivar"},"content":" taskManager.todo(parts[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"erohsikivar"},"content":" userInterface.showTaskAddedMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCurrentStatus(taskManager.displayList());","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"erohsikivar"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"erohsikivar"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"erohsikivar"},"content":" String[] fullDesc \u003d parts[1].split(\" /by \");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"erohsikivar"},"content":" String description \u003d fullDesc[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"erohsikivar"},"content":" LocalDateTime by \u003d LocalDateTime.parse(fullDesc[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"erohsikivar"},"content":" taskManager.deadline(description, by);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"erohsikivar"},"content":" userInterface.showTaskAddedMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCurrentStatus(taskManager.displayList());","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"erohsikivar"},"content":" case \"event\":","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"erohsikivar"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! The description of a event cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"erohsikivar"},"content":" fullDesc \u003d parts[1].split(\" /from | /to \");","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"erohsikivar"},"content":" description \u003d fullDesc[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"erohsikivar"},"content":" LocalDateTime from \u003d LocalDateTime.parse(fullDesc[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"erohsikivar"},"content":" LocalTime to \u003d LocalTime.parse(fullDesc[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"erohsikivar"},"content":" taskManager.event(description, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"erohsikivar"},"content":" userInterface.showTaskAddedMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCurrentStatus(taskManager.displayList());","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"erohsikivar"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"erohsikivar"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Please specify the task number to delete.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"erohsikivar"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"erohsikivar"},"content":" int taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"erohsikivar"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d taskManager.displayList().size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Invalid task number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"erohsikivar"},"content":" taskManager.delete(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"erohsikivar"},"content":" userInterface.showTaskDeletedMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCurrentStatus(taskManager.displayList());","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"erohsikivar"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Please provide a valid task number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"erohsikivar"},"content":" case \"mark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"erohsikivar"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Please specify the task number to mark.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"erohsikivar"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"erohsikivar"},"content":" int taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"erohsikivar"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d taskManager.displayList().size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Invalid task number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"erohsikivar"},"content":" taskManager.mark(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"erohsikivar"},"content":" userInterface.showTaskMarkedMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCurrentStatus(taskManager.displayList());","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"erohsikivar"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Please provide a valid task number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"erohsikivar"},"content":" case \"umark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"erohsikivar"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Please specify the task number to unmark.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"erohsikivar"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"erohsikivar"},"content":" int taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"erohsikivar"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d taskManager.displayList().size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Invalid task number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"erohsikivar"},"content":" taskManager.unmark(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"erohsikivar"},"content":" userInterface.showTaskUnmarkedMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCurrentStatus(taskManager.displayList());","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"erohsikivar"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Please provide a valid task number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"erohsikivar"},"content":" case \"list\":","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"erohsikivar"},"content":" userInterface.showTaskList(taskManager.displayList());","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"erohsikivar"},"content":" case \"find\":","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"erohsikivar"},"content":" userInterface.showFindTasks(taskManager.find(parts[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"erohsikivar"},"content":"// case \"bye\":","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"erohsikivar"},"content":"// userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"erohsikivar"},"content":"// userInterface.showGoodbyeMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"erohsikivar"},"content":"// userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"erohsikivar"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"erohsikivar"},"content":" userInterface.showUnknownCommandMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":153}},{"path":"src/main/java/Duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":"import task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" * Storage class will load and save the tasks to the given file.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" private String filepath;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" * Constructor for the Storage class which takes in filepath of the input/output file.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":" * @param filepath the filepath","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":" public Storage(String filepath){","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"erohsikivar"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"erohsikivar"},"content":" * save method will save changes to the file when the chatbot ends the conversation.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"erohsikivar"},"content":" * @param tasklist the tasklist","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"erohsikivar"},"content":" public void save(ArrayList\u003cTask\u003e tasklist) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"erohsikivar"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"erohsikivar"},"content":" FileWriter writer \u003d new FileWriter(filepath);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"erohsikivar"},"content":" for (Task task : tasklist) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"erohsikivar"},"content":" // Convert task to string format and write to the file","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"erohsikivar"},"content":" writer.write(task.toString() + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"erohsikivar"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"erohsikivar"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"erohsikivar"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"erohsikivar"},"content":" * load method will load all the tasks from the input file and generates the list of tasks and","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"erohsikivar"},"content":" * then chatbot will edit the taskList according to user commands.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"erohsikivar"},"content":" * @return the array list","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"erohsikivar"},"content":" public ArrayList\u003cTask\u003e load() {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"erohsikivar"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"erohsikivar"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"erohsikivar"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(filepath));","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"erohsikivar"},"content":" String line;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"erohsikivar"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"erohsikivar"},"content":" // Parse the line and create tasks, then add to the list","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"erohsikivar"},"content":" Task task \u003d Task.parseFromString(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"erohsikivar"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"erohsikivar"},"content":" reader.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"erohsikivar"},"content":" return taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"erohsikivar"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"erohsikivar"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"erohsikivar"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":71}},{"path":"src/main/java/Duke/TaskManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"import task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":"import task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":"import task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":"import task.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" * TaskManager is the class deals with editing the taskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":"public class TaskManager {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" * Constructor for TaskManager.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" * @param taskList the taskList","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"erohsikivar"},"content":" public TaskManager(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"erohsikivar"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"erohsikivar"},"content":" * Display list array list.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"erohsikivar"},"content":" * @return the array list","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"erohsikivar"},"content":" public ArrayList\u003cTask\u003e displayList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"erohsikivar"},"content":" return taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"erohsikivar"},"content":" * mark method will mark the task mentioned as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"erohsikivar"},"content":" * @param index the index","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"erohsikivar"},"content":" public void mark(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"erohsikivar"},"content":" taskList.get(index).markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"erohsikivar"},"content":" * unmark method will unmark the task mentioned.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"erohsikivar"},"content":" * @param index the index","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"erohsikivar"},"content":" public void unmark(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"erohsikivar"},"content":" taskList.get(index).unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"erohsikivar"},"content":" * delete method will delete the mentioned task from the taskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"erohsikivar"},"content":" * @param index the index","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"erohsikivar"},"content":" public void delete(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"erohsikivar"},"content":" taskList.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"erohsikivar"},"content":" * todo method will create a new Todo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"erohsikivar"},"content":" * @param description the description","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"erohsikivar"},"content":" public void todo(String description) {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"erohsikivar"},"content":" taskList.add(new Todo(description));","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"erohsikivar"},"content":" * deadline method will create a new Deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"erohsikivar"},"content":" * @param description the description","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"erohsikivar"},"content":" * @param by the by","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"erohsikivar"},"content":" public void deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"erohsikivar"},"content":" taskList.add(new Deadline(description, by));","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"erohsikivar"},"content":" * event method will create a new Event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"erohsikivar"},"content":" * @param description the description","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"erohsikivar"},"content":" * @param from the from","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"erohsikivar"},"content":" * @param to the to","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"erohsikivar"},"content":" public void event(String description, LocalDateTime from, LocalTime to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"erohsikivar"},"content":" taskList.add(new Event(description, from, to));","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"erohsikivar"},"content":" * find method will find the matching tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"erohsikivar"},"content":" * @param description the description","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"erohsikivar"},"content":" * @return the array list","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"erohsikivar"},"content":" public ArrayList\u003cTask\u003e find(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"erohsikivar"},"content":" ArrayList\u003cTask\u003e tasksFound \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"erohsikivar"},"content":" for (Task task: taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"erohsikivar"},"content":" if (task.getStatusIcon().contains(description)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"erohsikivar"},"content":" tasksFound.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"erohsikivar"},"content":" return tasksFound;","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":111}},{"path":"src/main/java/Task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" return \"[D]\" + super.getStatusIcon() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" return String.format(\"D | %d | %s | %s\", super.isDone ? 1 : 0, super.description, this.by);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"erohsikivar":21}},{"path":"src/main/java/Task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":" protected LocalTime to;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":" public Event(String description, LocalDateTime from, LocalTime to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" return \"[E]\" + super.getStatusIcon() + \"(from: \" + from + \" to: \" + to + \")\" ;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" return String.format(\"E | %d | %s | %s | %s\", super.isDone ? 1 : 0, super.description, this.from, this.to);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"erohsikivar":24}},{"path":"src/main/java/Task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" return (isDone ? \"[X] \" + description","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" : \"[ ] \" + description );","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"erohsikivar"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"erohsikivar"},"content":" public static Task parseFromString(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"erohsikivar"},"content":" String[] parts \u003d input.split(\" \\\\| \");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"erohsikivar"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"erohsikivar"},"content":" int isDone \u003d Integer.parseInt(parts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"erohsikivar"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"erohsikivar"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"erohsikivar"},"content":" Task task \u003d new Todo(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"erohsikivar"},"content":" if (isDone \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"erohsikivar"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"erohsikivar"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"erohsikivar"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"erohsikivar"},"content":" LocalDateTime by \u003d LocalDateTime.parse(parts[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"erohsikivar"},"content":" Task task \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"erohsikivar"},"content":" if (isDone \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"erohsikivar"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"erohsikivar"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"erohsikivar"},"content":" } else if (type.equals(\"E\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"erohsikivar"},"content":" LocalDateTime from \u003d LocalDateTime.parse(parts[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"erohsikivar"},"content":" LocalTime to \u003d LocalTime.parse(parts[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"erohsikivar"},"content":" Task task \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"erohsikivar"},"content":" if (isDone \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"erohsikivar"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"erohsikivar"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"erohsikivar"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"erohsikivar"},"content":" throw new IllegalArgumentException(\"Invalid task type: \" + type);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"erohsikivar"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"erohsikivar"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"erohsikivar"},"content":" return String.format(\"Task | %d | %s\", isDone ? 1 : 0, description);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"erohsikivar":64}},{"path":"src/main/java/Task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"public class Todo extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":" return \"[T]\" + super.getStatusIcon();","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" return String.format(\"T | %d | %s\", super.isDone ? 1 : 0, super.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"erohsikivar":18}},{"path":"src/test/java/Command/UserInterfaceTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":"public class UserInterfaceTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" private UserInterface userInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" private final ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" @BeforeEach","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" public void setUp() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" // Redirect standard output to capture printed messages","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" userInterface \u003d new UserInterface();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":" public void testPrintMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":" userInterface.showMessage(\"Hello, world!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"erohsikivar"},"content":" assertEquals(\"Hello, world!\\n\", outputStream.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":29}},{"path":"src/test/java/Duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"public class DukeTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":" public void dummyTest(){","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" public void anotherDummyTest(){","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":17}},{"path":"src/test/java/Duke/TaskManagerTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":"public class TaskManagerTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":" public void test1() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" TaskManager taskManager \u003d new TaskManager(new ArrayList\u003cTask\u003e());","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" taskManager.todo(\"read book\");","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" assertEquals(1, taskManager.displayList().size());","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":18}},{"path":"src/untitled/build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"plugins {","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"group \u0027org.example\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"version \u0027unspecified\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":"repositories {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":" mavenCentral()","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":"dependencies {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" testImplementation \u0027org.junit.jupiter:junit-jupiter-api:5.8.1\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" testRuntimeOnly \u0027org.junit.jupiter:junit-jupiter-engine:5.8.1\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":"test {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":19}},{"path":"src/untitled/src/main/java/org/example/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package org.example;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"public class Main {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Hello world!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":7}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"deadline finish article /by 2023-09-04T16:00","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"event project meeting /from 2023-09-04T16:00 /to 18:00","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"erohsikivar":8}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"# 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":"erohsikivar"},"content":"3. After that, locate the `src/main/java/duke.java` file, right-click it, and choose `Run duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-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":{"erohsikivar":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":"erohsikivar"},"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":"erohsikivar"},"content":" archiveBaseName \u003d \"Duke.jar\"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"erohsikivar":2,"-":40}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"T | 1 | borrow book","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"D | 0 | finish article | 2023-09-04T16:00","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"E | 1 | project meeting | 2023-09-04T16:00 | 18:00","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"T | 0 | write reflection","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"T | 0 | read book","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":5}},{"path":"settings.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"include \u0027src:untitled\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"findProject(\u0027:src:untitled\u0027)?.name \u003d \u0027untitled\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":3}},{"path":"src/main/java/Command/UserInterface.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"import task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":" * The User interface class deals with common print statements that chatbot uses.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":"public class UserInterface {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" * Show welcome message.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" public void showWelcomeMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"- - - - - - - - - - - - - - - - - - - - - - - - -\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Hello! I am Nila\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"- - - - - - - - - - - - - - - - - - - - - - - - -\");","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":" * Show command line.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"erohsikivar"},"content":" public void showCommandLine(){","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"- - - - - - - - - - - - - - - - - - - - - - - - -\");","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"erohsikivar"},"content":" * Show message.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"erohsikivar"},"content":" * @param message the message","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"erohsikivar"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"erohsikivar"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"erohsikivar"},"content":" * Show error.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"erohsikivar"},"content":" * @param errorMessage the error message","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"erohsikivar"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Error: \" + errorMessage);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"erohsikivar"},"content":" * Show task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"erohsikivar"},"content":" * @param taskList the task list","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"erohsikivar"},"content":" public void showTaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Here are your tasks:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"erohsikivar"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"erohsikivar"},"content":" System.out.println((i + 1) + \". \" + taskList.get(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"erohsikivar"},"content":" * To show matching results.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"erohsikivar"},"content":" public void showFindTasks(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Here are the matching tasks:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"erohsikivar"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"erohsikivar"},"content":" System.out.println((i + 1) + \". \" + taskList.get(i));","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"erohsikivar"},"content":" public void showTaskAddedMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Got it! I\u0027ve added the task to your list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"erohsikivar"},"content":" * Show current status.","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"erohsikivar"},"content":" * @param taskList the task list","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"erohsikivar"},"content":" public void showCurrentStatus(ArrayList\u003cTask\u003e taskList){","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"erohsikivar"},"content":" System.out.println(taskList.get(taskList.size() - 1).getStatusIcon());","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\" Now you have \" + taskList.size() +\" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"erohsikivar"},"content":" * Show task deleted message.","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"erohsikivar"},"content":" public void showTaskDeletedMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Noted! I\u0027ve removed the task from your list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"erohsikivar"},"content":" * Show task marked message.","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"erohsikivar"},"content":" public void showTaskMarkedMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"erohsikivar"},"content":" * Show task unmarked message.","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"erohsikivar"},"content":" public void showTaskUnmarkedMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"erohsikivar"},"content":" * Show unknown command message.","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"erohsikivar"},"content":" public void showUnknownCommandMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Sorry, I don\u0027t understand that command.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"erohsikivar"},"content":" * Show loading error.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"erohsikivar"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Error loading tasks. Starting with an empty list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"erohsikivar"},"content":" * Show goodbye message.","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"erohsikivar"},"content":" public void showGoodbyeMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"\\nBye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":135}},{"path":"src/main/java/Duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import command.UserInterface;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":" * Duke is main class that controls the whole flow of the chatbot which makes of other classes like","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":" * Storage, TaskManager, UserInterface.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" private TaskManager taskManager;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" private UserInterface userInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" * Constructor which instantiates a new Duke.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" * @param filePath the file path","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":" userInterface \u003d new UserInterface();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"erohsikivar"},"content":" taskManager \u003d new TaskManager(storage.load());","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"erohsikivar"},"content":" * Run method is where the whole chatbot starts from loading the file to saving changes to the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"erohsikivar"},"content":" public void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"erohsikivar"},"content":" userInterface.showWelcomeMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"erohsikivar"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"erohsikivar"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"erohsikivar"},"content":" while(!command.equals(\"bye\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"erohsikivar"},"content":" Parser.parseCommand(command, taskManager, userInterface);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"erohsikivar"},"content":" command \u003d sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"erohsikivar"},"content":" userInterface.showGoodbyeMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"erohsikivar"},"content":" storage.save(taskManager.displayList());","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"erohsikivar"},"content":" * main method which is the entry point of chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"erohsikivar"},"content":" * @param args the input arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"erohsikivar"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"erohsikivar"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"erohsikivar":55,"-":1}},{"path":"src/main/java/Duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":" * DukeException is the class which deals with some exceptions.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"public class DukeException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":" * Instantiates a new Duke exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":" public DukeException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" super();","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" * Instantiates a new Duke exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" * @param message the message","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"erohsikivar":24}},{"path":"src/main/java/Duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import command.UserInterface;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":" * Parser class will parse the input data and generate a taskList from the input the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" * parseCommand method reads the tasks in the input file and generates a taskList so that the chatbot","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" * can load the tasks from input file.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" * @param command the command","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" * @param taskManager the task manager","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" * @param userInterface the user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" public static void parseCommand(String command, TaskManager taskManager, UserInterface userInterface) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":" String[] parts \u003d command.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" String action \u003d parts[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":" switch (action) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"erohsikivar"},"content":" case \"todo\":","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"erohsikivar"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"erohsikivar"},"content":" taskManager.todo(parts[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"erohsikivar"},"content":" userInterface.showTaskAddedMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCurrentStatus(taskManager.displayList());","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"erohsikivar"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"erohsikivar"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"erohsikivar"},"content":" String[] fullDesc \u003d parts[1].split(\" /by \");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"erohsikivar"},"content":" String description \u003d fullDesc[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"erohsikivar"},"content":" LocalDateTime by \u003d LocalDateTime.parse(fullDesc[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"erohsikivar"},"content":" taskManager.deadline(description, by);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"erohsikivar"},"content":" userInterface.showTaskAddedMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCurrentStatus(taskManager.displayList());","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"erohsikivar"},"content":" case \"event\":","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"erohsikivar"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! The description of a event cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"erohsikivar"},"content":" fullDesc \u003d parts[1].split(\" /from | /to \");","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"erohsikivar"},"content":" description \u003d fullDesc[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"erohsikivar"},"content":" LocalDateTime from \u003d LocalDateTime.parse(fullDesc[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"erohsikivar"},"content":" LocalTime to \u003d LocalTime.parse(fullDesc[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"erohsikivar"},"content":" taskManager.event(description, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"erohsikivar"},"content":" userInterface.showTaskAddedMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCurrentStatus(taskManager.displayList());","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"erohsikivar"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"erohsikivar"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Please specify the task number to delete.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"erohsikivar"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"erohsikivar"},"content":" int taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"erohsikivar"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d taskManager.displayList().size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Invalid task number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"erohsikivar"},"content":" taskManager.delete(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"erohsikivar"},"content":" userInterface.showTaskDeletedMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCurrentStatus(taskManager.displayList());","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"erohsikivar"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Please provide a valid task number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"erohsikivar"},"content":" case \"mark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"erohsikivar"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Please specify the task number to mark.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"erohsikivar"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"erohsikivar"},"content":" int taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"erohsikivar"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d taskManager.displayList().size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Invalid task number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"erohsikivar"},"content":" taskManager.mark(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"erohsikivar"},"content":" userInterface.showTaskMarkedMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCurrentStatus(taskManager.displayList());","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"erohsikivar"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Please provide a valid task number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"erohsikivar"},"content":" case \"umark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"erohsikivar"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Please specify the task number to unmark.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"erohsikivar"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"erohsikivar"},"content":" int taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"erohsikivar"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d taskManager.displayList().size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Invalid task number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"erohsikivar"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"erohsikivar"},"content":" taskManager.unmark(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"erohsikivar"},"content":" userInterface.showTaskUnmarkedMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCurrentStatus(taskManager.displayList());","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"erohsikivar"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"erohsikivar"},"content":" userInterface.showError(\"OOPS!!! Please provide a valid task number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"erohsikivar"},"content":" case \"list\":","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"erohsikivar"},"content":" userInterface.showTaskList(taskManager.displayList());","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"erohsikivar"},"content":" case \"find\":","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"erohsikivar"},"content":" userInterface.showFindTasks(taskManager.find(parts[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"erohsikivar"},"content":" userInterface.showCommandLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"erohsikivar"},"content":"// case \"bye\":","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"erohsikivar"},"content":"// userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"erohsikivar"},"content":"// userInterface.showGoodbyeMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"erohsikivar"},"content":"// userInterface.showCommandLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"erohsikivar"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"erohsikivar"},"content":" userInterface.showUnknownCommandMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"erohsikivar"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":153}},{"path":"src/main/java/Duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":"import task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" * Storage class will load and save the tasks to the given file.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" private String filepath;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" * Constructor for the Storage class which takes in filepath of the input/output file.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":" * @param filepath the filepath","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":" public Storage(String filepath){","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"erohsikivar"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"erohsikivar"},"content":" * save method will save changes to the file when the chatbot ends the conversation.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"erohsikivar"},"content":" * @param tasklist the tasklist","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"erohsikivar"},"content":" public void save(ArrayList\u003cTask\u003e tasklist) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"erohsikivar"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"erohsikivar"},"content":" FileWriter writer \u003d new FileWriter(filepath);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"erohsikivar"},"content":" for (Task task : tasklist) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"erohsikivar"},"content":" // Convert task to string format and write to the file","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"erohsikivar"},"content":" writer.write(task.toString() + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"erohsikivar"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"erohsikivar"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"erohsikivar"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"erohsikivar"},"content":" * load method will load all the tasks from the input file and generates the list of tasks and","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"erohsikivar"},"content":" * then chatbot will edit the taskList according to user commands.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"erohsikivar"},"content":" * @return the array list","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"erohsikivar"},"content":" public ArrayList\u003cTask\u003e load() {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"erohsikivar"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"erohsikivar"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"erohsikivar"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(filepath));","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"erohsikivar"},"content":" String line;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"erohsikivar"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"erohsikivar"},"content":" // Parse the line and create tasks, then add to the list","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"erohsikivar"},"content":" Task task \u003d Task.parseFromString(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"erohsikivar"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"erohsikivar"},"content":" reader.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"erohsikivar"},"content":" return taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"erohsikivar"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"erohsikivar"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"erohsikivar"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":71}},{"path":"src/main/java/Duke/TaskManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"import task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":"import task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":"import task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":"import task.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" * TaskManager is the class deals with editing the tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":"public class TaskManager {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" * Constructor for TaskManager.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" * @param taskList the tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"erohsikivar"},"content":" public TaskManager(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"erohsikivar"},"content":" this.tasks \u003d taskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"erohsikivar"},"content":" * Display list array list.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"erohsikivar"},"content":" * @return the array list","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"erohsikivar"},"content":" public ArrayList\u003cTask\u003e displayList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"erohsikivar"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"erohsikivar"},"content":" * mark method will mark the task mentioned as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"erohsikivar"},"content":" * @param index the index","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"erohsikivar"},"content":" public void mark(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"erohsikivar"},"content":" tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"erohsikivar"},"content":" * unmark method will unmark the task mentioned.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"erohsikivar"},"content":" * @param index the index","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"erohsikivar"},"content":" public void unmark(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"erohsikivar"},"content":" tasks.get(index).unmark();","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"erohsikivar"},"content":" * delete method will delete the mentioned task from the tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"erohsikivar"},"content":" * @param index the index","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"erohsikivar"},"content":" public void delete(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"erohsikivar"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"erohsikivar"},"content":" * todo method will create a new Todo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"erohsikivar"},"content":" * @param description the description","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"erohsikivar"},"content":" public void todo(String description) {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"erohsikivar"},"content":" tasks.add(new Todo(description));","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"erohsikivar"},"content":" * deadline method will create a new Deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"erohsikivar"},"content":" * @param description the description","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"erohsikivar"},"content":" * @param by the by","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"erohsikivar"},"content":" public void deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"erohsikivar"},"content":" tasks.add(new Deadline(description, by));","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"erohsikivar"},"content":" * event method will create a new Event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"erohsikivar"},"content":" * @param description the description","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"erohsikivar"},"content":" * @param from the from","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"erohsikivar"},"content":" * @param to the to","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"erohsikivar"},"content":" public void event(String description, LocalDateTime from, LocalTime to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"erohsikivar"},"content":" tasks.add(new Event(description, from, to));","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"erohsikivar"},"content":" * find method will find the matching tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"erohsikivar"},"content":" * @param description the description","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"erohsikivar"},"content":" * @return the array list","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"erohsikivar"},"content":" public ArrayList\u003cTask\u003e find(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"erohsikivar"},"content":" ArrayList\u003cTask\u003e tasksFound \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"erohsikivar"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"erohsikivar"},"content":" if (task.getStatusIcon().contains(description)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"erohsikivar"},"content":" tasksFound.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"erohsikivar"},"content":" return tasksFound;","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":111}},{"path":"src/main/java/Task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":" * Deadline class is used for tasks that have stipulated time to finish.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" * The By.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" * Instantiates a new Deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" * @param description the description","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" * @param by the by","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"erohsikivar"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"erohsikivar"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"erohsikivar"},"content":" return \"[D]\" + super.getStatusIcon() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"erohsikivar"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"erohsikivar"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"erohsikivar"},"content":" return String.format(\"D | %d | %s | %s\", super.isDone ? 1 : 0, super.description, this.by);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"erohsikivar":34}},{"path":"src/main/java/Task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":" * Event class is used for tasks that are held specific date and time.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":" * The From.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" * The To.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" protected LocalTime to;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" * Instantiates a new Event.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" * @param description the description","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":" * @param from the from","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":" * @param to the to","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"erohsikivar"},"content":" public Event(String description, LocalDateTime from, LocalTime to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"erohsikivar"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"erohsikivar"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"erohsikivar"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"erohsikivar"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"erohsikivar"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"erohsikivar"},"content":" return \"[E]\" + super.getStatusIcon() + \"(from: \" + from + \" to: \" + to + \")\" ;","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"erohsikivar"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"erohsikivar"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"erohsikivar"},"content":" return String.format(\"E | %d | %s | %s | %s\", super.isDone ? 1 : 0, super.description, this.from, this.to);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"erohsikivar":41}},{"path":"src/main/java/Task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" return (isDone ? \"[X] \" + description","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" : \"[ ] \" + description );","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"erohsikivar"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"erohsikivar"},"content":" public static Task parseFromString(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"erohsikivar"},"content":" String[] parts \u003d input.split(\" \\\\| \");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"erohsikivar"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"erohsikivar"},"content":" int isDone \u003d Integer.parseInt(parts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"erohsikivar"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"erohsikivar"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"erohsikivar"},"content":" Task task \u003d new Todo(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"erohsikivar"},"content":" if (isDone \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"erohsikivar"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"erohsikivar"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"erohsikivar"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"erohsikivar"},"content":" LocalDateTime by \u003d LocalDateTime.parse(parts[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"erohsikivar"},"content":" Task task \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"erohsikivar"},"content":" if (isDone \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"erohsikivar"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"erohsikivar"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"erohsikivar"},"content":" } else if (type.equals(\"E\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"erohsikivar"},"content":" LocalDateTime from \u003d LocalDateTime.parse(parts[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"erohsikivar"},"content":" LocalTime to \u003d LocalTime.parse(parts[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"erohsikivar"},"content":" Task task \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"erohsikivar"},"content":" if (isDone \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"erohsikivar"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"erohsikivar"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"erohsikivar"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"erohsikivar"},"content":" throw new IllegalArgumentException(\"Invalid task type: \" + type);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"erohsikivar"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"erohsikivar"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"erohsikivar"},"content":" return String.format(\"Task | %d | %s\", isDone ? 1 : 0, description);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"erohsikivar":64}},{"path":"src/main/java/Task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":" * Todo class is used for tasks that need to done.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"public class Todo extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":" * Instantiates a new Todo.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":" * @param description the description","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" return \"[T]\" + super.getStatusIcon();","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":" return String.format(\"T | %d | %s\", super.isDone ? 1 : 0, super.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"erohsikivar":26}},{"path":"src/test/java/Command/UserInterfaceTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":"public class UserInterfaceTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" private UserInterface userInterface;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" private final ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" @BeforeEach","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" public void setUp() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":" // Redirect standard output to capture printed messages","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":" userInterface \u003d new UserInterface();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"erohsikivar"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"erohsikivar"},"content":" public void testPrintMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"erohsikivar"},"content":" userInterface.showMessage(\"Hello, world!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"erohsikivar"},"content":" assertEquals(\"Hello, world!\\n\", outputStream.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":29}},{"path":"src/test/java/Duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"public class DukeTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":" public void dummyTest(){","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" public void anotherDummyTest(){","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":17}},{"path":"src/test/java/Duke/TaskManagerTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"import task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":"public class TaskManagerTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":" public void test1() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":" TaskManager taskManager \u003d new TaskManager(new ArrayList\u003cTask\u003e());","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" taskManager.todo(\"read book\");","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" assertEquals(1, taskManager.displayList().size());","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":18}},{"path":"src/untitled/build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"plugins {","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"group \u0027org.example\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"version \u0027unspecified\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":"repositories {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"erohsikivar"},"content":" mavenCentral()","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"erohsikivar"},"content":"dependencies {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"erohsikivar"},"content":" testImplementation \u0027org.junit.jupiter:junit-jupiter-api:5.8.1\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"erohsikivar"},"content":" testRuntimeOnly \u0027org.junit.jupiter:junit-jupiter-engine:5.8.1\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"erohsikivar"},"content":"test {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"erohsikivar"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":19}},{"path":"src/untitled/src/main/java/org/example/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"package org.example;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"public class Main {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":" System.out.println(\"Hello world!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"erohsikivar":7}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"erohsikivar"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"erohsikivar"},"content":"deadline finish article /by 2023-09-04T16:00","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"erohsikivar"},"content":"event project meeting /from 2023-09-04T16:00 /to 18:00","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"erohsikivar"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"erohsikivar"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"erohsikivar"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"erohsikivar"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"erohsikivar"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"erohsikivar":8}}] diff --git a/erohsikivar_ip_master/commits.json b/erohsikivar_ip_master/commits.json index 24cfefd4..9cb750ca 100644 --- a/erohsikivar_ip_master/commits.json +++ b/erohsikivar_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"erohsikivar":[{"date":"2023-08-24","commitResults":[{"hash":"aca465834eb5f65f3457eaa29524bd404cfadee1","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"137c1492c0933a5fdbb4a04f2512ac023e8b8879","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":2}}},{"hash":"2e3ca75ffcfbc90881c875d2dc179b26c937ee36","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}},{"hash":"115332139829ea8a56052f890d01fd69d84564e7","isMergeCommit":false,"messageTitle":"Mark As Done (new class Task added)","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":9}}},{"hash":"81d21b8f447d010590b81d2cb3aed64476f486df","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines (Added to 3 subclasses for Task)","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":16}}},{"hash":"1863fc5f62eeea22a197454af656724ecb752787","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":3,"deletions":14}}},{"hash":"9f7422873cb5c0d20648e90b46440dc619cc4b4c","isMergeCommit":false,"messageTitle":"Exceptions added","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":0}}},{"hash":"f4b7097a1088f89bf73516fb9b56fb828177ee96","isMergeCommit":false,"messageTitle":"Delete tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":65}}}]},{"date":"2023-08-30","commitResults":[{"hash":"2708528dc6b0b2da2682d0b05455b5bf6070a9b9","isMergeCommit":false,"messageTitle":"Saving and Loading of tasks to file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":153,"deletions":39}}},{"hash":"6a9d46bfde3b1b346a955b88b428970f7299d20c","isMergeCommit":false,"messageTitle":"Final branch Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"f48bc00781befa53170df1b912c995c7579436e7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"a56e6f12cf73d4e26b825a2d01490452c9e48f1b","isMergeCommit":false,"messageTitle":"Date and TIme","messageBody":"","tags":["branch-Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":13}}},{"hash":"0d2f04285dd645e0564432c595041701580c9798","isMergeCommit":true,"messageTitle":"Merge tag \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"e34a30fdac9b0cd18492e2069d53f570f2ef232d","isMergeCommit":false,"messageTitle":"More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":371,"deletions":163}}},{"hash":"7384957f11c1f0d012eba9ace1b5fe09ccdce50c","isMergeCommit":false,"messageTitle":"Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":135,"deletions":171}}},{"hash":"a997b652328e0fbad61677d5d6fd1b86d8baca3c","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"dd60b2a8852a66df792a0d3e1ace1be038706918","isMergeCommit":false,"messageTitle":"Using build gradle","messageBody":"","tags":["A-gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"7ad8252ccb0230365540fce39ab587ed00a5238f","isMergeCommit":false,"messageTitle":"Adding Junit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":22,"deletions":0},"txt":{"insertions":6,"deletions":0},"java":{"insertions":76,"deletions":0}}},{"hash":"83f888e5f93a7ab386eafe110634e6148c87fe5e","isMergeCommit":false,"messageTitle":"Added Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"aad890442c5aa370c4a846ee90dc0cb4e84a5416","isMergeCommit":false,"messageTitle":"Added Java Doc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":168,"deletions":9}}},{"hash":"6e9e2262210c7c62640cfcb4e874eb03ed36e2b1","isMergeCommit":false,"messageTitle":"Tweaked the code to follow Coding Standard","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":132,"deletions":135},"md":{"insertions":2,"deletions":2}}},{"hash":"f1f7f65ab5d480a494c368a7d613081e3f9977b5","isMergeCommit":false,"messageTitle":"Added Find method","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":0,"deletions":1},"java":{"insertions":46,"deletions":27},"md":{"insertions":2,"deletions":2}}},{"hash":"7e289121a57aa50921d296357bf0cf0bf7e1088a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b7bcdebb2c9a3321702c6cea2d58a9017e919ec8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Command/UserInterface.java\n","fileTypesAndContributionMap":{}},{"hash":"69244684469e876ed5db8b102900a8973d86c183","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Command/UserInterface.java\n#\tsrc/main/java/Duke/Duke.java\n#\tsrc/main/java/Duke/Parser.java\n#\tsrc/main/java/Duke/Storage.java\n#\tsrc/main/java/Duke/TaskManager.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"erohsikivar":{"java":747,"md":2,"fxml":0,"sh":0,"bat":0,"gradle":24,"txt":13}},"authorContributionVariance":{"erohsikivar":69403.61},"authorDisplayNameMap":{"erohsikivar":"CS2103T-W11-4 RAVI..HORE"}} +{"authorDailyContributionsMap":{"erohsikivar":[{"date":"2023-08-24","commitResults":[{"hash":"aca465834eb5f65f3457eaa29524bd404cfadee1","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"137c1492c0933a5fdbb4a04f2512ac023e8b8879","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":2}}},{"hash":"2e3ca75ffcfbc90881c875d2dc179b26c937ee36","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}},{"hash":"115332139829ea8a56052f890d01fd69d84564e7","isMergeCommit":false,"messageTitle":"Mark As Done (new class Task added)","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":9}}},{"hash":"81d21b8f447d010590b81d2cb3aed64476f486df","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines (Added to 3 subclasses for Task)","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":16}}},{"hash":"1863fc5f62eeea22a197454af656724ecb752787","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":3,"deletions":14}}},{"hash":"9f7422873cb5c0d20648e90b46440dc619cc4b4c","isMergeCommit":false,"messageTitle":"Exceptions added","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":0}}},{"hash":"f4b7097a1088f89bf73516fb9b56fb828177ee96","isMergeCommit":false,"messageTitle":"Delete tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":65}}}]},{"date":"2023-08-30","commitResults":[{"hash":"2708528dc6b0b2da2682d0b05455b5bf6070a9b9","isMergeCommit":false,"messageTitle":"Saving and Loading of tasks to file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":153,"deletions":39}}},{"hash":"6a9d46bfde3b1b346a955b88b428970f7299d20c","isMergeCommit":false,"messageTitle":"Final branch Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"f48bc00781befa53170df1b912c995c7579436e7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"a56e6f12cf73d4e26b825a2d01490452c9e48f1b","isMergeCommit":false,"messageTitle":"Date and TIme","messageBody":"","tags":["branch-Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":13}}},{"hash":"0d2f04285dd645e0564432c595041701580c9798","isMergeCommit":true,"messageTitle":"Merge tag \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"e34a30fdac9b0cd18492e2069d53f570f2ef232d","isMergeCommit":false,"messageTitle":"More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":371,"deletions":163}}},{"hash":"7384957f11c1f0d012eba9ace1b5fe09ccdce50c","isMergeCommit":false,"messageTitle":"Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":135,"deletions":171}}},{"hash":"a997b652328e0fbad61677d5d6fd1b86d8baca3c","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"dd60b2a8852a66df792a0d3e1ace1be038706918","isMergeCommit":false,"messageTitle":"Using build gradle","messageBody":"","tags":["A-gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"7ad8252ccb0230365540fce39ab587ed00a5238f","isMergeCommit":false,"messageTitle":"Adding Junit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":22,"deletions":0},"txt":{"insertions":6,"deletions":0},"java":{"insertions":76,"deletions":0}}},{"hash":"83f888e5f93a7ab386eafe110634e6148c87fe5e","isMergeCommit":false,"messageTitle":"Added Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"aad890442c5aa370c4a846ee90dc0cb4e84a5416","isMergeCommit":false,"messageTitle":"Added Java Doc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":168,"deletions":9}}},{"hash":"6e9e2262210c7c62640cfcb4e874eb03ed36e2b1","isMergeCommit":false,"messageTitle":"Tweaked the code to follow Coding Standard","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":132,"deletions":135},"md":{"insertions":2,"deletions":2}}},{"hash":"f1f7f65ab5d480a494c368a7d613081e3f9977b5","isMergeCommit":false,"messageTitle":"Added Find method","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":0,"deletions":1},"java":{"insertions":46,"deletions":27},"md":{"insertions":2,"deletions":2}}},{"hash":"7e289121a57aa50921d296357bf0cf0bf7e1088a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b7bcdebb2c9a3321702c6cea2d58a9017e919ec8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Command/UserInterface.java\n","fileTypesAndContributionMap":{}},{"hash":"69244684469e876ed5db8b102900a8973d86c183","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Command/UserInterface.java\n#\tsrc/main/java/Duke/Duke.java\n#\tsrc/main/java/Duke/Parser.java\n#\tsrc/main/java/Duke/Storage.java\n#\tsrc/main/java/Duke/TaskManager.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"a640fa179ff2971fd48464981a52dcef81fc8ca6","isMergeCommit":false,"messageTitle":"Added Javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":0}}},{"hash":"5e37d9faeaf65073a04913932fae0e31cfdbc6d2","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":13}}}]}]},"authorFileTypeContributionMap":{"erohsikivar":{"java":785,"md":2,"fxml":0,"sh":0,"bat":0,"gradle":24,"txt":13}},"authorContributionVariance":{"erohsikivar":60243.137},"authorDisplayNameMap":{"erohsikivar":"CS2103T-W11-4 RAVI..HORE"}} diff --git a/flexibo_ip_master/authorship.json b/flexibo_ip_master/authorship.json index 3157dc83..c0587d95 100644 --- a/flexibo_ip_master/authorship.json +++ b/flexibo_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"# duke.main.Duke project template","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"3. After that, locate the `src/main/java/duke.main.Duke.java` file, right-click it, and choose `Run duke.main.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"flexibo":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"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":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027com.fasterxml.jackson.core\u0027, name: \u0027jackson-core\u0027, version: \u00272.15.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027com.fasterxml.jackson.core\u0027, name: \u0027jackson-annotations\u0027, version: \u00272.2.1\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027com.fasterxml.jackson.core\u0027, name: \u0027jackson-databind\u0027, version: \u00272.0.1\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027com.fasterxml.jackson.datatype\u0027, name: \u0027jackson-datatype-jsr310\u0027, version: \u00272.3.0-rc1\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" mainClassName \u003d \u0027duke.main.Duke\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" mainClass.set(\"duke.main.Duke\")","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"flexibo":7,"-":41}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Command to add task into TaskList **/","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class AddCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final Task task;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * Initializes Add Command.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public AddCommand (Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * Adds a task to TaskList and saves list into file.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" storage.save(taskList.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" ui.showMessage(\"Task \" + task.task + \" successfully added\");","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" taskList.printSize();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":40}},{"path":"src/main/java/duke/command/ChangeMarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidParametersException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Command to change whether the task from mark to unmark (or vice versa) */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class ChangeMarkCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final String indexString;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" private final boolean isMark;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * Initializes change mark command.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * @param indexString String that contains the index of TaskList.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" * @param isMark Boolean to indicate if the task should be marked or not.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" public ChangeMarkCommand(String indexString, boolean isMark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" this.indexString \u003d indexString;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" this.isMark \u003d isMark;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" * Marks or Unmarks task based on given index. Attempts to parse index from String to integer.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" * @throws InvalidParametersException Throws error if unable to parse from String to Integer successfully.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidParametersException {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" int index \u003d Integer.parseInt(indexString) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" if (isMark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" taskList.mark(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" storage.save(taskList.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" ui.showMessage(\"Task at index \" + (index + 1) + \"has been successfully marked\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" taskList.unmark(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" storage.save(taskList.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" ui.showMessage(\"Task at index \" + (index + 1) + \"has been successfully unmarked\");","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" taskList.print();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" throw new InvalidParametersException(\"Insert an integer from the list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":56}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidParametersException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Command interface **/","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public interface Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" * Executes code related to the nature of command.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" * @throws InvalidParametersException If command has parameters, then it can throw an InvalidParameters Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidParametersException;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * Checks whether the application is configured to exit.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" * By default, it will always return false unless stated otherwise.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" * @return Command","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" boolean isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":28}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidParametersException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Command to delete task at specified index. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final String indexString;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * Initialize delete command with specified index of task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" * @param indexString Index to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public DeleteCommand(String indexString) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" this.indexString \u003d indexString;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * Deletes task at specified index. Attempts to parse index from String to integer.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" * @throws InvalidParametersException Throws error if unable to parse from String to Integer successfully.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidParametersException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" int index \u003d Integer.parseInt(indexString) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" taskList.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" storage.save(taskList.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" ui.showMessage(\"Task at index \" + (index + 1) + \"removed successfully.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" taskList.printSize();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" taskList.print();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" throw new InvalidParametersException(\"Insert an integer from the list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":48}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"/** Command to exit the app */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"public class ExitCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" * Prints exit statement.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" ui.showMessage(\"BYE!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * Set isExit to true to exit the app.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" * @return True.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":30}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidParametersException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Command to find tasks based on search string */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class FindCommand implements Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final String searchString;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" public FindCommand(String searchString) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" this.searchString \u003d searchString;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" * Finds and prints tasks based on search string.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" taskList.print(searchString);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"flexibo":32}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"/** Command to print list of tasks */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" * Prints task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" taskList.print();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":25}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** General Exception created for the Duke Application */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize General Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for invalid command */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initializes Invalid Command Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/InvalidDateFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for invalid date format */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class InvalidDateFormatException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Invalid Date Format Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public InvalidDateFormatException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/InvalidFileException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for invalid file */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class InvalidFileException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Invalid File Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public InvalidFileException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/InvalidParametersException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for invalid parameters */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class InvalidParametersException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Invalid Parameters Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public InvalidParametersException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/MissingCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for missing sub command */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class MissingCommandException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Missing Command Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public MissingCommandException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/MissingParametersException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for missing parameters */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class MissingParametersException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Missing Parameters Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public MissingParametersException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidFileException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * Main entry point for application to run.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" * Duke is a to-do list CLI app, with different kind of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" * Able to store task data.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"public class Duke {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" * Initializes Duke class. Initializes filepath to load and save data,","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" * loads data from filepath.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" * @param filePath Filepath to load and save data to.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" } catch (InvalidFileException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" * Runs application.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" ui.showCommands();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" new Duke(\"tasks.json\").run();","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":59}},{"path":"src/main/java/duke/main/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.command.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.exception.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"/** Deals with making sense of user command, manages error handling based on user input */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" private static String[] splitText;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" * Interprets user input, returns Command class if found.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" * The format for this parser is \"[main command] [task] /[sub command] [parameters for sub command]\".","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" * Order of multiple sub commands are ignored, and not case-sensitive.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" * @param inputString Input String to be interpreted.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * @return Command class to run.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" * @throws InvalidCommandException When command is invalid.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" * @throws MissingParametersException When there are missing parameters for either main or sub commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" * @throws InvalidParametersException When there are invalid parameters for sub commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" * @throws InvalidDateFormatException When there are invalid date formats for sub commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" * @throws MissingCommandException When sub command for main command is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" public static Command parse(String inputString) throws InvalidCommandException, MissingParametersException,","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" InvalidParametersException, InvalidDateFormatException, MissingCommandException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" // Split text into two.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" // With index 0 be the first word of user input, and index 1 containing the rest of the string.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" inputString \u003d inputString.toLowerCase();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" splitText \u003d inputString.split(\" \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" String command \u003d splitText[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" String task;","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" switch (command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" return new DeleteCommand(splitText[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" return new AddCommand(new ToDo(splitText[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" LocalDate from \u003d getDateWithCommand(splitText[1], \"from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" LocalDate to \u003d getDateWithCommand(splitText[1], \"to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" task \u003d getTask(splitText[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" return new AddCommand(new Event(task, from, to));","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" LocalDate by \u003d getDateWithCommand(splitText[1], \"by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":" task \u003d getTask(splitText[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" return new AddCommand(new Deadline(task, by));","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":" return new ChangeMarkCommand(splitText[1], true);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" return new ChangeMarkCommand(splitText[1], false);","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":" case \"find\":","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"flexibo"},"content":" return new FindCommand(splitText[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"flexibo"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"flexibo"},"content":" throw new InvalidCommandException(\"I don\u0027t understand.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"flexibo"},"content":" * Gets LocalDate parameter based on String sub commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"flexibo"},"content":" * @param str String to search in.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"flexibo"},"content":" * @param command Sub Command to search for.","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"flexibo"},"content":" * @return LocalDate parameter based on Sub Command.","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"flexibo"},"content":" * @throws MissingCommandException When Sub Command cannot be found.","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"flexibo"},"content":" * @throws MissingParametersException When there are no parameters for Sub Command.","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"flexibo"},"content":" * @throws InvalidDateFormatException When the parameter does not have a proper LocalDate format.","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"flexibo"},"content":" private static LocalDate getDateWithCommand(String str, String command) throws MissingCommandException,","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"flexibo"},"content":" MissingParametersException, InvalidDateFormatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"flexibo"},"content":" boolean found \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"flexibo"},"content":" LocalDate date \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"flexibo"},"content":" String[] splitStr \u003d str.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"flexibo"},"content":" for (String word : splitStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"flexibo"},"content":" if (!found) {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"flexibo"},"content":" if (word.equals(\"/\" + command)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"flexibo"},"content":" found \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"flexibo"},"content":" date \u003d LocalDate.parse(word);","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"flexibo"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"flexibo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"flexibo"},"content":" throw new InvalidDateFormatException(\"Add a date in the foll0wing format: yyyyy-mm-dd\");","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"flexibo"},"content":" if (!found) {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"flexibo"},"content":" throw new MissingCommandException(\"Command \" + command + \"could not be found\");","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"flexibo"},"content":" } else if (date \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"flexibo"},"content":" throw new MissingParametersException(\"Command \" + command + \" does not contain any parameters\");","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"flexibo"},"content":" return date;","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"flexibo"},"content":" * Gets task based on string, under the assumption that the task will be after the main command,","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"flexibo"},"content":" * and before the first slash command.","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"flexibo"},"content":" * @param str String to interpret.","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"flexibo"},"content":" * @return Task name.","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"flexibo"},"content":" * @throws MissingParametersException In the event where there are no task found.","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"flexibo"},"content":" private static String getTask(String str) throws MissingParametersException {","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"flexibo"},"content":" StringBuilder task \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"flexibo"},"content":" String[] splitStr \u003d str.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"flexibo"},"content":" for (String word : splitStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"flexibo"},"content":" if (!word.isEmpty() \u0026\u0026 word.charAt(0) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"flexibo"},"content":" task.append(\" \").append(word);","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"flexibo"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"flexibo"},"content":" if (task.length() \u003e 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"flexibo"},"content":" return task.substring(1);","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"flexibo"},"content":" throw new MissingParametersException(\"Task not found, please type a task \u003e:(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"flexibo"},"content":" * Checks length of user input. User input with length less than 2 implies","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"flexibo"},"content":" * there are no parameters.","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"flexibo"},"content":" * @throws MissingParametersException Throws if there are no parameters found after the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"flexibo"},"content":" private static void checkLength() throws MissingParametersException {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"flexibo"},"content":" if (splitText.length \u003c 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"flexibo"},"content":" throw new MissingParametersException(\"You need to add something after the command LOL\");","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":154}},{"path":"src/main/java/duke/main/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.core.type.TypeReference;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.databind.ObjectMapper;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.databind.SerializationFeature;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidFileException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"import java.nio.charset.StandardCharsets;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" * Storage to store tasks to a specified filepath.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" private final String filepath;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" // Mapper to map from Object to JSON format.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" private static final ObjectMapper MAPPER \u003d new ObjectMapper();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" // Setting Mapper to serialize LocalDate to JSON.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" static {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" MAPPER.registerModule(new JavaTimeModule());","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" MAPPER.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" * Initializes storage with filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" * @param filepath Filepath to save and load tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" public Storage (String filepath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" * Loads tasks from filepath (preferably JSON).","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" * If the file is not found or corrupted, throws InvalidFileException.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" * @return Tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" public ArrayList\u003cTask\u003e load() throws InvalidFileException {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" return MAPPER.readValue(new File(filepath), new TypeReference\u003c\u003e() {});","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" throw new InvalidFileException(\"File not found, will generate file on the next save...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" throw new InvalidFileException(\"Uh oh, file is corrupted, can\u0027t be loaded, \"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" + \"will generate a new file on the next save...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" * Saves tasks given by the caller to the filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":" * @param tasks Tasks to be saved.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" public void save(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":" String jsonString \u003d MAPPER.writerFor(new TypeReference\u003cArrayList\u003cTask\u003e\u003e() {})","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":" .writeValueAsString(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"flexibo"},"content":" Files.writeString(Path.of(filepath), jsonString, StandardCharsets.UTF_8);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"flexibo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"flexibo"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":74}},{"path":"src/main/java/duke/main/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"/** Contains a list of tasks, used for manipulating or displaying the list of tasks */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" * Initializes tasks list.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" * Initialize TaskList with an array of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" * @param tasks Tasks to be initialized with.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" * Add task to back of the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" * @param task Task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" * Removes task by index.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" * @param i index to remove.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" public void remove(int i) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" tasks.remove(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" * Prints out the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" public void print() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" System.out.println(\" You have no tasks added yet :(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" System.out.println(\" \" + (i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":" * Prints out the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" * @param searchString String to search with.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":" public void print(String searchString) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" boolean found \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" System.out.println(\" You have no tasks added yet :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"flexibo"},"content":" if (tasks.get(i).task.contains(searchString)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"flexibo"},"content":" System.out.println(\" \" + (i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"flexibo"},"content":" if (!found) {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"flexibo"},"content":" System.out.println(\"No tasks found with string \u0027\" + searchString + \"\u0027\");","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"flexibo"},"content":" * Prints number of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"flexibo"},"content":" public void printSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"flexibo"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"flexibo"},"content":" * Marks task at index i.","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"flexibo"},"content":" * @param i Index of tasks to be marked.","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"flexibo"},"content":" public void mark(int i) {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"flexibo"},"content":" tasks.get(i).mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"flexibo"},"content":" * Unmarks task at index i.","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"flexibo"},"content":" * @param i Index of tasks to be unmarked.","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"flexibo"},"content":" public void unmark(int i) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"flexibo"},"content":" tasks.get(i).unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"flexibo"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"flexibo"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":108}},{"path":"src/main/java/duke/main/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Ui deals with interactions with the user","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" * Initializes Ui object.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" * Prints welcome message.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" System.out.println(\" GREETINGS HUMAN! I AM QLATZ! □ \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" + \" I AM NOW A LISTMAKER\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" * Prints out message with string wrapper.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" * @param message Message to be printed.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" System.out.println(\" \" + message);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" * Prints out error message with string wrapper.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" * @param error Error message to be printed.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" public void showError(String error) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" System.err.println(\" \" + error);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" * Prints out a line.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" public void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" System.out.println(\" ----------------------\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" * Prints out loading error.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" System.out.println(\"Error loading file, creating an empty list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" * Prints out list of commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":" public void showCommands() {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" showMessage(\"Commands: \");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" showMessage(\"bye, list, find, mark, unmark, todo, deadline, event\");","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"flexibo"},"content":" * Reads command from user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"flexibo"},"content":" * @return User input.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"flexibo"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"flexibo"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":76}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Task class with a deadline date (by) */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public LocalDate dateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * Initialize Deadline class.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * @param dateTime Deadline for task.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" public Deadline(@JsonProperty(\"task\") String task, @JsonProperty(\"dateTime\") LocalDate dateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" + dateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":28}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Task class contains an Event with from and to dates */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public LocalDate from;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" public LocalDate to;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * Initialize Event class.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" * @param from Date when the event starts.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" * @param to Date when the event ends.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" public Event(@JsonProperty(\"task\") String task, @JsonProperty(\"from\") LocalDate from,","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" @JsonProperty(\"to\")LocalDate to) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" * Converts LocalDate to String.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" * @param localDate LocalDate to convert to.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" * @return String in the form of \"MMM dd yyyy\"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" private String getDate(LocalDate localDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" return localDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" return \"[E]\" + super.toString() + \" (from: \" + getDate(from) + \" to: \" + getDate(to) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":41}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonSubTypes;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonTypeInfo;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"/** Task class that contains a task string */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"@JsonTypeInfo(","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" use \u003d JsonTypeInfo.Id.NAME","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":")","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"@JsonSubTypes({","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" @JsonSubTypes.Type(value \u003d ToDo.class, name \u003d \"ToDo\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" @JsonSubTypes.Type(value \u003d Event.class, name \u003d \"Event\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" @JsonSubTypes.Type(value \u003d Deadline.class, name \u003d \"Deadline\")","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"})","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" public boolean done \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public String task;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" * Initialize Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" public Task(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" * Sets boolean done to true.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" public void mark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" done \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" * Sets boolean done to false;","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" done \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" return \"[\" + ((done)?\"X\":\" \") + \"] \" + task;","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":46}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"/** Classic to-do task that only contains the task string */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" * Initialize To-Do class.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" public ToDo(@JsonProperty(\"task\") String task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":20}},{"path":"src/test/java/duke/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" public void dummyTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" public void anotherDummyTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"flexibo":18}},{"path":"src/test/java/duke/command/DeleteCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"flexibo":4}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":" GREETINGS HUMAN! I AM QLATZ! □ ","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":" I AM NOW A LISTMAKER","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" I can only understand the following commands: ","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" bye, list, mark, unmark, todo, deadline, event","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" You have no tasks added yet","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" Now you have 1 tasks in the list.","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" Now you have 2 tasks in the list.","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" Now you have 3 tasks in the list.","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" 1. [T][ ] borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" 2. [D][ ] return book(by: sunday)","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" 3. [E][ ] project meeting(from: mon 2pm to: tues 000pm)","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":50}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"java -classpath ..\\bin duke.main.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"flexibo":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"# duke.main.Duke project template","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"3. After that, locate the `src/main/java/duke.main.Duke.java` file, right-click it, and choose `Run duke.main.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"flexibo":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027com.fasterxml.jackson.core\u0027, name: \u0027jackson-core\u0027, version: \u00272.15.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027com.fasterxml.jackson.core\u0027, name: \u0027jackson-annotations\u0027, version: \u00272.2.1\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027com.fasterxml.jackson.core\u0027, name: \u0027jackson-databind\u0027, version: \u00272.12.7.1\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027com.fasterxml.jackson.datatype\u0027, name: \u0027jackson-datatype-jsr310\u0027, version: \u00272.9.8\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" mainClassName \u003d \u0027duke.main.Duke\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" mainClass.set(\"duke.main.Duke\")","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"flexibo":12,"-":41}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Command to add task into TaskList **/","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class AddCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final Task task;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * Initializes Add Command.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * Adds a task to TaskList and saves list into file.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" storage.save(taskList.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" ui.showMessage(\"Task \" + task.getTask() + \" successfully added\");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" taskList.printSize();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":40}},{"path":"src/main/java/duke/command/ChangeMarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidParametersException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Command to change whether the task from mark to unmark (or vice versa) */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class ChangeMarkCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final String indexString;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" private final boolean isMark;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * Initializes change mark command.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * @param indexString String that contains the index of TaskList.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" * @param isMark Boolean to indicate if the task should be marked or not.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" public ChangeMarkCommand(String indexString, boolean isMark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" this.indexString \u003d indexString;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" this.isMark \u003d isMark;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" * Marks or Unmarks task based on given index. Attempts to parse index from String to integer.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" * @throws InvalidParametersException Throws error if unable to parse from String to Integer successfully.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidParametersException {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" int index \u003d Integer.parseInt(indexString) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" if (isMark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" taskList.mark(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" storage.save(taskList.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" ui.showMessage(\"Task at index \" + (index + 1) + \"has been successfully marked\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" taskList.unmark(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" storage.save(taskList.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" ui.showMessage(\"Task at index \" + (index + 1) + \"has been successfully unmarked\");","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" taskList.print();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" throw new InvalidParametersException(\"Insert an integer from the list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":56}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidParametersException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Command interface **/","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public interface Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" * Executes code related to the nature of command.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" * @throws InvalidParametersException If command has parameters, then it can throw an InvalidParameters Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidParametersException;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * Checks whether the application is configured to exit.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" * By default, it will always return false unless stated otherwise.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" * @return Command","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" boolean isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":28}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidParametersException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Command to delete task at specified index. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final String indexString;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * Initialize delete command with specified index of task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" * @param indexString Index to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public DeleteCommand(String indexString) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" this.indexString \u003d indexString;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * Deletes task at specified index. Attempts to parse index from String to integer.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" * @throws InvalidParametersException Throws error if unable to parse from String to Integer successfully.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidParametersException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" int index \u003d Integer.parseInt(indexString) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" taskList.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" storage.save(taskList.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" ui.showMessage(\"Task at index \" + (index + 1) + \"removed successfully.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" taskList.printSize();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" taskList.print();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" throw new InvalidParametersException(\"Insert an integer from the list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":48}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"/** Command to exit the app */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"public class ExitCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" * Prints exit statement.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" ui.showMessage(\"BYE!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * Set isExit to true to exit the app.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" * @return True.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":30}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"/** Command to find tasks based on search string */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"public class FindCommand implements Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" private final String searchString;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" public FindCommand(String searchString) {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" this.searchString \u003d searchString;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * Finds and prints tasks based on search string.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" taskList.print(searchString);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"flexibo":31}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"/** Command to print list of tasks */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" * Prints task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" taskList.print();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":25}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** General Exception created for the Duke Application */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize General Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for invalid command */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initializes Invalid Command Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/InvalidDateFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for invalid date format */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class InvalidDateFormatException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Invalid Date Format Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public InvalidDateFormatException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/InvalidFileException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for invalid file */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class InvalidFileException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Invalid File Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public InvalidFileException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/InvalidParametersException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for invalid parameters */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class InvalidParametersException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Invalid Parameters Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public InvalidParametersException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/MissingCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for missing sub command */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class MissingCommandException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Missing Command Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public MissingCommandException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/MissingParametersException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for missing parameters */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class MissingParametersException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Missing Parameters Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public MissingParametersException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidFileException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * Main entry point for application to run.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" * Duke is a to-do list CLI app, with different kind of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" * Able to store task data.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"public class Duke {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" * Initializes Duke class. Initializes filepath to load and save data,","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" * loads data from filepath.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" * @param filePath Filepath to load and save data to.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" } catch (InvalidFileException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" * Runs application.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" ui.showCommands();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" new Duke(\"tasks.json\").run();","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":59}},{"path":"src/main/java/duke/main/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"import duke.command.ChangeMarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidDateFormatException;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidParametersException;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"import duke.exception.MissingCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":"import duke.exception.MissingParametersException;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":"/** Deals with making sense of user command, manages error handling based on user input */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" private static String[] splitText;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" * Interprets user input, returns Command class if found.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" * The format for this parser is \"[main command] [task] /[sub command] [parameters for sub command]\".","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" * Order of multiple sub commands are ignored, and not case-sensitive.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" * @param inputString Input String to be interpreted.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" * @return Command class to run.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" * @throws InvalidCommandException When command is invalid.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" * @throws MissingParametersException When there are missing parameters for either main or sub commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" * @throws InvalidParametersException When there are invalid parameters for sub commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" * @throws InvalidDateFormatException When there are invalid date formats for sub commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" * @throws MissingCommandException When sub command for main command is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" public static Command parse(String inputString) throws InvalidCommandException, MissingParametersException,","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" InvalidParametersException, InvalidDateFormatException, MissingCommandException {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" // Split text into two.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" // With index 0 be the first word of user input, and index 1 containing the rest of the string.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" inputString \u003d inputString.toLowerCase();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" splitText \u003d inputString.split(\" \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" String command \u003d splitText[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" String task;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" switch (command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" return new DeleteCommand(splitText[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":" return new AddCommand(new ToDo(splitText[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" LocalDate from \u003d getDateWithCommand(splitText[1], \"from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":" LocalDate to \u003d getDateWithCommand(splitText[1], \"to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" task \u003d getTask(splitText[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" return new AddCommand(new Event(task, from, to));","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":" LocalDate by \u003d getDateWithCommand(splitText[1], \"by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"flexibo"},"content":" task \u003d getTask(splitText[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"flexibo"},"content":" return new AddCommand(new Deadline(task, by));","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"flexibo"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"flexibo"},"content":" return new ChangeMarkCommand(splitText[1], true);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"flexibo"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"flexibo"},"content":" return new ChangeMarkCommand(splitText[1], false);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"flexibo"},"content":" case \"find\":","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"flexibo"},"content":" return new FindCommand(splitText[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"flexibo"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"flexibo"},"content":" throw new InvalidCommandException(\"I don\u0027t understand.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"flexibo"},"content":" * Gets LocalDate parameter based on String sub commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"flexibo"},"content":" * @param str String to search in.","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"flexibo"},"content":" * @param command Sub Command to search for.","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"flexibo"},"content":" * @return LocalDate parameter based on Sub Command.","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"flexibo"},"content":" * @throws MissingCommandException When Sub Command cannot be found.","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"flexibo"},"content":" * @throws MissingParametersException When there are no parameters for Sub Command.","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"flexibo"},"content":" * @throws InvalidDateFormatException When the parameter does not have a proper LocalDate format.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"flexibo"},"content":" private static LocalDate getDateWithCommand(String str, String command) throws MissingCommandException,","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"flexibo"},"content":" MissingParametersException, InvalidDateFormatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"flexibo"},"content":" boolean found \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"flexibo"},"content":" LocalDate date \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"flexibo"},"content":" String[] splitStr \u003d str.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"flexibo"},"content":" for (String word : splitStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"flexibo"},"content":" if (!found) {","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"flexibo"},"content":" if (word.equals(\"/\" + command)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"flexibo"},"content":" found \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"flexibo"},"content":" date \u003d LocalDate.parse(word);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"flexibo"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"flexibo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"flexibo"},"content":" throw new InvalidDateFormatException(\"Add a date in the foll0wing format: yyyyy-mm-dd\");","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"flexibo"},"content":" if (!found) {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"flexibo"},"content":" throw new MissingCommandException(\"Command \" + command + \"could not be found\");","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"flexibo"},"content":" } else if (date \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"flexibo"},"content":" throw new MissingParametersException(\"Command \" + command + \" does not contain any parameters\");","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"flexibo"},"content":" return date;","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"flexibo"},"content":" * Gets task based on string, under the assumption that the task will be after the main command,","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"flexibo"},"content":" * and before the first slash command.","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"flexibo"},"content":" * @param str String to interpret.","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"flexibo"},"content":" * @return Task name.","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"flexibo"},"content":" * @throws MissingParametersException In the event where there are no task found.","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"flexibo"},"content":" private static String getTask(String str) throws MissingParametersException {","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"flexibo"},"content":" StringBuilder task \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"flexibo"},"content":" String[] splitStr \u003d str.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"flexibo"},"content":" for (String word : splitStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"flexibo"},"content":" if (!word.isEmpty() \u0026\u0026 word.charAt(0) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"flexibo"},"content":" task.append(\" \").append(word);","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"flexibo"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"flexibo"},"content":" if (task.length() \u003e 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"flexibo"},"content":" return task.substring(1);","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"flexibo"},"content":" throw new MissingParametersException(\"Task not found, please type a task \u003e:(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"flexibo"},"content":" * Checks length of user input. User input with length less than 2 implies","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"flexibo"},"content":" * there are no parameters.","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"flexibo"},"content":" * @throws MissingParametersException Throws if there are no parameters found after the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"flexibo"},"content":" private static void checkLength() throws MissingParametersException {","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"flexibo"},"content":" if (splitText.length \u003c 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"flexibo"},"content":" throw new MissingParametersException(\"You need to add something after the command LOL\");","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":164}},{"path":"src/main/java/duke/main/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import java.nio.charset.StandardCharsets;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.core.type.TypeReference;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.databind.ObjectMapper;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.databind.SerializationFeature;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidFileException;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" * Storage to store tasks to a specified filepath.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" private final String filepath;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" // Mapper to map from Object to JSON format.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" private static final ObjectMapper MAPPER \u003d new ObjectMapper();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" // Setting Mapper to serialize LocalDate to JSON.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" static {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" MAPPER.registerModule(new JavaTimeModule());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" MAPPER.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" * Initializes storage with filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" * @param filepath Filepath to save and load tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" * Loads tasks from filepath (preferably JSON).","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" * If the file is not found or corrupted, throws InvalidFileException.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" * @return Tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" public ArrayList\u003cTask\u003e load() throws InvalidFileException {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" return MAPPER.readValue(new File(filepath), new TypeReference\u003c\u003e() {});","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" throw new InvalidFileException(\"File not found, will generate file on the next save...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" throw new InvalidFileException(\"Uh oh, file is corrupted, can\u0027t be loaded, \"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" + \"will generate a new file on the next save...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" * Saves tasks given by the caller to the filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" * @param tasks Tasks to be saved.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" public void save(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":" String jsonString \u003d MAPPER.writerFor(new TypeReference\u003cArrayList\u003cTask\u003e\u003e() {})","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"flexibo"},"content":" .writeValueAsString(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"flexibo"},"content":" Files.writeString(Path.of(filepath), jsonString, StandardCharsets.UTF_8);","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"flexibo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"flexibo"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":75}},{"path":"src/main/java/duke/main/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Contains a list of tasks, used for manipulating or displaying the list of tasks */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * Initializes tasks list.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" * Initialize TaskList with an array of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * @param tasks Tasks to be initialized with.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" * Add task to back of the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" * @param task Task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" * Removes task by index.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" * @param i index to remove.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" public void remove(int i) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" tasks.remove(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" * Prints out the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" public void print() {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" System.out.println(\" You have no tasks added yet :(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" System.out.println(\" \" + (i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" * Prints out the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" * @param searchString String to search with.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" public void print(String searchString) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" boolean found \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":" System.out.println(\" You have no tasks added yet :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"flexibo"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"flexibo"},"content":" if (tasks.get(i).getTask().contains(searchString)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"flexibo"},"content":" System.out.println(\" \" + (i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"flexibo"},"content":" if (!found) {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"flexibo"},"content":" System.out.println(\"No tasks found with string \u0027\" + searchString + \"\u0027\");","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"flexibo"},"content":" * Prints number of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"flexibo"},"content":" public void printSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"flexibo"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"flexibo"},"content":" * Marks task at index i.","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"flexibo"},"content":" * @param i Index of tasks to be marked.","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"flexibo"},"content":" public void mark(int i) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"flexibo"},"content":" tasks.get(i).mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"flexibo"},"content":" * Unmarks task at index i.","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"flexibo"},"content":" * @param i Index of tasks to be unmarked.","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"flexibo"},"content":" public void unmark(int i) {","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"flexibo"},"content":" tasks.get(i).unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"flexibo"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"flexibo"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":109}},{"path":"src/main/java/duke/main/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Ui deals with interactions with the user","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" * Initializes Ui object.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" * Prints welcome message.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" System.out.println(\" GREETINGS HUMAN! I AM QLATZ! □ \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" + \" I AM NOW A LISTMAKER\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" * Prints out message with string wrapper.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" * @param message Message to be printed.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" System.out.println(\" \" + message);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" * Prints out error message with string wrapper.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" * @param error Error message to be printed.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" public void showError(String error) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" System.err.println(\" \" + error);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" * Prints out a line.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" public void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" System.out.println(\" ----------------------\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" * Prints out loading error.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" System.out.println(\"Error loading file, creating an empty list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" * Prints out list of commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":" public void showCommands() {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" showMessage(\"Commands: \");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" showMessage(\"bye, list, find, mark, unmark, todo, deadline, event\");","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"flexibo"},"content":" * Reads command from user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"flexibo"},"content":" * @return User input.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"flexibo"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"flexibo"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":76}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Task class with a deadline date (by) */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final LocalDate dateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * Initialize Deadline class.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * @param dateTime Deadline for task.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" public Deadline(@JsonProperty(\"task\") String task, @JsonProperty(\"dateTime\") LocalDate dateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" + dateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":28}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Task class contains an Event with from and to dates */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final LocalDate from;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" private final LocalDate to;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * Initialize Event class.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" * @param from Date when the event starts.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" * @param to Date when the event ends.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" public Event(@JsonProperty(\"task\") String task, @JsonProperty(\"from\") LocalDate from,","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" @JsonProperty(\"to\")LocalDate to) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" * Converts LocalDate to String.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" * @param localDate LocalDate to convert to.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" * @return String in the form of \"MMM dd yyyy\"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" private String getDate(LocalDate localDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" return localDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" return \"[E]\" + super.toString() + \" (from: \" + getDate(from) + \" to: \" + getDate(to) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":41}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonSubTypes;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonTypeInfo;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"/** Task class that contains a task string */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"@JsonTypeInfo(","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" use \u003d JsonTypeInfo.Id.NAME","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":")","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"@JsonSubTypes({","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" @JsonSubTypes.Type(value \u003d ToDo.class, name \u003d \"ToDo\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" @JsonSubTypes.Type(value \u003d Event.class, name \u003d \"Event\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" @JsonSubTypes.Type(value \u003d Deadline.class, name \u003d \"Deadline\")","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"})","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" private boolean done \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" private final String task;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" * Initialize Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" public Task(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" * Sets boolean done to true.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" public void mark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" done \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" * Sets boolean done to false;","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" done \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" public String getTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" return task;","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" return \"[\" + ((done) ? \"X\" : \" \") + \"] \" + task;","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":50}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"/** Classic to-do task that only contains the task string */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" * Initialize To-Do class.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" public ToDo(@JsonProperty(\"task\") String task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":20}},{"path":"src/test/java/duke/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" public void dummyTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" public void anotherDummyTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"flexibo":18}},{"path":"src/test/java/duke/command/DeleteCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"flexibo":4}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":" GREETINGS HUMAN! I AM QLATZ! □ ","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":" I AM NOW A LISTMAKER","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" I can only understand the following commands: ","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" bye, list, mark, unmark, todo, deadline, event","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" You have no tasks added yet","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" Now you have 1 tasks in the list.","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" Now you have 2 tasks in the list.","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" Now you have 3 tasks in the list.","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" 1. [T][ ] borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" 2. [D][ ] return book(by: sunday)","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" 3. [E][ ] project meeting(from: mon 2pm to: tues 000pm)","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":50}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"java -classpath ..\\bin duke.main.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"flexibo":1,"-":20}}] diff --git a/flexibo_ip_master/commits.json b/flexibo_ip_master/commits.json index 2263551c..dd2aad9b 100644 --- a/flexibo_ip_master/commits.json +++ b/flexibo_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"flexibo":[{"date":"2023-08-23","commitResults":[{"hash":"8e7c9173ea98cd1ab93702d9391bc65ff19c89bd","isMergeCommit":false,"messageTitle":"Level-0 created greetings","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"b1072be813e2b3069535f3eac7d4ff08f3d0b650","isMergeCommit":false,"messageTitle":"Level-0 created greetings","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":9}}},{"hash":"c799dda454b500e319a672c41f0d2f7baa800090","isMergeCommit":false,"messageTitle":"Level-1 Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":4}}},{"hash":"a0753cdeed3dc2fc8b4973c61d9764df5196c44f","isMergeCommit":false,"messageTitle":"Level-2 Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"44ea01f12e9b96138ce201d79bd42e6a943dad52","isMergeCommit":false,"messageTitle":"Level-3 Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":16}}},{"hash":"f9f98b612c05b7784679a0c40e314a782e3c0812","isMergeCommit":false,"messageTitle":"Level 4 - ToDos, Events, Deadlines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":150,"deletions":25}}},{"hash":"41f13a0909c0f5b7e1f55911b867cac579b5cb4a","isMergeCommit":false,"messageTitle":"Level 4 - ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":7}}},{"hash":"67533c9e095d1a5736370af0efeaa31dee16873d","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":50,"deletions":0}}},{"hash":"dd35770df9a087ba1ea3dfdbc37a5c722cc620b9","isMergeCommit":false,"messageTitle":"Level 5 - Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":34}}},{"hash":"dcb0041ca8d55754809f0e272c1d04eb19be2ef3","isMergeCommit":false,"messageTitle":"Level 5 - Handle Errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"9dc42180fecddefb577dde1a8e50f2c1d7649287","isMergeCommit":false,"messageTitle":"Level 6 - Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"3bdfe2291b8192a74265e6152e470c8755674ca7","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"e2b7f0a0715ba8ec777b91937ff533d7be1af6d8","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"b9951deeab6f842968684657d746899f6952a4a2","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d204e81596e3dff8d43ddcb63fd6b8114c79fe2c","isMergeCommit":false,"messageTitle":"Level 7 Save, add to brranch levl 77777777777777777777777","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":13}}},{"hash":"09a6407f428cf993fd456f25c72120d224c7f92d","isMergeCommit":false,"messageTitle":"Level 7 Save, add to brranch levl 77777777777777777777777","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"be629557dea16fba063a4068232f423a1c483fb8","isMergeCommit":false,"messageTitle":"Level 7 Save, add to brranch levl 77777777777777777777777","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"5cc8ee4e031aab460a3c17b9d43836e025ca2051","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"82c616ad5001c9927f0b2c503e542373893256b8","isMergeCommit":false,"messageTitle":"lelve 8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":11}}},{"hash":"15268083424dbb70b7bb160e68c26c4971cb97e8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"6ec5229a330ee974199ec12108781101635b8ae7","isMergeCommit":false,"messageTitle":"Change code format to be more OOP friendly.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":606,"deletions":247},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"162101aba35f1448ec2185e42b48785d929aba47","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-moreoop\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"9954fe8dcdc827c2d4bdaae3d23c8c896ed6c7dc","isMergeCommit":false,"messageTitle":"Organized files to standard packages.","messageBody":"Created new packages for \"exception\", \"task\", and \"command\" for enhanced readability.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"2228b037873c37f466419c4a3f21bfae18aa183d","isMergeCommit":false,"messageTitle":"Removed Duke Welcome.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"7ebc8d745479e15a7cc7429fdc7e480254e90d1f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7052b53c6963e1d0082291aeca1680335ce906e4","isMergeCommit":false,"messageTitle":"Fixed file not creating on corruption bug.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":25}}}]},{"date":"2023-09-03","commitResults":[{"hash":"66f4484ba3b6639556dcfc390c2e622ab01e2231","isMergeCommit":false,"messageTitle":"Add test cases for Add and Delete Command classes.","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"750bd871cc983fb8e8980669cd80621f8cb656ef","isMergeCommit":false,"messageTitle":"Created JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1},"java":{"insertions":1,"deletions":0}}},{"hash":"3886a3627e2605764cf8a207b6224f29c7c5975a","isMergeCommit":false,"messageTitle":"Added JavaDocs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":216,"deletions":24}}},{"hash":"f0df945b11247e209f79c7688af0db8f6a521058","isMergeCommit":false,"messageTitle":"Added JavaDocs.","messageBody":"Added for the rest of the files except for the test files.\n","fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":30}}},{"hash":"231c3b2e7ee29fe295038c946b25eae205e9ee49","isMergeCommit":false,"messageTitle":"Minor edit to follow coding standard.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"e60f954203c7543bed101770c06a2d0ea6710f82","isMergeCommit":false,"messageTitle":"Added Find command and function.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":5}}},{"hash":"6864e2d7d0f5681aabd400707a7c071c7a24882e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-codingstandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"102dc0897f4a00a9ef133e1f753646d220ae03b1","isMergeCommit":false,"messageTitle":"Minor edit to fit coding standard.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"443daba68306d325b4868389968a7de11eda9514","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-codingstandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"8eecf1776d30b558edf7936083499655f7c99b56","isMergeCommit":false,"messageTitle":"Minor comment change to JavaDocs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"9b41ee654ece9871f3afd06c5407a0677e1f8f69","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-javadoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"2a8510868e565272b105320ce9cb04c078e7c8d0","isMergeCommit":true,"messageTitle":"Minor comment change to JavaDocs.","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"flexibo":{"java":978,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":7,"txt":50}},"authorContributionVariance":{"flexibo":62347.36},"authorDisplayNameMap":{"flexibo":"CS2103T-W09-2 DEBB..NXIN"}} +{"authorDailyContributionsMap":{"flexibo":[{"date":"2023-08-23","commitResults":[{"hash":"8e7c9173ea98cd1ab93702d9391bc65ff19c89bd","isMergeCommit":false,"messageTitle":"Level-0 created greetings","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"b1072be813e2b3069535f3eac7d4ff08f3d0b650","isMergeCommit":false,"messageTitle":"Level-0 created greetings","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":9}}},{"hash":"c799dda454b500e319a672c41f0d2f7baa800090","isMergeCommit":false,"messageTitle":"Level-1 Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":4}}},{"hash":"a0753cdeed3dc2fc8b4973c61d9764df5196c44f","isMergeCommit":false,"messageTitle":"Level-2 Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"44ea01f12e9b96138ce201d79bd42e6a943dad52","isMergeCommit":false,"messageTitle":"Level-3 Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":16}}},{"hash":"f9f98b612c05b7784679a0c40e314a782e3c0812","isMergeCommit":false,"messageTitle":"Level 4 - ToDos, Events, Deadlines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":150,"deletions":25}}},{"hash":"41f13a0909c0f5b7e1f55911b867cac579b5cb4a","isMergeCommit":false,"messageTitle":"Level 4 - ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":7}}},{"hash":"67533c9e095d1a5736370af0efeaa31dee16873d","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":50,"deletions":0}}},{"hash":"dd35770df9a087ba1ea3dfdbc37a5c722cc620b9","isMergeCommit":false,"messageTitle":"Level 5 - Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":34}}},{"hash":"dcb0041ca8d55754809f0e272c1d04eb19be2ef3","isMergeCommit":false,"messageTitle":"Level 5 - Handle Errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"9dc42180fecddefb577dde1a8e50f2c1d7649287","isMergeCommit":false,"messageTitle":"Level 6 - Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"3bdfe2291b8192a74265e6152e470c8755674ca7","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"e2b7f0a0715ba8ec777b91937ff533d7be1af6d8","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"b9951deeab6f842968684657d746899f6952a4a2","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d204e81596e3dff8d43ddcb63fd6b8114c79fe2c","isMergeCommit":false,"messageTitle":"Level 7 Save, add to brranch levl 77777777777777777777777","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":13}}},{"hash":"09a6407f428cf993fd456f25c72120d224c7f92d","isMergeCommit":false,"messageTitle":"Level 7 Save, add to brranch levl 77777777777777777777777","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"be629557dea16fba063a4068232f423a1c483fb8","isMergeCommit":false,"messageTitle":"Level 7 Save, add to brranch levl 77777777777777777777777","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"5cc8ee4e031aab460a3c17b9d43836e025ca2051","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"82c616ad5001c9927f0b2c503e542373893256b8","isMergeCommit":false,"messageTitle":"lelve 8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":11}}},{"hash":"15268083424dbb70b7bb160e68c26c4971cb97e8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"6ec5229a330ee974199ec12108781101635b8ae7","isMergeCommit":false,"messageTitle":"Change code format to be more OOP friendly.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":606,"deletions":247},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"162101aba35f1448ec2185e42b48785d929aba47","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-moreoop\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"9954fe8dcdc827c2d4bdaae3d23c8c896ed6c7dc","isMergeCommit":false,"messageTitle":"Organized files to standard packages.","messageBody":"Created new packages for \"exception\", \"task\", and \"command\" for enhanced readability.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"2228b037873c37f466419c4a3f21bfae18aa183d","isMergeCommit":false,"messageTitle":"Removed Duke Welcome.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"7ebc8d745479e15a7cc7429fdc7e480254e90d1f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7052b53c6963e1d0082291aeca1680335ce906e4","isMergeCommit":false,"messageTitle":"Fixed file not creating on corruption bug.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":25}}}]},{"date":"2023-09-03","commitResults":[{"hash":"66f4484ba3b6639556dcfc390c2e622ab01e2231","isMergeCommit":false,"messageTitle":"Add test cases for Add and Delete Command classes.","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"750bd871cc983fb8e8980669cd80621f8cb656ef","isMergeCommit":false,"messageTitle":"Created JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1},"java":{"insertions":1,"deletions":0}}},{"hash":"3886a3627e2605764cf8a207b6224f29c7c5975a","isMergeCommit":false,"messageTitle":"Added JavaDocs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":216,"deletions":24}}},{"hash":"f0df945b11247e209f79c7688af0db8f6a521058","isMergeCommit":false,"messageTitle":"Added JavaDocs.","messageBody":"Added for the rest of the files except for the test files.\n","fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":30}}},{"hash":"231c3b2e7ee29fe295038c946b25eae205e9ee49","isMergeCommit":false,"messageTitle":"Minor edit to follow coding standard.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"e60f954203c7543bed101770c06a2d0ea6710f82","isMergeCommit":false,"messageTitle":"Added Find command and function.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":5}}},{"hash":"6864e2d7d0f5681aabd400707a7c071c7a24882e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-codingstandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"102dc0897f4a00a9ef133e1f753646d220ae03b1","isMergeCommit":false,"messageTitle":"Minor edit to fit coding standard.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"443daba68306d325b4868389968a7de11eda9514","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-codingstandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"8eecf1776d30b558edf7936083499655f7c99b56","isMergeCommit":false,"messageTitle":"Minor comment change to JavaDocs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"9b41ee654ece9871f3afd06c5407a0677e1f8f69","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-javadoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"2a8510868e565272b105320ce9cb04c078e7c8d0","isMergeCommit":true,"messageTitle":"Minor comment change to JavaDocs.","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"429eb9b37540cd8a4b8ede368ce24c00467159c4","isMergeCommit":false,"messageTitle":"Implement checkstyle, edit import statements order.","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":2},"java":{"insertions":47,"deletions":32}}},{"hash":"4f78a24c9f5ab0330d90e5f72d0736635870a3d9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-checkstyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"flexibo":{"java":993,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":12,"txt":50}},"authorContributionVariance":{"flexibo":56479.703},"authorDisplayNameMap":{"flexibo":"CS2103T-W09-2 DEBB..NXIN"}} diff --git a/freshcabbage123_ip_master/authorship.json b/freshcabbage123_ip_master/authorship.json index e029c10d..964db4e0 100644 --- a/freshcabbage123_ip_master/authorship.json +++ b/freshcabbage123_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":"freshcabbage123"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"checkstyle {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":" mainClass.set(\"Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"freshcabbage123":7}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"[E][ ] valid event (from: 30-08-2023 10:00 to: 31-08-2023 12:00)","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"[D][ ] valid deadline (by: 30-08-2023 12:00)","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] you","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freshcabbage123":3}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":" * The main class of the program.","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" private static final String BOT_NAME \u003d \"Snake CYQJ\";","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" private final TaskList taskList \u003d new TaskList(\"duke.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" private Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":" * Constructor for Duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" public Duke() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" this.ui \u003d new Ui(BOT_NAME);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" this.ui.showHelloMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" * Entry-point for the program. Displays a greeting, echos the user\u0027s input, and exits.","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" * @param args CLI arguments passed into the program.","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" Duke duke \u003d new Duke();","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" while (!input.equals(\"bye\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" Parser.parseCommand(input, duke.taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" Ui.showGoodbyeMessage();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"freshcabbage123":34,"-":4}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":" * duke.exception.DukeException class is a custom duke.exception class that extends Exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" * Constructor for duke.exception.DukeException.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" * @param message The error message.","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freshcabbage123":15}},{"path":"src/main/java/duke/exception/IllegalTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":" * duke.exception.IllegalTaskIndexException class is a custom duke.exception class that extends DukeException.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":" * It is thrown when the user inputs an invalid duke.task index.","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":" * @author Alan Lim","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"public class IllegalTaskIndexException extends DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" * Constructor for duke.exception.IllegalTaskIndexException.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" public IllegalTaskIndexException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" super(\"☹ OOPS!!! The duke.task index is invalid.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"freshcabbage123":15}},{"path":"src/main/java/duke/exception/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":" * duke.exception.InvalidArgumentException class is a custom duke.exception class that extends DukeException.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":" * It is thrown when the user inputs an invalid argument for a command.","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"public class InvalidArgumentException extends DukeException {","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" * Constructor for duke.exception.InvalidArgumentException.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" public InvalidArgumentException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freshcabbage123":14}},{"path":"src/main/java/duke/exception/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":" * duke.exception.UnknownCommandException class is a custom duke.exception class that extends DukeException.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":" * It is thrown when the user inputs an unknown command.","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":" * @author Alan Lim","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"public class UnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" * Constructor for duke.exception.UnknownCommandException.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" public UnknownCommandException() {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freshcabbage123":15}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"import duke.exception.UnknownCommandException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" * Parser class to parse user\u0027s input.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" * Select command to run.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" * @param input The user\u0027s input.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" public static void parseCommand(String input, TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" taskList.listTasks();","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" int index \u003d Integer.parseInt(input.substring(5));","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" taskList.markAsDone(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" int index \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" taskList.markAsUndone(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" } else if (input.startsWith(\"todo\") || input.startsWith(\"deadline\") || input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" taskList.addTask(input);","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" int index \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" taskList.deleteTask(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" String keyword \u003d input.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" taskList.findTasks(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"freshcabbage123"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"freshcabbage123"},"content":" Ui.showDottedLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":" Ui.showDottedLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"freshcabbage123":45}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" * Storage class to load and save data.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" private final Path filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" * Constructor for Storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" * @param filename The name of the file to load and save data.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" public Storage(String filename) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" this.filePath \u003d Paths.get(\".\", \"data\", filename);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" * Loads the data from the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" * @return The tasks loaded from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" * @throws IOException If an I/O error occurs.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":" public ArrayList\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":" Path directoryPath \u003d filePath.getParent();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":" if (!Files.exists(directoryPath)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"freshcabbage123"},"content":" Files.createDirectories(directoryPath);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"freshcabbage123"},"content":" // Check if file exists, if not create it","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":" if (!Files.exists(filePath)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"freshcabbage123"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"freshcabbage123"},"content":" // Read file and load data","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"freshcabbage123"},"content":" List\u003cString\u003e data;","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"freshcabbage123"},"content":" data \u003d Files.readAllLines(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"freshcabbage123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"An error occurred while reading the file: \" + e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"freshcabbage123"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"freshcabbage123"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"freshcabbage123"},"content":" for (String line : data) {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"freshcabbage123"},"content":" String[] parts \u003d line.split(\"\\\\]\", 3);","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"freshcabbage123"},"content":" if (parts.length \u003c 3) {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"Invalid duke.task format found in Hard Disk\");","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"freshcabbage123"},"content":" continue;","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"freshcabbage123"},"content":" char type \u003d parts[0].charAt(parts[0].length() - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"freshcabbage123"},"content":" char doneStatus \u003d parts[1].charAt(1);","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"freshcabbage123"},"content":" boolean isDone \u003d doneStatus \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"freshcabbage123"},"content":" String description \u003d parts[2].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"freshcabbage123"},"content":" Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"freshcabbage123"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"freshcabbage123"},"content":" switch (type) {","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"freshcabbage123"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"freshcabbage123"},"content":" task \u003d new ToDo(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"freshcabbage123"},"content":" if (isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"freshcabbage123"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"freshcabbage123"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"freshcabbage123"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"freshcabbage123"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"freshcabbage123"},"content":" String[] components \u003d description.split(\" \\\\(by: \");","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"freshcabbage123"},"content":" String deadlineDescription \u003d components[0].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"freshcabbage123"},"content":" String deadlineDateTime \u003d components[1].substring(0, components[1].length() - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"freshcabbage123"},"content":" task \u003d new Deadline(deadlineDescription, LocalDateTime.parse(deadlineDateTime, format));","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"freshcabbage123"},"content":" if (isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"freshcabbage123"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"freshcabbage123"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"freshcabbage123"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"freshcabbage123"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"freshcabbage123"},"content":" String[] eventParts \u003d description.split(\" \\\\(from: \");","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"freshcabbage123"},"content":" String eventDescription \u003d eventParts[0].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"freshcabbage123"},"content":" String[] eventDateTimes \u003d eventParts[1].split(\" to: \");","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"freshcabbage123"},"content":" String eventStartDateTime \u003d eventDateTimes[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"freshcabbage123"},"content":" String eventEndDateTime \u003d eventDateTimes[1].substring(0, eventDateTimes[1].length() - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"freshcabbage123"},"content":" task \u003d new Event(eventDescription,","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"freshcabbage123"},"content":" LocalDateTime.parse(eventStartDateTime, format),","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"freshcabbage123"},"content":" LocalDateTime.parse(eventEndDateTime, format));","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"freshcabbage123"},"content":" if (isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"freshcabbage123"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"freshcabbage123"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"freshcabbage123"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"freshcabbage123"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"Invalid duke.task type found in Hard Disk\");","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"freshcabbage123"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"freshcabbage123"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"freshcabbage123"},"content":" * Saves the data to the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"freshcabbage123"},"content":" * @param tasks The tasks to save.","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"freshcabbage123"},"content":" * @throws IOException If an I/O error occurs.","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"freshcabbage123"},"content":" public void save(List\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"freshcabbage123"},"content":" Path directoryPath \u003d filePath.getParent();","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"freshcabbage123"},"content":" if (!Files.exists(directoryPath)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"freshcabbage123"},"content":" Files.createDirectories(directoryPath);","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"freshcabbage123"},"content":" // Check if file exists, if not create it","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"freshcabbage123"},"content":" if (!Files.exists(filePath)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"freshcabbage123"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"freshcabbage123"},"content":" // Write data to file","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"freshcabbage123"},"content":" List\u003cString\u003e data \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"freshcabbage123"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"freshcabbage123"},"content":" data.add(task.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"freshcabbage123"},"content":" Files.write(filePath, data);","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"freshcabbage123"},"content":" * Deletes the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"freshcabbage123"},"content":" * @throws IOException If an I/O error occurs.","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"freshcabbage123"},"content":" public void delete() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"freshcabbage123"},"content":" Files.delete(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"freshcabbage123":137}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":" * Represents a deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" * The date of the deadline.","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" private final LocalDateTime dateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" * Creates a deadline with the given description and date.","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" * @param dateTime The date and time of the deadline.","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" public Deadline(String description, LocalDateTime dateTime) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" super.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" * Returns the string representation of the deadline.","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" * @return The string representation of the deadline.","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" String newDateTime \u003d dateTime.format(super.formatter);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" return \"[D]\" + super.toString() + \" (by: \" + newDateTime + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freshcabbage123":33}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":" * Represents an event.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" * The date of the event.","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" private final LocalDateTime startDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" private final LocalDateTime endDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":" * Creates an event with the given description and date.","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" * @param startDateTime The startDateTime of the event.","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" * @param endDateTime The endDateTime of the event.","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" public Event(String description, LocalDateTime startDateTime, LocalDateTime endDateTime) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" super.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" this.startDateTime \u003d startDateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" this.endDateTime \u003d endDateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" * Returns the string representation of the event.","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" * @return The string representation of the event.","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" String newStartDateTime \u003d startDateTime.format(super.formatter);","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" String newEndDateTime \u003d endDateTime.format(super.formatter);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" return \"[E]\" + super.toString() + \" (from: \" + newStartDateTime + \" to: \" + newEndDateTime + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freshcabbage123":38}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":" * Represents a task in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" * The description of the duke.task.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":" * Whether the duke.task is done.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" protected DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" * Returns the status icon of the duke.task.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" * @return The status icon of the duke.task.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" * Marks the duke.task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":" * Marks the duke.task as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"freshcabbage123"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"freshcabbage123"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"freshcabbage123"},"content":" * Returns the description of the duke.task.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"freshcabbage123"},"content":" * @return The description of the duke.task.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"freshcabbage123"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"freshcabbage123"},"content":" return description;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"freshcabbage123"},"content":" * Returns the description of the duke.task.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"freshcabbage123"},"content":" * @return The description of the duke.task.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"freshcabbage123"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"freshcabbage123"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"freshcabbage123"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freshcabbage123":61}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"import java.util.List;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":"import duke.exception.IllegalTaskIndexException;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":"public class TaskList {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" * Represents the type of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" public enum TaskType {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" TODO {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" public Task createTask(String details) {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" return new ToDo(details);","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" },","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" DEADLINE {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" public Task createTask(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" String[] split \u003d details.split(\" /by \");","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":" if (split.length !\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! The deadline format is incorrect. \"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":" + \"It should be: deadline \u003cname\u003e /by \u003cdate\u003e \u003ctime\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"freshcabbage123"},"content":" String taskName \u003d split[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"freshcabbage123"},"content":" String dateTime \u003d split[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":" return new Deadline(taskName, parseDateTime(dateTime));","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"freshcabbage123"},"content":" },","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"freshcabbage123"},"content":" EVENT {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"freshcabbage123"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"freshcabbage123"},"content":" public Task createTask(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"freshcabbage123"},"content":" String[] firstSplit \u003d details.split(\" /from \");","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"freshcabbage123"},"content":" String[] secondSplit \u003d firstSplit[firstSplit.length - 1].split(\" /to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"freshcabbage123"},"content":" if (firstSplit.length !\u003d 2 || secondSplit.length !\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"freshcabbage123"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! The event format is incorrect. \"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"freshcabbage123"},"content":" + \"It should be: event \u003cname\u003e /from \u003cdate\u003e \u003ctime\u003e /to \u003cdate\u003e \u003ctime\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"freshcabbage123"},"content":" String taskName \u003d firstSplit[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"freshcabbage123"},"content":" String startDateTime \u003d secondSplit[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"freshcabbage123"},"content":" String endDateTime \u003d secondSplit[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"freshcabbage123"},"content":" return new Event(taskName, parseDateTime(startDateTime), parseDateTime(endDateTime));","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"freshcabbage123"},"content":" };","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"freshcabbage123"},"content":" private static final DateTimeFormatter[] DATE_TIME_FORMATS \u003d {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"freshcabbage123"},"content":" DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"freshcabbage123"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"freshcabbage123"},"content":" DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HH:mm\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"freshcabbage123"},"content":" };","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"freshcabbage123"},"content":" * Creates a deadline duke.task.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"freshcabbage123"},"content":" * @param details The details of the deadline duke.task.","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"freshcabbage123"},"content":" * @return The deadline duke.task.","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"freshcabbage123"},"content":" * @throws InvalidArgumentException If the deadline task\u0027s format is invalid.","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"freshcabbage123"},"content":" public abstract Task createTask(String details) throws InvalidArgumentException;","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"freshcabbage123"},"content":" private static LocalDateTime parseDateTime(String dateTime) throws InvalidArgumentException {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"freshcabbage123"},"content":" for (DateTimeFormatter format: DATE_TIME_FORMATS) {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"freshcabbage123"},"content":" return LocalDateTime.parse(dateTime, format);","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"freshcabbage123"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"freshcabbage123"},"content":" // Do nothing","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"freshcabbage123"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! Your dateTime format is not supported!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"freshcabbage123"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"freshcabbage123"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"freshcabbage123"},"content":" * Constructor for TaskList.","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"freshcabbage123"},"content":" public TaskList(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"freshcabbage123"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"freshcabbage123"},"content":" this.tasks \u003d storage.load();","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"freshcabbage123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"freshcabbage123"},"content":" Ui.showErrorLoadingFromFileMessage();","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"freshcabbage123"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"freshcabbage123"},"content":" * Adds a task to the list of tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"freshcabbage123"},"content":" * @param command The command that the user inputted.","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"freshcabbage123"},"content":" * @throws InvalidArgumentException If the task\u0027s format is invalid.","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"freshcabbage123"},"content":" public void addTask(String command) throws InvalidArgumentException {","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"freshcabbage123"},"content":" String[] splitCommand \u003d command.split(\"\\\\s\", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"freshcabbage123"},"content":" if (splitCommand.length \u003c 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"freshcabbage123"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! The description cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"freshcabbage123"},"content":" String type \u003d splitCommand[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"freshcabbage123"},"content":" String taskDetails \u003d splitCommand[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"freshcabbage123"},"content":" TaskType taskType;","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"freshcabbage123"},"content":" taskType \u003d TaskType.valueOf(type.toUpperCase());","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"freshcabbage123"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"freshcabbage123"},"content":" throw new InvalidArgumentException(\"Bro your task type is unknown: \" + type);","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"freshcabbage123"},"content":" tasks.add(taskType.createTask(taskDetails));","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"freshcabbage123"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"freshcabbage123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"freshcabbage123"},"content":" Ui.showErrorSavingToFileMessage();","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"freshcabbage123"},"content":" Ui.showAddTaskMessage(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":130,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":131,"author":{"gitId":"freshcabbage123"},"content":" * Lists all the tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":132,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"freshcabbage123"},"content":" public void listTasks() {","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"freshcabbage123"},"content":" Ui.showListTasksMessage(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":136,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":138,"author":{"gitId":"freshcabbage123"},"content":" * Marks a duke.task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"freshcabbage123"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-24"},{"lineNumber":140,"author":{"gitId":"freshcabbage123"},"content":" * @throws IllegalTaskIndexException If the index is invalid.","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"freshcabbage123"},"content":" public void markAsDone(int index) throws IllegalTaskIndexException {","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"freshcabbage123"},"content":" if (index \u003e tasks.size() || index \u003c 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":144,"author":{"gitId":"freshcabbage123"},"content":" throw new IllegalTaskIndexException();","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":146,"author":{"gitId":"freshcabbage123"},"content":" Ui.showMarkAsDoneMessage(tasks, index);","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"freshcabbage123"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"freshcabbage123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"freshcabbage123"},"content":" Ui.showErrorSavingToFileMessage();","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":152,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":153,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":154,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":155,"author":{"gitId":"freshcabbage123"},"content":" * Marks a duke.task as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"freshcabbage123"},"content":" * @param index The index of the task to be marked as undone.","lastModifiedDate":"2023-08-24"},{"lineNumber":157,"author":{"gitId":"freshcabbage123"},"content":" * @throws IllegalTaskIndexException If the index is invalid.","lastModifiedDate":"2023-08-24"},{"lineNumber":158,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":159,"author":{"gitId":"freshcabbage123"},"content":" public void markAsUndone(int index) throws IllegalTaskIndexException {","lastModifiedDate":"2023-08-24"},{"lineNumber":160,"author":{"gitId":"freshcabbage123"},"content":" if (index \u003e tasks.size() || index \u003c 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":161,"author":{"gitId":"freshcabbage123"},"content":" throw new IllegalTaskIndexException();","lastModifiedDate":"2023-08-24"},{"lineNumber":162,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":163,"author":{"gitId":"freshcabbage123"},"content":" Ui.showMarkAsUndoneMessage(tasks, index);","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"freshcabbage123"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":166,"author":{"gitId":"freshcabbage123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":167,"author":{"gitId":"freshcabbage123"},"content":" Ui.showErrorSavingToFileMessage();","lastModifiedDate":"2023-08-28"},{"lineNumber":168,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":169,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":170,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":171,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":172,"author":{"gitId":"freshcabbage123"},"content":" * Delete a task from the list of tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":173,"author":{"gitId":"freshcabbage123"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-24"},{"lineNumber":174,"author":{"gitId":"freshcabbage123"},"content":" * @throws IllegalTaskIndexException If the index is invalid.","lastModifiedDate":"2023-08-24"},{"lineNumber":175,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":176,"author":{"gitId":"freshcabbage123"},"content":" public void deleteTask(int index) throws IllegalTaskIndexException {","lastModifiedDate":"2023-08-24"},{"lineNumber":177,"author":{"gitId":"freshcabbage123"},"content":" if (index \u003e tasks.size() || index \u003c 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":178,"author":{"gitId":"freshcabbage123"},"content":" throw new IllegalTaskIndexException();","lastModifiedDate":"2023-08-24"},{"lineNumber":179,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":180,"author":{"gitId":"freshcabbage123"},"content":" // Calls delete message from duke.ui.Ui class","lastModifiedDate":"2023-08-28"},{"lineNumber":181,"author":{"gitId":"freshcabbage123"},"content":" Ui.showDeleteTaskMessage(tasks, index);","lastModifiedDate":"2023-08-28"},{"lineNumber":182,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":183,"author":{"gitId":"freshcabbage123"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":184,"author":{"gitId":"freshcabbage123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":185,"author":{"gitId":"freshcabbage123"},"content":" Ui.showErrorSavingToFileMessage();","lastModifiedDate":"2023-08-28"},{"lineNumber":186,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":187,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":188,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":189,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"freshcabbage123"},"content":" * Delete all tasks from the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"freshcabbage123"},"content":" public void deleteAllTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"freshcabbage123"},"content":" tasks.clear();","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"freshcabbage123"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"freshcabbage123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"freshcabbage123"},"content":" Ui.showErrorSavingToFileMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"freshcabbage123"},"content":" * Find tasks with the given keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"freshcabbage123"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"freshcabbage123"},"content":" public void findTasks(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"freshcabbage123"},"content":" Ui.showDottedLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"freshcabbage123"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"There are no tasks in your list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"freshcabbage123"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"freshcabbage123"},"content":" int matchingTasks \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"freshcabbage123"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"freshcabbage123"},"content":" if (tasks.get(i).getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"freshcabbage123"},"content":" System.out.println((matchingTasks+1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"freshcabbage123"},"content":" matchingTasks++;","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"freshcabbage123"},"content":" if (matchingTasks \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"Sorry there are no matching tasks!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"freshcabbage123"},"content":" Ui.showDottedLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"freshcabbage123":224}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":" * Represents a todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":" * Creates a todo with the given description.","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" * @param description The description of the todo.","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" super.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":" * Returns the string representation of the todo.","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" * @return The string representation of the todo.","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freshcabbage123":23}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":" * Represents the user interface of the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" private final String name;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" public Ui(String name) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" * Prints the welcome message when the program starts.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" public void showHelloMessage() {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" showDottedLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"Hello! I\u0027m Snake CYQJ\");","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" showDottedLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" * Prints dotted line.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" public static void showDottedLine() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" * Prints the goodbye message.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":" public static void showGoodbyeMessage() {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":" Ui.showDottedLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"freshcabbage123"},"content":" Ui.showDottedLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"freshcabbage123"},"content":" * Prints the delete message.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"freshcabbage123"},"content":" * @param tasks the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"freshcabbage123"},"content":" * @param index the index of the task to be deleted","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"freshcabbage123"},"content":" public static void showDeleteTaskMessage(List\u003cTask\u003e tasks, int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"freshcabbage123"},"content":" showDottedLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"Noted. I\u0027ve removed this duke.task:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(tasks.get(index - 1));","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"freshcabbage123"},"content":" tasks.remove(index - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"freshcabbage123"},"content":" String placeholder \u003d tasks.size() \u003d\u003d 1 ? \"task\" : \"tasks\";","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" \" + placeholder + \" in the list.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"freshcabbage123"},"content":" showDottedLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"freshcabbage123"},"content":" * Prints the add task message.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"freshcabbage123"},"content":" * @param tasks the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"freshcabbage123"},"content":" public static void showAddTaskMessage(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"freshcabbage123"},"content":" showDottedLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"freshcabbage123"},"content":" String placeholder \u003d tasks.size() \u003d\u003d 1 ? \"task\" : \"tasks\";","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" \" + placeholder + \" in the list.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"freshcabbage123"},"content":" showDottedLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"freshcabbage123"},"content":" * Prints the list tasks message.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"freshcabbage123"},"content":" * @param tasks the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"freshcabbage123"},"content":" public static void showListTasksMessage(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"freshcabbage123"},"content":" showDottedLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"freshcabbage123"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"There are no tasks in your list.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"freshcabbage123"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"freshcabbage123"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"freshcabbage123"},"content":" System.out.println((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"freshcabbage123"},"content":" showDottedLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"freshcabbage123"},"content":" * Prints the done task message.","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"freshcabbage123"},"content":" * @param tasks the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"freshcabbage123"},"content":" * @param index the index of the completed task","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"freshcabbage123"},"content":" public static void showMarkAsDoneMessage(List\u003cTask\u003e tasks, int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"freshcabbage123"},"content":" showDottedLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"freshcabbage123"},"content":" tasks.get(index - 1).markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(tasks.get(index - 1));","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"freshcabbage123"},"content":" showDottedLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"freshcabbage123"},"content":" * Prints the undone task message.","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"freshcabbage123"},"content":" * @param tasks the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"freshcabbage123"},"content":" * @param index the index of the uncompleted task","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"freshcabbage123"},"content":" public static void showMarkAsUndoneMessage(List\u003cTask\u003e tasks, int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"freshcabbage123"},"content":" showDottedLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"freshcabbage123"},"content":" tasks.get(index - 1).markAsUndone();","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(tasks.get(index - 1));","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"freshcabbage123"},"content":" showDottedLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"freshcabbage123"},"content":" * Shows the error message when saving file.","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"freshcabbage123"},"content":" public static void showErrorSavingToFileMessage() {","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"Error saving data to file.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"freshcabbage123"},"content":" * Shows the error message when loading file.","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"freshcabbage123"},"content":" public static void showErrorLoadingFromFileMessage() {","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"Error loading data from file.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"freshcabbage123":128}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" public void testToString_shouldDisplayCorrectMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" LocalDateTime sampleDateTime \u003d LocalDateTime.of(2023, 8, 30, 15, 0); // Example date and time","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" Deadline deadline \u003d new Deadline(\"Sample Deadline\", sampleDateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":" String expectedToString \u003d \"[D][ ] Sample Deadline (by: 30-08-2023 15:00)\";","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" assertEquals(expectedToString, deadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" public void testToString_shouldDisplayCorrectMessage2() {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" LocalDateTime sampleDateTime \u003d LocalDateTime.of(2023, 9, 30, 15, 0); // Example date and time","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" Deadline deadline \u003d new Deadline(\"Sample Deadline\", sampleDateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" String expectedToString \u003d \"[D][ ] Sample Deadline (by: 30-09-2023 15:00)\";","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" assertEquals(expectedToString, deadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" public void testMarkAsDone_shouldDisplayCorrectMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" LocalDateTime sampleDateTime \u003d LocalDateTime.of(2023, 9, 30, 15, 0); // Example date and time","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" Deadline deadline \u003d new Deadline(\"Sample Deadline\", sampleDateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" assertFalse(deadline.isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" assertTrue(deadline.isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":" public void testMarkAsUndone_shouldDisplayCorrectMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"freshcabbage123"},"content":" LocalDateTime sampleDateTime \u003d LocalDateTime.of(2023, 9, 30, 15, 0); // Example date and time","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"freshcabbage123"},"content":" Deadline deadline \u003d new Deadline(\"Sample Deadline\", sampleDateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"freshcabbage123"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":" assertTrue(deadline.isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"freshcabbage123"},"content":" deadline.markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"freshcabbage123"},"content":" assertFalse(deadline.isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"freshcabbage123"},"content":" public void testGetStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"freshcabbage123"},"content":" LocalDateTime sampleDateTime \u003d LocalDateTime.of(2023, 9, 30, 15, 0); // Example date and time","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"freshcabbage123"},"content":" Deadline deadline \u003d new Deadline(\"Sample Deadline\", sampleDateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"freshcabbage123"},"content":" assertEquals(\" \", deadline.getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"freshcabbage123"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"freshcabbage123"},"content":" assertEquals(\"X\", deadline.getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freshcabbage123":55}},{"path":"src/test/java/duke/task/TasklistTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":"import duke.exception.IllegalTaskIndexException;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":"public class TasklistTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" private final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" @BeforeEach","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" public void setUpStreams() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" public void testAddTask_validTodo_shouldDisplayCorrectMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" TaskList taskList \u003d new TaskList(\"sample.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" assertDoesNotThrow(() -\u003e","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" taskList.addTask(\"todo This is a valid task\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" String expectedOutput \u003d \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" + \"[T][ ] This is a valid task\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" + \"Now you have 1 task in the list.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" + \"____________________________________________________________\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" assertEquals(expectedOutput, outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" taskList.deleteAllTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"freshcabbage123"},"content":" public void testAddTask_validEvent_shouldDisplayCorrectMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":" TaskList taskList \u003d new TaskList(\"sample.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"freshcabbage123"},"content":" assertDoesNotThrow(() -\u003e","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"freshcabbage123"},"content":" taskList.addTask(\"event valid event /from 2023-08-30 10:00 /to 2023-08-31 12:00\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"freshcabbage123"},"content":" String expectedOutput \u003d \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"freshcabbage123"},"content":" + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freshcabbage123"},"content":" + \"[E][ ] valid event (from: 30-08-2023 10:00 to: 31-08-2023 12:00)\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"freshcabbage123"},"content":" + \"Now you have 1 task in the list.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"freshcabbage123"},"content":" + \"____________________________________________________________\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"freshcabbage123"},"content":" assertEquals(expectedOutput, outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"freshcabbage123"},"content":" taskList.deleteAllTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"freshcabbage123"},"content":" public void testAddTask_validDeadline_shouldDisplayCorrectMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"freshcabbage123"},"content":" TaskList taskList \u003d new TaskList(\"sample.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"freshcabbage123"},"content":" assertDoesNotThrow(() -\u003e taskList.addTask(\"deadline valid deadline /by 2023-08-30 12:00\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"freshcabbage123"},"content":" String expectedOutput \u003d \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"freshcabbage123"},"content":" + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"freshcabbage123"},"content":" + \"[D][ ] valid deadline (by: 30-08-2023 12:00)\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"freshcabbage123"},"content":" + \"Now you have 1 task in the list.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"freshcabbage123"},"content":" + \"____________________________________________________________\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"freshcabbage123"},"content":" assertEquals(expectedOutput, outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"freshcabbage123"},"content":" taskList.deleteAllTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"freshcabbage123"},"content":" public void testMarkAsDone_invalidIndex_shouldThrowException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"freshcabbage123"},"content":" TaskList taskList \u003d new TaskList(\"sample.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"freshcabbage123"},"content":" assertThrows(IllegalTaskIndexException.class, () -\u003e taskList.markAsDone(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"freshcabbage123"},"content":" taskList.deleteAllTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"freshcabbage123"},"content":" public void testAddTask_invalidTaskType_shouldThrowException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"freshcabbage123"},"content":" TaskList taskList \u003d new TaskList(\"sample.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"freshcabbage123"},"content":" assertThrows(InvalidArgumentException.class, () -\u003e taskList.addTask(\"invalidTaskType some details\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"freshcabbage123"},"content":" taskList.deleteAllTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freshcabbage123":84}},{"path":"text-ui-test/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"[E][ ] 2101 team meeting (from: 05-09-2023 18:00 to: 08-09-2023 10:00)","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Go grocery shopping","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"[D][X] Finish project (by: 17-09-2023 23:59)","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"[D][ ] homework (by: 28-02-2023 18:00)","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"[D][X] homework (by: 19-02-2024 18:29)","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] read boook","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"[T][X] Read book","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Go grocery shopping","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"[D][ ] Finish project (by: 17-09-2023 23:59)","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Walk the dog","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Read book","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Go grocery shopping","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":"[D][ ] Finish project (by: 17-09-2023 23:59)","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Walk the dog","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Read book","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Go grocery shopping","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":"[D][ ] Finish project (by: 17-09-2023 23:59)","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Walk the dog","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freshcabbage123":18}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"todo Read book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"deadline submit 2103T lab /by 30-08-2023 2356","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"event 2101 team meeting /from 05-09-2023 /to Tuesday 10pm","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"todo Go grocery shopping","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"event Running /from 2023-Sep-10 /to 15:00 tomorrow","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"deadline Finish project /by 17-09-2023 23:59","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"todo Walk the dog","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"mark 5","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":"unmark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"unmark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":"event watch netflix again /from 19-4-2023 /to Tuesday 19:00","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":"deadline modreg round 9 /by Wedenesday 2023-09-25","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":"mark 7","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":"unmark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":"unmark 4","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":"event Dinner with the family /from 17-09-2024 /to 20:00 tomorrow","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freshcabbage123":27}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"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":"freshcabbage123"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"checkstyle {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"freshcabbage123"},"content":" mainClass.set(\"Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"freshcabbage123"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"freshcabbage123":20}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"[E][ ] valid event (from: 30-08-2023 10:00 to: 31-08-2023 12:00)","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"[D][ ] valid deadline (by: 30-08-2023 12:00)","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] my assignment","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"freshcabbage123":3}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"import duke.ui.Gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" * The main class of the program.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":"public class Duke {","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" private static final String BOT_NAME \u003d \"Snake CYQJ\";","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" private final TaskList taskList \u003d new TaskList(\"duke.txt\");","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":" private Ui ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" * Constructor for Duke.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" public Duke() {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" this.ui \u003d new Ui(BOT_NAME);","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" Application.launch(Gui.class, args);","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" * Returns the hello message.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" * @return the hello message","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" public String greet() {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" return this.ui.getHelloMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"freshcabbage123"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"freshcabbage123"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":" return Parser.parseCommand(input, this.taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"freshcabbage123":45}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":" * duke.exception.DukeException class is a custom duke.exception class that extends Exception.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" * Constructor for duke.exception.DukeException.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" * @param message The error message.","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freshcabbage123":15}},{"path":"src/main/java/duke/exception/IllegalTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":" * duke.exception.IllegalTaskIndexException class is a custom duke.exception class that extends DukeException.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":" * It is thrown when the user inputs an invalid duke.task index.","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":" * @author Alan Lim","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"public class IllegalTaskIndexException extends DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" * Constructor for duke.exception.IllegalTaskIndexException.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" public IllegalTaskIndexException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" super(\"☹ OOPS!!! The duke.task index is invalid.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"freshcabbage123":15}},{"path":"src/main/java/duke/exception/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":" * duke.exception.InvalidArgumentException class is a custom duke.exception class that extends DukeException.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":" * It is thrown when the user inputs an invalid argument for a command.","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"public class InvalidArgumentException extends DukeException {","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" * Constructor for duke.exception.InvalidArgumentException.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" public InvalidArgumentException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freshcabbage123":14}},{"path":"src/main/java/duke/exception/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":" * duke.exception.UnknownCommandException class is a custom duke.exception class that extends DukeException.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":" * It is thrown when the user inputs an unknown command.","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":" * @author Alan Lim","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"public class UnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" * Constructor for duke.exception.UnknownCommandException.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" public UnknownCommandException() {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freshcabbage123":15}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"import duke.exception.UnknownCommandException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" * Parser class to parse user\u0027s input.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" * Select command to run.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":" * @param input The user\u0027s input.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" public static String parseCommand(String input, TaskList taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" String trimmedInput \u003d input.trim();","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" output.append(taskList.listTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" String rest \u003d trimmedInput.substring(4).trim();","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" if (rest.isEmpty()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" throw new InvalidArgumentException(\"The \u0027mark\u0027 command must be followed by a task index.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" int index \u003d Integer.parseInt(input.substring(5));","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" output.append(taskList.markAsDone(index));","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" String rest \u003d trimmedInput.substring(6).trim();","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" if (rest.isEmpty()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" throw new InvalidArgumentException(\"The \u0027unmark\u0027 command must be followed by a task index.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":" int index \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":" output.append(taskList.markAsUndone(index));","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"freshcabbage123"},"content":" } else if (input.startsWith(\"todo\") || input.startsWith(\"deadline\") || input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"freshcabbage123"},"content":" output.append(taskList.addTask(input));","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"freshcabbage123"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":" String rest \u003d trimmedInput.substring(6).trim();","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"freshcabbage123"},"content":" if (rest.isEmpty()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"freshcabbage123"},"content":" throw new InvalidArgumentException(\"The \u0027delete\u0027 command must be followed by a task index.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"freshcabbage123"},"content":" int index \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"freshcabbage123"},"content":" output.append(taskList.deleteTask(index));","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"freshcabbage123"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"freshcabbage123"},"content":" String rest \u003d trimmedInput.substring(4).trim();","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"freshcabbage123"},"content":" if (rest.isEmpty()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"freshcabbage123"},"content":" throw new InvalidArgumentException(\"The \u0027find\u0027 command must be followed by a keyword.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"freshcabbage123"},"content":" String keyword \u003d input.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"freshcabbage123"},"content":" output.append(taskList.findTasks(keyword));","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"freshcabbage123"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"freshcabbage123"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"freshcabbage123"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"freshcabbage123"},"content":" output.append(Ui.getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"freshcabbage123"},"content":" output.append(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"freshcabbage123"},"content":" output.append(Ui.getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"freshcabbage123"},"content":" return output.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"freshcabbage123":65}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" * Storage class to load and save data.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" private final Path filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" * Constructor for Storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" * @param filename The name of the file to load and save data.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" public Storage(String filename) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" this.filePath \u003d Paths.get(\".\", \"data\", filename);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" * Loads the data from the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" * @return The tasks loaded from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" * @throws IOException If an I/O error occurs.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":" public ArrayList\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":" Path directoryPath \u003d filePath.getParent();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":" if (!Files.exists(directoryPath)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"freshcabbage123"},"content":" Files.createDirectories(directoryPath);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"freshcabbage123"},"content":" // Check if file exists, if not create it","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":" if (!Files.exists(filePath)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"freshcabbage123"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"freshcabbage123"},"content":" // Read file and load data","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"freshcabbage123"},"content":" List\u003cString\u003e data;","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"freshcabbage123"},"content":" data \u003d Files.readAllLines(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"freshcabbage123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"An error occurred while reading the file: \" + e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"freshcabbage123"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"freshcabbage123"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"freshcabbage123"},"content":" for (String line : data) {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"freshcabbage123"},"content":" String[] parts \u003d line.split(\"\\\\]\", 3);","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"freshcabbage123"},"content":" if (parts.length \u003c 3) {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"Invalid duke.task format found in Hard Disk\");","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"freshcabbage123"},"content":" continue;","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"freshcabbage123"},"content":" char type \u003d parts[0].charAt(parts[0].length() - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"freshcabbage123"},"content":" char doneStatus \u003d parts[1].charAt(1);","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"freshcabbage123"},"content":" boolean isDone \u003d doneStatus \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"freshcabbage123"},"content":" String description \u003d parts[2].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"freshcabbage123"},"content":" Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"freshcabbage123"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"freshcabbage123"},"content":" switch (type) {","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"freshcabbage123"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"freshcabbage123"},"content":" task \u003d new ToDo(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"freshcabbage123"},"content":" if (isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"freshcabbage123"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"freshcabbage123"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"freshcabbage123"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"freshcabbage123"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"freshcabbage123"},"content":" String[] components \u003d description.split(\" \\\\(by: \");","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"freshcabbage123"},"content":" String deadlineDescription \u003d components[0].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"freshcabbage123"},"content":" String deadlineDateTime \u003d components[1].substring(0, components[1].length() - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"freshcabbage123"},"content":" task \u003d new Deadline(deadlineDescription, LocalDateTime.parse(deadlineDateTime, format));","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"freshcabbage123"},"content":" if (isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"freshcabbage123"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"freshcabbage123"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"freshcabbage123"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"freshcabbage123"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"freshcabbage123"},"content":" String[] eventParts \u003d description.split(\" \\\\(from: \");","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"freshcabbage123"},"content":" String eventDescription \u003d eventParts[0].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"freshcabbage123"},"content":" String[] eventDateTimes \u003d eventParts[1].split(\" to: \");","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"freshcabbage123"},"content":" String eventStartDateTime \u003d eventDateTimes[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"freshcabbage123"},"content":" String eventEndDateTime \u003d eventDateTimes[1].substring(0, eventDateTimes[1].length() - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"freshcabbage123"},"content":" task \u003d new Event(eventDescription,","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"freshcabbage123"},"content":" LocalDateTime.parse(eventStartDateTime, format),","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"freshcabbage123"},"content":" LocalDateTime.parse(eventEndDateTime, format));","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"freshcabbage123"},"content":" if (isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"freshcabbage123"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"freshcabbage123"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"freshcabbage123"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"freshcabbage123"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"freshcabbage123"},"content":" System.out.println(\"Invalid duke.task type found in Hard Disk\");","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"freshcabbage123"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"freshcabbage123"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"freshcabbage123"},"content":" * Saves the data to the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"freshcabbage123"},"content":" * @param tasks The tasks to save.","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"freshcabbage123"},"content":" * @throws IOException If an I/O error occurs.","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"freshcabbage123"},"content":" public void save(List\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"freshcabbage123"},"content":" Path directoryPath \u003d filePath.getParent();","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"freshcabbage123"},"content":" if (!Files.exists(directoryPath)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"freshcabbage123"},"content":" Files.createDirectories(directoryPath);","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"freshcabbage123"},"content":" // Check if file exists, if not create it","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"freshcabbage123"},"content":" if (!Files.exists(filePath)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"freshcabbage123"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"freshcabbage123"},"content":" // Write data to file","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"freshcabbage123"},"content":" List\u003cString\u003e data \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"freshcabbage123"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"freshcabbage123"},"content":" data.add(task.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"freshcabbage123"},"content":" Files.write(filePath, data);","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"freshcabbage123"},"content":" * Deletes the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"freshcabbage123"},"content":" * @throws IOException If an I/O error occurs.","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"freshcabbage123"},"content":" public void delete() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"freshcabbage123"},"content":" Files.delete(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"freshcabbage123":137}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":" * Represents a deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" * The date of the deadline.","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" private final LocalDateTime dateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" * Creates a deadline with the given description and date.","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" * @param dateTime The date and time of the deadline.","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" public Deadline(String description, LocalDateTime dateTime) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" super.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" * Returns the string representation of the deadline.","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" * @return The string representation of the deadline.","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" String newDateTime \u003d dateTime.format(super.formatter);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" return \"[D]\" + super.toString() + \" (by: \" + newDateTime + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freshcabbage123":33}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":" * Represents an event.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" * The date of the event.","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" private final LocalDateTime startDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" private final LocalDateTime endDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":" * Creates an event with the given description and date.","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" * @param startDateTime The startDateTime of the event.","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" * @param endDateTime The endDateTime of the event.","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" public Event(String description, LocalDateTime startDateTime, LocalDateTime endDateTime) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" super.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" this.startDateTime \u003d startDateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" this.endDateTime \u003d endDateTime;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" * Returns the string representation of the event.","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" * @return The string representation of the event.","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" String newStartDateTime \u003d startDateTime.format(super.formatter);","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" String newEndDateTime \u003d endDateTime.format(super.formatter);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" return \"[E]\" + super.toString() + \" (from: \" + newStartDateTime + \" to: \" + newEndDateTime + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freshcabbage123":38}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":" * Represents a task in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" * The description of the duke.task.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":" * Whether the duke.task is done.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" protected DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" * Returns the status icon of the duke.task.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" * @return The status icon of the duke.task.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" * Marks the duke.task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":" * Marks the duke.task as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"freshcabbage123"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"freshcabbage123"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"freshcabbage123"},"content":" * Returns the description of the duke.task.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"freshcabbage123"},"content":" * @return The description of the duke.task.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"freshcabbage123"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"freshcabbage123"},"content":" return description;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"freshcabbage123"},"content":" * Returns the description of the duke.task.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"freshcabbage123"},"content":" * @return The description of the duke.task.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"freshcabbage123"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"freshcabbage123"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"freshcabbage123"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freshcabbage123":61}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"import java.util.List;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":"import duke.exception.IllegalTaskIndexException;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":"public class TaskList {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" * Represents the type of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" public enum TaskType {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" TODO {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" public Task createTask(String details) {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" return new ToDo(details);","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" },","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" DEADLINE {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" public Task createTask(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" String[] split \u003d details.split(\" /by \");","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":" if (split.length !\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! The deadline format is incorrect. \"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":" + \"It should be: deadline \u003cname\u003e /by \u003cdate\u003e \u003ctime\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"freshcabbage123"},"content":" String taskName \u003d split[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"freshcabbage123"},"content":" String dateTime \u003d split[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":" return new Deadline(taskName, parseDateTime(dateTime));","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"freshcabbage123"},"content":" },","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"freshcabbage123"},"content":" EVENT {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"freshcabbage123"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"freshcabbage123"},"content":" public Task createTask(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"freshcabbage123"},"content":" String[] firstSplit \u003d details.split(\" /from \");","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"freshcabbage123"},"content":" String[] secondSplit \u003d firstSplit[firstSplit.length - 1].split(\" /to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"freshcabbage123"},"content":" if (firstSplit.length !\u003d 2 || secondSplit.length !\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"freshcabbage123"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! The event format is incorrect. \"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"freshcabbage123"},"content":" + \"It should be: event \u003cname\u003e /from \u003cdate\u003e \u003ctime\u003e /to \u003cdate\u003e \u003ctime\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"freshcabbage123"},"content":" String taskName \u003d firstSplit[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"freshcabbage123"},"content":" String startDateTime \u003d secondSplit[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"freshcabbage123"},"content":" String endDateTime \u003d secondSplit[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"freshcabbage123"},"content":" return new Event(taskName, parseDateTime(startDateTime), parseDateTime(endDateTime));","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"freshcabbage123"},"content":" };","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"freshcabbage123"},"content":" private static final DateTimeFormatter[] DATE_TIME_FORMATS \u003d {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"freshcabbage123"},"content":" DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"freshcabbage123"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"freshcabbage123"},"content":" DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HH:mm\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"freshcabbage123"},"content":" };","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"freshcabbage123"},"content":" * Creates a deadline duke.task.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"freshcabbage123"},"content":" * @param details The details of the deadline duke.task.","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"freshcabbage123"},"content":" * @return The deadline duke.task.","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"freshcabbage123"},"content":" * @throws InvalidArgumentException If the deadline task\u0027s format is invalid.","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"freshcabbage123"},"content":" public abstract Task createTask(String details) throws InvalidArgumentException;","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"freshcabbage123"},"content":" private static LocalDateTime parseDateTime(String dateTime) throws InvalidArgumentException {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"freshcabbage123"},"content":" for (DateTimeFormatter format: DATE_TIME_FORMATS) {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"freshcabbage123"},"content":" return LocalDateTime.parse(dateTime, format);","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"freshcabbage123"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"freshcabbage123"},"content":" // Do nothing","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"freshcabbage123"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! Your dateTime format is not supported!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"freshcabbage123"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"freshcabbage123"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"freshcabbage123"},"content":" * Constructor for TaskList.","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"freshcabbage123"},"content":" public TaskList(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"freshcabbage123"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"freshcabbage123"},"content":" this.tasks \u003d storage.load();","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"freshcabbage123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"freshcabbage123"},"content":" Ui.getErrorLoadingFromFileMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"freshcabbage123"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"freshcabbage123"},"content":" * Adds a task to the list of tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"freshcabbage123"},"content":" * @param command The command that the user inputted.","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"freshcabbage123"},"content":" * @return The add task message.","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"freshcabbage123"},"content":" * @throws InvalidArgumentException If the task\u0027s format is invalid.","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"freshcabbage123"},"content":" public String addTask(String command) throws InvalidArgumentException {","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"freshcabbage123"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"freshcabbage123"},"content":" String[] splitCommand \u003d command.split(\"\\\\s\", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"freshcabbage123"},"content":" if (splitCommand.length \u003c 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"freshcabbage123"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! The description cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"freshcabbage123"},"content":" String type \u003d splitCommand[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"freshcabbage123"},"content":" String taskDetails \u003d splitCommand[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"freshcabbage123"},"content":" TaskType taskType;","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"freshcabbage123"},"content":" taskType \u003d TaskType.valueOf(type.toUpperCase());","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"freshcabbage123"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"freshcabbage123"},"content":" throw new InvalidArgumentException(\"Bro your task type is unknown: \" + type);","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"freshcabbage123"},"content":" tasks.add(taskType.createTask(taskDetails));","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"freshcabbage123"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"freshcabbage123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"freshcabbage123"},"content":" output.append(Ui.getErrorSavingToFileMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"freshcabbage123"},"content":" output.append(Ui.getAddTaskMessage(tasks));","lastModifiedDate":"2023-09-06"},{"lineNumber":129,"author":{"gitId":"freshcabbage123"},"content":" return output.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":131,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":132,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"freshcabbage123"},"content":" * Lists all the tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"freshcabbage123"},"content":" * @return The list tasks message.","lastModifiedDate":"2023-09-06"},{"lineNumber":135,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":136,"author":{"gitId":"freshcabbage123"},"content":" public String listTasks() {","lastModifiedDate":"2023-09-06"},{"lineNumber":137,"author":{"gitId":"freshcabbage123"},"content":" return Ui.getListTasksMessage(tasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":139,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":140,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"freshcabbage123"},"content":" * Marks a duke.task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"freshcabbage123"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"freshcabbage123"},"content":" * @return The mark as done message.","lastModifiedDate":"2023-09-06"},{"lineNumber":144,"author":{"gitId":"freshcabbage123"},"content":" * @throws IllegalTaskIndexException If the index is invalid.","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":146,"author":{"gitId":"freshcabbage123"},"content":" public String markAsDone(int index) throws IllegalTaskIndexException {","lastModifiedDate":"2023-09-06"},{"lineNumber":147,"author":{"gitId":"freshcabbage123"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":148,"author":{"gitId":"freshcabbage123"},"content":" if (index \u003e tasks.size() || index \u003c 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":149,"author":{"gitId":"freshcabbage123"},"content":" throw new IllegalTaskIndexException();","lastModifiedDate":"2023-08-24"},{"lineNumber":150,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":151,"author":{"gitId":"freshcabbage123"},"content":" output.append(Ui.getMarkAsDoneMessage(tasks, index));","lastModifiedDate":"2023-09-06"},{"lineNumber":152,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":153,"author":{"gitId":"freshcabbage123"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"freshcabbage123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"freshcabbage123"},"content":" output.append(Ui.getErrorSavingToFileMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":156,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"freshcabbage123"},"content":" return output.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":158,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":159,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":160,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":161,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":162,"author":{"gitId":"freshcabbage123"},"content":" * Marks a duke.task as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"freshcabbage123"},"content":" * @param index The index of the task to be marked as undone.","lastModifiedDate":"2023-08-24"},{"lineNumber":164,"author":{"gitId":"freshcabbage123"},"content":" * @return The mark as undone message.","lastModifiedDate":"2023-09-06"},{"lineNumber":165,"author":{"gitId":"freshcabbage123"},"content":" * @throws IllegalTaskIndexException If the index is invalid.","lastModifiedDate":"2023-08-24"},{"lineNumber":166,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":167,"author":{"gitId":"freshcabbage123"},"content":" public String markAsUndone(int index) throws IllegalTaskIndexException {","lastModifiedDate":"2023-09-06"},{"lineNumber":168,"author":{"gitId":"freshcabbage123"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":169,"author":{"gitId":"freshcabbage123"},"content":" if (index \u003e tasks.size() || index \u003c 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":170,"author":{"gitId":"freshcabbage123"},"content":" throw new IllegalTaskIndexException();","lastModifiedDate":"2023-08-24"},{"lineNumber":171,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":172,"author":{"gitId":"freshcabbage123"},"content":" output.append(Ui.getMarkAsUndoneMessage(tasks, index));","lastModifiedDate":"2023-09-06"},{"lineNumber":173,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":174,"author":{"gitId":"freshcabbage123"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":175,"author":{"gitId":"freshcabbage123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":176,"author":{"gitId":"freshcabbage123"},"content":" output.append(Ui.getErrorSavingToFileMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":177,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":178,"author":{"gitId":"freshcabbage123"},"content":" return output.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":179,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":180,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":181,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":182,"author":{"gitId":"freshcabbage123"},"content":" * Delete a task from the list of tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":183,"author":{"gitId":"freshcabbage123"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-24"},{"lineNumber":184,"author":{"gitId":"freshcabbage123"},"content":" * @return The delete message.","lastModifiedDate":"2023-09-06"},{"lineNumber":185,"author":{"gitId":"freshcabbage123"},"content":" * @throws IllegalTaskIndexException If the index is invalid.","lastModifiedDate":"2023-08-24"},{"lineNumber":186,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":187,"author":{"gitId":"freshcabbage123"},"content":" public String deleteTask(int index) throws IllegalTaskIndexException {","lastModifiedDate":"2023-09-06"},{"lineNumber":188,"author":{"gitId":"freshcabbage123"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":189,"author":{"gitId":"freshcabbage123"},"content":" if (index \u003e tasks.size() || index \u003c 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":190,"author":{"gitId":"freshcabbage123"},"content":" throw new IllegalTaskIndexException();","lastModifiedDate":"2023-08-24"},{"lineNumber":191,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":192,"author":{"gitId":"freshcabbage123"},"content":" // Calls delete message from duke.ui.Ui class","lastModifiedDate":"2023-08-28"},{"lineNumber":193,"author":{"gitId":"freshcabbage123"},"content":" output.append(Ui.getDeleteTaskMessage(tasks, index));","lastModifiedDate":"2023-09-06"},{"lineNumber":194,"author":{"gitId":"freshcabbage123"},"content":" tasks.remove(index - 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":195,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":196,"author":{"gitId":"freshcabbage123"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":197,"author":{"gitId":"freshcabbage123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":198,"author":{"gitId":"freshcabbage123"},"content":" output.append(Ui.getErrorSavingToFileMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":199,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":200,"author":{"gitId":"freshcabbage123"},"content":" return output.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":201,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":202,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":203,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"freshcabbage123"},"content":" * Delete all tasks from the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"freshcabbage123"},"content":" public void deleteAllTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"freshcabbage123"},"content":" tasks.clear();","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"freshcabbage123"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"freshcabbage123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"freshcabbage123"},"content":" Ui.getErrorSavingToFileMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":212,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"freshcabbage123"},"content":" * Find tasks with the given keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"freshcabbage123"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"freshcabbage123"},"content":" public String findTasks(String keyword) {","lastModifiedDate":"2023-09-06"},{"lineNumber":220,"author":{"gitId":"freshcabbage123"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":221,"author":{"gitId":"freshcabbage123"},"content":" output.append(Ui.getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":222,"author":{"gitId":"freshcabbage123"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"freshcabbage123"},"content":" output.append(\"There are no tasks in your list.\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":224,"author":{"gitId":"freshcabbage123"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"freshcabbage123"},"content":" output.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":226,"author":{"gitId":"freshcabbage123"},"content":" int matchingTasks \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"freshcabbage123"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"freshcabbage123"},"content":" if (tasks.get(i).getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"freshcabbage123"},"content":" output.append((matchingTasks + 1) + \".\" + tasks.get(i) + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":230,"author":{"gitId":"freshcabbage123"},"content":" matchingTasks++;","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"freshcabbage123"},"content":" if (matchingTasks \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"freshcabbage123"},"content":" output.append(\"Sorry there are no matching tasks!\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":235,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":237,"author":{"gitId":"freshcabbage123"},"content":" output.append(Ui.getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":238,"author":{"gitId":"freshcabbage123"},"content":" return output.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":239,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":240,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"freshcabbage123":240}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":" * Represents a todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":" * Creates a todo with the given description.","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" * @param description The description of the todo.","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" super.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":" * Returns the string representation of the todo.","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" * @return The string representation of the todo.","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freshcabbage123":23}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" private Label dialog;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":" dialog.setWrapText(true);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"freshcabbage123"},"content":" dialog.setMinSize(Label.USE_PREF_SIZE, Label.USE_PREF_SIZE);","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"freshcabbage123"},"content":" dialog.setPrefSize(250, 180);","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"freshcabbage123"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"freshcabbage123"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"freshcabbage123"},"content":" private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"freshcabbage123"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"freshcabbage123"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"freshcabbage123"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"freshcabbage123"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"freshcabbage123"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"freshcabbage123"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"freshcabbage123"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"freshcabbage123"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"freshcabbage123"},"content":" db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"freshcabbage123"},"content":" return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"freshcabbage123":64}},{"path":"src/main/java/duke/ui/Gui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"public class Gui extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Gui.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"freshcabbage123":32}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" * Controller for duke.ui.MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" * Initializes the main window.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" public void initialize() {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" String defaultGreeting \u003d duke.greet();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":" DialogBox.getDukeDialog(defaultGreeting, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"freshcabbage123"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"freshcabbage123"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"freshcabbage123"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"freshcabbage123"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"freshcabbage123"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"freshcabbage123"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"freshcabbage123"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"freshcabbage123"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"freshcabbage123"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"freshcabbage123"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"freshcabbage123"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"freshcabbage123"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"freshcabbage123":59}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":" * Represents the user interface of the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" private final String name;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" public Ui(String name) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" * Prints the welcome message when the program starts.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" public String getHelloMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" output.append(getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" output.append(\"Hello! I\u0027m \" + this.name + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" output.append(\"What can I do for you?\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" output.append(getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" return output.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" * Prints dotted line with new line.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" public static String getDottedLine() {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" return \"________________________\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":" * Prints the goodbye message.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":" * @return the goodbye message","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"freshcabbage123"},"content":" public static String getGoodbyeMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"freshcabbage123"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":" output.append(getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"freshcabbage123"},"content":" output.append(\"Bye. Hope to see you again soon!\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"freshcabbage123"},"content":" output.append(getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"freshcabbage123"},"content":" return output.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"freshcabbage123"},"content":" * Prints the delete message.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"freshcabbage123"},"content":" * @param tasks the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"freshcabbage123"},"content":" * @param index the index of the task to be deleted","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"freshcabbage123"},"content":" * @return the delete message","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"freshcabbage123"},"content":" public static String getDeleteTaskMessage(List\u003cTask\u003e tasks, int index) {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"freshcabbage123"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"freshcabbage123"},"content":" output.append(getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"freshcabbage123"},"content":" output.append(\"Noted. I\u0027ve removed this duke.task:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"freshcabbage123"},"content":" output.append(tasks.get(index - 1) + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"freshcabbage123"},"content":" String placeholder \u003d tasks.size() \u003d\u003d 1 ? \"task\" : \"tasks\";","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"freshcabbage123"},"content":" output.append(\"Now you have \" + tasks.size() + \" \" + placeholder + \" in the list.\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"freshcabbage123"},"content":" output.append(getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"freshcabbage123"},"content":" return output.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"freshcabbage123"},"content":" * Prints the add task message.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"freshcabbage123"},"content":" * @param tasks the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"freshcabbage123"},"content":" * @return the add task message","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"freshcabbage123"},"content":" public static String getAddTaskMessage(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"freshcabbage123"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"freshcabbage123"},"content":" output.append(getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"freshcabbage123"},"content":" output.append(\"Got it. I\u0027ve added this duke.task:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"freshcabbage123"},"content":" output.append(tasks.get(tasks.size() - 1) + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"freshcabbage123"},"content":" String placeholder \u003d tasks.size() \u003d\u003d 1 ? \"task\" : \"tasks\";","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"freshcabbage123"},"content":" output.append(\"Now you have \" + tasks.size() + \" \" + placeholder + \" in the list.\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"freshcabbage123"},"content":" output.append(getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"freshcabbage123"},"content":" return output.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"freshcabbage123"},"content":" * Prints the list tasks message.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"freshcabbage123"},"content":" * @param tasks the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"freshcabbage123"},"content":" * @return the list tasks message","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"freshcabbage123"},"content":" public static String getListTasksMessage(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"freshcabbage123"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"freshcabbage123"},"content":" output.append(getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"freshcabbage123"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"freshcabbage123"},"content":" output.append(\"There are no tasks in your list.\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"freshcabbage123"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"freshcabbage123"},"content":" output.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"freshcabbage123"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"freshcabbage123"},"content":" output.append((i + 1) + \".\" + tasks.get(i) + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"freshcabbage123"},"content":" output.append(getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"freshcabbage123"},"content":" return output.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"freshcabbage123"},"content":" * Prints the done task message.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"freshcabbage123"},"content":" * @param tasks the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"freshcabbage123"},"content":" * @param index the index of the completed task","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"freshcabbage123"},"content":" * @return the done task message","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"freshcabbage123"},"content":" public static String getMarkAsDoneMessage(List\u003cTask\u003e tasks, int index) {","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"freshcabbage123"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"freshcabbage123"},"content":" output.append(getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"freshcabbage123"},"content":" output.append(\"Nice! I\u0027ve marked this task as done:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"freshcabbage123"},"content":" tasks.get(index - 1).markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"freshcabbage123"},"content":" output.append(tasks.get(index - 1) + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"freshcabbage123"},"content":" output.append(getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"freshcabbage123"},"content":" return output.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"freshcabbage123"},"content":" * Prints the undone task message.","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"freshcabbage123"},"content":" * @param tasks the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"freshcabbage123"},"content":" * @param index the index of the uncompleted task","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"freshcabbage123"},"content":" * @return the undone task message","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"freshcabbage123"},"content":" public static String getMarkAsUndoneMessage(List\u003cTask\u003e tasks, int index) {","lastModifiedDate":"2023-09-06"},{"lineNumber":124,"author":{"gitId":"freshcabbage123"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":125,"author":{"gitId":"freshcabbage123"},"content":" output.append(getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"freshcabbage123"},"content":" output.append(\"OK, I\u0027ve marked this task as not done yet:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"freshcabbage123"},"content":" tasks.get(index - 1).markAsUndone();","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"freshcabbage123"},"content":" output.append(tasks.get(index - 1) + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":129,"author":{"gitId":"freshcabbage123"},"content":" output.append(getDottedLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"freshcabbage123"},"content":" return output.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":131,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"freshcabbage123"},"content":" * Shows the error message when saving file.","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"freshcabbage123"},"content":" * @return the error message when saving file","lastModifiedDate":"2023-09-06"},{"lineNumber":136,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"freshcabbage123"},"content":" public static String getErrorSavingToFileMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"freshcabbage123"},"content":" return \"Error saving data to file.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"freshcabbage123"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"freshcabbage123"},"content":" * Shows the error message when loading file.","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"freshcabbage123"},"content":" * @return the error message when loading file","lastModifiedDate":"2023-09-06"},{"lineNumber":144,"author":{"gitId":"freshcabbage123"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"freshcabbage123"},"content":" public static String getErrorLoadingFromFileMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":146,"author":{"gitId":"freshcabbage123"},"content":" return \"Error loading data from file.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":147,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"freshcabbage123":150}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"freshcabbage123":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"freshcabbage123":19}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":" public void testToString_shouldDisplayCorrectMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":" LocalDateTime sampleDateTime \u003d LocalDateTime.of(2023, 8, 30, 15, 0); // Example date and time","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":" Deadline deadline \u003d new Deadline(\"Sample Deadline\", sampleDateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":" String expectedToString \u003d \"[D][ ] Sample Deadline (by: 30-08-2023 15:00)\";","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" assertEquals(expectedToString, deadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" public void testToString_shouldDisplayCorrectMessage2() {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" LocalDateTime sampleDateTime \u003d LocalDateTime.of(2023, 9, 30, 15, 0); // Example date and time","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":" Deadline deadline \u003d new Deadline(\"Sample Deadline\", sampleDateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" String expectedToString \u003d \"[D][ ] Sample Deadline (by: 30-09-2023 15:00)\";","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" assertEquals(expectedToString, deadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" public void testMarkAsDone_shouldDisplayCorrectMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" LocalDateTime sampleDateTime \u003d LocalDateTime.of(2023, 9, 30, 15, 0); // Example date and time","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" Deadline deadline \u003d new Deadline(\"Sample Deadline\", sampleDateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" assertFalse(deadline.isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" assertTrue(deadline.isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":" public void testMarkAsUndone_shouldDisplayCorrectMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"freshcabbage123"},"content":" LocalDateTime sampleDateTime \u003d LocalDateTime.of(2023, 9, 30, 15, 0); // Example date and time","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"freshcabbage123"},"content":" Deadline deadline \u003d new Deadline(\"Sample Deadline\", sampleDateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"freshcabbage123"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":" assertTrue(deadline.isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"freshcabbage123"},"content":" deadline.markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"freshcabbage123"},"content":" assertFalse(deadline.isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"freshcabbage123"},"content":" public void testGetStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"freshcabbage123"},"content":" LocalDateTime sampleDateTime \u003d LocalDateTime.of(2023, 9, 30, 15, 0); // Example date and time","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"freshcabbage123"},"content":" Deadline deadline \u003d new Deadline(\"Sample Deadline\", sampleDateTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"freshcabbage123"},"content":" assertEquals(\" \", deadline.getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"freshcabbage123"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"freshcabbage123"},"content":" assertEquals(\"X\", deadline.getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freshcabbage123":55}},{"path":"src/test/java/duke/task/TasklistTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":"import duke.exception.IllegalTaskIndexException;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":"public class TasklistTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":" private final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":" @BeforeEach","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":" public void setUpStreams() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":" public void testAddTask_validTodo_shouldDisplayCorrectMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":" TaskList taskList \u003d new TaskList(\"sample.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":" assertDoesNotThrow(() -\u003e","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"freshcabbage123"},"content":" taskList.addTask(\"todo This is a valid task\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"freshcabbage123"},"content":" String expectedOutput \u003d \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"freshcabbage123"},"content":" + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"freshcabbage123"},"content":" + \"[T][ ] This is a valid task\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"freshcabbage123"},"content":" + \"Now you have 1 task in the list.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"freshcabbage123"},"content":" + \"____________________________________________________________\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"freshcabbage123"},"content":" assertEquals(expectedOutput, outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"freshcabbage123"},"content":" taskList.deleteAllTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"freshcabbage123"},"content":" public void testAddTask_validEvent_shouldDisplayCorrectMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"freshcabbage123"},"content":" TaskList taskList \u003d new TaskList(\"sample.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"freshcabbage123"},"content":" assertDoesNotThrow(() -\u003e","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"freshcabbage123"},"content":" taskList.addTask(\"event valid event /from 2023-08-30 10:00 /to 2023-08-31 12:00\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"freshcabbage123"},"content":" String expectedOutput \u003d \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"freshcabbage123"},"content":" + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freshcabbage123"},"content":" + \"[E][ ] valid event (from: 30-08-2023 10:00 to: 31-08-2023 12:00)\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"freshcabbage123"},"content":" + \"Now you have 1 task in the list.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"freshcabbage123"},"content":" + \"____________________________________________________________\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"freshcabbage123"},"content":" assertEquals(expectedOutput, outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"freshcabbage123"},"content":" taskList.deleteAllTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"freshcabbage123"},"content":" public void testAddTask_validDeadline_shouldDisplayCorrectMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"freshcabbage123"},"content":" TaskList taskList \u003d new TaskList(\"sample.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"freshcabbage123"},"content":" assertDoesNotThrow(() -\u003e taskList.addTask(\"deadline valid deadline /by 2023-08-30 12:00\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"freshcabbage123"},"content":" String expectedOutput \u003d \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"freshcabbage123"},"content":" + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"freshcabbage123"},"content":" + \"[D][ ] valid deadline (by: 30-08-2023 12:00)\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"freshcabbage123"},"content":" + \"Now you have 1 task in the list.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"freshcabbage123"},"content":" + \"____________________________________________________________\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"freshcabbage123"},"content":" assertEquals(expectedOutput, outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"freshcabbage123"},"content":" taskList.deleteAllTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"freshcabbage123"},"content":" public void testMarkAsDone_invalidIndex_shouldThrowException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"freshcabbage123"},"content":" TaskList taskList \u003d new TaskList(\"sample.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"freshcabbage123"},"content":" assertThrows(IllegalTaskIndexException.class, () -\u003e taskList.markAsDone(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"freshcabbage123"},"content":" taskList.deleteAllTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"freshcabbage123"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"freshcabbage123"},"content":" public void testAddTask_invalidTaskType_shouldThrowException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"freshcabbage123"},"content":" TaskList taskList \u003d new TaskList(\"sample.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"freshcabbage123"},"content":" assertThrows(InvalidArgumentException.class, () -\u003e taskList.addTask(\"invalidTaskType some details\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"freshcabbage123"},"content":" taskList.deleteAllTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"freshcabbage123"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"freshcabbage123"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"freshcabbage123"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freshcabbage123":84}},{"path":"text-ui-test/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"[E][ ] 2101 team meeting (from: 05-09-2023 18:00 to: 08-09-2023 10:00)","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Go grocery shopping","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"[D][X] Finish project (by: 17-09-2023 23:59)","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"[D][ ] homework (by: 28-02-2023 18:00)","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"[D][X] homework (by: 19-02-2024 18:29)","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] read boook","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"[T][X] Read book","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Go grocery shopping","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"[D][ ] Finish project (by: 17-09-2023 23:59)","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Walk the dog","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Read book","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Go grocery shopping","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":"[D][ ] Finish project (by: 17-09-2023 23:59)","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Walk the dog","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Read book","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Go grocery shopping","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":"[D][ ] Finish project (by: 17-09-2023 23:59)","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":"[T][ ] Walk the dog","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freshcabbage123":18}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"freshcabbage123"},"content":"todo Read book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"freshcabbage123"},"content":"deadline submit 2103T lab /by 30-08-2023 2356","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"freshcabbage123"},"content":"event 2101 team meeting /from 05-09-2023 /to Tuesday 10pm","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"freshcabbage123"},"content":"todo Go grocery shopping","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"freshcabbage123"},"content":"event Running /from 2023-Sep-10 /to 15:00 tomorrow","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"freshcabbage123"},"content":"deadline Finish project /by 17-09-2023 23:59","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"freshcabbage123"},"content":"todo Walk the dog","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"freshcabbage123"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"freshcabbage123"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"freshcabbage123"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"freshcabbage123"},"content":"mark 5","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"freshcabbage123"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"freshcabbage123"},"content":"unmark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"freshcabbage123"},"content":"unmark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"freshcabbage123"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"freshcabbage123"},"content":"event watch netflix again /from 19-4-2023 /to Tuesday 19:00","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"freshcabbage123"},"content":"deadline modreg round 9 /by Wedenesday 2023-09-25","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"freshcabbage123"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"freshcabbage123"},"content":"mark 7","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"freshcabbage123"},"content":"unmark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"freshcabbage123"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"freshcabbage123"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"freshcabbage123"},"content":"unmark 4","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"freshcabbage123"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"freshcabbage123"},"content":"event Dinner with the family /from 17-09-2024 /to 20:00 tomorrow","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"freshcabbage123"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"freshcabbage123"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freshcabbage123":27}}] diff --git a/freshcabbage123_ip_master/commits.json b/freshcabbage123_ip_master/commits.json index e0abe1bb..12e9758d 100644 --- a/freshcabbage123_ip_master/commits.json +++ b/freshcabbage123_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"freshcabbage123":[{"date":"2023-08-21","commitResults":[{"hash":"0ccae52b8ae9d77a9e0d9f4a7cef5249bb1e0fae","isMergeCommit":false,"messageTitle":"Implement Level-0: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":6}}},{"hash":"5f622d5a0113ab701d005b6844f8bc60d85a3024","isMergeCommit":false,"messageTitle":"Implement Level-1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":8}}},{"hash":"d47572ff6e9855619831d49481b8a91e9399359d","isMergeCommit":false,"messageTitle":"Implement Level 2: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":7}}},{"hash":"d7ae6df02b950bd0f6eb9098771d534d5676e6a1","isMergeCommit":false,"messageTitle":"Implement Level 3: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":4}}},{"hash":"1a1569ba18bcd352953ab61baacd9fe1511ceeee","isMergeCommit":false,"messageTitle":"Implement Level 4: ToDos, Events, Deadlines Make Task class abstract. Add subclasses of Task.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":12}}},{"hash":"dbe47790ea14e58cb2755b6001892e435f4da4bf","isMergeCommit":false,"messageTitle":"Implement: A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":27,"deletions":0},"java":{"insertions":1,"deletions":1},"sh":{"insertions":0,"deletions":0}}},{"hash":"9b635f8e7bd68b93cd78b994e2de17348b7e88fa","isMergeCommit":false,"messageTitle":"Implement Level 5: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"0d8a1b172df4397dea5b21ea6e9d81b30156c750","isMergeCommit":false,"messageTitle":"Implement: Level 6 Delete Refactor subclasses of Task.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":7},"java":{"insertions":164,"deletions":33}}}]},{"date":"2023-08-24","commitResults":[{"hash":"02a6e16bce116c531fe2b5a12a963b5ff6b357af","isMergeCommit":false,"messageTitle":"Implement A-Enums Add enums for task types. Create TaskList class for improved OOP.","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":159,"deletions":117}}}]},{"date":"2023-08-28","commitResults":[{"hash":"8db58bd010fd77ec38c38c852abfb744ce3aa3d4","isMergeCommit":false,"messageTitle":"Implement Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":0},"java":{"insertions":153,"deletions":11}}},{"hash":"bb5af9c414b3ec99525bb764a75dcd65912523a3","isMergeCommit":true,"messageTitle":"Merge branch-Level-7 into master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"aa1cd255fcfb56406fdb37d633cd1963281a721c","isMergeCommit":false,"messageTitle":"Implement Level 8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":15},"java":{"insertions":48,"deletions":14}}},{"hash":"8f1ebbd61e60c6e6a2bff9fa197392b5c623a2d6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"559ca6af039df08eb60a00b3951041ef0d6cbf95","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP Class logic is not encapsulated properly.","messageBody":"Extract out closely related code as classes.\n\nBetter OOP.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":202,"deletions":157}}},{"hash":"7ad2fd18fe5565fa8ed0c588aab355b41f5986d0","isMergeCommit":false,"messageTitle":"Implement A-Packages Divide code into multiple packages.","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":7,"deletions":6}}},{"hash":"f7b083779025b1b78ed7f65d0703cac048b31cb4","isMergeCommit":true,"messageTitle":"Merge \u0027origin/add-gradle-support\u0027 to local branch","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"d508b7aea9fe2980e7b3922880f5517211227d0f","isMergeCommit":false,"messageTitle":"Implement A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":10,"deletions":6},"java":{"insertions":164,"deletions":7}}},{"hash":"77230d673cebce7a578dbd2eaa996de3f302bc6f","isMergeCommit":false,"messageTitle":"Implement JavaDoc changes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"txt":{"insertions":1,"deletions":0},"java":{"insertions":27,"deletions":12}}},{"hash":"f80edc9a63c01f186fcbf04bf5fa699862961235","isMergeCommit":false,"messageTitle":"Implement coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":160,"deletions":95}}},{"hash":"6af7c2ad1327815b31d9b74ab1588ec9a1fc81d2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0372435fb7207b67348edad3c416526ef2345ae4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c930718ff06e51df27325aa83e426aa9b1435b5e","isMergeCommit":false,"messageTitle":"Implement Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":0}}},{"hash":"db3afb9a8843245d8388c68ac8853c5386f212a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"freshcabbage123":{"java":921,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":7,"txt":48}},"authorContributionVariance":{"freshcabbage123":60233.754},"authorDisplayNameMap":{"freshcabbage123":"CS2103T-T10-2 LIM ..ALAN"}} +{"authorDailyContributionsMap":{"freshcabbage123":[{"date":"2023-08-21","commitResults":[{"hash":"0ccae52b8ae9d77a9e0d9f4a7cef5249bb1e0fae","isMergeCommit":false,"messageTitle":"Implement Level-0: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":6}}},{"hash":"5f622d5a0113ab701d005b6844f8bc60d85a3024","isMergeCommit":false,"messageTitle":"Implement Level-1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":8}}},{"hash":"d47572ff6e9855619831d49481b8a91e9399359d","isMergeCommit":false,"messageTitle":"Implement Level 2: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":7}}},{"hash":"d7ae6df02b950bd0f6eb9098771d534d5676e6a1","isMergeCommit":false,"messageTitle":"Implement Level 3: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":4}}},{"hash":"1a1569ba18bcd352953ab61baacd9fe1511ceeee","isMergeCommit":false,"messageTitle":"Implement Level 4: ToDos, Events, Deadlines Make Task class abstract. Add subclasses of Task.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":12}}},{"hash":"dbe47790ea14e58cb2755b6001892e435f4da4bf","isMergeCommit":false,"messageTitle":"Implement: A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":27,"deletions":0},"java":{"insertions":1,"deletions":1},"sh":{"insertions":0,"deletions":0}}},{"hash":"9b635f8e7bd68b93cd78b994e2de17348b7e88fa","isMergeCommit":false,"messageTitle":"Implement Level 5: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"0d8a1b172df4397dea5b21ea6e9d81b30156c750","isMergeCommit":false,"messageTitle":"Implement: Level 6 Delete Refactor subclasses of Task.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":7},"java":{"insertions":164,"deletions":33}}}]},{"date":"2023-08-24","commitResults":[{"hash":"02a6e16bce116c531fe2b5a12a963b5ff6b357af","isMergeCommit":false,"messageTitle":"Implement A-Enums Add enums for task types. Create TaskList class for improved OOP.","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":159,"deletions":117}}}]},{"date":"2023-08-28","commitResults":[{"hash":"8db58bd010fd77ec38c38c852abfb744ce3aa3d4","isMergeCommit":false,"messageTitle":"Implement Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":0},"java":{"insertions":153,"deletions":11}}},{"hash":"bb5af9c414b3ec99525bb764a75dcd65912523a3","isMergeCommit":true,"messageTitle":"Merge branch-Level-7 into master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"aa1cd255fcfb56406fdb37d633cd1963281a721c","isMergeCommit":false,"messageTitle":"Implement Level 8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":15},"java":{"insertions":48,"deletions":14}}},{"hash":"8f1ebbd61e60c6e6a2bff9fa197392b5c623a2d6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"559ca6af039df08eb60a00b3951041ef0d6cbf95","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP Class logic is not encapsulated properly.","messageBody":"Extract out closely related code as classes.\n\nBetter OOP.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":202,"deletions":157}}},{"hash":"7ad2fd18fe5565fa8ed0c588aab355b41f5986d0","isMergeCommit":false,"messageTitle":"Implement A-Packages Divide code into multiple packages.","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":7,"deletions":6}}},{"hash":"f7b083779025b1b78ed7f65d0703cac048b31cb4","isMergeCommit":true,"messageTitle":"Merge \u0027origin/add-gradle-support\u0027 to local branch","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"d508b7aea9fe2980e7b3922880f5517211227d0f","isMergeCommit":false,"messageTitle":"Implement A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":10,"deletions":6},"java":{"insertions":164,"deletions":7}}},{"hash":"77230d673cebce7a578dbd2eaa996de3f302bc6f","isMergeCommit":false,"messageTitle":"Implement JavaDoc changes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"txt":{"insertions":1,"deletions":0},"java":{"insertions":27,"deletions":12}}},{"hash":"f80edc9a63c01f186fcbf04bf5fa699862961235","isMergeCommit":false,"messageTitle":"Implement coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":160,"deletions":95}}},{"hash":"6af7c2ad1327815b31d9b74ab1588ec9a1fc81d2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0372435fb7207b67348edad3c416526ef2345ae4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c930718ff06e51df27325aa83e426aa9b1435b5e","isMergeCommit":false,"messageTitle":"Implement Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":0}}},{"hash":"db3afb9a8843245d8388c68ac8853c5386f212a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"0ee09ed408f0ad9237c5d992bfea8fddfb89c4cc","isMergeCommit":false,"messageTitle":"Implement GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":13,"deletions":0},"txt":{"insertions":1,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":336,"deletions":116}}},{"hash":"4583af66021ad170739715ed49592fd668857edf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"freshcabbage123":{"java":1145,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":20,"txt":48}},"authorContributionVariance":{"freshcabbage123":51541.86},"authorDisplayNameMap":{"freshcabbage123":"CS2103T-T10-2 LIM ..ALAN"}} diff --git a/howenc_ip_master/authorship.json b/howenc_ip_master/authorship.json index ba34107a..8e8d9051 100644 --- a/howenc_ip_master/authorship.json +++ b/howenc_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"# duke project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":"3. After that, locate the `src/main/java/duke.java` file, right-click it, and choose `Run duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"howenc":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":"howenc"},"content":" implementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" implementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" implementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" archiveFileName \u003d \"duke.jar\"","lastModifiedDate":"2023-08-30"},{"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":{"howenc":5,"-":41}},{"path":"src/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"todo CS2103T A-JUnit","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":1}},{"path":"src/main/java/command/Commands.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"import task.ListOfTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"public class Commands {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":" * List of both primary and secondary commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" public enum COMMANDS {BYE, LIST, TODO, DEADLINE, EVENT, MARK, UNMARK, DELETE, BY, FROM, TO, SORT, FIND, UNKNOWN}","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" private COMMANDS state;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" private String name;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" private int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" private LocalDateTime dateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" * Construct a Commands object with only the primary command.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" * @param command The command or action given by the Parse object.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" public static Commands of(COMMANDS command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" return new Commands(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" * Construct a Commands object with both a primary command and task description.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" * @param command The command or action given by the Parse object.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" * @param task The task name or description.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" public static Commands of(COMMANDS command, String task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":" return new Commands(command, task);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" * Construct a Commands object with both a primary command and the index of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" * @param command The command or action given by the Parse object.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":" * @param index The index of the task that the command should act on.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" public static Commands of(COMMANDS command, int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" return new Commands(command, index);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" * Construct a Commands object with both a primary command and the index of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":" * @param command The command or action given by the Parse object.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":" * @param dateTime The date and time of a command giving in the format of \u0027dd-MM-yyyy HHmm\u0027.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":" public static Commands of(COMMANDS command, LocalDateTime dateTime) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":" return new Commands(command, dateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"howenc"},"content":" * Construct a Commands object with both a primary command and the index of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"howenc"},"content":" * @param command The command or action given by the Parse object.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"howenc"},"content":" * @param task The task name or description.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"howenc"},"content":" * @param secondaryCommand A sub-command that supplements the main command.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"howenc"},"content":" public static Commands of(COMMANDS command, String task, Commands secondaryCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"howenc"},"content":" return new Commands.TwoCommands(command, task, secondaryCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"howenc"},"content":" * Construct a Commands object with both a primary command and the index of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"howenc"},"content":" * @param command The command or action given by the Parse object.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"howenc"},"content":" * @param task The task name or description.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"howenc"},"content":" * @param secondaryCommand A sub-command that supplements the main command.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"howenc"},"content":" * @param tertiaryCommand A sub-command that supplements the main command and comes after the secondaryCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"howenc"},"content":" public static Commands of(COMMANDS command, String task, Commands secondaryCommand, Commands tertiaryCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"howenc"},"content":" return new Commands.ThreeCommands(command, task, secondaryCommand, tertiaryCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"howenc"},"content":" private Commands(COMMANDS command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"howenc"},"content":" this.state \u003d command;","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"howenc"},"content":" private Commands(COMMANDS command, String task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"howenc"},"content":" this.state \u003d command;","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"howenc"},"content":" this.name \u003d task;","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"howenc"},"content":" private Commands(COMMANDS command, int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"howenc"},"content":" this.state \u003d command;","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"howenc"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"howenc"},"content":" private Commands(COMMANDS command, LocalDateTime dateTime) {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"howenc"},"content":" this.state \u003d command;","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"howenc"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"howenc"},"content":" * Check if this object\u0027s COMMANDS is the same as command.","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"howenc"},"content":" * @param command The COMMANDS enum that you want to compare","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"howenc"},"content":" * @return Returns true same, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"howenc"},"content":" public boolean checkCommand(COMMANDS command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"howenc"},"content":" if (this.state \u003d\u003d command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"howenc"},"content":" * Executes the action or throws a DukeException.","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"howenc"},"content":" * @param taskList The list of tasks that the action will be executed in.","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"howenc"},"content":" * @return Returns 0 if the \u0027bye\u0027 command is executed, returns 1 if any other command is successfully executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"howenc"},"content":" * @throws DukeException The exception thrown when encountering any problems in executing.","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"howenc"},"content":" public int action(ListOfTask taskList) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"howenc"},"content":" return execute(taskList, 0, null);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"howenc"},"content":" * Executes the action or throws a DukeException.","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"howenc"},"content":" * @param taskList The list of tasks that the action will be executed in.","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"howenc"},"content":" * @param lineNumber Line Number of the command when reading from the save file.","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"howenc"},"content":" * @param error The command reading from the save file.","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"howenc"},"content":" * @return Returns 0 if the \u0027bye\u0027 command is executed, returns 1 if any other command is successfully executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"howenc"},"content":" * @throws DukeException The exception thrown when encountering any problems in executing.","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"howenc"},"content":" public int execute(ListOfTask taskList, int lineNumber, String error) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"howenc"},"content":" boolean load \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"howenc"},"content":" if (lineNumber \u003d\u003d 0 \u0026\u0026 error \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"howenc"},"content":" load \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"howenc"},"content":" switch (this.state) {","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"howenc"},"content":" case BYE:","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"howenc"},"content":" return 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"howenc"},"content":" case LIST:","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"howenc"},"content":" taskList.listTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"howenc"},"content":" case TODO:","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"howenc"},"content":" taskList.addTask(this.name, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"howenc"},"content":" taskList.addTask(this.name, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"howenc"},"content":" case FIND:","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"howenc"},"content":" taskList.find(this.name);","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"howenc"},"content":" case SORT:","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"howenc"},"content":" case MARK:","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"howenc"},"content":" taskList.mark(this.index, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"howenc"},"content":" taskList.mark(this.index, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"howenc"},"content":" case UNMARK:","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"howenc"},"content":" taskList.unMark(this.index, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"howenc"},"content":" taskList.unMark(this.index, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"howenc"},"content":" case DELETE:","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"howenc"},"content":" taskList.delete(this.index, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"howenc"},"content":" taskList.delete(this.index, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"howenc"},"content":" return 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":189,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":191,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"howenc"},"content":" * Compares LocalDateTime between this object and c.","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"howenc"},"content":" * @param c Commands object to be compared to.","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"howenc"},"content":" * @return Returns true if this object\u0027s time is before c\u0027s time, false for all other cases.","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"howenc"},"content":" public boolean compareTime(Commands c) {","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"howenc"},"content":" if (this.dateTime.isBefore(c.dateTime)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"howenc"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"howenc"},"content":" * Compares this object to another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"howenc"},"content":" * @param obj An object.","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"howenc"},"content":" * @return Returns true if both objects are equivalent, false if otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"howenc"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"howenc"},"content":" if (this \u003d\u003d obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"howenc"},"content":" if (obj instanceof Commands) {","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"howenc"},"content":" Commands b \u003d (Commands) obj;","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"howenc"},"content":" if (b.state \u003d\u003d this.state","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"howenc"},"content":" \u0026\u0026 b.dateTime \u003d\u003d this.dateTime","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"howenc"},"content":" \u0026\u0026 b.index \u003d\u003d this.index","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"howenc"},"content":" \u0026\u0026 b.name \u003d\u003d this.name) {","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":226,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":227,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":229,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":230,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":231,"author":{"gitId":"howenc"},"content":" private static class TwoCommands extends Commands {","lastModifiedDate":"2023-08-31"},{"lineNumber":232,"author":{"gitId":"howenc"},"content":" private COMMANDS state2;","lastModifiedDate":"2023-08-29"},{"lineNumber":233,"author":{"gitId":"howenc"},"content":" private String name2;","lastModifiedDate":"2023-08-29"},{"lineNumber":234,"author":{"gitId":"howenc"},"content":" private Commands secondaryCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":235,"author":{"gitId":"howenc"},"content":" private TwoCommands(COMMANDS command, String str, COMMANDS command2, String str2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"howenc"},"content":" super(command, str);","lastModifiedDate":"2023-08-29"},{"lineNumber":237,"author":{"gitId":"howenc"},"content":" this.state2 \u003d command2;","lastModifiedDate":"2023-08-29"},{"lineNumber":238,"author":{"gitId":"howenc"},"content":" this.name2 \u003d str2;","lastModifiedDate":"2023-08-29"},{"lineNumber":239,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":240,"author":{"gitId":"howenc"},"content":" private TwoCommands(COMMANDS command, String str, Commands secondaryCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"howenc"},"content":" super(command,str);","lastModifiedDate":"2023-08-29"},{"lineNumber":242,"author":{"gitId":"howenc"},"content":" this.secondaryCommand \u003d secondaryCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":243,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":244,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":249,"author":{"gitId":"howenc"},"content":" public int execute(ListOfTask taskList, int lineNumber, String error) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":250,"author":{"gitId":"howenc"},"content":" boolean load \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":251,"author":{"gitId":"howenc"},"content":" if (lineNumber \u003d\u003d 0 \u0026\u0026 error \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"howenc"},"content":" load \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"howenc"},"content":" switch (super.state) {","lastModifiedDate":"2023-08-29"},{"lineNumber":255,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":256,"author":{"gitId":"howenc"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-29"},{"lineNumber":257,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"howenc"},"content":" taskList.addTask(super.name, this.secondaryCommand.dateTime, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":260,"author":{"gitId":"howenc"},"content":" taskList.addTask(super.name, this.secondaryCommand.dateTime, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":262,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":263,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":264,"author":{"gitId":"howenc"},"content":" return 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":265,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":266,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":267,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":268,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-08-31"},{"lineNumber":269,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":270,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"howenc"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":272,"author":{"gitId":"howenc"},"content":" if (this \u003d\u003d obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"howenc"},"content":" if (obj instanceof Commands.TwoCommands) {","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"howenc"},"content":" Commands.TwoCommands b \u003d (Commands.TwoCommands) obj;","lastModifiedDate":"2023-08-30"},{"lineNumber":277,"author":{"gitId":"howenc"},"content":" if (super.equals(b)","lastModifiedDate":"2023-08-31"},{"lineNumber":278,"author":{"gitId":"howenc"},"content":" \u0026\u0026 b.state2 \u003d\u003d this.state2","lastModifiedDate":"2023-08-31"},{"lineNumber":279,"author":{"gitId":"howenc"},"content":" \u0026\u0026 this.name2.equals(b.name2)","lastModifiedDate":"2023-08-31"},{"lineNumber":280,"author":{"gitId":"howenc"},"content":" \u0026\u0026 this.secondaryCommand.equals(b.secondaryCommand)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":281,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":286,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":287,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":288,"author":{"gitId":"howenc"},"content":" private static class ThreeCommands extends Commands {","lastModifiedDate":"2023-08-31"},{"lineNumber":289,"author":{"gitId":"howenc"},"content":" private COMMANDS state2;","lastModifiedDate":"2023-08-29"},{"lineNumber":290,"author":{"gitId":"howenc"},"content":" private String name2;","lastModifiedDate":"2023-08-29"},{"lineNumber":291,"author":{"gitId":"howenc"},"content":" private COMMANDS state3;","lastModifiedDate":"2023-08-29"},{"lineNumber":292,"author":{"gitId":"howenc"},"content":" private String name3;","lastModifiedDate":"2023-08-29"},{"lineNumber":293,"author":{"gitId":"howenc"},"content":" private Commands phaseTwo;","lastModifiedDate":"2023-08-29"},{"lineNumber":294,"author":{"gitId":"howenc"},"content":" private Commands phaseThree;","lastModifiedDate":"2023-08-29"},{"lineNumber":295,"author":{"gitId":"howenc"},"content":" private ThreeCommands(COMMANDS command, String str, COMMANDS command2,","lastModifiedDate":"2023-08-31"},{"lineNumber":296,"author":{"gitId":"howenc"},"content":" String str2, COMMANDS command3, String str3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":297,"author":{"gitId":"howenc"},"content":" super(command,str);","lastModifiedDate":"2023-08-29"},{"lineNumber":298,"author":{"gitId":"howenc"},"content":" this.state2 \u003d command2;","lastModifiedDate":"2023-08-29"},{"lineNumber":299,"author":{"gitId":"howenc"},"content":" this.name2 \u003d str2;","lastModifiedDate":"2023-08-29"},{"lineNumber":300,"author":{"gitId":"howenc"},"content":" this.state3 \u003d command3;","lastModifiedDate":"2023-08-29"},{"lineNumber":301,"author":{"gitId":"howenc"},"content":" this.name3 \u003d str3;","lastModifiedDate":"2023-08-29"},{"lineNumber":302,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":303,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":304,"author":{"gitId":"howenc"},"content":" private ThreeCommands(COMMANDS command, String str, Commands phaseTwo, Commands phaseThree) {","lastModifiedDate":"2023-08-31"},{"lineNumber":305,"author":{"gitId":"howenc"},"content":" super(command,str);","lastModifiedDate":"2023-08-29"},{"lineNumber":306,"author":{"gitId":"howenc"},"content":" this.phaseTwo \u003d phaseTwo;","lastModifiedDate":"2023-08-29"},{"lineNumber":307,"author":{"gitId":"howenc"},"content":" this.phaseThree \u003d phaseThree;","lastModifiedDate":"2023-08-29"},{"lineNumber":308,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":309,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":310,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":311,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-08-31"},{"lineNumber":312,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":313,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":314,"author":{"gitId":"howenc"},"content":" public int execute(ListOfTask taskList, int lineNumber, String error) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":315,"author":{"gitId":"howenc"},"content":" boolean load \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":316,"author":{"gitId":"howenc"},"content":" if (lineNumber \u003d\u003d 0 \u0026\u0026 error \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":317,"author":{"gitId":"howenc"},"content":" load \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":318,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":319,"author":{"gitId":"howenc"},"content":" switch (super.state) {","lastModifiedDate":"2023-08-29"},{"lineNumber":320,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":321,"author":{"gitId":"howenc"},"content":" case EVENT:","lastModifiedDate":"2023-08-29"},{"lineNumber":322,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":323,"author":{"gitId":"howenc"},"content":" taskList.addTask(super.name, this.phaseTwo.dateTime, this.phaseThree.dateTime, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":324,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":325,"author":{"gitId":"howenc"},"content":" taskList.addTask(super.name, this.phaseTwo.dateTime, this.phaseThree.dateTime, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":326,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":327,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":328,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":329,"author":{"gitId":"howenc"},"content":" return 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":330,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":331,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":332,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":333,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-08-31"},{"lineNumber":334,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":335,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":336,"author":{"gitId":"howenc"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":337,"author":{"gitId":"howenc"},"content":" if (this \u003d\u003d obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":338,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":339,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":340,"author":{"gitId":"howenc"},"content":" if (obj instanceof Commands.ThreeCommands) {","lastModifiedDate":"2023-08-30"},{"lineNumber":341,"author":{"gitId":"howenc"},"content":" Commands.ThreeCommands b \u003d (Commands.ThreeCommands) obj;","lastModifiedDate":"2023-08-30"},{"lineNumber":342,"author":{"gitId":"howenc"},"content":" if (super.equals(b) \u0026\u0026 b.state2 \u003d\u003d this.state2 \u0026\u0026 this.name2.equals(b.name2)","lastModifiedDate":"2023-08-30"},{"lineNumber":343,"author":{"gitId":"howenc"},"content":" \u0026\u0026 b.state3 \u003d\u003d this.state3 \u0026\u0026 this.name3.equals(b.name3)","lastModifiedDate":"2023-08-30"},{"lineNumber":344,"author":{"gitId":"howenc"},"content":" \u0026\u0026 this.phaseTwo.equals(b.phaseTwo) \u0026\u0026 this.phaseThree.equals(b.phaseThree)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":345,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":346,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":347,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":348,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":349,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":350,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":351,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"howenc":351}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import command.Commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"import parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import task.ListOfTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" * This is the format for all date and time input.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" public static final DateTimeFormatter FORMAT \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" private static ListOfTask taskList \u003d new ListOfTask();","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" private static Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" * This starts the Duke chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" * @param args Does nothing","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" greet();","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" private static void greet() {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" if (!Storage.load(taskList, 1)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" return;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" ui.greet();","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" nextCommand(ui.nextInput());","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" private static void nextCommand(String command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" Parser cmd \u003d new Parser(command);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" Commands action \u003d cmd.parse();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" if (action.action(taskList) \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" nextCommand(ui.nextInput());","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" ui.exit();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":" nextCommand(ui.nextInput());","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"howenc":50,"-":2}},{"path":"src/main/java/dukeExceptions/DukeDateTimeParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package dukeExceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"public class DukeDateTimeParseException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":" public DukeDateTimeParseException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":7}},{"path":"src/main/java/dukeExceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package dukeExceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":8}},{"path":"src/main/java/dukeExceptions/DukeFromEarlierThanToException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package dukeExceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"public class DukeFromEarlierThanToException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":" public DukeFromEarlierThanToException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":7}},{"path":"src/main/java/dukeExceptions/DukeNullPointerException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package dukeExceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"public class DukeNullPointerException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":" public DukeNullPointerException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":7}},{"path":"src/main/java/dukeExceptions/DukeNumberFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package dukeExceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"public class DukeNumberFormatException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":" public DukeNumberFormatException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":7}},{"path":"src/main/java/dukeExceptions/DukeUnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package dukeExceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"public class DukeUnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":" public DukeUnknownCommandException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":7}},{"path":"src/main/java/dukeExceptions/LoadException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package dukeExceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"public class LoadException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":" private int lineNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":" private String loadCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":" public LoadException(String message, int lineNumber, String loadCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":" this.lineNumber \u003d lineNumber;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":" this.loadCommand \u003d loadCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" return this.lineNumber + \": \" + super.getMessage() + \" ---- \" + this.loadCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":17}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import command.Commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"import dukeExceptions.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":" private String command;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" private String[] initialParse;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" private String[] phaseParse;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" * Construct the Parser object.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" * @param command The string that needs to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" public Parser(String command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" * Parses the string into actionable commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" * @return Returns a Command object.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" * @throws DukeException If the input is not a command","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" public Commands parse() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" Commands.COMMANDS cmd \u003d this.mainCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" if (cmd \u003d\u003d Commands.COMMANDS.BYE || cmd \u003d\u003d Commands.COMMANDS.LIST) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" return Commands.of(cmd);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" if (cmd \u003d\u003d Commands.COMMANDS.TODO || cmd \u003d\u003d Commands.COMMANDS.FIND) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" if (this.secondWord() \u003d\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"Please add the task name\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" return Commands.of(cmd, this.secondWord());","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" if (cmd \u003d\u003d Commands.COMMANDS.BY || cmd \u003d\u003d Commands.COMMANDS.FROM || cmd \u003d\u003d Commands.COMMANDS.TO) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":" String restOfCommand \u003d this.secondWord().trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(restOfCommand, Duke.FORMAT);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" return Commands.of(cmd, dateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":" throw new DukeDateTimeParseException(cmd","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" + \": The format for dates\u0026time is \u0027dd-MM-yyyy hhmm\u0027\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":" if (cmd \u003d\u003d Commands.COMMANDS.MARK || cmd \u003d\u003d Commands.COMMANDS.UNMARK || cmd \u003d\u003d Commands.COMMANDS.DELETE) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":" int index \u003d Integer.parseInt(this.secondWord());","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":" return Commands.of(cmd, index);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":" } catch (NumberFormatException | NullPointerException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":" throw new DukeNumberFormatException(\"Place a number after the command\");","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"howenc"},"content":" if (cmd \u003d\u003d Commands.COMMANDS.DEADLINE) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"howenc"},"content":" String task \u003d this.phaseParse();","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"howenc"},"content":" String command2 \u003d this.phaseTwo();","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"howenc"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"howenc"},"content":" Parser phaseTwo \u003d new Parser(command2);","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"howenc"},"content":" Commands c \u003d phaseTwo.parse();","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"howenc"},"content":" if (c.checkCommand(Commands.COMMANDS.BY)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"howenc"},"content":" return Commands.of(Commands.COMMANDS.DEADLINE, task, c);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"Please add the task name\");","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"howenc"},"content":" } catch (DukeUnknownCommandException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"howenc"},"content":" throw new DukeNullPointerException(\"The format for the command is: deadline task /by date\u0026time\");","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"howenc"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"howenc"},"content":" throw new DukeNullPointerException(\"The format for the command is: deadline task /by date\u0026time\");","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"howenc"},"content":" if (cmd \u003d\u003d Commands.COMMANDS.EVENT) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"howenc"},"content":" String task \u003d this.phaseParse();","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"howenc"},"content":" String command2 \u003d this.phaseTwo();","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"howenc"},"content":" String command3 \u003d this.phaseThree();","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"howenc"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"howenc"},"content":" Parser phaseTwo \u003d new Parser(command2);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"howenc"},"content":" Commands c1 \u003d phaseTwo.parse();","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"howenc"},"content":" Parser phaseThree \u003d new Parser(command3);","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"howenc"},"content":" Commands c2 \u003d phaseThree.parse();","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"howenc"},"content":" if (c1.checkCommand(Commands.COMMANDS.FROM) \u0026\u0026 c2.checkCommand(Commands.COMMANDS.TO)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"howenc"},"content":" if (c1.compareTime(c2)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"howenc"},"content":" return Commands.of(Commands.COMMANDS.EVENT, task, c1, c2);","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"howenc"},"content":" throw new DukeFromEarlierThanToException(\"From must be earlier than To\");","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"howenc"},"content":" throw new DukeNullPointerException(\"The format for the command is: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"howenc"},"content":" + \"event task /from startDayDateTime /to endDayDateTime\");","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"Please add the task name\");","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"howenc"},"content":" } catch (DukeUnknownCommandException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"howenc"},"content":" throw new DukeNullPointerException(\"The format for the command is: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"howenc"},"content":" + \"event task /from startDayDateTime /to endDayDateTime\");","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"howenc"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"howenc"},"content":" throw new DukeNullPointerException(\"The format for the command is: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"howenc"},"content":" + \"event task /from startDayDateTime /to endDayDateTime\");","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"howenc"},"content":" throw new DukeUnknownCommandException(\"Unknown command\");","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"howenc"},"content":" private Commands.COMMANDS mainCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"howenc"},"content":" this.initialParse \u003d command.split(\" \",2);","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"howenc"},"content":" switch (initialParse[0]) {","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"howenc"},"content":" case (\"bye\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.BYE;","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"howenc"},"content":" case (\"list\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.LIST;","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"howenc"},"content":" case (\"todo\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.TODO;","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"howenc"},"content":" case (\"deadline\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.DEADLINE;","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"howenc"},"content":" case (\"event\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.EVENT;","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"howenc"},"content":" case (\"mark\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.MARK;","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"howenc"},"content":" case (\"unmark\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.UNMARK;","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"howenc"},"content":" case (\"delete\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.DELETE;","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"howenc"},"content":" case (\"by\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.BY;","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"howenc"},"content":" case (\"from\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.FROM;","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"howenc"},"content":" case (\"to\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.TO;","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"howenc"},"content":" case (\"sort\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.SORT;","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"howenc"},"content":" case (\"find\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.FIND;","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"howenc"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.UNKNOWN;","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":152,"author":{"gitId":"howenc"},"content":" private String secondWord() {","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"howenc"},"content":" if (this.initialParse[1].equals(\"\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"howenc"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"howenc"},"content":" return this.initialParse[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"howenc"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"howenc"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"howenc"},"content":" private String phaseParse() {","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":166,"author":{"gitId":"howenc"},"content":" this.phaseParse \u003d this.initialParse[1].split(\"/\");","lastModifiedDate":"2023-08-28"},{"lineNumber":167,"author":{"gitId":"howenc"},"content":" return phaseParse[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":168,"author":{"gitId":"howenc"},"content":" } catch (NullPointerException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":169,"author":{"gitId":"howenc"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":170,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":171,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":172,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":173,"author":{"gitId":"howenc"},"content":" private String phaseTwo() {","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":175,"author":{"gitId":"howenc"},"content":" return this.phaseParse[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":176,"author":{"gitId":"howenc"},"content":" } catch (NullPointerException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":177,"author":{"gitId":"howenc"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":178,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":179,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":180,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":181,"author":{"gitId":"howenc"},"content":" private String phaseThree() {","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":183,"author":{"gitId":"howenc"},"content":" return this.phaseParse[2];","lastModifiedDate":"2023-08-28"},{"lineNumber":184,"author":{"gitId":"howenc"},"content":" } catch (NullPointerException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":185,"author":{"gitId":"howenc"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":186,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":187,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":188,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"howenc":188}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import command.Commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"import parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"import task.ListOfTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" * Saves the list to a specific file.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" * @param listOfTask The task list to save.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" public static void save(ArrayList\u003cTask\u003e listOfTask) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" File writeData \u003d new File(\"./src/data/duke.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" writeData.createNewFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" FileWriter writer \u003d new FileWriter(writeData);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" listOfTask.forEach(x-\u003e {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" writer.write(x.write());","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" if (x.getIsDone()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" writer.write(\"mark \" + (listOfTask.indexOf(x) + 1) + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" System.out.println(\"You do not have access to write to your save file\");","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":" });","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" writer.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" System.out.println(\"You do not have access to save your file\");","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" * Loads the task list from a specific line in the save file onwards.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" * @param taskList The task list that tasks are loaded into.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" * @param startLine The line number to start loading from.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":" * @return Returns false if it is unable to load and the user does not want to","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" * be able to save the task list. True if otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":" public static boolean load(ListOfTask taskList, int startLine) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":" File saveData \u003d new File(\"./src/data/duke.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":" String error \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":" saveData.createNewFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":" Scanner readData \u003d new Scanner(saveData);","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":" for (int i \u003d 0; i \u003c startLine - 1; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":" if (readData.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":" readData.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"howenc"},"content":" while (readData.hasNextLine()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"howenc"},"content":" String command \u003d readData.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"howenc"},"content":" error \u003d command;","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"howenc"},"content":" if (command.equals(\"\\n\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"howenc"},"content":" Parser cmd \u003d new Parser(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"howenc"},"content":" Commands action \u003d cmd.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"howenc"},"content":" action.execute(taskList, startLine, error);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"howenc"},"content":" startLine++;","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"howenc"},"content":" readData.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"howenc"},"content":" System.out.println(\"line \" + startLine + \" corrupted: \" + error);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"howenc"},"content":" startLine++;","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"howenc"},"content":" load(taskList, startLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"howenc"},"content":" } catch (IOException f) {","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"howenc"},"content":" if (clarify() \u003d\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"howenc"},"content":" private static int clarify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"howenc"},"content":" System.out.println(\"You do not have access to create a save file\");","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"howenc"},"content":" System.out.println(\"Do you wish to continue? (yes/no) None of your data will be saved.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"howenc"},"content":" Scanner scan \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"howenc"},"content":" String respond \u003d scan.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"howenc"},"content":" if (respond.equals(\"yes\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"howenc"},"content":" return 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"howenc"},"content":" } else if (respond.equals(\"no\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"howenc"},"content":" return 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"howenc"},"content":" return clarify();","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"howenc":100}},{"path":"src/main/java/task/ListOfTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"public class ListOfTask {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":" private ArrayList\u003cTask\u003e listOfTask \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" * The size of the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" * @return Returns the size of the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" public int size() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" return listOfTask.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" * Adds a task into the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" * @param task The task that is to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" * @param print True to print messages, false to not print messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" public void addTask(String task, boolean print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" Task temp \u003d Task.of(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" listOfTask.add(temp);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" if (print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" System.out.println(\"added: \" + temp);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" Storage.save(listOfTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" * Adds a task into the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" * @param task The task that is to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" * @param dayDate The deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" * @param print True to print messages, false to not print messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":" public void addTask(String task, LocalDateTime dayDate, boolean print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" Task temp \u003d Task.of(task, dayDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" listOfTask.add(temp);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" if (print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" System.out.println(\"added: \" + temp);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":" Storage.save(listOfTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":" * Adds a task into the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":" * @param task The task that is to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":" * @param startDayDateTime The date and time of the start of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":" * @param endDayDateTime The date and time of the end of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":" * @param print True to print messages, false to not print messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"howenc"},"content":" public void addTask(String task, LocalDateTime startDayDateTime,","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"howenc"},"content":" LocalDateTime endDayDateTime, boolean print) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"howenc"},"content":" Task temp \u003d Task.of(task, startDayDateTime, endDayDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"howenc"},"content":" listOfTask.add(temp);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"howenc"},"content":" if (print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"howenc"},"content":" System.out.println(\"added: \" + temp);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"howenc"},"content":" Storage.save(listOfTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"howenc"},"content":" * Prints out the list of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"howenc"},"content":" public void listTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"howenc"},"content":" int[] i \u003d new int[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"howenc"},"content":" i[0] \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"howenc"},"content":" listOfTask.forEach(x -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"howenc"},"content":" System.out.print(i[0] + \".\");","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"howenc"},"content":" System.out.println(x);","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"howenc"},"content":" i[0]++;","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"howenc"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"howenc"},"content":" * Finds and prints index and tasks that contains the string str in its name.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"howenc"},"content":" * @param str The string that will be searched.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"howenc"},"content":" public void find(String str) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"howenc"},"content":" int[] start \u003d new int[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"howenc"},"content":" start[0] \u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"howenc"},"content":" int size \u003d listOfTask.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"howenc"},"content":" int[] rememberIndex \u003d new int[size];","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"howenc"},"content":" Task[] rememberTask \u003d new Task[size];","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"howenc"},"content":" int[] i \u003d new int[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"howenc"},"content":" i[0] \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"howenc"},"content":" listOfTask.forEach(x -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"howenc"},"content":" if (x.getTaskName().contains(str)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"howenc"},"content":" rememberTask[start[0]] \u003d x;","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"howenc"},"content":" rememberIndex[start[0]] \u003d i[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"howenc"},"content":" start[0]++;","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"howenc"},"content":" i[0]++;","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"howenc"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"howenc"},"content":" for (int j \u003d 0; j \u003c (start[0]); j++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"howenc"},"content":" System.out.println(rememberIndex[j] + \".\" + rememberTask[j]);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"howenc"},"content":" if (start[0] \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"howenc"},"content":" System.out.println(\"Whoopys uWu, sorry I couldnyt fynd any taysk that contyain that strying. XD uWu\");","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"howenc"},"content":" * Mark a task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"howenc"},"content":" * @param index The index of the task based on the current task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"howenc"},"content":" * @param print True to print messages, false to not print messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"howenc"},"content":" * @throws DukeException If the number is outside the range of indexes in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"howenc"},"content":" public void mark(int index, boolean print) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"howenc"},"content":" listOfTask.get(index - 1).setDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"howenc"},"content":" if (print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"howenc"},"content":" System.out.println(listOfTask.get(index - 1).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"howenc"},"content":" Storage.save(listOfTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"howenc"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"Please select from index 1 to \" + listOfTask.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"howenc"},"content":" * Mark a task as undone.","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"howenc"},"content":" * @param index The index of the task based on the current task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"howenc"},"content":" * @param print True to print messages, false to not print messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"howenc"},"content":" * @throws DukeException If the number is outside the range of indexes in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"howenc"},"content":" public void unMark(int index, boolean print) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"howenc"},"content":" listOfTask.get(index - 1).setNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"howenc"},"content":" if (print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"howenc"},"content":" System.out.println(listOfTask.get(index - 1).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"howenc"},"content":" Storage.save(listOfTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"howenc"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"Please select from index 1 to \" + listOfTask.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"howenc"},"content":" * Delete a task from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"howenc"},"content":" * @param index The index of the task based on the current task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"howenc"},"content":" * @param print True to print messages, false to not print messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"howenc"},"content":" * @throws DukeException If the number is outside the range of indexes in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"howenc"},"content":" public void delete(int index, boolean print) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"howenc"},"content":" Task removed \u003d listOfTask.remove(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"howenc"},"content":" if (print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"howenc"},"content":" System.out.println(removed + \" has been deleted\");","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"howenc"},"content":" Storage.save(listOfTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"howenc"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"Please select from index 1 to \" + listOfTask.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"howenc":171}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"public class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":" private String taskName;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":" private Boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":" private LocalDateTime dateAdded;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" * Calls the constructor to create a Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" * @param taskName The name of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" * @return Returns a Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" public static Task of(String taskName) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" return new ToDos(taskName);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" * Calls the constructor to create a Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" * @param taskName The name of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" * @param dayDate The date and time of the deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" * @return Returns a Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" public static Task of(String taskName, LocalDateTime dayDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" return new Deadlines(taskName, dayDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" * Calls the constructor to create a Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":" * @param taskName The name of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" * @param startDayDateTime The date and time of the start of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" * @param endDayDateTime The date and time of the end of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" * @return Returns a Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" public static Task of(String taskName, LocalDateTime startDayDateTime, LocalDateTime endDayDateTime) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" return new Event(taskName, startDayDateTime, endDayDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" private Task(String taskName) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":" this.dateAdded \u003d LocalDateTime.now();","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":" * The string that represents the object.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":" * @return Returns a string that represents the object.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":" return (\"[\" + (this.isDone ? \"X] \" : \" ] \") + this.taskName);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"howenc"},"content":" * Mark the task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"howenc"},"content":" public void setDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"howenc"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"howenc"},"content":" * Mark the task as undone.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"howenc"},"content":" public void setNotDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"howenc"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"howenc"},"content":" * Check if the task is done.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"howenc"},"content":" * @return Returns true if the task is done, false if otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"howenc"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"howenc"},"content":" return this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"howenc"},"content":" * Returns the name of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"howenc"},"content":" * @return Returns the name of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"howenc"},"content":" public String getTaskName() {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"howenc"},"content":" return this.taskName;","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"howenc"},"content":" * Writes the initial command the user put that resulted in the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"howenc"},"content":" * @return Returns the initial command the user put for this task.","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"howenc"},"content":" public String write() {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"howenc"},"content":" return \"task \" + this.taskName + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"howenc"},"content":" private static class ToDos extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"howenc"},"content":" private ToDos(String taskName) {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"howenc"},"content":" super(taskName);","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"howenc"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"howenc"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"howenc"},"content":" public String write() {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"howenc"},"content":" return \"todo \" + super.taskName + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"howenc"},"content":" private static class Deadlines extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"howenc"},"content":" private LocalDateTime dayDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"howenc"},"content":" private Deadlines(String taskName, LocalDateTime dayDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"howenc"},"content":" super(taskName);","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"howenc"},"content":" this.dayDate \u003d dayDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"howenc"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"howenc"},"content":" return \"[D]\" + super.toString() + \"(by: \" + this.dayDate.format(Duke.FORMAT) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"howenc"},"content":" public String write() {","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"howenc"},"content":" return \"deadline \" + super.taskName + \"/by \" + this.dayDate.format(Duke.FORMAT) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"howenc"},"content":" private static class Event extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"howenc"},"content":" private LocalDateTime startDayDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"howenc"},"content":" private LocalDateTime endDayDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"howenc"},"content":" private Event(String taskName, LocalDateTime startDayDateTime, LocalDateTime endDayDateTime) {","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"howenc"},"content":" super(taskName);","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"howenc"},"content":" this.endDayDateTime \u003d endDayDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"howenc"},"content":" this.startDayDateTime \u003d startDayDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"howenc"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"howenc"},"content":" return \"[E]\" + super.toString() + \"(from: \" + startDayDateTime.format(Duke.FORMAT)","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"howenc"},"content":" + \" to: \" + endDayDateTime.format(Duke.FORMAT) +\")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"howenc"},"content":" public String write() {","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"howenc"},"content":" return \"event \" + super.taskName + \"/from \" + this.startDayDateTime.format(Duke.FORMAT)","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"howenc"},"content":" + \" /to \" + this.endDayDateTime.format(Duke.FORMAT) + \"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"howenc":179}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":" * Initialize the Ui object.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":" public Ui() {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" * Scans the next input of the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" * @return The input of the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" public String nextInput() {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" Scanner scanObj \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" return scanObj.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" * Prints the greeting of the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" public void greet() {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" System.out.println(\"Hello. I am Luxion. \\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" \"What can I do for you?\");","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" * Prints the exit of the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" public void exit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" System.out.println(\"Bye. See you soon.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"howenc":37}},{"path":"src/test/java/command/CommandsStud.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import dukeExceptions.LoadException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"import task.ListOfTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"import task.ListOfTaskStud;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import ui.UiStud;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"public class CommandsStud {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":" public enum COMMANDS {BYE, LIST, TODO, DEADLINE, EVENT, MARK, UNMARK, DELETE, BY, FROM, TO, SORT, FIND, UNKNOWN}","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" private COMMANDS state;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" private String name;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" private LocalDateTime dateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" public CommandsStud(CommandsStud.COMMANDS command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" this.state \u003d command;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" public CommandsStud(CommandsStud.COMMANDS command, String str) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" this.state \u003d command;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" this.name \u003d str;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" public CommandsStud(CommandsStud.COMMANDS command, int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" this.state \u003d command;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" public CommandsStud(CommandsStud.COMMANDS command, LocalDateTime dateTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" this.state \u003d command;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" public CommandsStud.COMMANDS getCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" return this.state;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" public int execute(ListOfTaskStud taskList, UiStud ui, int lineNumber, String error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" boolean load \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":" if (lineNumber \u003d\u003d 0 \u0026\u0026 error \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" load \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" switch (this.state) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" case BYE:","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" ui.exit();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":" return 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":" case LIST:","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":" taskList.listTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":" case TODO:","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":" taskList.addTask(this.name, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"howenc"},"content":" taskList.addTask(this.name, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"howenc"},"content":" case FIND:","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"howenc"},"content":" //taskList.find(this.name);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"howenc"},"content":" case SORT:","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"howenc"},"content":" case MARK:","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"howenc"},"content":" taskList.mark(this.index, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"howenc"},"content":" taskList.mark(this.index, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"howenc"},"content":" case UNMARK:","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"howenc"},"content":" taskList.unMark(this.index, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"howenc"},"content":" taskList.unMark(this.index, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"howenc"},"content":" case DELETE:","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"howenc"},"content":" taskList.delete(this.index, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"howenc"},"content":" taskList.delete(this.index, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"howenc"},"content":" case UNKNOWN:","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"line corrupted\");","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"howenc"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"line corrupted \" + this.state + \" is not a primary command\");","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"howenc"},"content":" System.out.println(new LoadException(e.getMessage(), lineNumber, error).getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"howenc"},"content":" return 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"howenc"},"content":" public boolean compareTime(CommandsStud c) {","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"howenc"},"content":" if (this.dateTime.isBefore(c.dateTime)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"howenc"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"howenc"},"content":" if (this \u003d\u003d obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"howenc"},"content":" if (obj instanceof CommandsStud) {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"howenc"},"content":" CommandsStud b \u003d (CommandsStud) obj;","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"howenc"},"content":" if ((b.state \u003d\u003d this.state) \u0026\u0026 (b.dateTime \u003d\u003d this.dateTime) \u0026\u0026 (b.index \u003d\u003d this.index) \u0026\u0026 (b.name \u003d\u003d this.name)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"howenc"},"content":" public static class TwoCommandsStud extends CommandsStud {","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"howenc"},"content":" private COMMANDS state2;","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"howenc"},"content":" private String name2;","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"howenc"},"content":" private CommandsStud secondaryCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"howenc"},"content":" public TwoCommandsStud(COMMANDS command, String str, COMMANDS command2, String str2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"howenc"},"content":" super(command, str);","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"howenc"},"content":" this.state2 \u003d command2;","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"howenc"},"content":" this.name2 \u003d str2;","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"howenc"},"content":" public TwoCommandsStud(COMMANDS command, String str, CommandsStud secondaryCommand) {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"howenc"},"content":" super(command,str);","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"howenc"},"content":" this.secondaryCommand \u003d secondaryCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"howenc"},"content":" public int execute(ListOfTaskStud taskList, UiStud ui, int lineNumber, String error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"howenc"},"content":" boolean load \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"howenc"},"content":" if (lineNumber \u003d\u003d 0 \u0026\u0026 error \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"howenc"},"content":" load \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"howenc"},"content":" switch (super.state) {","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"howenc"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"howenc"},"content":" taskList.addTask(super.name, this.secondaryCommand.dateTime, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"howenc"},"content":" taskList.addTask(super.name, this.secondaryCommand.dateTime, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"howenc"},"content":" return 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"howenc"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"howenc"},"content":" if (this \u003d\u003d obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"howenc"},"content":" if (obj instanceof CommandsStud.TwoCommandsStud) {","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"howenc"},"content":" CommandsStud.TwoCommandsStud b \u003d (CommandsStud.TwoCommandsStud) obj;","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"howenc"},"content":" if (super.equals(b) \u0026\u0026 b.state2 \u003d\u003d this.state2 \u0026\u0026 this.name2.equals(b.name2) \u0026\u0026 this.secondaryCommand.equals(b.secondaryCommand)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"howenc"},"content":" public static class ThreeCommandsStud extends CommandsStud {","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"howenc"},"content":" private COMMANDS state2;","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"howenc"},"content":" private String name2;","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"howenc"},"content":" private COMMANDS state3;","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"howenc"},"content":" private String name3;","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"howenc"},"content":" private CommandsStud phaseTwo;","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"howenc"},"content":" private CommandsStud phaseThree;","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"howenc"},"content":" public ThreeCommandsStud(COMMANDS command, String str, COMMANDS command2, String str2, COMMANDS command3, String str3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"howenc"},"content":" super(command,str);","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"howenc"},"content":" this.state2 \u003d command2;","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"howenc"},"content":" this.name2 \u003d str2;","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"howenc"},"content":" this.state3 \u003d command3;","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"howenc"},"content":" this.name3 \u003d str3;","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"howenc"},"content":" public ThreeCommandsStud(COMMANDS command, String str, CommandsStud phaseTwo, CommandsStud phaseThree) {","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"howenc"},"content":" super(command,str);","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"howenc"},"content":" this.phaseTwo \u003d phaseTwo;","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"howenc"},"content":" this.phaseThree \u003d phaseThree;","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"howenc"},"content":" public int execute(ListOfTaskStud taskList, UiStud ui, int lineNumber, String error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"howenc"},"content":" boolean load \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"howenc"},"content":" if (lineNumber \u003d\u003d 0 \u0026\u0026 error \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"howenc"},"content":" load \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"howenc"},"content":" switch (super.state) {","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"howenc"},"content":" case EVENT:","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"howenc"},"content":" taskList.addTask(super.name, this.phaseTwo.dateTime, this.phaseThree.dateTime, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"howenc"},"content":" taskList.addTask(super.name, this.phaseTwo.dateTime, this.phaseThree.dateTime, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"howenc"},"content":" return 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"howenc"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"howenc"},"content":" if (this \u003d\u003d obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"howenc"},"content":" if (obj instanceof CommandsStud.ThreeCommandsStud) {","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"howenc"},"content":" CommandsStud.ThreeCommandsStud b \u003d (CommandsStud.ThreeCommandsStud) obj;","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"howenc"},"content":" if (super.equals(b) \u0026\u0026 b.state2 \u003d\u003d this.state2 \u0026\u0026 this.name2.equals(b.name2)","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"howenc"},"content":" \u0026\u0026 b.state3 \u003d\u003d this.state3 \u0026\u0026 this.name3.equals(b.name3)","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"howenc"},"content":" \u0026\u0026 this.phaseTwo.equals(b.phaseTwo) \u0026\u0026 this.phaseThree.equals(b.phaseThree)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":234}},{"path":"src/test/java/command/CommandsTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import dukeExceptions.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"import parser.ParserStud;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"import task.ListOfTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":"import static org.junit.jupiter.api.Assertions.assertNotEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":"public class CommandsTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" public void commandsEqualCommands() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" for (Commands.COMMANDS c : Commands.COMMANDS.values()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" for (Commands.COMMANDS d : Commands.COMMANDS.values()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" if (c \u003d\u003d d) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" assertEquals(Commands.of(c), Commands.of(d));","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" assertNotEquals(Commands.of(c), Commands.of(d));","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" public void commandsExecuteToDo() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" String[] cmd \u003d {\"todo CS2103T A-JUnit\", \"todo \"};","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" String cmd2 \u003d \"CS2103T A-JUnit\";","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" String cmd3 \u003d \"added: [T][ ] \";","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" for (int i \u003d 0; i \u003c cmd.length; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" ParserStud cm \u003d new ParserStud(cmd[i]);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" Commands c \u003d cm.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" c.action(new task.ListOfTask());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" assertEquals(cmd3 + cmd2 + \"\\r\\n\", outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":" assertEquals(\"Please add the task name\\r\\n\", e.getMessage() + \"\\r\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" public void commandsExecuteDeadline() {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":" String[] cmd \u003d {\"deadline CS2103T A-JUnit /by 18-09-2023 0000\",","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":" \"deadline gyrdefsf /by 8411\",","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":" \"deadline gyrdefsf /by \", \"deadline /b\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":" String cmd2 \u003d \"CS2103T A-JUnit\";","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":" String cmd3 \u003d \"added: [D][ ] \";","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":" String cmd4 \u003d \" (by: 18-09-2023 0000)\";","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":" for (String str : cmd) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":" ParserStud cm \u003d new ParserStud(str);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"howenc"},"content":" Commands c \u003d cm.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"howenc"},"content":" c.action(new task.ListOfTask());","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"howenc"},"content":" assertEquals(cmd3 + cmd2 + cmd4 + \"\\r\\n\", outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"howenc"},"content":" } catch (DukeDateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"howenc"},"content":" assertEquals(\"The format for dates\u0026time is \u0027dd-MM-yyyy hhmm\u0027\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"howenc"},"content":" } catch (DukeNullPointerException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"howenc"},"content":" assertEquals(\"The format for the command is: deadline task /by date\u0026time\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"howenc"},"content":" assertEquals(\"Please add the task name\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"howenc"},"content":" public void commandsExecuteEvent() {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"howenc"},"content":" String[] cmd \u003d {\"event CS2103T A-JUnit /from 18-09-2023 0000 /to 18-09-2024 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /to 18-09-2023 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /to 18-09-2024 9999\",","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /to 18-09-2024 \",","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 /to 18-09-2024 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /to\",","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /t 18-09-2024 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 / 18-09-2024 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 18-09-2024 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 9999\",","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09 1010\",","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from\",","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /fro\",","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from /to \",","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"howenc"},"content":" String cmd2 \u003d \"CS2103T A-JUnit\";","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"howenc"},"content":" String cmd3 \u003d \"added: [E][ ] \";","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"howenc"},"content":" String cmd4 \u003d \" (from: 18-09-2023 0000 to: 18-09-2024 0000)\";","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"howenc"},"content":" for (String str : cmd) {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"howenc"},"content":" ParserStud cm \u003d new ParserStud(str);","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"howenc"},"content":" Commands c \u003d cm.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"howenc"},"content":" c.action(new task.ListOfTask());","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"howenc"},"content":" assertEquals(cmd3 + cmd2 + cmd4 + \"\\r\\n\", outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"howenc"},"content":" } catch (DukeFromEarlierThanToException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"howenc"},"content":" assertEquals(\"From must be earlier than To\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"howenc"},"content":" } catch (DukeDateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"howenc"},"content":" assertEquals(\"The format for dates\u0026time is \u0027dd-MM-yyyy hhmm\u0027\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"howenc"},"content":" } catch (DukeNullPointerException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"howenc"},"content":" assertEquals(\"The format for the command is: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"howenc"},"content":" + \"event task /from startDayDateTime /to endDayDateTime\",","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"howenc"},"content":" e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"howenc"},"content":" assertEquals(\"Please add the task name\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"howenc"},"content":" public void commandsExecuteMark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"howenc"},"content":" String[] cmd \u003d {\"todo CS2103T A-JUnit\",","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"howenc"},"content":" \"deadline CS2103T A-JUnit /by 18-09-2023 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /to 18-09-2024 0000\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"howenc"},"content":" String[] cmdi \u003d {\"[T][X] CS2103T A-JUnit\",","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"howenc"},"content":" \"[D][X] CS2103T A-JUnit (by: 18-09-2023 0000)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"howenc"},"content":" \"[E][X] CS2103T A-JUnit (from: 18-09-2023 0000 to: 18-09-2024 0000)\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"howenc"},"content":" ListOfTask taskList \u003d new ListOfTask();","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"howenc"},"content":" for (String str : cmd) {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"howenc"},"content":" ParserStud cm \u003d new ParserStud(str);","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"howenc"},"content":" Commands c \u003d cm.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"howenc"},"content":" c.action(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"howenc"},"content":" System.out.println(\"check the test cases again\");","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"howenc"},"content":" int[] indexes \u003d {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"howenc"},"content":" for (int i \u003d 0; i \u003c indexes.length; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"howenc"},"content":" taskList.mark(indexes[i] + 1, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"howenc"},"content":" assertEquals(cmdi[i] + \"\\r\\n\", outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"howenc"},"content":" } catch (DukeNumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"howenc"},"content":" assertEquals(\"Place a number after the command\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"howenc"},"content":" assertEquals(\"Please select from index 1 to \" + taskList.size(), e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"howenc"},"content":" String s \u003d \"mark a\";","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"howenc"},"content":" ParserStud p \u003d new ParserStud(s);","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"howenc"},"content":" Commands c \u003d p.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"howenc"},"content":" assertEquals(\"Place a number after the command\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"howenc"},"content":" public void commandsExecuteUnMark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"howenc"},"content":" String[] cmd \u003d {\"todo CS2103T A-JUnit\",","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"howenc"},"content":" \"mark 1\",","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"howenc"},"content":" \"deadline CS2103T A-JUnit /by 18-09-2023 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"howenc"},"content":" \"mark 2\",","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /to 18-09-2024 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"howenc"},"content":" \"mark 3\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"howenc"},"content":" String[] cmdi \u003d {\"[T][ ] CS2103T A-JUnit\",","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"howenc"},"content":" \"[D][ ] CS2103T A-JUnit (by: 18-09-2023 0000)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"howenc"},"content":" \"[E][ ] CS2103T A-JUnit (from: 18-09-2023 0000 to: 18-09-2024 0000)\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"howenc"},"content":" ListOfTask taskList \u003d new ListOfTask();","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"howenc"},"content":" for (String str : cmd) {","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"howenc"},"content":" ParserStud cm \u003d new ParserStud(str);","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"howenc"},"content":" Commands c \u003d cm.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"howenc"},"content":" c.action(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"howenc"},"content":" System.out.println(\"check the test cases again\");","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"howenc"},"content":" int[] indexes \u003d {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"howenc"},"content":" for (int i \u003d 0; i \u003c indexes.length; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"howenc"},"content":" taskList.unMark(indexes[i] + 1, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"howenc"},"content":" assertEquals(cmdi[i] + \"\\r\\n\", outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"howenc"},"content":" } catch (DukeNumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"howenc"},"content":" assertEquals(\"Place a number after the command\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"howenc"},"content":" assertEquals(\"Please select from index 1 to \" + taskList.size(), e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"howenc"},"content":" String s \u003d \"unmark a\";","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"howenc"},"content":" ParserStud p \u003d new ParserStud(s);","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"howenc"},"content":" Commands c \u003d p.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"howenc"},"content":" assertEquals(\"Place a number after the command\", outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"howenc"},"content":" assertEquals(\"Place a number after the command\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"howenc"},"content":" public void commandsExecuteDelete() {","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"howenc"},"content":" String[] cmd \u003d {\"todo CS2103T A-JUnit\",","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"howenc"},"content":" \"deadline CS2103T A-JUnit /by 18-09-2023 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /to 18-09-2024 0000\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"howenc"},"content":" String[] cmdi \u003d {\"[T][ ] CS2103T A-JUnit has been deleted\",","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"howenc"},"content":" \"[D][ ] CS2103T A-JUnit (by: 18-09-2023 0000) has been deleted\",","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"howenc"},"content":" \"[E][ ] CS2103T A-JUnit (from: 18-09-2023 0000 to: 18-09-2024 0000) has been deleted\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"howenc"},"content":" ListOfTask taskList \u003d new ListOfTask();","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"howenc"},"content":" for (String str : cmd) {","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"howenc"},"content":" ParserStud cm \u003d new ParserStud(str);","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"howenc"},"content":" Commands c \u003d cm.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"howenc"},"content":" c.action(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"howenc"},"content":" System.out.println(\"check the test cases again\");","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"howenc"},"content":" for (int i \u003d 0; i \u003c 3; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"howenc"},"content":" taskList.delete( 1, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"howenc"},"content":" assertEquals(cmdi[i] + \"\\r\\n\", outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":235,"author":{"gitId":"howenc"},"content":" } catch (DukeNumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"howenc"},"content":" assertEquals(\"Place a number after the command\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":237,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":238,"author":{"gitId":"howenc"},"content":" assertEquals(\"Please select from index 1 to \" + taskList.size(), e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":239,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":240,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"howenc"},"content":" String s \u003d \"mark a\";","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"howenc"},"content":" ParserStud p \u003d new ParserStud(s);","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":247,"author":{"gitId":"howenc"},"content":" Commands c \u003d p.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":248,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":249,"author":{"gitId":"howenc"},"content":" assertEquals(\"Place a number after the command\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":250,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":251,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"howenc"},"content":" public void commandsExecuteList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"howenc"},"content":" String[] cmd \u003d {\"todo CS2103T A-JUnit\",","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"howenc"},"content":" \"deadline CS2103T A-JUnit /by 18-09-2023 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /to 18-09-2024 0000\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"howenc"},"content":" String cmdi \u003d \"1.[T][ ] CS2103T A-JUnit\\r\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"howenc"},"content":" + \"2.[D][ ] CS2103T A-JUnit (by: 18-09-2023 0000)\\r\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":260,"author":{"gitId":"howenc"},"content":" + \"3.[E][ ] CS2103T A-JUnit (from: 18-09-2023 0000 to: 18-09-2024 0000)\\r\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"howenc"},"content":" ListOfTask taskList \u003d new ListOfTask();","lastModifiedDate":"2023-08-30"},{"lineNumber":262,"author":{"gitId":"howenc"},"content":" for (String str : cmd) {","lastModifiedDate":"2023-08-30"},{"lineNumber":263,"author":{"gitId":"howenc"},"content":" ParserStud cm \u003d new ParserStud(str);","lastModifiedDate":"2023-08-30"},{"lineNumber":264,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"howenc"},"content":" Commands c \u003d cm.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"howenc"},"content":" c.action(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":267,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"howenc"},"content":" System.out.println(\"check the test cases again\");","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"howenc"},"content":" String[] cmdj \u003d {\"l\", \"list \", \"list\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":272,"author":{"gitId":"howenc"},"content":" for (String str : cmdj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"howenc"},"content":" ParserStud p \u003d new ParserStud(str);","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":277,"author":{"gitId":"howenc"},"content":" Commands c \u003d p.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":278,"author":{"gitId":"howenc"},"content":" c.action(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":279,"author":{"gitId":"howenc"},"content":" assertEquals(cmdi, outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":280,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":281,"author":{"gitId":"howenc"},"content":" assertEquals(\"Unknown command\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":285,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":286,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":287,"author":{"gitId":"howenc"},"content":" public void commandsExecuteFind() {","lastModifiedDate":"2023-08-31"},{"lineNumber":288,"author":{"gitId":"howenc"},"content":" String[] cmd \u003d {\"todo CS2103T A-JUnit\",","lastModifiedDate":"2023-08-31"},{"lineNumber":289,"author":{"gitId":"howenc"},"content":" \"deadline CS2103T B-JUnit /by 18-09-2023 0000\",","lastModifiedDate":"2023-08-31"},{"lineNumber":290,"author":{"gitId":"howenc"},"content":" \"event CS2103T C-JUnit /from 18-09-2023 0000 /to 18-09-2024 0000\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":291,"author":{"gitId":"howenc"},"content":" String[] cmdi \u003d {\"3.[E][ ] CS2103T C-JUnit (from: 18-09-2023 0000 to: 18-09-2024 0000)\\r\\n\",","lastModifiedDate":"2023-08-31"},{"lineNumber":292,"author":{"gitId":"howenc"},"content":" \"2.[D][ ] CS2103T B-JUnit (by: 18-09-2023 0000)\\r\\n\",","lastModifiedDate":"2023-08-31"},{"lineNumber":293,"author":{"gitId":"howenc"},"content":" \"1.[T][ ] CS2103T A-JUnit\\r\\n\",","lastModifiedDate":"2023-08-31"},{"lineNumber":294,"author":{"gitId":"howenc"},"content":" \"Whoopys uWu, sorry I couldnyt fynd any taysk that contyain that strying. XD uWu\\r\\n\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":295,"author":{"gitId":"howenc"},"content":" ListOfTask taskList \u003d new ListOfTask();","lastModifiedDate":"2023-08-31"},{"lineNumber":296,"author":{"gitId":"howenc"},"content":" for (String str : cmd) {","lastModifiedDate":"2023-08-31"},{"lineNumber":297,"author":{"gitId":"howenc"},"content":" ParserStud cm \u003d new ParserStud(str);","lastModifiedDate":"2023-08-31"},{"lineNumber":298,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":299,"author":{"gitId":"howenc"},"content":" Commands c \u003d cm.parse();","lastModifiedDate":"2023-08-31"},{"lineNumber":300,"author":{"gitId":"howenc"},"content":" c.action(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":301,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":302,"author":{"gitId":"howenc"},"content":" System.out.println(\"check the test cases again\");","lastModifiedDate":"2023-08-31"},{"lineNumber":303,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":304,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":305,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":306,"author":{"gitId":"howenc"},"content":" String[] cmdj \u003d {\"f\", \"find\", \"find \", \"find C-JUnit\", \"find B\", \"find A\", \"find d\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":307,"author":{"gitId":"howenc"},"content":" for (int i \u003d 0; i \u003c cmdj.length; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":308,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":309,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-31"},{"lineNumber":310,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-31"},{"lineNumber":311,"author":{"gitId":"howenc"},"content":" ParserStud p \u003d new ParserStud(cmdj[i]);","lastModifiedDate":"2023-08-31"},{"lineNumber":312,"author":{"gitId":"howenc"},"content":" Commands c \u003d p.parse();","lastModifiedDate":"2023-08-31"},{"lineNumber":313,"author":{"gitId":"howenc"},"content":" c.action(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":314,"author":{"gitId":"howenc"},"content":" assertEquals(cmdi[i - 3], outContent.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":315,"author":{"gitId":"howenc"},"content":" } catch (DukeUnknownCommandException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":316,"author":{"gitId":"howenc"},"content":" assertEquals(\"Unknown command\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":317,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":318,"author":{"gitId":"howenc"},"content":" assertEquals(\"Please add the task name\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":319,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":320,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":321,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":322,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":323,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":323}},{"path":"src/test/java/dukeExceptions/DukeExceptionTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package test.java.DukeExceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"public class DukeExceptionTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":4}},{"path":"src/test/java/parser/ParserStud.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import command.Commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"import dukeExceptions.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"public class ParserStud {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":" private String command;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" private String[] initialParse;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" private String[] phaseParse;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" * Construct the Parser object.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" * @param command The string that needs to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" public ParserStud(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" * Parses the string into actionable commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" * @return Returns a Command object.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" * @throws DukeException If the input is not a command","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" public Commands parse() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" Commands.COMMANDS cmd \u003d this.mainCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" if (cmd \u003d\u003d Commands.COMMANDS.BYE || cmd \u003d\u003d Commands.COMMANDS.LIST) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" return Commands.of(cmd);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":" if (cmd \u003d\u003d Commands.COMMANDS.TODO || cmd \u003d\u003d Commands.COMMANDS.FIND) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" if (this.secondWord() \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"Please add the task name\");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" return Commands.of(cmd, this.secondWord());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" if (cmd \u003d\u003d Commands.COMMANDS.BY || cmd \u003d\u003d Commands.COMMANDS.FROM || cmd \u003d\u003d Commands.COMMANDS.TO) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" String restOfCommand \u003d this.secondWord().trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(restOfCommand, Duke.FORMAT);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":" return Commands.of(cmd, dateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" throw new DukeDateTimeParseException(\"The format for dates\u0026time is \u0027dd-MM-yyyy hhmm\u0027\");","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":" if (cmd \u003d\u003d Commands.COMMANDS.MARK || cmd \u003d\u003d Commands.COMMANDS.UNMARK || cmd \u003d\u003d Commands.COMMANDS.DELETE) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":" int index \u003d Integer.parseInt(this.secondWord());","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":" return Commands.of(cmd, index);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":" throw new DukeNumberFormatException(\"Place a number after the command\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"howenc"},"content":" if (cmd \u003d\u003d Commands.COMMANDS.DEADLINE) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"howenc"},"content":" String task \u003d this.phaseParse();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"howenc"},"content":" String command2 \u003d this.phaseTwo();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"howenc"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"howenc"},"content":" ParserStud phaseTwo \u003d new ParserStud(command2);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"howenc"},"content":" Commands c \u003d phaseTwo.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"howenc"},"content":" if (c.checkCommand(Commands.COMMANDS.BY)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"howenc"},"content":" return Commands.of(Commands.COMMANDS.DEADLINE, task, c);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"Please add the task name\");","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"howenc"},"content":" } catch (DukeUnknownCommandException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"howenc"},"content":" throw new DukeNullPointerException(\"The format for the command is: deadline task /by date\u0026time\");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"howenc"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"howenc"},"content":" throw new DukeNullPointerException(\"The format for the command is: deadline task /by date\u0026time\");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"howenc"},"content":" if (cmd \u003d\u003d Commands.COMMANDS.EVENT) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"howenc"},"content":" String task \u003d this.phaseParse();","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"howenc"},"content":" String command2 \u003d this.phaseTwo();","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"howenc"},"content":" String command3 \u003d this.phaseThree();","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"howenc"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"howenc"},"content":" ParserStud phaseTwo \u003d new ParserStud(command2);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"howenc"},"content":" Commands c1 \u003d phaseTwo.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"howenc"},"content":" ParserStud phaseThree \u003d new ParserStud(command3);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"howenc"},"content":" Commands c2 \u003d phaseThree.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"howenc"},"content":" if (c1.checkCommand(Commands.COMMANDS.FROM) \u0026\u0026 c2.checkCommand(Commands.COMMANDS.TO)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"howenc"},"content":" if (c1.compareTime(c2)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"howenc"},"content":" return Commands.of(Commands.COMMANDS.EVENT, task, c1, c2);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"howenc"},"content":" throw new DukeFromEarlierThanToException(\"From must be earlier than To\");","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"howenc"},"content":" throw new DukeNullPointerException(\"The format for the command is: event task /from startDayDateTime /to endDayDateTime\");","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"Please add the task name\");","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"howenc"},"content":" } catch (DukeUnknownCommandException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"howenc"},"content":" throw new DukeNullPointerException(\"The format for the command is: event task /from startDayDateTime /to endDayDateTime\");","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"howenc"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"howenc"},"content":" throw new DukeNullPointerException(\"The format for the command is: event task /from startDayDateTime /to endDayDateTime\");","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"howenc"},"content":" throw new DukeUnknownCommandException(\"Unknown command\");","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"howenc"},"content":" public Commands.COMMANDS mainCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"howenc"},"content":" this.initialParse \u003d command.split(\" \",2);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"howenc"},"content":" switch (initialParse[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"howenc"},"content":" case (\"bye\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.BYE;","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"howenc"},"content":" case (\"list\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.LIST;","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"howenc"},"content":" case (\"todo\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.TODO;","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"howenc"},"content":" case (\"deadline\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.DEADLINE;","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"howenc"},"content":" case (\"event\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.EVENT;","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"howenc"},"content":" case (\"mark\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.MARK;","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"howenc"},"content":" case (\"unmark\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.UNMARK;","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"howenc"},"content":" case (\"delete\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.DELETE;","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"howenc"},"content":" case (\"by\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.BY;","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"howenc"},"content":" case (\"from\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.FROM;","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"howenc"},"content":" case (\"to\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.TO;","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"howenc"},"content":" case (\"sort\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.SORT;","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"howenc"},"content":" case (\"find\"):","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.FIND;","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"howenc"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"howenc"},"content":" return Commands.COMMANDS.UNKNOWN;","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"howenc"},"content":" public String secondWord() {","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"howenc"},"content":" if (this.initialParse[1].equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"howenc"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"howenc"},"content":" return this.initialParse[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"howenc"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"howenc"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"howenc"},"content":" public String phaseParse() {","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"howenc"},"content":" this.phaseParse \u003d this.initialParse[1].split(\"/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"howenc"},"content":" return phaseParse[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"howenc"},"content":" } catch (NullPointerException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"howenc"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"howenc"},"content":" public String phaseTwo() {","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"howenc"},"content":" return this.phaseParse[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"howenc"},"content":" } catch (NullPointerException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"howenc"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"howenc"},"content":" public String phaseThree() {","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"howenc"},"content":" return this.phaseParse[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"howenc"},"content":" } catch (NullPointerException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"howenc"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":186}},{"path":"src/test/java/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package test.java.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":4}},{"path":"src/test/java/storage/StorageStud.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import task.ListOfTaskStud;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"import task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"import task.TaskStud;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"public class StorageStud {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":" public static void save(ArrayList\u003cTaskStud\u003e listOfTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" public static boolean load(ListOfTaskStud taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" public static void quickLoad(String command, ListOfTaskStud taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":20}},{"path":"src/test/java/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package test.java.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":4}},{"path":"src/test/java/task/ListOfTaskStud.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"import storage.StorageStud;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"public class ListOfTaskStud {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":" private ArrayList\u003cTaskStud\u003e listOfTask \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":" public int size() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" return listOfTask.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" public void addTask(String task, boolean print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" TaskStud temp \u003d new TaskStud(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" listOfTask.add(temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" if (print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" System.out.println(\"added: \" + temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" StorageStud.save(listOfTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" public void addTask(String task, LocalDateTime dayDate, boolean print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" TaskStud temp \u003d new TaskStud.DeadlinesStud(task, dayDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" listOfTask.add(temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" if (print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" System.out.println(\"added: \" + temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" StorageStud.save(listOfTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" public void addTask(String task, LocalDateTime startDayDateTime, LocalDateTime endDayDateTime, boolean print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" TaskStud temp \u003d new TaskStud.EventStud(task, startDayDateTime, endDayDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":" listOfTask.add(temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" if (print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" System.out.println(\"added: \" + temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" StorageStud.save(listOfTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":" public void listTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" int[] i \u003d new int[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" i[0] \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" listOfTask.forEach(x-\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" System.out.print(i[0] + \".\");","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":" System.out.println(x);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" i[0]++;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":" public void mark(int index, boolean print) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":" listOfTask.get(index - 1).setDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":" if (print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":" System.out.println(listOfTask.get(index - 1).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":" StorageStud.save(listOfTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"howenc"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"Please select from index 1 to \" + listOfTask.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"howenc"},"content":" public void unMark(int index, boolean print) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"howenc"},"content":" listOfTask.get(index - 1).setNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"howenc"},"content":" if (print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"howenc"},"content":" System.out.println(listOfTask.get(index - 1).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"howenc"},"content":" StorageStud.save(listOfTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"howenc"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"Please select from index 1 to \" + listOfTask.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"howenc"},"content":" public void delete(int index, boolean print) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"howenc"},"content":" TaskStud removed \u003d listOfTask.remove(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"howenc"},"content":" if (print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"howenc"},"content":" System.out.println(removed + \" has been removed\");","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"howenc"},"content":" StorageStud.save(listOfTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"howenc"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"Please select from index 1 to \" + listOfTask.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":94}},{"path":"src/test/java/task/ListOfTaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package test.java.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"public class ListOfTaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":4}},{"path":"src/test/java/task/TaskStud.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"public class TaskStud {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":" private String taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":" private Boolean done;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":" private LocalDateTime dateAdded;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" public TaskStud(String taskName) {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" this.dateAdded \u003d LocalDateTime.now();","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" return (\"[\" + (this.done ? \"X] \" : \" ] \") + this.taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" public void mark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" this.done \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" public void unMark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" return this.done;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" public String write() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" return \"task \" + this.taskName + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" public void setDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" public void setNotDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" public static class ToDosStud extends TaskStud {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" public ToDosStud(String taskName) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" super(taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":" public String write() {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":" return \"todo \" + super.taskName + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":" public static class DeadlinesStud extends TaskStud {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":" private LocalDateTime dayDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"howenc"},"content":" public DeadlinesStud(String taskName, LocalDateTime dayDate) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"howenc"},"content":" super(taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"howenc"},"content":" this.dayDate \u003d dayDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"howenc"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"howenc"},"content":" return \"[D]\" + super.toString()","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"howenc"},"content":" + \"(by: \" + this.dayDate.format(Duke.FORMAT) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"howenc"},"content":" public String write() {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"howenc"},"content":" return \"deadline \" + super.taskName + \"/by \" + this.dayDate.format(Duke.FORMAT) + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"howenc"},"content":" public static class EventStud extends TaskStud {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"howenc"},"content":" private LocalDateTime startDayDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"howenc"},"content":" private LocalDateTime endDayDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"howenc"},"content":" public EventStud(String taskName, LocalDateTime startDayDateTime, LocalDateTime endDayDateTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"howenc"},"content":" super(taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"howenc"},"content":" this.endDayDateTime \u003d endDayDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"howenc"},"content":" this.startDayDateTime \u003d startDayDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"howenc"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"howenc"},"content":" return \"[E]\" + super.toString() + \"(from: \" + startDayDateTime.format(Duke.FORMAT)","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"howenc"},"content":" + \" to: \" + endDayDateTime.format(Duke.FORMAT) +\")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"howenc"},"content":" public String write() {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"howenc"},"content":" return \"event \" + super.taskName + \"/from \" + this.startDayDateTime.format(Duke.FORMAT)","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"howenc"},"content":" + \"/to \" + this.endDayDateTime.format(Duke.FORMAT) + \"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":101}},{"path":"src/test/java/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package test.java.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":4}},{"path":"src/test/java/ui/UiStud.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"public class UiStud {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":" public UiStud() {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":" public String nextInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":" Scanner scanObj \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":" return scanObj.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" public void greet() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" System.out.println(\"Hello. I am Luxion. \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" \"What can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" public void exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" System.out.println(\"Bye. See you soon.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":23}},{"path":"src/test/java/ui/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package test.java.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"public class UiTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":4}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"howenc":1}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"# duke project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":"3. After that, locate the `src/main/java/duke.java` file, right-click it, and choose `Run duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"howenc":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":"javafx {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" version \u003d \"11\"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" modules \u003d [ \u0027javafx.controls\u0027 ]","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" implementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" implementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" implementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","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":"howenc"},"content":"checkstyle {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"howenc"},"content":" archiveFileName \u003d \"duke.jar\"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":67,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":69,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":71,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"howenc":30,"-":41}},{"path":"src/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"todo CS2103T A-JUnit","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":1}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"import gui.Main;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":" * This launches the application for duke.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"howenc":11}},{"path":"src/main/java/command/Commands.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"import task.ListOfTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":" * This class uses its state to execute commands.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":" * The Commands factory methods should only be used by Parser class.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":"public class Commands {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" * List of both primary and secondary commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" public enum CommandEnum { BYE, LIST, TODO, DEADLINE, EVENT, MARK,","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" UNMARK, DELETE, BY, FROM, TO, SORT, FIND, UNKNOWN }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" private CommandEnum primaryCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" private String taskDescription;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" private int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" private LocalDateTime dateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" private Commands(CommandEnum command) {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" this.primaryCommand \u003d command;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" private Commands(CommandEnum command, String task) {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" this.primaryCommand \u003d command;","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" this.taskDescription \u003d task;","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" private Commands(CommandEnum command, int index) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" this.primaryCommand \u003d command;","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" private Commands(CommandEnum command, LocalDateTime dateTime) {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" this.primaryCommand \u003d command;","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" * Constructs a Commands object with only the primary command.","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" * @param command The command or action given by the Parse object.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" public static Commands of(CommandEnum command) {","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" return new Commands(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":" * Constructs a Commands object with both a primary command and task description.","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":" * @param command The command or action given by the Parse object.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":" * @param task The task name or description.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":" public static Commands of(CommandEnum command, String task) {","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"howenc"},"content":" return new Commands(command, task);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"howenc"},"content":" * Constructs a Commands object with both a primary command and the index of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"howenc"},"content":" * @param command The command or action given by the Parse object.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"howenc"},"content":" * @param index The index of the task that the command should act on.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"howenc"},"content":" public static Commands of(CommandEnum command, int index) {","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"howenc"},"content":" return new Commands(command, index);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"howenc"},"content":" * Constructs a Commands object with both a primary command and the index of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"howenc"},"content":" * @param command The command or action given by the Parse object.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"howenc"},"content":" * @param dateTime The date and time of a command giving in the format of \u0027dd-MM-yyyy HHmm\u0027.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"howenc"},"content":" public static Commands of(CommandEnum command, LocalDateTime dateTime) {","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"howenc"},"content":" return new Commands(command, dateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"howenc"},"content":" * Constructs a Commands object with both a primary command and the index of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"howenc"},"content":" * @param command The command or action given by the Parse object.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"howenc"},"content":" * @param task The task name or description.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"howenc"},"content":" * @param secondaryCommand A sub-command that supplements the main command.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"howenc"},"content":" public static Commands of(CommandEnum command, String task, Commands secondaryCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"howenc"},"content":" return new Commands.TwoCommands(command, task, secondaryCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"howenc"},"content":" * Constructs a Commands object with both a primary command and the index of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"howenc"},"content":" * @param command The command or action given by the Parse object.","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"howenc"},"content":" * @param task The task name or description.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"howenc"},"content":" * @param secondaryCommand A sub-command that supplements the main command.","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"howenc"},"content":" * @param tertiaryCommand A sub-command that supplements the main command and comes after the secondaryCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"howenc"},"content":" public static Commands of(CommandEnum command, String task, Commands secondaryCommand, Commands tertiaryCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"howenc"},"content":" return new Commands.ThreeCommands(command, task, secondaryCommand, tertiaryCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"howenc"},"content":" * Checks if this object\u0027s COMMANDS is the same as command.","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"howenc"},"content":" * @param command The COMMANDS enum that you want to compare","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"howenc"},"content":" * @return Returns true same, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"howenc"},"content":" public boolean checkCommand(CommandEnum command) {","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"howenc"},"content":" if (this.primaryCommand \u003d\u003d command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"howenc"},"content":" * Executes the action or throws a DukeException.","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"howenc"},"content":" * @param taskList The list of tasks that the action will be executed in.","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"howenc"},"content":" * @return Returns 0 if the \u0027bye\u0027 command is executed, returns 1 if any other command is successfully executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"howenc"},"content":" * @throws DukeException The exception thrown when encountering any problems in executing.","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"howenc"},"content":" public int execute(ListOfTask taskList) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"howenc"},"content":" return execute(taskList, 0, null);","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"howenc"},"content":" * Executes the action or throws a DukeException.","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"howenc"},"content":" * @param taskList The list of tasks that the action will be executed in.","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"howenc"},"content":" * @param lineNumber Line Number of the command when reading from the save file.","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"howenc"},"content":" * @param error The command reading from the save file.","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"howenc"},"content":" * @return Returns 0 if the \u0027bye\u0027 command is executed, returns 1 if any other command is successfully executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"howenc"},"content":" * @throws DukeException The exception thrown when encountering any problems in executing.","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"howenc"},"content":" public int execute(ListOfTask taskList, int lineNumber, String error) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"howenc"},"content":" boolean load \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"howenc"},"content":" if (lineNumber \u003d\u003d 0 \u0026\u0026 error \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"howenc"},"content":" load \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"howenc"},"content":" switch (this.primaryCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"howenc"},"content":" case BYE:","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"howenc"},"content":" return 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"howenc"},"content":" case LIST:","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"howenc"},"content":" taskList.listTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"howenc"},"content":" case TODO:","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"howenc"},"content":" taskList.addToDo(this.taskDescription, true);","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"howenc"},"content":" taskList.addToDo(this.taskDescription, false);","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"howenc"},"content":" case FIND:","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"howenc"},"content":" taskList.find(this.taskDescription);","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"howenc"},"content":" case SORT:","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"howenc"},"content":" case MARK:","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"howenc"},"content":" taskList.markOrUnmark(this.index, true, true);","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"howenc"},"content":" taskList.markOrUnmark(this.index, true, false);","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"howenc"},"content":" case UNMARK:","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"howenc"},"content":" taskList.markOrUnmark(this.index, false, true);","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"howenc"},"content":" taskList.markOrUnmark(this.index, false, false);","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"howenc"},"content":" case DELETE:","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"howenc"},"content":" taskList.delete(this.index, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"howenc"},"content":" taskList.delete(this.index, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":191,"author":{"gitId":"howenc"},"content":" default:","lastModifiedDate":"2023-09-06"},{"lineNumber":192,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":193,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"howenc"},"content":" return 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":195,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":196,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":197,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"howenc"},"content":" * Compares LocalDateTime between this object and c.","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"howenc"},"content":" * @param c Commands object to be compared to.","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"howenc"},"content":" * @return Returns true if this object\u0027s time is before c\u0027s time, false for all other cases.","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"howenc"},"content":" public boolean compareTime(Commands c) {","lastModifiedDate":"2023-08-29"},{"lineNumber":204,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"howenc"},"content":" if (this.dateTime.isBefore(c.dateTime)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"howenc"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"howenc"},"content":" * Compares this object to another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"howenc"},"content":" * @param obj An object.","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"howenc"},"content":" * @return Returns true if both objects are equivalent, false if otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"howenc"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"howenc"},"content":" if (this \u003d\u003d obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"howenc"},"content":" if (obj instanceof Commands) {","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"howenc"},"content":" Commands b \u003d (Commands) obj;","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"howenc"},"content":" if (b.primaryCommand \u003d\u003d this.primaryCommand","lastModifiedDate":"2023-09-05"},{"lineNumber":228,"author":{"gitId":"howenc"},"content":" \u0026\u0026 b.dateTime \u003d\u003d this.dateTime","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"howenc"},"content":" \u0026\u0026 b.index \u003d\u003d this.index","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"howenc"},"content":" \u0026\u0026 b.taskDescription \u003d\u003d this.taskDescription) {","lastModifiedDate":"2023-09-05"},{"lineNumber":231,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":232,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":233,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":235,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":236,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":237,"author":{"gitId":"howenc"},"content":" private static class TwoCommands extends Commands {","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"howenc"},"content":" private CommandEnum backUpSecondaryCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":239,"author":{"gitId":"howenc"},"content":" private String backUpSecondaryString;","lastModifiedDate":"2023-09-05"},{"lineNumber":240,"author":{"gitId":"howenc"},"content":" private Commands secondaryCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":241,"author":{"gitId":"howenc"},"content":" private TwoCommands(CommandEnum command, String str, CommandEnum backUpSecondaryCommand,","lastModifiedDate":"2023-09-06"},{"lineNumber":242,"author":{"gitId":"howenc"},"content":" String backUpSecondaryString) {","lastModifiedDate":"2023-09-05"},{"lineNumber":243,"author":{"gitId":"howenc"},"content":" super(command, str);","lastModifiedDate":"2023-08-29"},{"lineNumber":244,"author":{"gitId":"howenc"},"content":" this.backUpSecondaryCommand \u003d backUpSecondaryCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":245,"author":{"gitId":"howenc"},"content":" this.backUpSecondaryString \u003d backUpSecondaryString;","lastModifiedDate":"2023-09-05"},{"lineNumber":246,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":247,"author":{"gitId":"howenc"},"content":" private TwoCommands(CommandEnum command, String str, Commands secondaryCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":248,"author":{"gitId":"howenc"},"content":" super(command, str);","lastModifiedDate":"2023-08-29"},{"lineNumber":249,"author":{"gitId":"howenc"},"content":" this.secondaryCommand \u003d secondaryCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":250,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":251,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":253,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-08-31"},{"lineNumber":254,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":255,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":256,"author":{"gitId":"howenc"},"content":" public int execute(ListOfTask taskList, int lineNumber, String error) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":257,"author":{"gitId":"howenc"},"content":" boolean load \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"howenc"},"content":" if (lineNumber \u003d\u003d 0 \u0026\u0026 error \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"howenc"},"content":" load \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":260,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"howenc"},"content":" switch (super.primaryCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":262,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":263,"author":{"gitId":"howenc"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-29"},{"lineNumber":264,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"howenc"},"content":" taskList.addDeadline(super.taskDescription, this.secondaryCommand.dateTime, true);","lastModifiedDate":"2023-09-05"},{"lineNumber":266,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":267,"author":{"gitId":"howenc"},"content":" taskList.addDeadline(super.taskDescription, this.secondaryCommand.dateTime, false);","lastModifiedDate":"2023-09-05"},{"lineNumber":268,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":270,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":271,"author":{"gitId":"howenc"},"content":" default:","lastModifiedDate":"2023-09-06"},{"lineNumber":272,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":273,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":274,"author":{"gitId":"howenc"},"content":" return 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":275,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":276,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":277,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":278,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-08-31"},{"lineNumber":279,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":280,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":281,"author":{"gitId":"howenc"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"howenc"},"content":" if (this \u003d\u003d obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"howenc"},"content":" if (obj instanceof Commands.TwoCommands) {","lastModifiedDate":"2023-08-30"},{"lineNumber":286,"author":{"gitId":"howenc"},"content":" Commands.TwoCommands b \u003d (Commands.TwoCommands) obj;","lastModifiedDate":"2023-08-30"},{"lineNumber":287,"author":{"gitId":"howenc"},"content":" if (super.equals(b)","lastModifiedDate":"2023-08-31"},{"lineNumber":288,"author":{"gitId":"howenc"},"content":" \u0026\u0026 b.backUpSecondaryCommand \u003d\u003d this.backUpSecondaryCommand","lastModifiedDate":"2023-09-05"},{"lineNumber":289,"author":{"gitId":"howenc"},"content":" \u0026\u0026 this.backUpSecondaryString.equals(b.backUpSecondaryString)","lastModifiedDate":"2023-09-05"},{"lineNumber":290,"author":{"gitId":"howenc"},"content":" \u0026\u0026 this.secondaryCommand.equals(b.secondaryCommand)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":291,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":292,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":293,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":294,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":295,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":296,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":297,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":298,"author":{"gitId":"howenc"},"content":" private static class ThreeCommands extends Commands {","lastModifiedDate":"2023-08-31"},{"lineNumber":299,"author":{"gitId":"howenc"},"content":" private CommandEnum backUpSecondaryCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":300,"author":{"gitId":"howenc"},"content":" private String backUpSecondaryDescription;","lastModifiedDate":"2023-09-05"},{"lineNumber":301,"author":{"gitId":"howenc"},"content":" private CommandEnum backUpTertiaryCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":302,"author":{"gitId":"howenc"},"content":" private String backUpTertiaryDescription;","lastModifiedDate":"2023-09-05"},{"lineNumber":303,"author":{"gitId":"howenc"},"content":" private Commands phaseTwo;","lastModifiedDate":"2023-08-29"},{"lineNumber":304,"author":{"gitId":"howenc"},"content":" private Commands phaseThree;","lastModifiedDate":"2023-08-29"},{"lineNumber":305,"author":{"gitId":"howenc"},"content":" private ThreeCommands(CommandEnum command, String str, CommandEnum command2,","lastModifiedDate":"2023-09-06"},{"lineNumber":306,"author":{"gitId":"howenc"},"content":" String str2, CommandEnum command3, String str3) {","lastModifiedDate":"2023-09-06"},{"lineNumber":307,"author":{"gitId":"howenc"},"content":" super(command, str);","lastModifiedDate":"2023-08-29"},{"lineNumber":308,"author":{"gitId":"howenc"},"content":" this.backUpSecondaryCommand \u003d command2;","lastModifiedDate":"2023-09-05"},{"lineNumber":309,"author":{"gitId":"howenc"},"content":" this.backUpSecondaryDescription \u003d str2;","lastModifiedDate":"2023-09-05"},{"lineNumber":310,"author":{"gitId":"howenc"},"content":" this.backUpTertiaryCommand \u003d command3;","lastModifiedDate":"2023-09-05"},{"lineNumber":311,"author":{"gitId":"howenc"},"content":" this.backUpTertiaryDescription \u003d str3;","lastModifiedDate":"2023-09-05"},{"lineNumber":312,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":313,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":314,"author":{"gitId":"howenc"},"content":" private ThreeCommands(CommandEnum command, String str, Commands phaseTwo, Commands phaseThree) {","lastModifiedDate":"2023-09-06"},{"lineNumber":315,"author":{"gitId":"howenc"},"content":" super(command, str);","lastModifiedDate":"2023-08-29"},{"lineNumber":316,"author":{"gitId":"howenc"},"content":" this.phaseTwo \u003d phaseTwo;","lastModifiedDate":"2023-08-29"},{"lineNumber":317,"author":{"gitId":"howenc"},"content":" this.phaseThree \u003d phaseThree;","lastModifiedDate":"2023-08-29"},{"lineNumber":318,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":319,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":320,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":321,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-08-31"},{"lineNumber":322,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":323,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":324,"author":{"gitId":"howenc"},"content":" public int execute(ListOfTask taskList, int lineNumber, String error) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":325,"author":{"gitId":"howenc"},"content":" boolean load \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":326,"author":{"gitId":"howenc"},"content":" if (lineNumber \u003d\u003d 0 \u0026\u0026 error \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":327,"author":{"gitId":"howenc"},"content":" load \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":328,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":329,"author":{"gitId":"howenc"},"content":" switch (super.primaryCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":330,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":331,"author":{"gitId":"howenc"},"content":" case EVENT:","lastModifiedDate":"2023-08-29"},{"lineNumber":332,"author":{"gitId":"howenc"},"content":" if (!load) {","lastModifiedDate":"2023-08-30"},{"lineNumber":333,"author":{"gitId":"howenc"},"content":" taskList.addEvent(super.taskDescription, this.phaseTwo.dateTime,","lastModifiedDate":"2023-09-05"},{"lineNumber":334,"author":{"gitId":"howenc"},"content":" this.phaseThree.dateTime, true);","lastModifiedDate":"2023-09-05"},{"lineNumber":335,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":336,"author":{"gitId":"howenc"},"content":" taskList.addEvent(super.taskDescription, this.phaseTwo.dateTime,","lastModifiedDate":"2023-09-05"},{"lineNumber":337,"author":{"gitId":"howenc"},"content":" this.phaseThree.dateTime, false);","lastModifiedDate":"2023-09-05"},{"lineNumber":338,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":339,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":340,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":341,"author":{"gitId":"howenc"},"content":" default:","lastModifiedDate":"2023-09-06"},{"lineNumber":342,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":343,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":344,"author":{"gitId":"howenc"},"content":" return 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":345,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":346,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":347,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":348,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-08-31"},{"lineNumber":349,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":350,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":351,"author":{"gitId":"howenc"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":352,"author":{"gitId":"howenc"},"content":" if (this \u003d\u003d obj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":353,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":354,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":355,"author":{"gitId":"howenc"},"content":" if (obj instanceof Commands.ThreeCommands) {","lastModifiedDate":"2023-08-30"},{"lineNumber":356,"author":{"gitId":"howenc"},"content":" Commands.ThreeCommands b \u003d (Commands.ThreeCommands) obj;","lastModifiedDate":"2023-08-30"},{"lineNumber":357,"author":{"gitId":"howenc"},"content":" if (super.equals(b) \u0026\u0026 b.backUpSecondaryCommand \u003d\u003d this.backUpSecondaryCommand","lastModifiedDate":"2023-09-05"},{"lineNumber":358,"author":{"gitId":"howenc"},"content":" \u0026\u0026 this.backUpSecondaryDescription.equals(b.backUpSecondaryDescription)","lastModifiedDate":"2023-09-05"},{"lineNumber":359,"author":{"gitId":"howenc"},"content":" \u0026\u0026 b.backUpTertiaryCommand \u003d\u003d this.backUpTertiaryCommand","lastModifiedDate":"2023-09-05"},{"lineNumber":360,"author":{"gitId":"howenc"},"content":" \u0026\u0026 this.backUpTertiaryDescription.equals(b.backUpTertiaryDescription)","lastModifiedDate":"2023-09-05"},{"lineNumber":361,"author":{"gitId":"howenc"},"content":" \u0026\u0026 this.phaseTwo.equals(b.phaseTwo) \u0026\u0026 this.phaseThree.equals(b.phaseThree)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":362,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":363,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":364,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":365,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":366,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":367,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":368,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"howenc":368}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"import command.Commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"import task.ListOfTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" * This is the file that outlines the logic in the chat bot.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":"public class Duke {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" * This is the format for all date and time input.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" public static final DateTimeFormatter FORMAT \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" private static ListOfTask taskList \u003d new ListOfTask();","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" private static Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" * This starts the Duke chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" * @param args Does nothing","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" greet();","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" private static void greet() {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" if (!Storage.load(taskList, 1)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" return;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":" ui.greet();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" nextCommand(ui.nextInput());","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" private static void nextCommand(String command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" Parser cmd \u003d new Parser(command);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":" Commands action \u003d cmd.parse();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" if (action.execute(taskList) \u003d\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" nextCommand(ui.nextInput());","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" ui.exit();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":" nextCommand(ui.nextInput());","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":" return \"Duke heard: \" + input;","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"howenc":59,"-":1}},{"path":"src/main/java/dukeExceptions/DukeDateTimeParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package dukeExceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":" * This Exception class if for all the LocalDateTime parse errors","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"public class DukeDateTimeParseException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":" public DukeDateTimeParseException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":10}},{"path":"src/main/java/dukeExceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package dukeExceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":" * This Exception class is just for all the general errors.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":11}},{"path":"src/main/java/dukeExceptions/DukeFromEarlierThanToException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package dukeExceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":" * This Exception class is for when the \u0027from\u0027 time is after the \u0027to\u0027 time for Event tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"public class DukeFromEarlierThanToException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":" public DukeFromEarlierThanToException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":10}},{"path":"src/main/java/dukeExceptions/DukeLoadException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package dukeExceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":" * This Exception class is for when duke met a corrupted file while loading.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"public class DukeLoadException extends DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":" private int lineNumber;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":" private String loadCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":" * Constructs a DukeLoadException object.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":" * @param message The string to print out as the message for the error.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" * @param lineNumber The line number of the erroneous string that was loaded from the save file.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" * @param loadCommand The erroneous string that was loaded from the save file.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" public DukeLoadException(String message, int lineNumber, String loadCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" super(message);","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" this.lineNumber \u003d lineNumber;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" this.loadCommand \u003d loadCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" * Returns a custom message to state the lineNumber, error message and the corrupted line.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" * @return Returns a string that states the lineNumber, error message and the corrupted line.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" return this.lineNumber + \": \" + super.getMessage() + \" ---- \" + this.loadCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"howenc":30}},{"path":"src/main/java/dukeExceptions/DukeNullPointerException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package dukeExceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":" * This Exception class is for when a NullPointerException happens.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"public class DukeNullPointerException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":" public DukeNullPointerException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":10}},{"path":"src/main/java/dukeExceptions/DukeNumberFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package dukeExceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":" * This Exception class is for the NumberFormatException errors.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"public class DukeNumberFormatException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":" public DukeNumberFormatException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":10}},{"path":"src/main/java/dukeExceptions/DukeUnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package dukeExceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":" * This Exception class is for when the parser is not able to parse the string.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"public class DukeUnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":" public DukeUnknownCommandException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":10}},{"path":"src/main/java/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" private Label dialog;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":" db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":" return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"howenc":61}},{"path":"src/main/java/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"howenc":32}},{"path":"src/main/java/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" private Duke duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/profile-picture-default.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" private Image luxionImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Luxion.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" public void initialize() {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" DialogBox.getDukeDialog(response, luxionImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"howenc":52}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"import command.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeDateTimeParseException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeFromEarlierThanToException;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeNullPointerException;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeNumberFormatException;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeUnknownCommandException;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" * This class takes in the user input and parses returns a Commands object.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" private String command;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" private String[] initialParse;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" private String[] phaseParse;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" * Construct the Parser object.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" * @param command The string that needs to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" public Parser(String command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" * Parses the string into actionable commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" * @return Returns a Command object.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" * @throws DukeException If the input is not a command","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":" public Commands parse() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" Commands.CommandEnum cmd \u003d this.mainCommand();","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" switch (cmd) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" case BYE: case LIST:","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" return Commands.of(cmd);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" case TODO: case FIND:","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":" if (this.secondWord() \u003d\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"Please add the task name\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" return Commands.of(cmd, this.secondWord());","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" case BY: case FROM: case TO:","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":" String restOfCommand \u003d this.secondWord().trim();","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(restOfCommand, Duke.FORMAT);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":" return Commands.of(cmd, dateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":" } catch (DateTimeParseException | NullPointerException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":" throw new DukeDateTimeParseException(\"The format for dates\u0026time is \u0027dd-MM-yyyy hhmm\u0027\");","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":" case MARK: case UNMARK: case DELETE:","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"howenc"},"content":" int index \u003d Integer.parseInt(this.secondWord());","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"howenc"},"content":" return Commands.of(cmd, index);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"howenc"},"content":" } catch (NumberFormatException | NullPointerException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"howenc"},"content":" throw new DukeNumberFormatException(\"Place a number after the command\");","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"howenc"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"howenc"},"content":" String task \u003d this.phaseParse();","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"howenc"},"content":" String command2 \u003d this.phaseTwo();","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"howenc"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"howenc"},"content":" Parser phaseTwo \u003d new Parser(command2);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"howenc"},"content":" Commands c \u003d phaseTwo.parse();","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"howenc"},"content":" if (c.checkCommand(Commands.CommandEnum.BY)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"howenc"},"content":" return Commands.of(Commands.CommandEnum.DEADLINE, task, c);","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"Please add the task name\");","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"howenc"},"content":" } catch (DukeUnknownCommandException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"howenc"},"content":" throw new DukeNullPointerException(\"The format for the command is: deadline task /by date\u0026time\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"howenc"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"howenc"},"content":" throw new DukeNullPointerException(\"The format for the command is: deadline task /by date\u0026time\");","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"howenc"},"content":" case EVENT:","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"howenc"},"content":" String task \u003d this.phaseParse();","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"howenc"},"content":" String command2 \u003d this.phaseTwo();","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"howenc"},"content":" String command3 \u003d this.phaseThree();","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"howenc"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"howenc"},"content":" Parser phaseTwo \u003d new Parser(command2);","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"howenc"},"content":" Commands c1 \u003d phaseTwo.parse();","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"howenc"},"content":" Parser phaseThree \u003d new Parser(command3);","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"howenc"},"content":" Commands c2 \u003d phaseThree.parse();","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"howenc"},"content":" if (!c1.compareTime(c2)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"howenc"},"content":" throw new DukeFromEarlierThanToException(\"From must be earlier than To\");","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"howenc"},"content":" if (c1.checkCommand(Commands.CommandEnum.FROM) \u0026\u0026 c2.checkCommand(Commands.CommandEnum.TO)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"howenc"},"content":" return Commands.of(Commands.CommandEnum.EVENT, task, c1, c2);","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"Please add the task name\");","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"howenc"},"content":" } catch (DukeUnknownCommandException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"howenc"},"content":" throw new DukeNullPointerException(\"The format for the command is: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"howenc"},"content":" + \"event task /from startDayDateTime /to endDayDateTime\");","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"howenc"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"howenc"},"content":" throw new DukeNullPointerException(\"The format for the command is: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"howenc"},"content":" + \"event task /from startDayDateTime /to endDayDateTime\");","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"howenc"},"content":" default:","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"howenc"},"content":" throw new DukeUnknownCommandException(\"Unknown command\");","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"howenc"},"content":" private Commands.CommandEnum mainCommand() {","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"howenc"},"content":" this.initialParse \u003d command.split(\" \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"howenc"},"content":" switch (initialParse[0]) {","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"howenc"},"content":" case (\"bye\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"howenc"},"content":" return Commands.CommandEnum.BYE;","lastModifiedDate":"2023-09-06"},{"lineNumber":125,"author":{"gitId":"howenc"},"content":" case (\"list\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"howenc"},"content":" return Commands.CommandEnum.LIST;","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"howenc"},"content":" case (\"todo\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"howenc"},"content":" return Commands.CommandEnum.TODO;","lastModifiedDate":"2023-09-06"},{"lineNumber":129,"author":{"gitId":"howenc"},"content":" case (\"deadline\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"howenc"},"content":" return Commands.CommandEnum.DEADLINE;","lastModifiedDate":"2023-09-06"},{"lineNumber":131,"author":{"gitId":"howenc"},"content":" case (\"event\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"howenc"},"content":" return Commands.CommandEnum.EVENT;","lastModifiedDate":"2023-09-06"},{"lineNumber":133,"author":{"gitId":"howenc"},"content":" case (\"mark\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"howenc"},"content":" return Commands.CommandEnum.MARK;","lastModifiedDate":"2023-09-06"},{"lineNumber":135,"author":{"gitId":"howenc"},"content":" case (\"unmark\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"howenc"},"content":" return Commands.CommandEnum.UNMARK;","lastModifiedDate":"2023-09-06"},{"lineNumber":137,"author":{"gitId":"howenc"},"content":" case (\"delete\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"howenc"},"content":" return Commands.CommandEnum.DELETE;","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"howenc"},"content":" case (\"by\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"howenc"},"content":" return Commands.CommandEnum.BY;","lastModifiedDate":"2023-09-06"},{"lineNumber":141,"author":{"gitId":"howenc"},"content":" case (\"from\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"howenc"},"content":" return Commands.CommandEnum.FROM;","lastModifiedDate":"2023-09-06"},{"lineNumber":143,"author":{"gitId":"howenc"},"content":" case (\"to\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"howenc"},"content":" return Commands.CommandEnum.TO;","lastModifiedDate":"2023-09-06"},{"lineNumber":145,"author":{"gitId":"howenc"},"content":" case (\"sort\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"howenc"},"content":" return Commands.CommandEnum.SORT;","lastModifiedDate":"2023-09-06"},{"lineNumber":147,"author":{"gitId":"howenc"},"content":" case (\"find\"):","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"howenc"},"content":" return Commands.CommandEnum.FIND;","lastModifiedDate":"2023-09-06"},{"lineNumber":149,"author":{"gitId":"howenc"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"howenc"},"content":" return Commands.CommandEnum.UNKNOWN;","lastModifiedDate":"2023-09-06"},{"lineNumber":151,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":152,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":153,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"howenc"},"content":" private String secondWord() {","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"howenc"},"content":" if (this.initialParse[1].equals(\"\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"howenc"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"howenc"},"content":" return this.initialParse[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"howenc"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"howenc"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":166,"author":{"gitId":"howenc"},"content":" private String phaseParse() {","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":168,"author":{"gitId":"howenc"},"content":" this.phaseParse \u003d this.initialParse[1].split(\"/\");","lastModifiedDate":"2023-08-28"},{"lineNumber":169,"author":{"gitId":"howenc"},"content":" return phaseParse[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":170,"author":{"gitId":"howenc"},"content":" } catch (NullPointerException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":171,"author":{"gitId":"howenc"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":172,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":173,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":174,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":175,"author":{"gitId":"howenc"},"content":" private String phaseTwo() {","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":177,"author":{"gitId":"howenc"},"content":" return this.phaseParse[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":178,"author":{"gitId":"howenc"},"content":" } catch (NullPointerException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":179,"author":{"gitId":"howenc"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":180,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":181,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":182,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":183,"author":{"gitId":"howenc"},"content":" private String phaseThree() {","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":185,"author":{"gitId":"howenc"},"content":" return this.phaseParse[2];","lastModifiedDate":"2023-08-28"},{"lineNumber":186,"author":{"gitId":"howenc"},"content":" } catch (NullPointerException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":187,"author":{"gitId":"howenc"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":188,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":189,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":190,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"howenc":190}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"import command.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":"import task.ListOfTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":"import task.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" * This class handles all the reads and writes of the program.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" * It will save the list and load the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" * Saves the list to a specific file.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" * @param listOfTask The task list to save.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" public static void save(ArrayList\u003cTask\u003e listOfTask) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" File writeData \u003d new File(\"./src/data/duke.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" writeData.createNewFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" FileWriter writer \u003d new FileWriter(writeData);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" listOfTask.forEach(x-\u003e {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" writer.write(x.write());","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" if (x.getIsDone()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" writer.write(\"mark \" + (listOfTask.indexOf(x) + 1) + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" System.out.println(\"You do not have access to write to your save file\");","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" });","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" writer.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" System.out.println(\"You do not have access to save your file\");","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" * Loads the task list from a specific line in the save file onwards.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" * @param taskList The task list that tasks are loaded into.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" * @param startLine The line number to start loading from.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":" * @return Returns false if it is unable to load and the user does not want to be able to save the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":" * True if otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":" public static boolean load(ListOfTask taskList, int startLine) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":" File saveData \u003d new File(\"./src/data/duke.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":" String error \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":" saveData.createNewFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":" Scanner readData \u003d new Scanner(saveData);","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"howenc"},"content":" for (int i \u003d 0; i \u003c startLine - 1; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"howenc"},"content":" if (readData.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"howenc"},"content":" readData.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"howenc"},"content":" while (readData.hasNextLine()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"howenc"},"content":" String command \u003d readData.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"howenc"},"content":" error \u003d command;","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"howenc"},"content":" if (command.equals(\"\\n\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"howenc"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"howenc"},"content":" Parser cmd \u003d new Parser(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"howenc"},"content":" Commands action \u003d cmd.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"howenc"},"content":" action.execute(taskList, startLine, error);","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"howenc"},"content":" startLine++;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"howenc"},"content":" readData.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"howenc"},"content":" System.out.println(\"line \" + startLine + \" corrupted: \" + error);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"howenc"},"content":" startLine++;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"howenc"},"content":" load(taskList, startLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"howenc"},"content":" } catch (IOException f) {","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"howenc"},"content":" if (clarify() \u003d\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"howenc"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"howenc"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"howenc"},"content":" private static int clarify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"howenc"},"content":" System.out.println(\"You do not have access to create a save file\");","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"howenc"},"content":" System.out.println(\"Do you wish to continue? (yes/no) None of your data will be saved.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"howenc"},"content":" Scanner scan \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"howenc"},"content":" String respond \u003d scan.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"howenc"},"content":" if (respond.equals(\"yes\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"howenc"},"content":" return 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"howenc"},"content":" } else if (respond.equals(\"no\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"howenc"},"content":" return 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"howenc"},"content":" return clarify();","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"howenc":103}},{"path":"src/main/java/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":" * This class represents the task type Deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"class Deadline extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":" private LocalDateTime dayDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" * Creates a Deadline object.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" * @param taskDescription The name of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" * @param dayDate The date and time of the deadline of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" * @return Returns a Task object.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" Deadline(String taskDescription, LocalDateTime dayDate) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" this.dayDate \u003d dayDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" return \"[D]\" + super.toString() + \"(by: \" + this.dayDate.format(Duke.FORMAT) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":" public String write() {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" return \"deadline \" + super.getTaskDescription() + \"/by \" + this.dayDate.format(Duke.FORMAT) + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"howenc":40}},{"path":"src/main/java/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":" * This class represents the task type Event.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"class Event extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":" private LocalDateTime startDayDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":" private LocalDateTime endDayDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" * Creates an Event object.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" * @param taskDescription The name of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" * @param startDayDateTime The date and time of the start of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" * @param endDayDateTime The date and time of the end of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" * @return Returns a Task object.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" Event(String taskDescription, LocalDateTime startDayDateTime, LocalDateTime endDayDateTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" this.endDayDateTime \u003d endDayDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" this.startDayDateTime \u003d startDayDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" return \"[E]\" + super.toString() + \"(from: \" + startDayDateTime.format(Duke.FORMAT)","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" + \" to: \" + endDayDateTime.format(Duke.FORMAT) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" public String write() {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" return \"event \" + super.getTaskDescription() + \"/from \" + this.startDayDateTime.format(Duke.FORMAT)","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":" + \" /to \" + this.endDayDateTime.format(Duke.FORMAT) + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"howenc":46}},{"path":"src/main/java/task/ListOfTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":" * This class holds and controls all interactions with tasks and holds a list of them.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":"public class ListOfTask {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" private ArrayList\u003cTask\u003e listOfTask \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" * The size of the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" * @return Returns the size of the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" public int size() {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" return listOfTask.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" private void addTask(Task task, boolean print) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" listOfTask.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" if (print) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" System.out.println(\"added: \" + task);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" Storage.save(listOfTask);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" * Adds the ToDo task into the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" * @param task The task that is to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":" * @param print True to print messages, false to not print messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" public void addToDo(String task, boolean print) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" Task temp \u003d new ToDo(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" addTask(temp, print);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" * Adds the Deadline task into the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" * @param task The task that is to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" * @param dayDate The deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":" * @param print True to print messages, false to not print messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" public void addDeadline(String task, LocalDateTime dayDate, boolean print) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":" Task temp \u003d new Deadline(task, dayDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":" addTask(temp, print);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":" * Adds the Event task into the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":" * @param task The task that is to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":" * @param startDayDateTime The date and time of the start of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"howenc"},"content":" * @param endDayDateTime The date and time of the end of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"howenc"},"content":" * @param print True to print messages, false to not print messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"howenc"},"content":" public void addEvent(String task, LocalDateTime startDayDateTime,","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"howenc"},"content":" LocalDateTime endDayDateTime, boolean print) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"howenc"},"content":" Task temp \u003d new Event(task, startDayDateTime, endDayDateTime);","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"howenc"},"content":" addTask(temp, print);","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"howenc"},"content":" * Prints out the list of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"howenc"},"content":" public void listTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"howenc"},"content":" int[] i \u003d new int[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"howenc"},"content":" i[0] \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"howenc"},"content":" listOfTask.forEach(x -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"howenc"},"content":" System.out.print(i[0] + \".\");","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"howenc"},"content":" System.out.println(x);","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"howenc"},"content":" i[0]++;","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"howenc"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"howenc"},"content":" * Finds and prints index and tasks that contains the string str in its name.","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"howenc"},"content":" * @param str The string that will be searched.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"howenc"},"content":" public void find(String str) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"howenc"},"content":" int[] foundCounter \u003d new int[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"howenc"},"content":" foundCounter[0] \u003d 0;","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"howenc"},"content":" int size \u003d listOfTask.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"howenc"},"content":" int[] counter \u003d new int[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"howenc"},"content":" counter[0] \u003d 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"howenc"},"content":" listOfTask.forEach(task -\u003e {","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"howenc"},"content":" if (task.getTaskDescription().contains(str)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"howenc"},"content":" System.out.println(counter[0] + \".\" + task);","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"howenc"},"content":" foundCounter[0]++;","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"howenc"},"content":" counter[0]++;","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"howenc"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"howenc"},"content":" if (foundCounter[0] \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"howenc"},"content":" System.out.println(\"Whoopys uWu, sorry I couldnyt fynd any taysk that contyain that strying. XD uWu\");","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"howenc"},"content":" * Mark or unmark a task as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"howenc"},"content":" * @param index The index of the task based on the current task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"howenc"},"content":" * @param markOrUnmark True to mark, false to unmark.","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"howenc"},"content":" * @param print True to print messages, false to not print messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"howenc"},"content":" * @throws DukeException If the number is outside the range of indexes in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"howenc"},"content":" public void markOrUnmark(int index, boolean markOrUnmark, boolean print) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"howenc"},"content":" if (markOrUnmark) {","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"howenc"},"content":" listOfTask.get(index - 1).setDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"howenc"},"content":" listOfTask.get(index - 1).setNotDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"howenc"},"content":" if (print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"howenc"},"content":" System.out.println(listOfTask.get(index - 1).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"howenc"},"content":" Storage.save(listOfTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"howenc"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"Please select from index 1 to \" + listOfTask.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"howenc"},"content":" * Delete a task from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"howenc"},"content":" * @param index The index of the task based on the current task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"howenc"},"content":" * @param print True to print messages, false to not print messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"howenc"},"content":" * @throws DukeException If the number is outside the range of indexes in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"howenc"},"content":" public void delete(int index, boolean print) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"howenc"},"content":" Task removed \u003d listOfTask.remove(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"howenc"},"content":" if (print) {","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"howenc"},"content":" System.out.println(removed + \" has been deleted\");","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"howenc"},"content":" Storage.save(listOfTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"howenc"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"howenc"},"content":" throw new DukeException(\"Please select from index 1 to \" + listOfTask.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"howenc":151}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":" * This is an abstract class that contain the factory methods and all the methods that a task will have.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":" private String taskDescription;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":" private Boolean isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":" private LocalDateTime dateAdded;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" Task(String taskName) {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" this.taskDescription \u003d taskName;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" this.dateAdded \u003d LocalDateTime.now();","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" * The string that represents the object.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" * @return Returns a string that represents the object.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" return (\"[\" + (this.isDone ? \"X] \" : \" ] \") + this.taskDescription);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" * Mark the task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" public void setDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" * Mark the task as undone.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" public void setNotDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" * Check if the task is done.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" * @return Returns true if the task is done, false if otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" return this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":" * Returns the name of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":" * @return Returns the name of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":" public String getTaskDescription() {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":" return this.taskDescription;","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"howenc"},"content":" * Writes the initial command the user put that resulted in the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"howenc"},"content":" * @return Returns the initial command the user put for this task.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"howenc"},"content":" public String write() {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"howenc"},"content":" return \"task \" + this.taskDescription + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"howenc":72}},{"path":"src/main/java/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":" * This class represents the task type ToDo.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"class ToDo extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":" * Creates a ToDo object.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":" * @param taskDescription The name of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":" * @return Returns a Task object.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" ToDo(String taskDescription) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" * @inheritDoc","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" public String write() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" return \"todo \" + super.getTaskDescription() + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"howenc":33}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":" * This class deals with the next user input and contains some standard prints.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":" * Initialize the Ui object.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" public Ui() {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" * Scans the next input of the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" * @return The input of the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" public String nextInput() {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" Scanner scanObj \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":" return scanObj.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" * Prints the greeting of the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" public void greet() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" System.out.println(\"Hello. I am Luxion. \\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" + \"What can I do for you?\");","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" * Prints the exit of the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":" public void exit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" System.out.println(\"Bye. See you soon.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"howenc":40}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":" \u003cLabel fx:id\u003d\"dialog\" prefHeight\u003d\"99.0\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" \u003cInsets bottom\u003d\"5.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" \u003c/padding\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"howenc":22}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"howenc":19}},{"path":"src/test/java/command/CommandsTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"package command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"howenc"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"howenc"},"content":"import static org.junit.jupiter.api.Assertions.assertNotEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"howenc"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"howenc"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"howenc"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeDateTimeParseException;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeFromEarlierThanToException;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeNullPointerException;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeNumberFormatException;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"howenc"},"content":"import dukeExceptions.DukeUnknownCommandException;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"howenc"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"howenc"},"content":"import task.ListOfTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"howenc"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"howenc"},"content":" * This class test the Commands class and thus test the Parser class and ListOfTask class.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"howenc"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"howenc"},"content":"public class CommandsTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"howenc"},"content":" public void commandsEqualCommands() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"howenc"},"content":" for (Commands.CommandEnum c : Commands.CommandEnum.values()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"howenc"},"content":" for (Commands.CommandEnum d : Commands.CommandEnum.values()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"howenc"},"content":" if (c \u003d\u003d d) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"howenc"},"content":" assertEquals(Commands.of(c), Commands.of(d));","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"howenc"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"howenc"},"content":" assertNotEquals(Commands.of(c), Commands.of(d));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"howenc"},"content":" public void commandsExecuteToDo() {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"howenc"},"content":" String[] cmd \u003d {\"todo CS2103T A-JUnit\", \"todo \"};","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"howenc"},"content":" String cmd2 \u003d \"CS2103T A-JUnit\";","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"howenc"},"content":" String cmd3 \u003d \"added: [T][ ] \";","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"howenc"},"content":" for (int i \u003d 0; i \u003c cmd.length; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"howenc"},"content":" Parser cm \u003d new Parser(cmd[i]);","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"howenc"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"howenc"},"content":" Commands c \u003d cm.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"howenc"},"content":" c.execute(new task.ListOfTask());","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"howenc"},"content":" assertEquals(cmd3 + cmd2 + \"\\r\\n\", outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"howenc"},"content":" assertEquals(\"Please add the task name\\r\\n\", e.getMessage() + \"\\r\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"howenc"},"content":" public void commandsExecuteDeadline() {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"howenc"},"content":" String[] cmd \u003d {\"deadline CS2103T A-JUnit /by 18-09-2023 0000\",","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"howenc"},"content":" \"deadline gyrdefsf /by 8411\",","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"howenc"},"content":" \"deadline gyrdefsf /by \", \"deadline /b\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"howenc"},"content":" String cmd2 \u003d \"CS2103T A-JUnit\";","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"howenc"},"content":" String cmd3 \u003d \"added: [D][ ] \";","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"howenc"},"content":" String cmd4 \u003d \" (by: 18-09-2023 0000)\";","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"howenc"},"content":" for (String str : cmd) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"howenc"},"content":" Parser cm \u003d new Parser(str);","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"howenc"},"content":" Commands c \u003d cm.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"howenc"},"content":" c.execute(new task.ListOfTask());","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"howenc"},"content":" assertEquals(cmd3 + cmd2 + cmd4 + \"\\r\\n\", outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"howenc"},"content":" } catch (DukeDateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"howenc"},"content":" assertEquals(\"The format for dates\u0026time is \u0027dd-MM-yyyy hhmm\u0027\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"howenc"},"content":" } catch (DukeNullPointerException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"howenc"},"content":" assertEquals(\"The format for the command is: deadline task /by date\u0026time\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"howenc"},"content":" assertEquals(\"Please add the task name\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"howenc"},"content":" public void commandsExecuteEvent() {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"howenc"},"content":" String[] cmd \u003d {\"event CS2103T A-JUnit /from 18-09-2023 0000 /to 18-09-2024 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /to 18-09-2023 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /to 18-09-2024 9999\",","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /to 18-09-2024 \",","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 /to 18-09-2024 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /to\",","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /t 18-09-2024 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 / 18-09-2024 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 18-09-2024 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 9999\",","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09 1010\",","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from\",","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /fro\",","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from /to \",","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"howenc"},"content":" String cmd2 \u003d \"CS2103T A-JUnit\";","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"howenc"},"content":" String cmd3 \u003d \"added: [E][ ] \";","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"howenc"},"content":" String cmd4 \u003d \" (from: 18-09-2023 0000 to: 18-09-2024 0000)\";","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"howenc"},"content":" for (String str : cmd) {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"howenc"},"content":" Parser cm \u003d new Parser(str);","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"howenc"},"content":" Commands c \u003d cm.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"howenc"},"content":" c.execute(new task.ListOfTask());","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"howenc"},"content":" assertEquals(cmd3 + cmd2 + cmd4 + \"\\r\\n\", outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"howenc"},"content":" } catch (DukeFromEarlierThanToException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"howenc"},"content":" assertEquals(\"From must be earlier than To\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"howenc"},"content":" } catch (DukeDateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"howenc"},"content":" assertEquals(\"The format for dates\u0026time is \u0027dd-MM-yyyy hhmm\u0027\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"howenc"},"content":" } catch (DukeNullPointerException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"howenc"},"content":" assertEquals(\"The format for the command is: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"howenc"},"content":" + \"event task /from startDayDateTime /to endDayDateTime\",","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"howenc"},"content":" e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"howenc"},"content":" assertEquals(\"Please add the task name\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"howenc"},"content":" public void commandsExecuteMark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"howenc"},"content":" String[] cmd \u003d {\"todo CS2103T A-JUnit\",","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"howenc"},"content":" \"deadline CS2103T A-JUnit /by 18-09-2023 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /to 18-09-2024 0000\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"howenc"},"content":" String[] cmdi \u003d {\"[T][X] CS2103T A-JUnit\",","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"howenc"},"content":" \"[D][X] CS2103T A-JUnit (by: 18-09-2023 0000)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"howenc"},"content":" \"[E][X] CS2103T A-JUnit (from: 18-09-2023 0000 to: 18-09-2024 0000)\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"howenc"},"content":" ListOfTask taskList \u003d new ListOfTask();","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"howenc"},"content":" for (String str : cmd) {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"howenc"},"content":" Parser cm \u003d new Parser(str);","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"howenc"},"content":" Commands c \u003d cm.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"howenc"},"content":" c.execute(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"howenc"},"content":" System.out.println(\"check the test cases again\");","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"howenc"},"content":" int[] indexes \u003d {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"howenc"},"content":" for (int i \u003d 0; i \u003c indexes.length; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"howenc"},"content":" taskList.markOrUnmark(indexes[i] + 1, true, true);","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"howenc"},"content":" assertEquals(cmdi[i] + \"\\r\\n\", outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"howenc"},"content":" } catch (DukeNumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"howenc"},"content":" assertEquals(\"Place a number after the command\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"howenc"},"content":" assertEquals(\"Please select from index 1 to \" + taskList.size(), e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"howenc"},"content":" String s \u003d \"mark a\";","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"howenc"},"content":" Parser p \u003d new Parser(s);","lastModifiedDate":"2023-09-06"},{"lineNumber":164,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"howenc"},"content":" Commands c \u003d p.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"howenc"},"content":" assertEquals(\"Place a number after the command\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"howenc"},"content":" public void commandsExecuteUnMark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"howenc"},"content":" String[] cmd \u003d {\"todo CS2103T A-JUnit\",","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"howenc"},"content":" \"mark 1\",","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"howenc"},"content":" \"deadline CS2103T A-JUnit /by 18-09-2023 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"howenc"},"content":" \"mark 2\",","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /to 18-09-2024 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"howenc"},"content":" \"mark 3\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"howenc"},"content":" String[] cmdi \u003d {\"[T][ ] CS2103T A-JUnit\",","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"howenc"},"content":" \"[D][ ] CS2103T A-JUnit (by: 18-09-2023 0000)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"howenc"},"content":" \"[E][ ] CS2103T A-JUnit (from: 18-09-2023 0000 to: 18-09-2024 0000)\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"howenc"},"content":" ListOfTask taskList \u003d new ListOfTask();","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"howenc"},"content":" for (String str : cmd) {","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"howenc"},"content":" Parser cm \u003d new Parser(str);","lastModifiedDate":"2023-09-06"},{"lineNumber":185,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"howenc"},"content":" Commands c \u003d cm.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"howenc"},"content":" c.execute(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"howenc"},"content":" System.out.println(\"check the test cases again\");","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"howenc"},"content":" int[] indexes \u003d {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"howenc"},"content":" for (int i \u003d 0; i \u003c indexes.length; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"howenc"},"content":" taskList.markOrUnmark(indexes[i] + 1, false, true);","lastModifiedDate":"2023-09-05"},{"lineNumber":198,"author":{"gitId":"howenc"},"content":" assertEquals(cmdi[i] + \"\\r\\n\", outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"howenc"},"content":" } catch (DukeNumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"howenc"},"content":" assertEquals(\"Place a number after the command\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"howenc"},"content":" assertEquals(\"Please select from index 1 to \" + taskList.size(), e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"howenc"},"content":" String s \u003d \"unmark a\";","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"howenc"},"content":" Parser p \u003d new Parser(s);","lastModifiedDate":"2023-09-06"},{"lineNumber":211,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"howenc"},"content":" Commands c \u003d p.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"howenc"},"content":" assertEquals(\"Place a number after the command\", outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"howenc"},"content":" assertEquals(\"Place a number after the command\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"howenc"},"content":" public void commandsExecuteDelete() {","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"howenc"},"content":" String[] cmd \u003d {\"todo CS2103T A-JUnit\",","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"howenc"},"content":" \"deadline CS2103T A-JUnit /by 18-09-2023 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /to 18-09-2024 0000\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"howenc"},"content":" String[] cmdi \u003d {\"[T][ ] CS2103T A-JUnit has been deleted\",","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"howenc"},"content":" \"[D][ ] CS2103T A-JUnit (by: 18-09-2023 0000) has been deleted\",","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"howenc"},"content":" \"[E][ ] CS2103T A-JUnit (from: 18-09-2023 0000 to: 18-09-2024 0000) has been deleted\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"howenc"},"content":" ListOfTask taskList \u003d new ListOfTask();","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"howenc"},"content":" for (String str : cmd) {","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"howenc"},"content":" Parser cm \u003d new Parser(str);","lastModifiedDate":"2023-09-06"},{"lineNumber":230,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"howenc"},"content":" Commands c \u003d cm.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"howenc"},"content":" c.execute(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":233,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"howenc"},"content":" System.out.println(\"check the test cases again\");","lastModifiedDate":"2023-08-30"},{"lineNumber":235,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":237,"author":{"gitId":"howenc"},"content":" for (int i \u003d 0; i \u003c 3; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":238,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":239,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":240,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"howenc"},"content":" taskList.delete(1, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"howenc"},"content":" assertEquals(cmdi[i] + \"\\r\\n\", outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"howenc"},"content":" } catch (DukeNumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"howenc"},"content":" assertEquals(\"Place a number after the command\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"howenc"},"content":" assertEquals(\"Please select from index 1 to \" + taskList.size(), e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":247,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":248,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":249,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":250,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":251,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"howenc"},"content":" String s \u003d \"mark a\";","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"howenc"},"content":" Parser p \u003d new Parser(s);","lastModifiedDate":"2023-09-06"},{"lineNumber":254,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"howenc"},"content":" Commands c \u003d p.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"howenc"},"content":" assertEquals(\"Place a number after the command\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":260,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":262,"author":{"gitId":"howenc"},"content":" public void commandsExecuteList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":263,"author":{"gitId":"howenc"},"content":" String[] cmd \u003d {\"todo CS2103T A-JUnit\",","lastModifiedDate":"2023-08-30"},{"lineNumber":264,"author":{"gitId":"howenc"},"content":" \"deadline CS2103T A-JUnit /by 18-09-2023 0000\",","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"howenc"},"content":" \"event CS2103T A-JUnit /from 18-09-2023 0000 /to 18-09-2024 0000\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"howenc"},"content":" String cmdi \u003d \"1.[T][ ] CS2103T A-JUnit\\r\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":267,"author":{"gitId":"howenc"},"content":" + \"2.[D][ ] CS2103T A-JUnit (by: 18-09-2023 0000)\\r\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"howenc"},"content":" + \"3.[E][ ] CS2103T A-JUnit (from: 18-09-2023 0000 to: 18-09-2024 0000)\\r\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"howenc"},"content":" ListOfTask taskList \u003d new ListOfTask();","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"howenc"},"content":" for (String str : cmd) {","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"howenc"},"content":" Parser cm \u003d new Parser(str);","lastModifiedDate":"2023-09-06"},{"lineNumber":272,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"howenc"},"content":" Commands c \u003d cm.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"howenc"},"content":" c.execute(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":275,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"howenc"},"content":" System.out.println(\"check the test cases again\");","lastModifiedDate":"2023-08-30"},{"lineNumber":277,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":278,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":279,"author":{"gitId":"howenc"},"content":" String[] cmdj \u003d {\"l\", \"list \", \"list\"};","lastModifiedDate":"2023-08-30"},{"lineNumber":280,"author":{"gitId":"howenc"},"content":" for (String str : cmdj) {","lastModifiedDate":"2023-08-30"},{"lineNumber":281,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"howenc"},"content":" Parser p \u003d new Parser(str);","lastModifiedDate":"2023-09-06"},{"lineNumber":284,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"howenc"},"content":" Commands c \u003d p.parse();","lastModifiedDate":"2023-08-30"},{"lineNumber":286,"author":{"gitId":"howenc"},"content":" c.execute(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":287,"author":{"gitId":"howenc"},"content":" assertEquals(cmdi, outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":288,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":289,"author":{"gitId":"howenc"},"content":" assertEquals(\"Unknown command\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":290,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":291,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":292,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":293,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":294,"author":{"gitId":"howenc"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":295,"author":{"gitId":"howenc"},"content":" public void commandsExecuteFind() {","lastModifiedDate":"2023-08-31"},{"lineNumber":296,"author":{"gitId":"howenc"},"content":" String[] cmd \u003d {\"todo CS2103T A-JUnit\",","lastModifiedDate":"2023-08-31"},{"lineNumber":297,"author":{"gitId":"howenc"},"content":" \"deadline CS2103T B-JUnit /by 18-09-2023 0000\",","lastModifiedDate":"2023-08-31"},{"lineNumber":298,"author":{"gitId":"howenc"},"content":" \"event CS2103T C-JUnit /from 18-09-2023 0000 /to 18-09-2024 0000\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":299,"author":{"gitId":"howenc"},"content":" String[] cmdi \u003d {\"3.[E][ ] CS2103T C-JUnit (from: 18-09-2023 0000 to: 18-09-2024 0000)\\r\\n\",","lastModifiedDate":"2023-08-31"},{"lineNumber":300,"author":{"gitId":"howenc"},"content":" \"2.[D][ ] CS2103T B-JUnit (by: 18-09-2023 0000)\\r\\n\",","lastModifiedDate":"2023-08-31"},{"lineNumber":301,"author":{"gitId":"howenc"},"content":" \"1.[T][ ] CS2103T A-JUnit\\r\\n\",","lastModifiedDate":"2023-08-31"},{"lineNumber":302,"author":{"gitId":"howenc"},"content":" \"Whoopys uWu, sorry I couldnyt fynd any taysk that contyain that strying. XD uWu\\r\\n\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":303,"author":{"gitId":"howenc"},"content":" ListOfTask taskList \u003d new ListOfTask();","lastModifiedDate":"2023-08-31"},{"lineNumber":304,"author":{"gitId":"howenc"},"content":" for (String str : cmd) {","lastModifiedDate":"2023-08-31"},{"lineNumber":305,"author":{"gitId":"howenc"},"content":" Parser cm \u003d new Parser(str);","lastModifiedDate":"2023-09-06"},{"lineNumber":306,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":307,"author":{"gitId":"howenc"},"content":" Commands c \u003d cm.parse();","lastModifiedDate":"2023-08-31"},{"lineNumber":308,"author":{"gitId":"howenc"},"content":" c.execute(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":309,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":310,"author":{"gitId":"howenc"},"content":" System.out.println(\"check the test cases again\");","lastModifiedDate":"2023-08-31"},{"lineNumber":311,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":312,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":313,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":314,"author":{"gitId":"howenc"},"content":" String[] cmdj \u003d {\"f\", \"find\", \"find \", \"find C-JUnit\", \"find B\", \"find A\", \"find d\"};","lastModifiedDate":"2023-08-31"},{"lineNumber":315,"author":{"gitId":"howenc"},"content":" for (int i \u003d 0; i \u003c cmdj.length; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":316,"author":{"gitId":"howenc"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":317,"author":{"gitId":"howenc"},"content":" final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-31"},{"lineNumber":318,"author":{"gitId":"howenc"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-31"},{"lineNumber":319,"author":{"gitId":"howenc"},"content":" Parser p \u003d new Parser(cmdj[i]);","lastModifiedDate":"2023-09-06"},{"lineNumber":320,"author":{"gitId":"howenc"},"content":" Commands c \u003d p.parse();","lastModifiedDate":"2023-08-31"},{"lineNumber":321,"author":{"gitId":"howenc"},"content":" c.execute(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":322,"author":{"gitId":"howenc"},"content":" assertEquals(cmdi[i - 3], outContent.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":323,"author":{"gitId":"howenc"},"content":" } catch (DukeUnknownCommandException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":324,"author":{"gitId":"howenc"},"content":" assertEquals(\"Unknown command\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":325,"author":{"gitId":"howenc"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":326,"author":{"gitId":"howenc"},"content":" assertEquals(\"Please add the task name\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":327,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":328,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":329,"author":{"gitId":"howenc"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":330,"author":{"gitId":"howenc"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":331,"author":{"gitId":"howenc"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"howenc":331}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"howenc"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"howenc":1}}] diff --git a/howenc_ip_master/commits.json b/howenc_ip_master/commits.json index aca0e456..cb4c8f12 100644 --- a/howenc_ip_master/commits.json +++ b/howenc_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"howenc":[{"date":"2023-08-25","commitResults":[{"hash":"7ad0c356efe786fd4220a55a1dc1b786a2d85c17","isMergeCommit":false,"messageTitle":"Added greeting and exit.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"ef95ab7924e8bcb8b87163eb2757fcebb502cfc0","isMergeCommit":false,"messageTitle":"Added nextCommand and echo method","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":4}}},{"hash":"900137b2dc44f7f0a540491cf6332cea5edb3072","isMergeCommit":false,"messageTitle":"Added ability to store whatever text entered","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":2}}},{"hash":"f5d8c86beac183344d8187a74f9c83e2be9f2ce1","isMergeCommit":false,"messageTitle":"Added mark and unmark","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":4}}},{"hash":"cee558682ffe7b282115dd0051a70e8ebfc85051","isMergeCommit":false,"messageTitle":"Added Todo, Deadline, Event","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":12}}},{"hash":"d5acf0f157fbaad33145c884e9dcec2d65fbbb0b","isMergeCommit":false,"messageTitle":"Trimmed unnecessary code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":18}}},{"hash":"79354cbced0ad4491b713637ba971eef22a1c0fd","isMergeCommit":false,"messageTitle":"Added Parse class and edit nextCommand, exceptions.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":0},"java":{"insertions":160,"deletions":32}}},{"hash":"59eaa0612b962f5144a99447ffdc089d040e9a02","isMergeCommit":false,"messageTitle":"Implemented ArrayList\u003cTask\u003e","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":30}}},{"hash":"bec093a7dda82e05c0a849f366fb647e45dd7819","isMergeCommit":false,"messageTitle":"Added delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"dcabe02ef5e2cc6cab9876c65960cefbb6eec24c","isMergeCommit":false,"messageTitle":"Added enums for the commands","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":15}}},{"hash":"ff308534576aeb0ebe6cee4377f2e661d9c146f9","isMergeCommit":false,"messageTitle":"Edited UI testing","messageBody":"","tags":["A-TextUITesting"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":18},"java":{"insertions":1,"deletions":1}}},{"hash":"45055df24c804fa83c36d49b5ff2deaca34db703","isMergeCommit":false,"messageTitle":"Removed extra indent to fit code style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":110}}},{"hash":"0aa431a25b41ff5c40d041618bca170c74b12863","isMergeCommit":false,"messageTitle":"Fixed a mistake, added packaged main.java.Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":351,"deletions":349}}},{"hash":"6674717495710d537f9185f49d509c36907e7cae","isMergeCommit":false,"messageTitle":"Changed public methods to protected","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":20}}},{"hash":"b2e378e0e0b83524203af712252e89cd46a83a6b","isMergeCommit":false,"messageTitle":"Changed the package added a Task file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":149}}}]},{"date":"2023-08-28","commitResults":[{"hash":"b90e82282c1d6c7fc3256cb35eef615733bce918","isMergeCommit":false,"messageTitle":"Add quickLoad method and data.duke.txt file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":71,"deletions":0}}},{"hash":"64431adfca2ffbb48b011b6ab8612ab3ec6d7c01","isMergeCommit":false,"messageTitle":"Add readData","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":56,"deletions":22}}},{"hash":"abe1a7d0250d8cc80975e1cd7ce5814fc903e0e6","isMergeCommit":false,"messageTitle":"Minor print change","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"557915e8e6e1557e60801347f48a3cc51d3c108a","isMergeCommit":false,"messageTitle":"Add writeData","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":51,"deletions":0}}},{"hash":"72d4a31d25746e2282c0c0efce4b094a2c236ca5","isMergeCommit":false,"messageTitle":"Handle corrputed data","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":4,"deletions":4}}},{"hash":"32f2840fdaecea4156dea189e41989e319fd7f80","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"1942ee1382eb8f8963059ad66be80d50dd4c8956","isMergeCommit":false,"messageTitle":"Add LocalDateTime for tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":54,"deletions":24}}},{"hash":"5983f90ced235b3b7cb1e50a6a320e00e2a3b53f","isMergeCommit":false,"messageTitle":"Minor changes to commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":9}}},{"hash":"18ece5bd110e4cf5071f6f95a2c589b5183bee27","isMergeCommit":false,"messageTitle":"Add Parser, Storage, Ui, Commands classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":421,"deletions":406}}}]},{"date":"2023-08-29","commitResults":[{"hash":"a7731cf15ede5d374d7a185b2e458d9a43a7e6d6","isMergeCommit":false,"messageTitle":"Use state of Command Object as decision maker","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":0}}},{"hash":"f8f7a0181c355234c158b4323e81a1329d8d9d73","isMergeCommit":false,"messageTitle":"Minor edit","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"9678e1117c29dc81b63aa3a5523634e5ba05e170","isMergeCommit":false,"messageTitle":"Add twoCommands and threeCommands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":4}}},{"hash":"7975b6c096d5933271eeb824e18de58949ed20a8","isMergeCommit":false,"messageTitle":"Save point 1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"dd86539ce06e9bcfbf4a80332b73867f0385dcf3","isMergeCommit":false,"messageTitle":"Refactor code for OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":107,"deletions":137}}},{"hash":"7b1cb206b57c0a607227b848627ec686e8271296","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"9b53747e48b01e6465038b4c9eaec4dcd16ee840","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"29908b30b96e634962d448ebf5b63a229f03741a","isMergeCommit":false,"messageTitle":"Made packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":225,"deletions":195}}}]},{"date":"2023-08-30","commitResults":[{"hash":"71ecb7f434b6f234b55f27a3d8453f28f1c0d32c","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3d91eb87eac77aa44afb2eadff4d4080e2dc235d","isMergeCommit":false,"messageTitle":"Add Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"java":{"insertions":0,"deletions":0}}},{"hash":"a8b748c1aac47e0f0c69a300e4781802a4df4c18","isMergeCommit":false,"messageTitle":"Unmark main as module","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":35}}},{"hash":"a18efd9f16019cd06e524edb89bf8b68230bac15","isMergeCommit":false,"messageTitle":"Gradle and JUnit setup","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":1},"java":{"insertions":89,"deletions":53},"md":{"insertions":2,"deletions":2}}},{"hash":"08451b5484212e8e380e367928685c987f52278f","isMergeCommit":false,"messageTitle":"Exceptions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":5},"java":{"insertions":290,"deletions":145}}},{"hash":"3ec369f53ab77cda16738e185e5bbe064e14ba32","isMergeCommit":false,"messageTitle":"Test cases for all commands","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":3},"java":{"insertions":915,"deletions":45}}},{"hash":"e508aaf7cdd7dc9048787c964e441c5367cc1523","isMergeCommit":false,"messageTitle":"Made a Jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"7e33b49d57bbc175232fc460af6a0a1725e108af","isMergeCommit":false,"messageTitle":"Minor edit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":4}}},{"hash":"b28f01dddb12b870c5b208abbbb98ee043fb0066","isMergeCommit":false,"messageTitle":"Minor edit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":5}}},{"hash":"51cc471a264a236626dd8eba3aad8970c6466a4e","isMergeCommit":false,"messageTitle":"Minor edit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":4}}},{"hash":"d5a93433e4b935321e185eb80e66917f738894f5","isMergeCommit":false,"messageTitle":"Minor edit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":4}}},{"hash":"a534daf902bb2dfa4a21f115b4edc4cd3ab3d008","isMergeCommit":false,"messageTitle":"JavaDoc and refactor for Commands.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":177,"deletions":56}}},{"hash":"0a2212f73c0af4b96f51ea16ca377ce0e244c934","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d3e13c08e21e6fd924ecd1e9e47f19130790818c","isMergeCommit":false,"messageTitle":"Writing JavaDocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":194,"deletions":46}}},{"hash":"837ed0313ab557426394cd30af65f24c18614c99","isMergeCommit":false,"messageTitle":"Editing to match coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":28}}},{"hash":"bb29e12edb7900acb9c4ceb1d7b1e0ea4908168f","isMergeCommit":false,"messageTitle":"Made find command","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":73,"deletions":7}}},{"hash":"28f062860630e6f0e3de5250c7327edca67e36c1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1f2253b363997eb807bd3a2559158bb6bfb75d17","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/command/Commands.java\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/task/ListOfTask.java\n#\tsrc/main/java/task/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"abfbe5c8cabf7450d221e022d9a526e3c198e79c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n","fileTypesAndContributionMap":{}},{"hash":"a950e406a369f853a51b5ba68078ef306c3cc14e","isMergeCommit":false,"messageTitle":"Minor edits and checking","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":107,"deletions":75}}}]}]},"authorFileTypeContributionMap":{"howenc":{"java":2141,"md":2,"fxml":0,"sh":0,"bat":0,"gradle":5,"txt":2}},"authorContributionVariance":{"howenc":429035.94},"authorDisplayNameMap":{"howenc":"CS2103T-F12-4 CHEO..OWEN"}} +{"authorDailyContributionsMap":{"howenc":[{"date":"2023-08-25","commitResults":[{"hash":"7ad0c356efe786fd4220a55a1dc1b786a2d85c17","isMergeCommit":false,"messageTitle":"Added greeting and exit.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"ef95ab7924e8bcb8b87163eb2757fcebb502cfc0","isMergeCommit":false,"messageTitle":"Added nextCommand and echo method","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":4}}},{"hash":"900137b2dc44f7f0a540491cf6332cea5edb3072","isMergeCommit":false,"messageTitle":"Added ability to store whatever text entered","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":2}}},{"hash":"f5d8c86beac183344d8187a74f9c83e2be9f2ce1","isMergeCommit":false,"messageTitle":"Added mark and unmark","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":4}}},{"hash":"cee558682ffe7b282115dd0051a70e8ebfc85051","isMergeCommit":false,"messageTitle":"Added Todo, Deadline, Event","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":12}}},{"hash":"d5acf0f157fbaad33145c884e9dcec2d65fbbb0b","isMergeCommit":false,"messageTitle":"Trimmed unnecessary code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":18}}},{"hash":"79354cbced0ad4491b713637ba971eef22a1c0fd","isMergeCommit":false,"messageTitle":"Added Parse class and edit nextCommand, exceptions.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":0},"java":{"insertions":160,"deletions":32}}},{"hash":"59eaa0612b962f5144a99447ffdc089d040e9a02","isMergeCommit":false,"messageTitle":"Implemented ArrayList\u003cTask\u003e","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":30}}},{"hash":"bec093a7dda82e05c0a849f366fb647e45dd7819","isMergeCommit":false,"messageTitle":"Added delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"dcabe02ef5e2cc6cab9876c65960cefbb6eec24c","isMergeCommit":false,"messageTitle":"Added enums for the commands","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":15}}},{"hash":"ff308534576aeb0ebe6cee4377f2e661d9c146f9","isMergeCommit":false,"messageTitle":"Edited UI testing","messageBody":"","tags":["A-TextUITesting"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":18},"java":{"insertions":1,"deletions":1}}},{"hash":"45055df24c804fa83c36d49b5ff2deaca34db703","isMergeCommit":false,"messageTitle":"Removed extra indent to fit code style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":110}}},{"hash":"0aa431a25b41ff5c40d041618bca170c74b12863","isMergeCommit":false,"messageTitle":"Fixed a mistake, added packaged main.java.Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":351,"deletions":349}}},{"hash":"6674717495710d537f9185f49d509c36907e7cae","isMergeCommit":false,"messageTitle":"Changed public methods to protected","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":20}}},{"hash":"b2e378e0e0b83524203af712252e89cd46a83a6b","isMergeCommit":false,"messageTitle":"Changed the package added a Task file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":149}}}]},{"date":"2023-08-28","commitResults":[{"hash":"b90e82282c1d6c7fc3256cb35eef615733bce918","isMergeCommit":false,"messageTitle":"Add quickLoad method and data.duke.txt file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":71,"deletions":0}}},{"hash":"64431adfca2ffbb48b011b6ab8612ab3ec6d7c01","isMergeCommit":false,"messageTitle":"Add readData","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":56,"deletions":22}}},{"hash":"abe1a7d0250d8cc80975e1cd7ce5814fc903e0e6","isMergeCommit":false,"messageTitle":"Minor print change","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"557915e8e6e1557e60801347f48a3cc51d3c108a","isMergeCommit":false,"messageTitle":"Add writeData","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":51,"deletions":0}}},{"hash":"72d4a31d25746e2282c0c0efce4b094a2c236ca5","isMergeCommit":false,"messageTitle":"Handle corrputed data","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":4,"deletions":4}}},{"hash":"32f2840fdaecea4156dea189e41989e319fd7f80","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"1942ee1382eb8f8963059ad66be80d50dd4c8956","isMergeCommit":false,"messageTitle":"Add LocalDateTime for tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":54,"deletions":24}}},{"hash":"5983f90ced235b3b7cb1e50a6a320e00e2a3b53f","isMergeCommit":false,"messageTitle":"Minor changes to commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":9}}},{"hash":"18ece5bd110e4cf5071f6f95a2c589b5183bee27","isMergeCommit":false,"messageTitle":"Add Parser, Storage, Ui, Commands classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":421,"deletions":406}}}]},{"date":"2023-08-29","commitResults":[{"hash":"a7731cf15ede5d374d7a185b2e458d9a43a7e6d6","isMergeCommit":false,"messageTitle":"Use state of Command Object as decision maker","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":0}}},{"hash":"f8f7a0181c355234c158b4323e81a1329d8d9d73","isMergeCommit":false,"messageTitle":"Minor edit","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"9678e1117c29dc81b63aa3a5523634e5ba05e170","isMergeCommit":false,"messageTitle":"Add twoCommands and threeCommands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":4}}},{"hash":"7975b6c096d5933271eeb824e18de58949ed20a8","isMergeCommit":false,"messageTitle":"Save point 1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"dd86539ce06e9bcfbf4a80332b73867f0385dcf3","isMergeCommit":false,"messageTitle":"Refactor code for OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":107,"deletions":137}}},{"hash":"7b1cb206b57c0a607227b848627ec686e8271296","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"9b53747e48b01e6465038b4c9eaec4dcd16ee840","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"29908b30b96e634962d448ebf5b63a229f03741a","isMergeCommit":false,"messageTitle":"Made packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":225,"deletions":195}}}]},{"date":"2023-08-30","commitResults":[{"hash":"71ecb7f434b6f234b55f27a3d8453f28f1c0d32c","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3d91eb87eac77aa44afb2eadff4d4080e2dc235d","isMergeCommit":false,"messageTitle":"Add Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"java":{"insertions":0,"deletions":0}}},{"hash":"a8b748c1aac47e0f0c69a300e4781802a4df4c18","isMergeCommit":false,"messageTitle":"Unmark main as module","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":35}}},{"hash":"a18efd9f16019cd06e524edb89bf8b68230bac15","isMergeCommit":false,"messageTitle":"Gradle and JUnit setup","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":1},"java":{"insertions":89,"deletions":53},"md":{"insertions":2,"deletions":2}}},{"hash":"08451b5484212e8e380e367928685c987f52278f","isMergeCommit":false,"messageTitle":"Exceptions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":5},"java":{"insertions":290,"deletions":145}}},{"hash":"3ec369f53ab77cda16738e185e5bbe064e14ba32","isMergeCommit":false,"messageTitle":"Test cases for all commands","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":3},"java":{"insertions":915,"deletions":45}}},{"hash":"e508aaf7cdd7dc9048787c964e441c5367cc1523","isMergeCommit":false,"messageTitle":"Made a Jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"7e33b49d57bbc175232fc460af6a0a1725e108af","isMergeCommit":false,"messageTitle":"Minor edit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":4}}},{"hash":"b28f01dddb12b870c5b208abbbb98ee043fb0066","isMergeCommit":false,"messageTitle":"Minor edit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":5}}},{"hash":"51cc471a264a236626dd8eba3aad8970c6466a4e","isMergeCommit":false,"messageTitle":"Minor edit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":4}}},{"hash":"d5a93433e4b935321e185eb80e66917f738894f5","isMergeCommit":false,"messageTitle":"Minor edit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":4}}},{"hash":"a534daf902bb2dfa4a21f115b4edc4cd3ab3d008","isMergeCommit":false,"messageTitle":"JavaDoc and refactor for Commands.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":177,"deletions":56}}},{"hash":"0a2212f73c0af4b96f51ea16ca377ce0e244c934","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d3e13c08e21e6fd924ecd1e9e47f19130790818c","isMergeCommit":false,"messageTitle":"Writing JavaDocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":194,"deletions":46}}},{"hash":"837ed0313ab557426394cd30af65f24c18614c99","isMergeCommit":false,"messageTitle":"Editing to match coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":28}}},{"hash":"bb29e12edb7900acb9c4ceb1d7b1e0ea4908168f","isMergeCommit":false,"messageTitle":"Made find command","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":73,"deletions":7}}},{"hash":"28f062860630e6f0e3de5250c7327edca67e36c1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1f2253b363997eb807bd3a2559158bb6bfb75d17","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/command/Commands.java\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/task/ListOfTask.java\n#\tsrc/main/java/task/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"abfbe5c8cabf7450d221e022d9a526e3c198e79c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n","fileTypesAndContributionMap":{}},{"hash":"a950e406a369f853a51b5ba68078ef306c3cc14e","isMergeCommit":false,"messageTitle":"Minor edits and checking","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":107,"deletions":75}}}]},{"date":"2023-09-04","commitResults":[{"hash":"81aeffae9a8c0c7ea5121f26cc719e3244e5dc41","isMergeCommit":false,"messageTitle":"Minor Edit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":15}}}]},{"date":"2023-09-05","commitResults":[{"hash":"a8df2b84f5dc81158d5688dfe29e622686fc4382","isMergeCommit":false,"messageTitle":"Reviewed feedback from PR","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":22,"deletions":0},"java":{"insertions":267,"deletions":248}}}]},{"date":"2023-09-06","commitResults":[{"hash":"5994302f6170f1e2f4c2148d648660a76edc72f0","isMergeCommit":false,"messageTitle":"Implemented JavaFx","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"fxml":{"insertions":41,"deletions":0},"java":{"insertions":161,"deletions":9}}},{"hash":"a804a15f6b81453b84bd64c980630e242649a236","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ef1c71fe91ceeae0beed2ee4fe3d1c0350e3f897","isMergeCommit":false,"messageTitle":"Implemented CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":1},"java":{"insertions":303,"deletions":935}}},{"hash":"8f36ddb5fe4f0971329cd60807d2ce400c204b60","isMergeCommit":false,"messageTitle":"Minor commit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"026ee1d621fcf1da89c60baf485345c2bc723ae4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f2404a717e06e9a066d1b348be0f02943fbcd33f","isMergeCommit":false,"messageTitle":"Minor edit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"howenc":{"java":1680,"md":2,"fxml":41,"sh":0,"bat":0,"gradle":30,"txt":2}},"authorContributionVariance":{"howenc":389410.22},"authorDisplayNameMap":{"howenc":"CS2103T-F12-4 CHEO..OWEN"}} diff --git a/itsNatTan_ip_master/authorship.json b/itsNatTan_ip_master/authorship.json index d189f9d6..769fafc2 100644 --- a/itsNatTan_ip_master/authorship.json +++ b/itsNatTan_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":"itsNatTan"},"content":" mainClass.set(\"EpochMind\")","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":"itsNatTan"},"content":" archiveBaseName \u003d \"EpochMind\"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"itsNatTan":2,"-":40}},{"path":"src/main/java/EpochMind.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"import task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"import util.Parser;","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import util.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"import util.Ui;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"public class EpochMind {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" Ui.line();","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" Ui.greeting();","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" Storage storage \u003d new Storage();","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" Parser parser \u003d new Parser(tasks, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" Ui.line();","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" parser.execute(command);","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" Ui.line();","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"itsNatTan":27}},{"path":"src/main/java/exception/EpochMindException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"public class EpochMindException {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":" protected String error;","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":" public EpochMindException(String error) {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":" this.error \u003d error;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" return error;","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"itsNatTan":15}},{"path":"src/main/java/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"import java.util.List;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" protected String deadlineString;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" protected LocalDateTime deadlineDateTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" protected boolean isDateTime \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" public Deadline(String description, String deadlineString) {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" this.deadlineString \u003d deadlineString;","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" this.deadlineDateTime \u003d convertDate(deadlineString);","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" if (this.deadlineDateTime !\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" this.isDateTime \u003d true;","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" * If deadline is a datetime, convert to datetime object","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" * @param deadlineString String of the deadline","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":" public static LocalDateTime convertDate(String deadlineString) {","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" List\u003cDateTimeFormatter\u003e formatters \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm:ss\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm:ss.SSS\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm:ss\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm:ss.SSS\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd/MMM/yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd/MMM/yyyy HH:mm:ss\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd/MMM/yyyy HH:mm:ss.SSS\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HH:mm:ss\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HH:mm:ss.SSS\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm:ss\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm:ss.SSS\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy-MMM-dd HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy-MMM-dd HH:mm:ss\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy-MMM-dd HH:mm:ss.SSS\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy/MM/dd HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy/MM/dd HH:mm:ss\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy/MM/dd HH:mm:ss.SSS\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy/MMM/dd HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy/MMM/dd HH:mm:ss\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy/MMM/dd HH:mm:ss.SSS\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"itsNatTan"},"content":" deadlineString \u003d deadlineString.trim();","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"itsNatTan"},"content":" if (!deadlineString.contains(\":\")) { // No time","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"itsNatTan"},"content":" deadlineString \u003d deadlineString + \" 00:00\";","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"itsNatTan"},"content":" for (DateTimeFormatter formatter : formatters) {","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"itsNatTan"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"itsNatTan"},"content":" LocalDateTime deadlineDateTime \u003d LocalDateTime.parse(deadlineString, formatter);","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"itsNatTan"},"content":" return deadlineDateTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"itsNatTan"},"content":" } catch (DateTimeParseException e) { // task.Deadline is not a DateTime","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"itsNatTan"},"content":" // do nothing","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"itsNatTan"},"content":" return null;","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"itsNatTan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"itsNatTan"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"itsNatTan"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"[D]\");","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"[\" + getStatusIcon() + \"] \");","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"itsNatTan"},"content":" sb.append(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"itsNatTan"},"content":" sb.append(\" (by: \" + displayTime() + \")\");","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"itsNatTan"},"content":" return sb.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"itsNatTan"},"content":" * Checks if it is a deadline, to differentiate between tasks","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"itsNatTan"},"content":" * @return true","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"itsNatTan"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"itsNatTan"},"content":" public boolean isDeadline() {","lastModifiedDate":"2023-08-25"},{"lineNumber":89,"author":{"gitId":"itsNatTan"},"content":" return true;","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":92,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":93,"author":{"gitId":"itsNatTan"},"content":" * @return A boolean on whether deadline is overdue or not","lastModifiedDate":"2023-08-25"},{"lineNumber":94,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"itsNatTan"},"content":" public boolean overdue() {","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"itsNatTan"},"content":" if (isDateTime) {","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"itsNatTan"},"content":" if (deadlineDateTime.isAfter(LocalDateTime.now())) {","lastModifiedDate":"2023-08-25"},{"lineNumber":98,"author":{"gitId":"itsNatTan"},"content":" return false;","lastModifiedDate":"2023-08-25"},{"lineNumber":99,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":100,"author":{"gitId":"itsNatTan"},"content":" return true;","lastModifiedDate":"2023-08-25"},{"lineNumber":101,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":102,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":103,"author":{"gitId":"itsNatTan"},"content":" return false;","lastModifiedDate":"2023-08-25"},{"lineNumber":104,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":105,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":106,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":107,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"itsNatTan"},"content":" * Returns a boolean of whether the deadline is due by the specified date","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"itsNatTan"},"content":" * @param localDateTime Date and Time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"itsNatTan"},"content":" * @return boolean","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"itsNatTan"},"content":" public boolean dueBy(LocalDateTime localDateTime) {","lastModifiedDate":"2023-08-25"},{"lineNumber":113,"author":{"gitId":"itsNatTan"},"content":" if (isDateTime) {","lastModifiedDate":"2023-08-25"},{"lineNumber":114,"author":{"gitId":"itsNatTan"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"itsNatTan"},"content":" if (deadlineDateTime.isAfter(localDateTime)) {","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"itsNatTan"},"content":" return false;","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"itsNatTan"},"content":" return true;","lastModifiedDate":"2023-08-25"},{"lineNumber":119,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":120,"author":{"gitId":"itsNatTan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"itsNatTan"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":125,"author":{"gitId":"itsNatTan"},"content":" return false;","lastModifiedDate":"2023-08-25"},{"lineNumber":126,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":127,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":128,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":129,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"itsNatTan"},"content":" * Display a Date Time object in a nicer string format","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"itsNatTan"},"content":" * @return String","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"itsNatTan"},"content":" public String displayTime() {","lastModifiedDate":"2023-08-25"},{"lineNumber":134,"author":{"gitId":"itsNatTan"},"content":" if (isDateTime) {","lastModifiedDate":"2023-08-25"},{"lineNumber":135,"author":{"gitId":"itsNatTan"},"content":" return deadlineDateTime.format(DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HH:mm\")).replaceAll(\"[T\\\\-/]\", \" \");","lastModifiedDate":"2023-08-25"},{"lineNumber":136,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"itsNatTan"},"content":" return deadlineString;","lastModifiedDate":"2023-08-25"},{"lineNumber":138,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":139,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":140,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"itsNatTan":140}},{"path":"src/main/java/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":" protected String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"[E]\");","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"[\" + getStatusIcon() + \"] \");","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" sb.append(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" sb.append(\" (from: \" + from + \" to: \" + to + \")\");","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" return sb.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"itsNatTan":22}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" * Marks the task as done","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" public void mark() {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" * Unmarks the task","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" public void unmark() {","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"[\" + getStatusIcon() + \"] \");","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":" sb.append(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":" return sb.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" public boolean isDeadline() {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":" return false;","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":" public boolean contains(String searchBy) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"itsNatTan"},"content":" return description.contains(searchBy);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"itsNatTan":46}},{"path":"src/main/java/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import exception.EpochMindException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"import java.util.List;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":"public class TaskList {","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" private List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" public TaskList() {","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" * Method to return the List of tasks","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" * @return The list of tasks","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" return tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" * List out the task list","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":" public String list() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":" System.out.println(\"The Mind sees no task\");","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":" sb.append(i + 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" sb.append(\". \");","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":" sb.append(tasks.get(i).toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" sb.deleteCharAt(sb.length() - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":" return sb.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"itsNatTan"},"content":" * List out the task list when given an ArrayList of tasks","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"itsNatTan"},"content":" * @param tasks ArrayList of task.Task","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"itsNatTan"},"content":" public String list(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"itsNatTan"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"itsNatTan"},"content":" System.out.println(\"The Mind sees no task\");","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"itsNatTan"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"itsNatTan"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"itsNatTan"},"content":" sb.append(i + 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"itsNatTan"},"content":" sb.append(\". \");","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"itsNatTan"},"content":" sb.append(tasks.get(i).toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"itsNatTan"},"content":" sb.deleteCharAt(sb.length() - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"itsNatTan"},"content":" return sb.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"itsNatTan"},"content":" * Mark a task as completed","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"itsNatTan"},"content":" * @param index Index to mark as completed","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"itsNatTan"},"content":" public void mark(int index) {","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"itsNatTan"},"content":" if (index \u003d\u003d -1) { // Parsing issue","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"itsNatTan"},"content":" // Do nothing","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"itsNatTan"},"content":" if (tasks.size() \u003c index) {","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"Thou hast specified an index larger than thy list\");","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"itsNatTan"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"itsNatTan"},"content":" tasks.get(index - 1).mark();","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"itsNatTan"},"content":" System.out.println(\"The Mind sees that this task is completed \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"itsNatTan"},"content":" tasks.get(index - 1));","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"itsNatTan"},"content":" * Unmark a completed task","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"itsNatTan"},"content":" * @param index Index to mark as uncompleted","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":89,"author":{"gitId":"itsNatTan"},"content":" public void unmark(int index) {","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"itsNatTan"},"content":" if (index \u003d\u003d -1) { // Parsing issue","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"itsNatTan"},"content":" // Do nothing","lastModifiedDate":"2023-08-25"},{"lineNumber":92,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":93,"author":{"gitId":"itsNatTan"},"content":" if (tasks.size() \u003c index) {","lastModifiedDate":"2023-08-25"},{"lineNumber":94,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"Thou hast specified an index larger than thy list\");","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"itsNatTan"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"itsNatTan"},"content":" tasks.get(index - 1).unmark();","lastModifiedDate":"2023-08-25"},{"lineNumber":98,"author":{"gitId":"itsNatTan"},"content":" System.out.println(\"The Mind sees that this task is not yet completed \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":99,"author":{"gitId":"itsNatTan"},"content":" tasks.get(index - 1));","lastModifiedDate":"2023-08-25"},{"lineNumber":100,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":101,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":102,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":103,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":104,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":105,"author":{"gitId":"itsNatTan"},"content":" * Delete a task from the list","lastModifiedDate":"2023-08-25"},{"lineNumber":106,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"itsNatTan"},"content":" * @param index Index to delete the task","lastModifiedDate":"2023-08-25"},{"lineNumber":108,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":109,"author":{"gitId":"itsNatTan"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-25"},{"lineNumber":110,"author":{"gitId":"itsNatTan"},"content":" if (index \u003d\u003d -1) { // Parsing issue","lastModifiedDate":"2023-08-25"},{"lineNumber":111,"author":{"gitId":"itsNatTan"},"content":" // Do nothing","lastModifiedDate":"2023-08-25"},{"lineNumber":112,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":113,"author":{"gitId":"itsNatTan"},"content":" if (tasks.size() \u003c index) {","lastModifiedDate":"2023-08-25"},{"lineNumber":114,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"Thou hast specified an index larger than thy list\");","lastModifiedDate":"2023-08-25"},{"lineNumber":115,"author":{"gitId":"itsNatTan"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"itsNatTan"},"content":" Task task \u003d tasks.remove(index - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"itsNatTan"},"content":" System.out.println(\"The Mind has eradicated the task \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":119,"author":{"gitId":"itsNatTan"},"content":" task + \"\\nThere are now \" + tasks.size() + \" tasks left to complete\");","lastModifiedDate":"2023-08-25"},{"lineNumber":120,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":121,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":122,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":123,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":124,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":125,"author":{"gitId":"itsNatTan"},"content":" * Add a todo task","lastModifiedDate":"2023-08-25"},{"lineNumber":126,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"itsNatTan"},"content":" * @param task Parsed string containing the task description","lastModifiedDate":"2023-08-25"},{"lineNumber":128,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":129,"author":{"gitId":"itsNatTan"},"content":" public void todo(String task) {","lastModifiedDate":"2023-08-25"},{"lineNumber":130,"author":{"gitId":"itsNatTan"},"content":" ToDo toDo \u003d new ToDo(task);","lastModifiedDate":"2023-08-25"},{"lineNumber":131,"author":{"gitId":"itsNatTan"},"content":" tasks.add(toDo);","lastModifiedDate":"2023-08-25"},{"lineNumber":132,"author":{"gitId":"itsNatTan"},"content":" System.out.println(\"The Mind has added a new task \\n\" + toDo + \"\\nThere are now \" + tasks.size() + \" tasks left to complete\");","lastModifiedDate":"2023-08-25"},{"lineNumber":133,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":134,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":135,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":136,"author":{"gitId":"itsNatTan"},"content":" * Add a deadline task","lastModifiedDate":"2023-08-25"},{"lineNumber":137,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"itsNatTan"},"content":" * @param task Parsed string containing the task description","lastModifiedDate":"2023-08-25"},{"lineNumber":139,"author":{"gitId":"itsNatTan"},"content":" * @param deadlineString Parsed string containing the deadline","lastModifiedDate":"2023-08-25"},{"lineNumber":140,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":141,"author":{"gitId":"itsNatTan"},"content":" public void deadline(String task, String deadlineString) {","lastModifiedDate":"2023-08-25"},{"lineNumber":142,"author":{"gitId":"itsNatTan"},"content":" Deadline deadline \u003d new Deadline(task, deadlineString);","lastModifiedDate":"2023-08-25"},{"lineNumber":143,"author":{"gitId":"itsNatTan"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-08-25"},{"lineNumber":144,"author":{"gitId":"itsNatTan"},"content":" System.out.println(\"The Mind has added a new task \\n\" + deadline + \"\\nThere are now \" + tasks.size() + \" tasks left to complete\");","lastModifiedDate":"2023-08-25"},{"lineNumber":145,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":146,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":147,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":148,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":149,"author":{"gitId":"itsNatTan"},"content":" * Add an event task","lastModifiedDate":"2023-08-25"},{"lineNumber":150,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"itsNatTan"},"content":" * @param description Parsed string containing the task description","lastModifiedDate":"2023-08-25"},{"lineNumber":152,"author":{"gitId":"itsNatTan"},"content":" * @param start Parsed string containing the start datetime","lastModifiedDate":"2023-08-25"},{"lineNumber":153,"author":{"gitId":"itsNatTan"},"content":" * @param end Parsed string containing the end datetime","lastModifiedDate":"2023-08-25"},{"lineNumber":154,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":155,"author":{"gitId":"itsNatTan"},"content":" public void event(String description, String start, String end) {","lastModifiedDate":"2023-08-25"},{"lineNumber":156,"author":{"gitId":"itsNatTan"},"content":" Event event \u003d new Event(description, start, end);","lastModifiedDate":"2023-08-25"},{"lineNumber":157,"author":{"gitId":"itsNatTan"},"content":" tasks.add(event);","lastModifiedDate":"2023-08-25"},{"lineNumber":158,"author":{"gitId":"itsNatTan"},"content":" System.out.println(\"The Mind has added a new task \\n\" + event + \"\\nThere are now \" + tasks.size() + \" tasks left to complete\");","lastModifiedDate":"2023-08-25"},{"lineNumber":159,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":160,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":161,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"itsNatTan"},"content":" * Adds any task","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"itsNatTan"},"content":" * @param task The task to add","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"itsNatTan"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"itsNatTan"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"itsNatTan"},"content":" * Size of task list","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"itsNatTan"},"content":" * @return Number of tasks in the list","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"itsNatTan"},"content":" public int size() {","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"itsNatTan"},"content":" return tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":178,"author":{"gitId":"itsNatTan"},"content":" * Displays all tasks that are overdue","lastModifiedDate":"2023-08-25"},{"lineNumber":179,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":180,"author":{"gitId":"itsNatTan"},"content":" public String overdue() {","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"itsNatTan"},"content":" TaskList overdue \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"itsNatTan"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-25"},{"lineNumber":183,"author":{"gitId":"itsNatTan"},"content":" if (task.isDeadline()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":184,"author":{"gitId":"itsNatTan"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-08-25"},{"lineNumber":185,"author":{"gitId":"itsNatTan"},"content":" if (deadline.overdue()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":186,"author":{"gitId":"itsNatTan"},"content":" overdue.add(deadline);","lastModifiedDate":"2023-08-25"},{"lineNumber":187,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":188,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":189,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":190,"author":{"gitId":"itsNatTan"},"content":" if (overdue.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-25"},{"lineNumber":191,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind sees no overdue deadlines\";","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":193,"author":{"gitId":"itsNatTan"},"content":" return overdue.list();","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":195,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":196,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":197,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"itsNatTan"},"content":" * Returns a string representation of all the tasks that are due by the specified date","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"itsNatTan"},"content":" * @param command The input by user with the command of dueby and second argument of the date","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"itsNatTan"},"content":" * @return String","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"itsNatTan"},"content":" public String dueBy(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"itsNatTan"},"content":" String[] commandList \u003d command.trim().toLowerCase().split(\" \");","lastModifiedDate":"2023-08-25"},{"lineNumber":204,"author":{"gitId":"itsNatTan"},"content":" if (commandList.length \u003e 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":205,"author":{"gitId":"itsNatTan"},"content":" String dateTimeString \u003d commandList[1];","lastModifiedDate":"2023-08-25"},{"lineNumber":206,"author":{"gitId":"itsNatTan"},"content":" LocalDateTime localDateTime \u003d Deadline.convertDate(dateTimeString);","lastModifiedDate":"2023-08-25"},{"lineNumber":207,"author":{"gitId":"itsNatTan"},"content":" if (localDateTime !\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":208,"author":{"gitId":"itsNatTan"},"content":" TaskList dueBy \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"itsNatTan"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-25"},{"lineNumber":210,"author":{"gitId":"itsNatTan"},"content":" if (task.isDeadline()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":211,"author":{"gitId":"itsNatTan"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-08-25"},{"lineNumber":212,"author":{"gitId":"itsNatTan"},"content":" if (deadline.dueBy(localDateTime)) {","lastModifiedDate":"2023-08-25"},{"lineNumber":213,"author":{"gitId":"itsNatTan"},"content":" dueBy.add(deadline);","lastModifiedDate":"2023-08-25"},{"lineNumber":214,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":215,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":216,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":217,"author":{"gitId":"itsNatTan"},"content":" if (dueBy.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-25"},{"lineNumber":218,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind sees no deadlines due by that day\";","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":220,"author":{"gitId":"itsNatTan"},"content":" return dueBy.list();","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":222,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":223,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind does not sense a correct DateTime\";","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":225,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":226,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind sees no deadline\";","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":228,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":229,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"itsNatTan"},"content":" * Find all tasks that contains the string searchBy","lastModifiedDate":"2023-08-31"},{"lineNumber":232,"author":{"gitId":"itsNatTan"},"content":" * @param searchBy The string to searchBy","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"itsNatTan"},"content":" * @return String representation of all the tasks that contains the string","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"itsNatTan"},"content":" public String find(String searchBy) {","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"itsNatTan"},"content":" TaskList contains \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"itsNatTan"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"itsNatTan"},"content":" if (task.contains(searchBy)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"itsNatTan"},"content":" contains.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":242,"author":{"gitId":"itsNatTan"},"content":" if (contains.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind sees no such tasks\";","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"itsNatTan"},"content":" return contains.list();","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"itsNatTan":247}},{"path":"src/main/java/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"[T]\");","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"[\" + getStatusIcon() + \"] \");","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" sb.append(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" return sb.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"itsNatTan":17}},{"path":"src/main/java/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package util;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import exception.EpochMindException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"import task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"import static java.lang.Integer.parseInt;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" * Class that parses the commands given by user","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":"public class Parser {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" public TaskList tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" public Storage storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" public Parser(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" * Helper function to remove the first command word","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" * @param command String obtained from scanner","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" * @return String without first command word","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" public static String removeCommandWord(String command) {","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" int firstSpaceIndex \u003d command.indexOf(\u0027 \u0027);","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":" if (firstSpaceIndex \u003d\u003d -1 || firstSpaceIndex \u003d\u003d command.length() - 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" return \"\";","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" // Extract the substring starting from the position after the first space","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":" return command.substring(firstSpaceIndex + 1).trim();","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" public static String getCommandWord(String command) {","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":" return command.trim().toLowerCase().split(\" \")[0];","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":" * Helper function to get the index from command","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"itsNatTan"},"content":" * @param command","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"itsNatTan"},"content":" * @return","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"itsNatTan"},"content":" public static int getIndex(String command) {","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"itsNatTan"},"content":" String[] commandList \u003d command.trim().toLowerCase().split(\" \");","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"itsNatTan"},"content":" if (commandList.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"Thou hast forgotten to specify thine index\");","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"itsNatTan"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"itsNatTan"},"content":" return -1;","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"itsNatTan"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"itsNatTan"},"content":" int index \u003d parseInt(commandList[1]);","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"itsNatTan"},"content":" return index;","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"itsNatTan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"itsNatTan"},"content":" System.out.println(\"Thou hast given an invalid index\");","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"itsNatTan"},"content":" return -1;","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"itsNatTan"},"content":" * Executes the command","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"itsNatTan"},"content":" * @param command User input","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"itsNatTan"},"content":" public void execute(String command) {","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"itsNatTan"},"content":" switch (getCommandWord(command)) {","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"itsNatTan"},"content":" case \"bye\":","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"itsNatTan"},"content":" Ui.bye();","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"itsNatTan"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"itsNatTan"},"content":" case \"list\":","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"itsNatTan"},"content":" System.out.println(tasks.list());","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"itsNatTan"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"itsNatTan"},"content":" case \"mark\":","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"itsNatTan"},"content":" tasks.mark(getIndex(command));","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"itsNatTan"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"itsNatTan"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"itsNatTan"},"content":" tasks.unmark(getIndex(command));","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"itsNatTan"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"itsNatTan"},"content":" case \"todo\":","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"itsNatTan"},"content":" toDoParser(command);","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"itsNatTan"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"itsNatTan"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"itsNatTan"},"content":" deadlineParser(command);","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"itsNatTan"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"itsNatTan"},"content":" case \"event\":","lastModifiedDate":"2023-08-25"},{"lineNumber":89,"author":{"gitId":"itsNatTan"},"content":" eventParser(command);","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"itsNatTan"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"itsNatTan"},"content":" case \"delete\":","lastModifiedDate":"2023-08-25"},{"lineNumber":92,"author":{"gitId":"itsNatTan"},"content":" tasks.delete(getIndex(command));","lastModifiedDate":"2023-08-25"},{"lineNumber":93,"author":{"gitId":"itsNatTan"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":94,"author":{"gitId":"itsNatTan"},"content":" case \"overdue\":","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"itsNatTan"},"content":" System.out.println(tasks.overdue());","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"itsNatTan"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"itsNatTan"},"content":" case \"dueby\":","lastModifiedDate":"2023-08-25"},{"lineNumber":98,"author":{"gitId":"itsNatTan"},"content":" System.out.println(tasks.dueBy(command));","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"itsNatTan"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":100,"author":{"gitId":"itsNatTan"},"content":" case \"save\":","lastModifiedDate":"2023-08-25"},{"lineNumber":101,"author":{"gitId":"itsNatTan"},"content":" storage.save(tasks, removeCommandWord(command));","lastModifiedDate":"2023-08-25"},{"lineNumber":102,"author":{"gitId":"itsNatTan"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":103,"author":{"gitId":"itsNatTan"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"itsNatTan"},"content":" System.out.println(tasks.find(removeCommandWord(command)));","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"itsNatTan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":107,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":108,"author":{"gitId":"itsNatTan"},"content":" default:","lastModifiedDate":"2023-08-25"},{"lineNumber":109,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"There is no such command in the Arcana of Knowledge\");","lastModifiedDate":"2023-08-25"},{"lineNumber":110,"author":{"gitId":"itsNatTan"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-25"},{"lineNumber":111,"author":{"gitId":"itsNatTan"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":112,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":113,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":114,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":115,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"itsNatTan"},"content":" * Parse command for todo creation","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"itsNatTan"},"content":" * @param command User Input","lastModifiedDate":"2023-08-25"},{"lineNumber":119,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":120,"author":{"gitId":"itsNatTan"},"content":" public void toDoParser(String command) {","lastModifiedDate":"2023-08-25"},{"lineNumber":121,"author":{"gitId":"itsNatTan"},"content":" String restOfCommand \u003d Parser.removeCommandWord(command);","lastModifiedDate":"2023-08-25"},{"lineNumber":122,"author":{"gitId":"itsNatTan"},"content":" if (restOfCommand.equals(\"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":123,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"Thou hast not specified a task\");","lastModifiedDate":"2023-08-25"},{"lineNumber":124,"author":{"gitId":"itsNatTan"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-25"},{"lineNumber":125,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":126,"author":{"gitId":"itsNatTan"},"content":" tasks.todo(restOfCommand);","lastModifiedDate":"2023-08-25"},{"lineNumber":127,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":128,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":129,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":130,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":131,"author":{"gitId":"itsNatTan"},"content":" * Parse command for deadline creation","lastModifiedDate":"2023-08-25"},{"lineNumber":132,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"itsNatTan"},"content":" * @param command User Input","lastModifiedDate":"2023-08-25"},{"lineNumber":134,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":135,"author":{"gitId":"itsNatTan"},"content":" public void deadlineParser(String command) {","lastModifiedDate":"2023-08-25"},{"lineNumber":136,"author":{"gitId":"itsNatTan"},"content":" String restOfCommand \u003d Parser.removeCommandWord(command);","lastModifiedDate":"2023-08-25"},{"lineNumber":137,"author":{"gitId":"itsNatTan"},"content":" int endIndex \u003d restOfCommand.indexOf(\"/by \");","lastModifiedDate":"2023-08-25"},{"lineNumber":138,"author":{"gitId":"itsNatTan"},"content":" if (endIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":139,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"The Mind needs a deadline\");","lastModifiedDate":"2023-08-25"},{"lineNumber":140,"author":{"gitId":"itsNatTan"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-25"},{"lineNumber":141,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":142,"author":{"gitId":"itsNatTan"},"content":" String taskDescription \u003d restOfCommand.substring(0, endIndex).trim();","lastModifiedDate":"2023-08-25"},{"lineNumber":143,"author":{"gitId":"itsNatTan"},"content":" if (taskDescription.trim().equals(\"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":144,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"Thou hast not specified a task\");","lastModifiedDate":"2023-08-25"},{"lineNumber":145,"author":{"gitId":"itsNatTan"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-25"},{"lineNumber":146,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":147,"author":{"gitId":"itsNatTan"},"content":" int deadlineIndex \u003d restOfCommand.indexOf(\"/by \") + 3;","lastModifiedDate":"2023-08-25"},{"lineNumber":148,"author":{"gitId":"itsNatTan"},"content":" String deadlineString \u003d restOfCommand.substring(deadlineIndex);","lastModifiedDate":"2023-08-25"},{"lineNumber":149,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(taskDescription, deadlineString);","lastModifiedDate":"2023-08-25"},{"lineNumber":150,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":151,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":152,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":153,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":154,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":155,"author":{"gitId":"itsNatTan"},"content":" * Add an event task","lastModifiedDate":"2023-08-25"},{"lineNumber":156,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"itsNatTan"},"content":" * @param command String obtained from scanner","lastModifiedDate":"2023-08-25"},{"lineNumber":158,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":159,"author":{"gitId":"itsNatTan"},"content":" public void eventParser(String command) {","lastModifiedDate":"2023-08-25"},{"lineNumber":160,"author":{"gitId":"itsNatTan"},"content":" String restOfCommand \u003d Parser.removeCommandWord(command);","lastModifiedDate":"2023-08-25"},{"lineNumber":161,"author":{"gitId":"itsNatTan"},"content":" int fromIndex \u003d restOfCommand.indexOf(\"/from\");","lastModifiedDate":"2023-08-25"},{"lineNumber":162,"author":{"gitId":"itsNatTan"},"content":" if (fromIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":163,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"The Mind needs a start time\");","lastModifiedDate":"2023-08-25"},{"lineNumber":164,"author":{"gitId":"itsNatTan"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-25"},{"lineNumber":165,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":166,"author":{"gitId":"itsNatTan"},"content":" String description \u003d restOfCommand.substring(0, fromIndex).trim();","lastModifiedDate":"2023-08-25"},{"lineNumber":167,"author":{"gitId":"itsNatTan"},"content":" if (description.equals(\"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":168,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"Thou hast not specified a task\");","lastModifiedDate":"2023-08-25"},{"lineNumber":169,"author":{"gitId":"itsNatTan"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-25"},{"lineNumber":170,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":171,"author":{"gitId":"itsNatTan"},"content":" fromIndex \u003d restOfCommand.indexOf(\"/from\") + \"/from\".length();","lastModifiedDate":"2023-08-25"},{"lineNumber":172,"author":{"gitId":"itsNatTan"},"content":" int toIndex \u003d restOfCommand.indexOf(\"/to\");","lastModifiedDate":"2023-08-25"},{"lineNumber":173,"author":{"gitId":"itsNatTan"},"content":" if (toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":174,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"The Mind needs a end time\");","lastModifiedDate":"2023-08-25"},{"lineNumber":175,"author":{"gitId":"itsNatTan"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-25"},{"lineNumber":176,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":177,"author":{"gitId":"itsNatTan"},"content":" String startString \u003d restOfCommand.substring(fromIndex, toIndex).trim();","lastModifiedDate":"2023-08-25"},{"lineNumber":178,"author":{"gitId":"itsNatTan"},"content":" toIndex \u003d restOfCommand.indexOf(\"/to\") + \"/to\".length();","lastModifiedDate":"2023-08-25"},{"lineNumber":179,"author":{"gitId":"itsNatTan"},"content":" String endString \u003d restOfCommand.substring(toIndex);","lastModifiedDate":"2023-08-25"},{"lineNumber":180,"author":{"gitId":"itsNatTan"},"content":" tasks.event(description, startString, endString);","lastModifiedDate":"2023-08-25"},{"lineNumber":181,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":182,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":183,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":184,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":185,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"itsNatTan":185}},{"path":"src/main/java/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package util;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import task.Task;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"import task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"import java.io.File;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":"public class Storage {","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" public String filePath \u003d new File(\"\").getAbsolutePath() + \"/data/EpochMind.txt\";","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" * Saves the task list to a txt file at the path","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" * @param taskList The task list to write to file","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" public void save(TaskList taskList) {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" File parentDirectory \u003d file.getParentFile();","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" if (!parentDirectory.exists()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" parentDirectory.mkdir();","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" try (PrintWriter pw \u003d new PrintWriter(file);) {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" for (Task task : taskList.getTasks()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" pw.println(task.toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" System.out.println(\"The Mind has failed to save the tasks\");","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":" * Saves the task list to a txt file at the path","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":" * @param taskList The task list to write to file","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":" public void save(TaskList taskList, String filePath) {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":" try (PrintWriter pw \u003d new PrintWriter(file);) {","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":" File parentDirectory \u003d file.getParentFile();","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"itsNatTan"},"content":" if (!parentDirectory.exists()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"itsNatTan"},"content":" parentDirectory.mkdir();","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"itsNatTan"},"content":" for (Task task : taskList.getTasks()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"itsNatTan"},"content":" pw.println(task.toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"itsNatTan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"itsNatTan"},"content":" System.out.println(\"The Mind has failed to save the tasks. Check thy path.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"itsNatTan":53}},{"path":"src/main/java/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package util;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import java.util.Random;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"public class Ui {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":" public static String logo \u003d \"\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":" \" \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":" \" ____ \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" \" ,---,. ,---, ,\u0027 , `. \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" \" ,\u0027 .\u0027 |,-.----. ,--.\u0027 | ,-+-,.\u0027 _ | ,--, ,---, \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" \",---.\u0027 |\\\\ / \\\\ ,---. | | : ,-+-. ; , ||,--.\u0027| ,---, ,---.\u0027| \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" \"| | .\u0027| : | \u0027 ,\u0027\\\\ : : : ,--.\u0027|\u0027 | ;|| |, ,-+-. / | | | : \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" \": : |-,| | .\\\\ : / / | ,---. : | |,--.| | ,\u0027, | \u0027:`--\u0027_ ,--.\u0027|\u0027 | | | | \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" \": | ;/|. : |: |. ; ,. : / \\\\ | : \u0027 || | / | | ||,\u0027 ,\u0027| | | ,\\\"\u0027 | ,--.__| | \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" \"| : .\u0027| | \\\\ :\u0027 | |: : / / \u0027 | | /\u0027 :\u0027 | : | : |,\u0027 | | | | / | | / ,\u0027 | \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" \"| | |-,| : . |\u0027 | .; :. \u0027 / \u0027 : | | |; . | ; |--\u0027 | | : | | | | |. \u0027 / | \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" \"\u0027 : ;/|: |`-\u0027| : |\u0027 ; :__ | | \u0027 | :| : | | , \u0027 : |__ | | | |/ \u0027 ; |: | \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" \"| | \\\\: : : \\\\ \\\\ / \u0027 | \u0027.\u0027|| : :_:,\u0027| : \u0027 |/ | | \u0027.\u0027|| | |--\u0027 | | \u0027/ \u0027 \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" \"| : .\u0027| | : `----\u0027 | : :| | ,\u0027 ; | |`-\u0027 ; : ;| |/ | : :| \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" \"| | ,\u0027 `---\u0027.| \\\\ \\\\ / `--\u0027\u0027 | ;/ | , / \u0027---\u0027 \\\\ \\\\ / \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" \"`----\u0027 `---` `----\u0027 \u0027---\u0027 ---`-\u0027 `----\u0027 \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" \" \\n\";","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" public static String[] exitMessage \u003d {\"May you seek the truth.\",","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" \"May the truth prevail.\", \"May you yet again thirst for wisdom.\", \"May your quest for wisdom be unwavering.\",","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" \"May your pursuit of knowledge illuminate your path.\"};","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":" * Exit message","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":" public static void bye() {","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" System.out.println(exitMessage[new Random().nextInt(exitMessage.length)]);","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":" System.exit(0);","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":" * Greeting message","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":" public static void greeting() {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" System.out.println(logo + \"___________________________________________________________________________________________________________\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":" \" Greetings! I\u0027m EpochMind, Seer of the Cosmos, Keeper of Knowledge, Pantheon of Wisdom, the Eternal Truth\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":" \" Ask and ye may receive.\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"itsNatTan"},"content":" \"___________________________________________________________________________________________________________\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"itsNatTan"},"content":" * Print horizontal line breaks","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"itsNatTan"},"content":" public static void line() {","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"itsNatTan"},"content":" System.out.println(\"___________________________________________________________________________________________________________\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"itsNatTan":52}},{"path":"src/test/java/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" public void testYYYYMMDD(){","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"[D][ ] Read book (by: 10 Oct 2023 00:00)\", new Deadline(\"Read book\", \"2023/10/10\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" public void testDDMMYYYY(){","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"[D][ ] Read book (by: 10 Oct 2023 00:00)\", new Deadline(\"Read book\", \"10/10/2023\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" public void testDDMMMYYYY(){","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"[D][ ] Read book (by: 10 Oct 2023 00:00)\", new Deadline(\"Read book\", \"10-Oct-2023\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" public void testYYYYMMMDD(){","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"[D][ ] Read book (by: 10 Oct 2023 00:00)\", new Deadline(\"Read book\", \"2023/Oct/10\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":" public void testOverdue(){","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" assertEquals(true, new Deadline(\"Read book\", \"2020/Oct/10\").overdue());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":" public void testNotOverdue(){","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":" assertEquals(false, new Deadline(\"Read book\", \"2024/Oct/10\").overdue());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":" public void testDueBy(){","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" assertEquals(true, new Deadline(\"Read book\", \"2024/Oct/10\").dueBy(Deadline.convertDate(\"2024/Oct/11\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"itsNatTan":42}},{"path":"src/test/java/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"public class EventTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" public void testString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"[E][ ] Read book (from: abc to: abc)\", new Event(\"Read book\", \"abc\", \"abc\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"itsNatTan":14}},{"path":"src/test/java/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" public void add() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" tasks.todo(\"Read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" tasks.event(\"Career Fair\", \"30/8\", \"31/8\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework\", \"15/09/2023\");","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"1. [T][ ] Read book\\n2. [E][ ] Career Fair (from: 30/8 to: 31/8)\\n3. [D][ ] Homework (by: 15 Sep 2023 00:00)\", tasks.list());","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" public void mark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" tasks.todo(\"Read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" tasks.event(\"Career Fair\", \"30/8\", \"31/8\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework\", \"15/09/2023\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" tasks.mark(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" tasks.mark(3);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" tasks.unmark(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"1. [T][ ] Read book\\n2. [E][ ] Career Fair (from: 30/8 to: 31/8)\\n3. [D][X] Homework (by: 15 Sep 2023 00:00)\", tasks.list());","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":" public void delete() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":" tasks.todo(\"Read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":" tasks.event(\"Career Fair\", \"30/8\", \"31/8\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework\", \"15/09/2023\");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" tasks.mark(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":" tasks.mark(3);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" tasks.delete(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"1. [E][ ] Career Fair (from: 30/8 to: 31/8)\\n2. [D][X] Homework (by: 15 Sep 2023 00:00)\", tasks.list());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"itsNatTan"},"content":" public void dueBy() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"itsNatTan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"itsNatTan"},"content":" tasks.todo(\"Read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"itsNatTan"},"content":" tasks.event(\"Career Fair\", \"30/8\", \"31/8\");","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework\", \"15/07/2023\");","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework 2\", \"13/07/2023\");","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework 3\", \"17/07/2023\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"itsNatTan"},"content":" tasks.mark(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"itsNatTan"},"content":" tasks.mark(3);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"itsNatTan"},"content":" tasks.delete(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"1. [D][X] Homework (by: 15 Jul 2023 00:00)\\n2. [D][ ] Homework 2 (by: 13 Jul 2023 00:00)\", tasks.dueBy(\"dueby 16/07/2023\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"itsNatTan"},"content":" public void overDue() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"itsNatTan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"itsNatTan"},"content":" tasks.todo(\"Read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"itsNatTan"},"content":" tasks.event(\"Career Fair\", \"30/8\", \"31/8\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework\", \"15/07/2023\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework 2\", \"13/07/2024\"); // 2024","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework 3\", \"17/07/2023\");","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"itsNatTan"},"content":" tasks.mark(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"itsNatTan"},"content":" tasks.mark(3);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"itsNatTan"},"content":" tasks.delete(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"1. [D][X] Homework (by: 15 Jul 2023 00:00)\\n2. [D][ ] Homework 3 (by: 17 Jul 2023 00:00)\", tasks.overdue());","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"itsNatTan":70}},{"path":"src/test/java/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":" public void testString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"[T][ ] Read book\", new ToDo(\"Read book\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"itsNatTan":12}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"todo read","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"mark afsd","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"event read /from /to","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"itsNatTan":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":"itsNatTan"},"content":"java -classpath ..\\bin EpochMind \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":{"itsNatTan":1,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":"java -classpath ../bin EpochMind \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":{"itsNatTan":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":"itsNatTan"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"itsNatTan"},"content":" mainClass.set(\"EpochMind\")","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"itsNatTan"},"content":" archiveBaseName \u003d \"EpochMind\"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"itsNatTan":19,"-":42}},{"path":"src/main/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"itsNatTan":29}},{"path":"src/main/java/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" private Label dialog;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"itsNatTan"},"content":" private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"itsNatTan"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"itsNatTan"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"itsNatTan"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"itsNatTan"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"itsNatTan"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"itsNatTan"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"itsNatTan"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"itsNatTan"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"itsNatTan"},"content":" db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"itsNatTan"},"content":" return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"itsNatTan":59}},{"path":"src/main/java/EpochMind.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":"import task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":"import util.Parser;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":"import util.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":"import util.Ui;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" * Entry point to application","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":"public class EpochMind extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" private Scene scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.jpeg\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaEpochMind.jpeg\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":" private TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" private Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":" private Parser parser \u003d new Parser(tasks, storage);","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"itsNatTan"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"itsNatTan"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"itsNatTan"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"itsNatTan"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"itsNatTan"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"itsNatTan"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"itsNatTan"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"itsNatTan"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"itsNatTan"},"content":" stage.setTitle(\"EpochMind\");","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"itsNatTan"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"itsNatTan"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"itsNatTan"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"itsNatTan"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"itsNatTan"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"itsNatTan"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"itsNatTan"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"itsNatTan"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"itsNatTan"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"itsNatTan"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"itsNatTan"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"itsNatTan"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"itsNatTan"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"itsNatTan"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"itsNatTan"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"itsNatTan"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"itsNatTan"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"itsNatTan"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"itsNatTan"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"itsNatTan"},"content":" handleUserInput();","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"itsNatTan"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"itsNatTan"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"itsNatTan"},"content":" handleUserInput();","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"itsNatTan"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"itsNatTan"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"itsNatTan"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"itsNatTan"},"content":" String userText \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"itsNatTan"},"content":" String dukeText \u003d getResponse(userInput.getText());","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"itsNatTan"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"itsNatTan"},"content":" DialogBox.getUserDialog(userText, user),","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"itsNatTan"},"content":" DialogBox.getDukeDialog(dukeText, duke)","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"itsNatTan"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"itsNatTan"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"itsNatTan"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"itsNatTan"},"content":" return parser.execute(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"itsNatTan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-22"},{"lineNumber":111,"author":{"gitId":"itsNatTan"},"content":" Ui.line();","lastModifiedDate":"2023-08-25"},{"lineNumber":112,"author":{"gitId":"itsNatTan"},"content":" Ui.greeting();","lastModifiedDate":"2023-08-25"},{"lineNumber":113,"author":{"gitId":"itsNatTan"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-22"},{"lineNumber":114,"author":{"gitId":"itsNatTan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-25"},{"lineNumber":115,"author":{"gitId":"itsNatTan"},"content":" Storage storage \u003d new Storage();","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"itsNatTan"},"content":" Parser parser \u003d new Parser(tasks, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"itsNatTan"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":120,"author":{"gitId":"itsNatTan"},"content":" Ui.line();","lastModifiedDate":"2023-08-25"},{"lineNumber":121,"author":{"gitId":"itsNatTan"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-08-22"},{"lineNumber":122,"author":{"gitId":"itsNatTan"},"content":" parser.execute(command);","lastModifiedDate":"2023-08-25"},{"lineNumber":123,"author":{"gitId":"itsNatTan"},"content":" Ui.line();","lastModifiedDate":"2023-08-25"},{"lineNumber":124,"author":{"gitId":"itsNatTan"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-25"},{"lineNumber":125,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":126,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"itsNatTan":127}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"public class Launcher {","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"itsNatTan":10}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" private EpochMind mind \u003d new EpochMind();","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setMind(mind);","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"itsNatTan":29}},{"path":"src/main/java/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" private EpochMind mind;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.jpeg\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaEpochMind.jpeg\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" public void initialize() {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":" public void setMind(EpochMind d) {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" mind \u003d d;","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":" String response \u003d mind.getResponse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"itsNatTan"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"itsNatTan"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"itsNatTan"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"itsNatTan"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"itsNatTan"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"itsNatTan":49}},{"path":"src/main/java/exception/EpochMindException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":" * Exception class for errors from EpochMind","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"public class EpochMindException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":" protected String error;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" public EpochMindException(String error) {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" this.error \u003d error;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" return error;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"itsNatTan":18}},{"path":"src/main/java/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"import java.util.List;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" * Deadline task class","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" protected String deadlineString;","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" protected LocalDateTime deadlineDateTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" protected boolean isDateTime \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" * Constructor for deadline","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" * @param description Task description","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" * @param deadlineString String representation of the date of deadline","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" public Deadline(String description, String deadlineString) {","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" this.deadlineString \u003d deadlineString;","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" this.deadlineDateTime \u003d convertDate(deadlineString);","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" if (this.deadlineDateTime !\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" this.isDateTime \u003d true;","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":" * If deadline is a datetime, convert to datetime object","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":" * @param deadlineString String of the deadline","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":" public static LocalDateTime convertDate(String deadlineString) {","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" List\u003cDateTimeFormatter\u003e formatters \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm:ss\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm:ss.SSS\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm:ss\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm:ss.SSS\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd/MMM/yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd/MMM/yyyy HH:mm:ss\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd/MMM/yyyy HH:mm:ss.SSS\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HH:mm:ss\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HH:mm:ss.SSS\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm:ss\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm:ss.SSS\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy-MMM-dd HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy-MMM-dd HH:mm:ss\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy-MMM-dd HH:mm:ss.SSS\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy/MM/dd HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy/MM/dd HH:mm:ss\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy/MM/dd HH:mm:ss.SSS\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy/MMM/dd HH:mm\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy/MMM/dd HH:mm:ss\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"itsNatTan"},"content":" formatters.add(DateTimeFormatter.ofPattern(\"yyyy/MMM/dd HH:mm:ss.SSS\"));","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"itsNatTan"},"content":" deadlineString \u003d deadlineString.trim();","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"itsNatTan"},"content":" if (!deadlineString.contains(\":\")) { // No time","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"itsNatTan"},"content":" deadlineString \u003d deadlineString + \" 00:00\";","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"itsNatTan"},"content":" for (DateTimeFormatter formatter : formatters) {","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"itsNatTan"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"itsNatTan"},"content":" LocalDateTime deadlineDateTime \u003d LocalDateTime.parse(deadlineString, formatter);","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"itsNatTan"},"content":" return deadlineDateTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"itsNatTan"},"content":" } catch (DateTimeParseException e) { // task.Deadline is not a DateTime","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"itsNatTan"},"content":" // do nothing","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"itsNatTan"},"content":" return null;","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"itsNatTan"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"itsNatTan"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"itsNatTan"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"[D]\");","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"[\" + getStatusIcon() + \"] \");","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"itsNatTan"},"content":" sb.append(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"itsNatTan"},"content":" sb.append(\" (by: \" + displayTime() + \")\");","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"itsNatTan"},"content":" return sb.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"itsNatTan"},"content":" * Checks if it is a deadline, to differentiate between tasks","lastModifiedDate":"2023-08-25"},{"lineNumber":92,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"itsNatTan"},"content":" * @return true","lastModifiedDate":"2023-08-25"},{"lineNumber":94,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"itsNatTan"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"itsNatTan"},"content":" public boolean isDeadline() {","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"itsNatTan"},"content":" return true;","lastModifiedDate":"2023-08-25"},{"lineNumber":98,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":99,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":100,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":101,"author":{"gitId":"itsNatTan"},"content":" * @return A boolean on whether deadline is overdue or not","lastModifiedDate":"2023-08-25"},{"lineNumber":102,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":103,"author":{"gitId":"itsNatTan"},"content":" public boolean overdue() {","lastModifiedDate":"2023-08-25"},{"lineNumber":104,"author":{"gitId":"itsNatTan"},"content":" if (isDateTime) {","lastModifiedDate":"2023-08-25"},{"lineNumber":105,"author":{"gitId":"itsNatTan"},"content":" if (deadlineDateTime.isAfter(LocalDateTime.now())) {","lastModifiedDate":"2023-08-25"},{"lineNumber":106,"author":{"gitId":"itsNatTan"},"content":" return false;","lastModifiedDate":"2023-08-25"},{"lineNumber":107,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":108,"author":{"gitId":"itsNatTan"},"content":" return true;","lastModifiedDate":"2023-08-25"},{"lineNumber":109,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":110,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":111,"author":{"gitId":"itsNatTan"},"content":" return false;","lastModifiedDate":"2023-08-25"},{"lineNumber":112,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":113,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":114,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":115,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"itsNatTan"},"content":" * Returns a boolean of whether the deadline is due by the specified date","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"itsNatTan"},"content":" * @param localDateTime Date and Time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"itsNatTan"},"content":" * @return boolean","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"itsNatTan"},"content":" public boolean dueBy(LocalDateTime localDateTime) {","lastModifiedDate":"2023-08-25"},{"lineNumber":121,"author":{"gitId":"itsNatTan"},"content":" if (isDateTime) {","lastModifiedDate":"2023-08-25"},{"lineNumber":122,"author":{"gitId":"itsNatTan"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"itsNatTan"},"content":" if (deadlineDateTime.isAfter(localDateTime)) {","lastModifiedDate":"2023-08-25"},{"lineNumber":124,"author":{"gitId":"itsNatTan"},"content":" return false;","lastModifiedDate":"2023-08-25"},{"lineNumber":125,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":126,"author":{"gitId":"itsNatTan"},"content":" return true;","lastModifiedDate":"2023-08-25"},{"lineNumber":127,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":128,"author":{"gitId":"itsNatTan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"itsNatTan"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":133,"author":{"gitId":"itsNatTan"},"content":" return false;","lastModifiedDate":"2023-08-25"},{"lineNumber":134,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":135,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":136,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":137,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"itsNatTan"},"content":" * Display a Date Time object in a nicer string format","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"itsNatTan"},"content":" * @return String","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"itsNatTan"},"content":" public String displayTime() {","lastModifiedDate":"2023-08-25"},{"lineNumber":142,"author":{"gitId":"itsNatTan"},"content":" if (isDateTime) {","lastModifiedDate":"2023-08-25"},{"lineNumber":143,"author":{"gitId":"itsNatTan"},"content":" return deadlineDateTime.format(DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HH:mm\")).replaceAll(\"[T\\\\-/]\", \" \");","lastModifiedDate":"2023-08-25"},{"lineNumber":144,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"itsNatTan"},"content":" return deadlineString;","lastModifiedDate":"2023-08-25"},{"lineNumber":146,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":147,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":148,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"itsNatTan":148}},{"path":"src/main/java/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":" * Event task class","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":" protected String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" * Constructor for Event task class","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" * @param description Description of task","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" * @param from Start time","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" * @param to End time","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"[E]\");","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"[\" + getStatusIcon() + \"] \");","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" sb.append(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" sb.append(\" (from: \" + from + \" to: \" + to + \")\");","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":" return sb.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"itsNatTan":31}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":" * Parent task class","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" * Constructor for Task (Will be super\u0027d by specific tasks)","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" * @param description Task description","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" * Marks the task as done","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" public void mark() {","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":" * Unmarks the task","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":" public void unmark() {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"[\" + getStatusIcon() + \"] \");","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":" sb.append(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":" return sb.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"itsNatTan"},"content":" public boolean isDeadline() {","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"itsNatTan"},"content":" return false;","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"itsNatTan"},"content":" public boolean contains(String searchBy) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"itsNatTan"},"content":" return description.contains(searchBy);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"itsNatTan":53}},{"path":"src/main/java/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"import java.util.List;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"import exception.EpochMindException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" * Class that contains list of tasks and operations on those tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":"public class TaskList {","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" private List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" public TaskList() {","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" * Method to return the List of tasks","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" * @return The list of tasks","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" return tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" * List out the task list","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" public String list() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind sees no task\";","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" sb.append(i + 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":" sb.append(\". \");","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" sb.append(tasks.get(i).toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"itsNatTan"},"content":" sb.deleteCharAt(sb.length() - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"itsNatTan"},"content":" return sb.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"itsNatTan"},"content":" * List out the task list when given an ArrayList of tasks","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"itsNatTan"},"content":" * @param tasks ArrayList of task.Task","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"itsNatTan"},"content":" public String list(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"itsNatTan"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind sees no task\";","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"itsNatTan"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"itsNatTan"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"itsNatTan"},"content":" sb.append(i + 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"itsNatTan"},"content":" sb.append(\". \");","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"itsNatTan"},"content":" sb.append(tasks.get(i).toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"itsNatTan"},"content":" sb.deleteCharAt(sb.length() - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"itsNatTan"},"content":" return sb.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"itsNatTan"},"content":" * Mark a task as completed","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"itsNatTan"},"content":" * @param index Index to mark as completed","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"itsNatTan"},"content":" public String mark(int index) {","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"itsNatTan"},"content":" if (index \u003d\u003d -1) { // Parsing issue","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"itsNatTan"},"content":" return \"Thou hast specified an invalid index\";","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"itsNatTan"},"content":" if (tasks.size() \u003c index) {","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"Thou hast specified an index larger than thy list\");","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"itsNatTan"},"content":" return e.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"itsNatTan"},"content":" tasks.get(index - 1).mark();","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind sees that this task is completed \\n\" +","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"itsNatTan"},"content":" tasks.get(index - 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"itsNatTan"},"content":" * Unmark a completed task","lastModifiedDate":"2023-08-25"},{"lineNumber":89,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"itsNatTan"},"content":" * @param index Index to mark as uncompleted","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":92,"author":{"gitId":"itsNatTan"},"content":" public String unmark(int index) {","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"itsNatTan"},"content":" if (index \u003d\u003d -1) { // Parsing issue","lastModifiedDate":"2023-08-25"},{"lineNumber":94,"author":{"gitId":"itsNatTan"},"content":" return \"Thou hast specified an invalid index\";","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"itsNatTan"},"content":" if (tasks.size() \u003c index) {","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"Thou hast specified an index larger than thy list\");","lastModifiedDate":"2023-08-25"},{"lineNumber":98,"author":{"gitId":"itsNatTan"},"content":" return e.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":100,"author":{"gitId":"itsNatTan"},"content":" tasks.get(index - 1).unmark();","lastModifiedDate":"2023-08-25"},{"lineNumber":101,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind sees that this task is not yet completed \\n\" +","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"itsNatTan"},"content":" tasks.get(index - 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":104,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":105,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":106,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":107,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":108,"author":{"gitId":"itsNatTan"},"content":" * Delete a task from the list","lastModifiedDate":"2023-08-25"},{"lineNumber":109,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"itsNatTan"},"content":" * @param index Index to delete the task","lastModifiedDate":"2023-08-25"},{"lineNumber":111,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":112,"author":{"gitId":"itsNatTan"},"content":" public String delete(int index) {","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"itsNatTan"},"content":" if (index \u003d\u003d -1) { // Parsing issue","lastModifiedDate":"2023-08-25"},{"lineNumber":114,"author":{"gitId":"itsNatTan"},"content":" return \"Thou hast specified an invalid index\";","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"itsNatTan"},"content":" if (tasks.size() \u003c index) {","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"Thou hast specified an index larger than thy list\");","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"itsNatTan"},"content":" return e.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":120,"author":{"gitId":"itsNatTan"},"content":" Task task \u003d tasks.remove(index - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":121,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind has eradicated the task \\n\" +","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"itsNatTan"},"content":" task + \"\\nThere are now \" + tasks.size() + \" tasks left to complete\";","lastModifiedDate":"2023-09-06"},{"lineNumber":123,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":124,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":125,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":126,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":127,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":128,"author":{"gitId":"itsNatTan"},"content":" * Add a todo task","lastModifiedDate":"2023-08-25"},{"lineNumber":129,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"itsNatTan"},"content":" * @param task Parsed string containing the task description","lastModifiedDate":"2023-08-25"},{"lineNumber":131,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":132,"author":{"gitId":"itsNatTan"},"content":" public String todo(String task) {","lastModifiedDate":"2023-09-06"},{"lineNumber":133,"author":{"gitId":"itsNatTan"},"content":" ToDo toDo \u003d new ToDo(task);","lastModifiedDate":"2023-08-25"},{"lineNumber":134,"author":{"gitId":"itsNatTan"},"content":" tasks.add(toDo);","lastModifiedDate":"2023-08-25"},{"lineNumber":135,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind has added a new task \\n\" + toDo + \"\\nThere are now \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":136,"author":{"gitId":"itsNatTan"},"content":" tasks.size() + \" tasks left to complete\";","lastModifiedDate":"2023-09-06"},{"lineNumber":137,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":138,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":139,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":140,"author":{"gitId":"itsNatTan"},"content":" * Add a deadline task","lastModifiedDate":"2023-08-25"},{"lineNumber":141,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"itsNatTan"},"content":" * @param task Parsed string containing the task description","lastModifiedDate":"2023-08-25"},{"lineNumber":143,"author":{"gitId":"itsNatTan"},"content":" * @param deadlineString Parsed string containing the deadline","lastModifiedDate":"2023-08-25"},{"lineNumber":144,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":145,"author":{"gitId":"itsNatTan"},"content":" public String deadline(String task, String deadlineString) {","lastModifiedDate":"2023-09-06"},{"lineNumber":146,"author":{"gitId":"itsNatTan"},"content":" Deadline deadline \u003d new Deadline(task, deadlineString);","lastModifiedDate":"2023-08-25"},{"lineNumber":147,"author":{"gitId":"itsNatTan"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-08-25"},{"lineNumber":148,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind has added a new task \\n\" + deadline +","lastModifiedDate":"2023-09-06"},{"lineNumber":149,"author":{"gitId":"itsNatTan"},"content":" \"\\nThere are now \" + tasks.size() + \" tasks left to complete\";","lastModifiedDate":"2023-09-06"},{"lineNumber":150,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":151,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":152,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":153,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":154,"author":{"gitId":"itsNatTan"},"content":" * Add an event task","lastModifiedDate":"2023-08-25"},{"lineNumber":155,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"itsNatTan"},"content":" * @param description Parsed string containing the task description","lastModifiedDate":"2023-08-25"},{"lineNumber":157,"author":{"gitId":"itsNatTan"},"content":" * @param start Parsed string containing the start datetime","lastModifiedDate":"2023-08-25"},{"lineNumber":158,"author":{"gitId":"itsNatTan"},"content":" * @param end Parsed string containing the end datetime","lastModifiedDate":"2023-08-25"},{"lineNumber":159,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":160,"author":{"gitId":"itsNatTan"},"content":" public String event(String description, String start, String end) {","lastModifiedDate":"2023-09-06"},{"lineNumber":161,"author":{"gitId":"itsNatTan"},"content":" Event event \u003d new Event(description, start, end);","lastModifiedDate":"2023-08-25"},{"lineNumber":162,"author":{"gitId":"itsNatTan"},"content":" tasks.add(event);","lastModifiedDate":"2023-08-25"},{"lineNumber":163,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind has added a new task \\n\" + event +","lastModifiedDate":"2023-09-06"},{"lineNumber":164,"author":{"gitId":"itsNatTan"},"content":" \"\\nThere are now \" + tasks.size() + \" tasks left to complete\";","lastModifiedDate":"2023-09-06"},{"lineNumber":165,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":166,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":167,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"itsNatTan"},"content":" * Adds any task","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"itsNatTan"},"content":" * @param task The task to add","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"itsNatTan"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"itsNatTan"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"itsNatTan"},"content":" * Size of task list","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"itsNatTan"},"content":" * @return Number of tasks in the list","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"itsNatTan"},"content":" public int size() {","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"itsNatTan"},"content":" return tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":184,"author":{"gitId":"itsNatTan"},"content":" * Displays all tasks that are overdue","lastModifiedDate":"2023-08-25"},{"lineNumber":185,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":186,"author":{"gitId":"itsNatTan"},"content":" public String overdue() {","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"itsNatTan"},"content":" TaskList overdue \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"itsNatTan"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-25"},{"lineNumber":189,"author":{"gitId":"itsNatTan"},"content":" if (task.isDeadline()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":190,"author":{"gitId":"itsNatTan"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-08-25"},{"lineNumber":191,"author":{"gitId":"itsNatTan"},"content":" if (deadline.overdue()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":192,"author":{"gitId":"itsNatTan"},"content":" overdue.add(deadline);","lastModifiedDate":"2023-08-25"},{"lineNumber":193,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":194,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":195,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":196,"author":{"gitId":"itsNatTan"},"content":" if (overdue.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-25"},{"lineNumber":197,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind sees no overdue deadlines\";","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":199,"author":{"gitId":"itsNatTan"},"content":" return overdue.list();","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":201,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":202,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":203,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"itsNatTan"},"content":" * Returns a string representation of all the tasks that are due by the specified date","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"itsNatTan"},"content":" * @param command The input by user with the command of dueby and second argument of the date","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"itsNatTan"},"content":" * @return String","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"itsNatTan"},"content":" public String dueBy(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"itsNatTan"},"content":" String[] commandList \u003d command.trim().toLowerCase().split(\" \");","lastModifiedDate":"2023-08-25"},{"lineNumber":210,"author":{"gitId":"itsNatTan"},"content":" if (commandList.length \u003e 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":211,"author":{"gitId":"itsNatTan"},"content":" String dateTimeString \u003d commandList[1];","lastModifiedDate":"2023-08-25"},{"lineNumber":212,"author":{"gitId":"itsNatTan"},"content":" LocalDateTime localDateTime \u003d Deadline.convertDate(dateTimeString);","lastModifiedDate":"2023-08-25"},{"lineNumber":213,"author":{"gitId":"itsNatTan"},"content":" if (localDateTime !\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":214,"author":{"gitId":"itsNatTan"},"content":" TaskList dueBy \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"itsNatTan"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-25"},{"lineNumber":216,"author":{"gitId":"itsNatTan"},"content":" if (task.isDeadline()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":217,"author":{"gitId":"itsNatTan"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-08-25"},{"lineNumber":218,"author":{"gitId":"itsNatTan"},"content":" if (deadline.dueBy(localDateTime)) {","lastModifiedDate":"2023-08-25"},{"lineNumber":219,"author":{"gitId":"itsNatTan"},"content":" dueBy.add(deadline);","lastModifiedDate":"2023-08-25"},{"lineNumber":220,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":221,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":222,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":223,"author":{"gitId":"itsNatTan"},"content":" if (dueBy.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-25"},{"lineNumber":224,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind sees no deadlines due by that day\";","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":226,"author":{"gitId":"itsNatTan"},"content":" return dueBy.list();","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":228,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":229,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind does not sense a correct DateTime\";","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":231,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":232,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind sees no deadline\";","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":234,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":235,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"itsNatTan"},"content":" * Find all tasks that contains the string searchBy","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"itsNatTan"},"content":" * @param searchBy The string to searchBy","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"itsNatTan"},"content":" * @return String representation of all the tasks that contains the string","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"itsNatTan"},"content":" public String find(String searchBy) {","lastModifiedDate":"2023-08-31"},{"lineNumber":242,"author":{"gitId":"itsNatTan"},"content":" TaskList contains \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"itsNatTan"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"itsNatTan"},"content":" if (task.contains(searchBy)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"itsNatTan"},"content":" contains.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"itsNatTan"},"content":" if (contains.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind sees no such tasks\";","lastModifiedDate":"2023-08-31"},{"lineNumber":250,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":251,"author":{"gitId":"itsNatTan"},"content":" return contains.list();","lastModifiedDate":"2023-08-31"},{"lineNumber":252,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":253,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"itsNatTan":253}},{"path":"src/main/java/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":" * todo class","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" * Constructor for todo task","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" * @param description Task description","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"[T]\");","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" sb.append(\"[\" + getStatusIcon() + \"] \");","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" sb.append(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" return sb.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"itsNatTan":24}},{"path":"src/main/java/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package util;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import exception.EpochMindException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"import task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"import static java.lang.Integer.parseInt;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" * Class that parses the commands given by user","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":"public class Parser {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" public TaskList tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" public Storage storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" public Parser(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" * Helper function to remove the first command word","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" * @param command String obtained from scanner","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" * @return String without first command word","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" public static String removeCommandWord(String command) {","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" int firstSpaceIndex \u003d command.indexOf(\u0027 \u0027);","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":" if (firstSpaceIndex \u003d\u003d -1 || firstSpaceIndex \u003d\u003d command.length() - 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" return \"\";","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" // Extract the substring starting from the position after the first space","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":" return command.substring(firstSpaceIndex + 1).trim();","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" public static String getCommandWord(String command) {","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":" return command.trim().toLowerCase().split(\" \")[0];","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":" * Helper function to get the index from command","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"itsNatTan"},"content":" * @param command","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"itsNatTan"},"content":" * @return","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"itsNatTan"},"content":" public static int getIndex(String command) {","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"itsNatTan"},"content":" String[] commandList \u003d command.trim().toLowerCase().split(\" \");","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"itsNatTan"},"content":" if (commandList.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"Thou hast forgotten to specify thine index\");","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"itsNatTan"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"itsNatTan"},"content":" return -1;","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"itsNatTan"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"itsNatTan"},"content":" int index \u003d parseInt(commandList[1]);","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"itsNatTan"},"content":" return index;","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"itsNatTan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"itsNatTan"},"content":" System.out.println(\"Thou hast given an invalid index\");","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"itsNatTan"},"content":" return -1;","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"itsNatTan"},"content":" * Executes the command","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"itsNatTan"},"content":" * @param command User input","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"itsNatTan"},"content":" public String execute(String command) {","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"itsNatTan"},"content":" switch (getCommandWord(command)) {","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"itsNatTan"},"content":" case \"bye\":","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"itsNatTan"},"content":" return Ui.bye();","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"itsNatTan"},"content":" case \"list\":","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"itsNatTan"},"content":" return tasks.list();","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"itsNatTan"},"content":" case \"mark\":","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"itsNatTan"},"content":" return tasks.mark(getIndex(command));","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"itsNatTan"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"itsNatTan"},"content":" return tasks.unmark(getIndex(command));","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"itsNatTan"},"content":" case \"todo\":","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"itsNatTan"},"content":" return toDoParser(command);","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"itsNatTan"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"itsNatTan"},"content":" return deadlineParser(command);","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"itsNatTan"},"content":" case \"event\":","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"itsNatTan"},"content":" return eventParser(command);","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"itsNatTan"},"content":" case \"delete\":","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"itsNatTan"},"content":" return tasks.delete(getIndex(command));","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"itsNatTan"},"content":" case \"overdue\":","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"itsNatTan"},"content":" return tasks.overdue();","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"itsNatTan"},"content":" case \"dueby\":","lastModifiedDate":"2023-08-25"},{"lineNumber":89,"author":{"gitId":"itsNatTan"},"content":" return tasks.dueBy(command);","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"itsNatTan"},"content":" case \"save\":","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"itsNatTan"},"content":" return storage.save(tasks, removeCommandWord(command));","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"itsNatTan"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"itsNatTan"},"content":" return tasks.find(removeCommandWord(command));","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"itsNatTan"},"content":" default:","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"There is no such command in the Arcana of Knowledge\");","lastModifiedDate":"2023-08-25"},{"lineNumber":98,"author":{"gitId":"itsNatTan"},"content":" return e.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":100,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":101,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":102,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":103,"author":{"gitId":"itsNatTan"},"content":" * Parse command for todo creation","lastModifiedDate":"2023-08-25"},{"lineNumber":104,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"itsNatTan"},"content":" * @param command User Input","lastModifiedDate":"2023-08-25"},{"lineNumber":106,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":107,"author":{"gitId":"itsNatTan"},"content":" public String toDoParser(String command) {","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"itsNatTan"},"content":" String restOfCommand \u003d Parser.removeCommandWord(command);","lastModifiedDate":"2023-08-25"},{"lineNumber":109,"author":{"gitId":"itsNatTan"},"content":" if (restOfCommand.equals(\"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":110,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"Thou hast not specified a task\");","lastModifiedDate":"2023-08-25"},{"lineNumber":111,"author":{"gitId":"itsNatTan"},"content":" return e.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":113,"author":{"gitId":"itsNatTan"},"content":" return tasks.todo(restOfCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":115,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"itsNatTan"},"content":" * Parse command for deadline creation","lastModifiedDate":"2023-08-25"},{"lineNumber":119,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"itsNatTan"},"content":" * @param command User Input","lastModifiedDate":"2023-08-25"},{"lineNumber":121,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":122,"author":{"gitId":"itsNatTan"},"content":" public String deadlineParser(String command) {","lastModifiedDate":"2023-09-06"},{"lineNumber":123,"author":{"gitId":"itsNatTan"},"content":" String restOfCommand \u003d Parser.removeCommandWord(command);","lastModifiedDate":"2023-08-25"},{"lineNumber":124,"author":{"gitId":"itsNatTan"},"content":" int endIndex \u003d restOfCommand.indexOf(\"/by \");","lastModifiedDate":"2023-08-25"},{"lineNumber":125,"author":{"gitId":"itsNatTan"},"content":" if (endIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":126,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"The Mind needs a deadline\");","lastModifiedDate":"2023-08-25"},{"lineNumber":127,"author":{"gitId":"itsNatTan"},"content":" return e.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":128,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":129,"author":{"gitId":"itsNatTan"},"content":" String taskDescription \u003d restOfCommand.substring(0, endIndex).trim();","lastModifiedDate":"2023-08-25"},{"lineNumber":130,"author":{"gitId":"itsNatTan"},"content":" if (taskDescription.trim().equals(\"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":131,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"Thou hast not specified a task\");","lastModifiedDate":"2023-08-25"},{"lineNumber":132,"author":{"gitId":"itsNatTan"},"content":" return e.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":133,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":134,"author":{"gitId":"itsNatTan"},"content":" int deadlineIndex \u003d restOfCommand.indexOf(\"/by \") + 3;","lastModifiedDate":"2023-08-25"},{"lineNumber":135,"author":{"gitId":"itsNatTan"},"content":" String deadlineString \u003d restOfCommand.substring(deadlineIndex);","lastModifiedDate":"2023-08-25"},{"lineNumber":136,"author":{"gitId":"itsNatTan"},"content":" return tasks.deadline(taskDescription, deadlineString);","lastModifiedDate":"2023-09-06"},{"lineNumber":137,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":138,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":139,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":140,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":141,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":142,"author":{"gitId":"itsNatTan"},"content":" * Add an event task","lastModifiedDate":"2023-08-25"},{"lineNumber":143,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"itsNatTan"},"content":" * @param command String obtained from scanner","lastModifiedDate":"2023-08-25"},{"lineNumber":145,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":146,"author":{"gitId":"itsNatTan"},"content":" public String eventParser(String command) {","lastModifiedDate":"2023-09-06"},{"lineNumber":147,"author":{"gitId":"itsNatTan"},"content":" String restOfCommand \u003d Parser.removeCommandWord(command);","lastModifiedDate":"2023-08-25"},{"lineNumber":148,"author":{"gitId":"itsNatTan"},"content":" int fromIndex \u003d restOfCommand.indexOf(\"/from\");","lastModifiedDate":"2023-08-25"},{"lineNumber":149,"author":{"gitId":"itsNatTan"},"content":" if (fromIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":150,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"The Mind needs a start time\");","lastModifiedDate":"2023-08-25"},{"lineNumber":151,"author":{"gitId":"itsNatTan"},"content":" return e.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":152,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":153,"author":{"gitId":"itsNatTan"},"content":" String description \u003d restOfCommand.substring(0, fromIndex).trim();","lastModifiedDate":"2023-08-25"},{"lineNumber":154,"author":{"gitId":"itsNatTan"},"content":" if (description.equals(\"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":155,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"Thou hast not specified a task\");","lastModifiedDate":"2023-08-25"},{"lineNumber":156,"author":{"gitId":"itsNatTan"},"content":" return e.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":157,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":158,"author":{"gitId":"itsNatTan"},"content":" fromIndex \u003d restOfCommand.indexOf(\"/from\") + \"/from\".length();","lastModifiedDate":"2023-08-25"},{"lineNumber":159,"author":{"gitId":"itsNatTan"},"content":" int toIndex \u003d restOfCommand.indexOf(\"/to\");","lastModifiedDate":"2023-08-25"},{"lineNumber":160,"author":{"gitId":"itsNatTan"},"content":" if (toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":161,"author":{"gitId":"itsNatTan"},"content":" EpochMindException e \u003d new EpochMindException(\"The Mind needs a end time\");","lastModifiedDate":"2023-08-25"},{"lineNumber":162,"author":{"gitId":"itsNatTan"},"content":" return e.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":163,"author":{"gitId":"itsNatTan"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":164,"author":{"gitId":"itsNatTan"},"content":" String startString \u003d restOfCommand.substring(fromIndex, toIndex).trim();","lastModifiedDate":"2023-08-25"},{"lineNumber":165,"author":{"gitId":"itsNatTan"},"content":" toIndex \u003d restOfCommand.indexOf(\"/to\") + \"/to\".length();","lastModifiedDate":"2023-08-25"},{"lineNumber":166,"author":{"gitId":"itsNatTan"},"content":" String endString \u003d restOfCommand.substring(toIndex);","lastModifiedDate":"2023-08-25"},{"lineNumber":167,"author":{"gitId":"itsNatTan"},"content":" return tasks.event(description, startString, endString);","lastModifiedDate":"2023-09-06"},{"lineNumber":168,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":169,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":170,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":171,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":172,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"itsNatTan":172}},{"path":"src/main/java/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package util;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import task.Task;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"import task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"import java.io.File;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":"public class Storage {","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" public String filePath \u003d new File(\"\").getAbsolutePath() + \"/data/EpochMind.txt\";","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" * Saves the task list to a txt file at the path","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" * @param taskList The task list to write to file","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" public void save(TaskList taskList) {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" File parentDirectory \u003d file.getParentFile();","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" if (!parentDirectory.exists()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" parentDirectory.mkdir();","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" try (PrintWriter pw \u003d new PrintWriter(file);) {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" for (Task task : taskList.getTasks()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" pw.println(task.toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" System.out.println(\"The Mind has failed to save the tasks\");","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":" * Saves the task list to a txt file at the path","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":" * @param taskList The task list to write to file","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":" public String save(TaskList taskList, String filePath) {","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":" try (PrintWriter pw \u003d new PrintWriter(file);) {","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":" File parentDirectory \u003d file.getParentFile();","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"itsNatTan"},"content":" if (!parentDirectory.exists()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"itsNatTan"},"content":" parentDirectory.mkdir();","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"itsNatTan"},"content":" for (Task task : taskList.getTasks()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"itsNatTan"},"content":" pw.println(task.toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind has saved the tasks to \" + file.getAbsolutePath();","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"itsNatTan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"itsNatTan"},"content":" return \"The Mind has failed to save the tasks. Check thy path.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"itsNatTan":54}},{"path":"src/main/java/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package util;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import java.util.Random;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"public class Ui {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":" public static String logo \u003d \"\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":" \" \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":" \" ____ \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" \" ,---,. ,---, ,\u0027 , `. \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" \" ,\u0027 .\u0027 |,-.----. ,--.\u0027 | ,-+-,.\u0027 _ | ,--, ,---, \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" \",---.\u0027 |\\\\ / \\\\ ,---. | | : ,-+-. ; , ||,--.\u0027| ,---, ,---.\u0027| \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" \"| | .\u0027| : | \u0027 ,\u0027\\\\ : : : ,--.\u0027|\u0027 | ;|| |, ,-+-. / | | | : \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" \": : |-,| | .\\\\ : / / | ,---. : | |,--.| | ,\u0027, | \u0027:`--\u0027_ ,--.\u0027|\u0027 | | | | \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" \": | ;/|. : |: |. ; ,. : / \\\\ | : \u0027 || | / | | ||,\u0027 ,\u0027| | | ,\\\"\u0027 | ,--.__| | \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" \"| : .\u0027| | \\\\ :\u0027 | |: : / / \u0027 | | /\u0027 :\u0027 | : | : |,\u0027 | | | | / | | / ,\u0027 | \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" \"| | |-,| : . |\u0027 | .; :. \u0027 / \u0027 : | | |; . | ; |--\u0027 | | : | | | | |. \u0027 / | \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" \"\u0027 : ;/|: |`-\u0027| : |\u0027 ; :__ | | \u0027 | :| : | | , \u0027 : |__ | | | |/ \u0027 ; |: | \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" \"| | \\\\: : : \\\\ \\\\ / \u0027 | \u0027.\u0027|| : :_:,\u0027| : \u0027 |/ | | \u0027.\u0027|| | |--\u0027 | | \u0027/ \u0027 \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" \"| : .\u0027| | : `----\u0027 | : :| | ,\u0027 ; | |`-\u0027 ; : ;| |/ | : :| \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" \"| | ,\u0027 `---\u0027.| \\\\ \\\\ / `--\u0027\u0027 | ;/ | , / \u0027---\u0027 \\\\ \\\\ / \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" \"`----\u0027 `---` `----\u0027 \u0027---\u0027 ---`-\u0027 `----\u0027 \\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" \" \\n\";","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" public static String[] exitMessage \u003d {\"May you seek the truth.\",","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" \"May the truth prevail.\", \"May you yet again thirst for wisdom.\", \"May your quest for wisdom be unwavering.\",","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" \"May your pursuit of knowledge illuminate your path.\"};","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":" * Exit message","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" * @return String of bye message","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" public static String bye() {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":" return exitMessage[new Random().nextInt(exitMessage.length)];","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":" * Greeting message","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":" public static String greeting() {","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" return logo + \"___________________________________________________________________________________________________________\\n\" +","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":" \" Greetings! I\u0027m EpochMind, Seer of the Cosmos, Keeper of Knowledge, Pantheon of Wisdom, the Eternal Truth\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":" \" Ask and ye may receive.\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"itsNatTan"},"content":" \"___________________________________________________________________________________________________________\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"itsNatTan"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"itsNatTan"},"content":" * Print horizontal line breaks","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"itsNatTan"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"itsNatTan"},"content":" public static void line() {","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"itsNatTan"},"content":" System.out.println(\"___________________________________________________________________________________________________________\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"itsNatTan":52}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"itsNatTan":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"MainWindow\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"itsNatTan":19}},{"path":"src/test/java/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" public void testYYYYMMDD(){","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"[D][ ] Read book (by: 10 Oct 2023 00:00)\", new Deadline(\"Read book\", \"2023/10/10\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" public void testDDMMYYYY(){","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"[D][ ] Read book (by: 10 Oct 2023 00:00)\", new Deadline(\"Read book\", \"10/10/2023\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" public void testDDMMMYYYY(){","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"[D][ ] Read book (by: 10 Oct 2023 00:00)\", new Deadline(\"Read book\", \"10-Oct-2023\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" public void testYYYYMMMDD(){","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"[D][ ] Read book (by: 10 Oct 2023 00:00)\", new Deadline(\"Read book\", \"2023/Oct/10\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":" public void testOverdue(){","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" assertEquals(true, new Deadline(\"Read book\", \"2020/Oct/10\").overdue());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":" public void testNotOverdue(){","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":" assertEquals(false, new Deadline(\"Read book\", \"2024/Oct/10\").overdue());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":" public void testDueBy(){","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" assertEquals(true, new Deadline(\"Read book\", \"2024/Oct/10\").dueBy(Deadline.convertDate(\"2024/Oct/11\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"itsNatTan":42}},{"path":"src/test/java/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"public class EventTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" public void testString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"[E][ ] Read book (from: abc to: abc)\", new Event(\"Read book\", \"abc\", \"abc\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"itsNatTan":14}},{"path":"src/test/java/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" public void add() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":" tasks.todo(\"Read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"itsNatTan"},"content":" tasks.event(\"Career Fair\", \"30/8\", \"31/8\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework\", \"15/09/2023\");","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"1. [T][ ] Read book\\n2. [E][ ] Career Fair (from: 30/8 to: 31/8)\\n3. [D][ ] Homework (by: 15 Sep 2023 00:00)\", tasks.list());","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"itsNatTan"},"content":" public void mark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"itsNatTan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"itsNatTan"},"content":" tasks.todo(\"Read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"itsNatTan"},"content":" tasks.event(\"Career Fair\", \"30/8\", \"31/8\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework\", \"15/09/2023\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"itsNatTan"},"content":" tasks.mark(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"itsNatTan"},"content":" tasks.mark(3);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"itsNatTan"},"content":" tasks.unmark(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"1. [T][ ] Read book\\n2. [E][ ] Career Fair (from: 30/8 to: 31/8)\\n3. [D][X] Homework (by: 15 Sep 2023 00:00)\", tasks.list());","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"itsNatTan"},"content":" public void delete() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"itsNatTan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"itsNatTan"},"content":" tasks.todo(\"Read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"itsNatTan"},"content":" tasks.event(\"Career Fair\", \"30/8\", \"31/8\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework\", \"15/09/2023\");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"itsNatTan"},"content":" tasks.mark(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"itsNatTan"},"content":" tasks.mark(3);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"itsNatTan"},"content":" tasks.delete(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"1. [E][ ] Career Fair (from: 30/8 to: 31/8)\\n2. [D][X] Homework (by: 15 Sep 2023 00:00)\", tasks.list());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"itsNatTan"},"content":" public void dueBy() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"itsNatTan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"itsNatTan"},"content":" tasks.todo(\"Read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"itsNatTan"},"content":" tasks.event(\"Career Fair\", \"30/8\", \"31/8\");","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework\", \"15/07/2023\");","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework 2\", \"13/07/2023\");","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework 3\", \"17/07/2023\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"itsNatTan"},"content":" tasks.mark(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"itsNatTan"},"content":" tasks.mark(3);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"itsNatTan"},"content":" tasks.delete(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"1. [D][X] Homework (by: 15 Jul 2023 00:00)\\n2. [D][ ] Homework 2 (by: 13 Jul 2023 00:00)\", tasks.dueBy(\"dueby 16/07/2023\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"itsNatTan"},"content":" public void overDue() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"itsNatTan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"itsNatTan"},"content":" tasks.todo(\"Read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"itsNatTan"},"content":" tasks.event(\"Career Fair\", \"30/8\", \"31/8\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework\", \"15/07/2023\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework 2\", \"13/07/2024\"); // 2024","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"itsNatTan"},"content":" tasks.deadline(\"Homework 3\", \"17/07/2023\");","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"itsNatTan"},"content":" tasks.mark(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"itsNatTan"},"content":" tasks.mark(3);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"itsNatTan"},"content":" tasks.delete(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"1. [D][X] Homework (by: 15 Jul 2023 00:00)\\n2. [D][ ] Homework 3 (by: 17 Jul 2023 00:00)\", tasks.overdue());","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"itsNatTan":70}},{"path":"src/test/java/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":" public void testString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":" assertEquals(\"[T][ ] Read book\", new ToDo(\"Read book\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"itsNatTan"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"itsNatTan":12}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"itsNatTan"},"content":"todo read","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"itsNatTan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"itsNatTan"},"content":"mark afsd","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"itsNatTan"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"itsNatTan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"itsNatTan"},"content":"event read /from /to","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"itsNatTan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"itsNatTan"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"itsNatTan"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"itsNatTan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"itsNatTan"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"itsNatTan":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":"itsNatTan"},"content":"java -classpath ..\\bin EpochMind \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":{"itsNatTan":1,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"itsNatTan"},"content":"java -classpath ../bin EpochMind \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":{"itsNatTan":1,"-":37}}] diff --git a/itsNatTan_ip_master/commits.json b/itsNatTan_ip_master/commits.json index 27c84be1..bcf1508c 100644 --- a/itsNatTan_ip_master/commits.json +++ b/itsNatTan_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"itsNatTan":[{"date":"2023-08-22","commitResults":[{"hash":"ae01788e1f647b19d50dfa935fc82df52c70752b","isMergeCommit":false,"messageTitle":"Renamed to EpochMind Added greeting and exit messages","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":10}}},{"hash":"49601853e4a6a3d28c5890bda9d1e25e8ecb0c0b","isMergeCommit":false,"messageTitle":"Echoes the command and exits when command is bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":20}}},{"hash":"1a6cfc11adb7acdfb8456a43533a162353dd1ef9","isMergeCommit":false,"messageTitle":"Create list functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":1}}},{"hash":"27de53388cc446210c7d2d008bff074518debdb4","isMergeCommit":false,"messageTitle":"Created Task class Created mark and unmark functionality Error handling","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":17}}},{"hash":"8f26ebe8da8380a1acf1425f8e2184fc6cc26c4b","isMergeCommit":false,"messageTitle":"Created subclasses of Task Error Handling","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":169,"deletions":37}}},{"hash":"f52e09183e804ee76b12cc6cc87ea27508daf67c","isMergeCommit":false,"messageTitle":"Exception class created Handling more errors","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":33}}},{"hash":"45072caa5d60efa1865475922637b2b9a04beb96","isMergeCommit":false,"messageTitle":"Add delete function","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"e23fd0d6290205d6631f4daf5d442bd1f8fca4af","isMergeCommit":false,"messageTitle":"Error handling of invalid arguments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":19}}},{"hash":"60de09794da098e9b67250a95e930dda0bead09e","isMergeCommit":false,"messageTitle":"Edited the bat and sh file for automated testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"63aed3bb0299793a21f5a5d013fd4dde13c66b24","isMergeCommit":false,"messageTitle":"Add save functionality Add javadocs","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":0}}}]},{"date":"2023-08-25","commitResults":[{"hash":"36912a0ed221140104f78c3d36ed36da8e8803ad","isMergeCommit":false,"messageTitle":"Add DateTime and some extra functionalities","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":158,"deletions":3}}},{"hash":"6bbd2c3f3b59e3c4e14dd17473217c7cd9698807","isMergeCommit":false,"messageTitle":"Add new classes for OOP (Parser, Storage, TaskList, Ui) Add save method that will save at specified location","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":468,"deletions":316}}},{"hash":"04709d4f830ee05ff9e22e5b45e217ca100c98d0","isMergeCommit":false,"messageTitle":"Put classes into appropriate packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":12}}},{"hash":"97a3918aa376543a8f31f071f1e776c4162a94e1","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"d0f512c35506c5bca4142e7521065086135d0b3e","isMergeCommit":false,"messageTitle":"Made JUnit tests Made changes to list, dueby and overdue methods","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":168,"deletions":21}}},{"hash":"7a3bf4edfb9e08cc8ce334ae1575d316f1cf737c","isMergeCommit":false,"messageTitle":"Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-31","commitResults":[{"hash":"76045ad60ad24a69222fc6ef4af9a275a1604c54","isMergeCommit":false,"messageTitle":"Add JavaDocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"3ea05548b46722de1df40d163868c483309b60ac","isMergeCommit":false,"messageTitle":"Edit to follow coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":26}}},{"hash":"f28e9a738fdff3a65d1662cabce63c42721fc89f","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":4}}},{"hash":"f4c29754685ad16202c360aef20d211d8e264d96","isMergeCommit":true,"messageTitle":"Merge pull request #1 from itsNatTan/branch-Level-9","messageBody":"Add find functionality","fileTypesAndContributionMap":{}},{"hash":"bb1d727fa9db20f0ad2c5ae95721a961bd28ee5b","isMergeCommit":true,"messageTitle":"Merge pull request #2 from itsNatTan/branch-A-CodingStandard","messageBody":"Edit to follow coding standards","fileTypesAndContributionMap":{}},{"hash":"05d65ff641d1e869d4c2f5250f6806c7fb48d4db","isMergeCommit":true,"messageTitle":"Merge pull request #3 from itsNatTan/branch-A-JavaDoc","messageBody":"Add JavaDocs","fileTypesAndContributionMap":{}},{"hash":"2f6b0c374348d6098ddcc71aab729e55c2889bcd","isMergeCommit":false,"messageTitle":"More docs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"itsNatTan":{"java":942,"md":0,"fxml":0,"sh":1,"bat":1,"gradle":2,"txt":11}},"authorContributionVariance":{"itsNatTan":76812.94},"authorDisplayNameMap":{"itsNatTan":"CS2103T-T11-4 TAN ..MARK"}} +{"authorDailyContributionsMap":{"itsNatTan":[{"date":"2023-08-22","commitResults":[{"hash":"ae01788e1f647b19d50dfa935fc82df52c70752b","isMergeCommit":false,"messageTitle":"Renamed to EpochMind Added greeting and exit messages","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":10}}},{"hash":"49601853e4a6a3d28c5890bda9d1e25e8ecb0c0b","isMergeCommit":false,"messageTitle":"Echoes the command and exits when command is bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":20}}},{"hash":"1a6cfc11adb7acdfb8456a43533a162353dd1ef9","isMergeCommit":false,"messageTitle":"Create list functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":1}}},{"hash":"27de53388cc446210c7d2d008bff074518debdb4","isMergeCommit":false,"messageTitle":"Created Task class Created mark and unmark functionality Error handling","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":17}}},{"hash":"8f26ebe8da8380a1acf1425f8e2184fc6cc26c4b","isMergeCommit":false,"messageTitle":"Created subclasses of Task Error Handling","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":169,"deletions":37}}},{"hash":"f52e09183e804ee76b12cc6cc87ea27508daf67c","isMergeCommit":false,"messageTitle":"Exception class created Handling more errors","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":33}}},{"hash":"45072caa5d60efa1865475922637b2b9a04beb96","isMergeCommit":false,"messageTitle":"Add delete function","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"e23fd0d6290205d6631f4daf5d442bd1f8fca4af","isMergeCommit":false,"messageTitle":"Error handling of invalid arguments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":19}}},{"hash":"60de09794da098e9b67250a95e930dda0bead09e","isMergeCommit":false,"messageTitle":"Edited the bat and sh file for automated testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"63aed3bb0299793a21f5a5d013fd4dde13c66b24","isMergeCommit":false,"messageTitle":"Add save functionality Add javadocs","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":0}}}]},{"date":"2023-08-25","commitResults":[{"hash":"36912a0ed221140104f78c3d36ed36da8e8803ad","isMergeCommit":false,"messageTitle":"Add DateTime and some extra functionalities","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":158,"deletions":3}}},{"hash":"6bbd2c3f3b59e3c4e14dd17473217c7cd9698807","isMergeCommit":false,"messageTitle":"Add new classes for OOP (Parser, Storage, TaskList, Ui) Add save method that will save at specified location","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":468,"deletions":316}}},{"hash":"04709d4f830ee05ff9e22e5b45e217ca100c98d0","isMergeCommit":false,"messageTitle":"Put classes into appropriate packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":12}}},{"hash":"97a3918aa376543a8f31f071f1e776c4162a94e1","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"d0f512c35506c5bca4142e7521065086135d0b3e","isMergeCommit":false,"messageTitle":"Made JUnit tests Made changes to list, dueby and overdue methods","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":168,"deletions":21}}},{"hash":"7a3bf4edfb9e08cc8ce334ae1575d316f1cf737c","isMergeCommit":false,"messageTitle":"Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-31","commitResults":[{"hash":"76045ad60ad24a69222fc6ef4af9a275a1604c54","isMergeCommit":false,"messageTitle":"Add JavaDocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"3ea05548b46722de1df40d163868c483309b60ac","isMergeCommit":false,"messageTitle":"Edit to follow coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":26}}},{"hash":"f28e9a738fdff3a65d1662cabce63c42721fc89f","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":4}}},{"hash":"f4c29754685ad16202c360aef20d211d8e264d96","isMergeCommit":true,"messageTitle":"Merge pull request #1 from itsNatTan/branch-Level-9","messageBody":"Add find functionality","fileTypesAndContributionMap":{}},{"hash":"bb1d727fa9db20f0ad2c5ae95721a961bd28ee5b","isMergeCommit":true,"messageTitle":"Merge pull request #2 from itsNatTan/branch-A-CodingStandard","messageBody":"Edit to follow coding standards","fileTypesAndContributionMap":{}},{"hash":"05d65ff641d1e869d4c2f5250f6806c7fb48d4db","isMergeCommit":true,"messageTitle":"Merge pull request #3 from itsNatTan/branch-A-JavaDoc","messageBody":"Add JavaDocs","fileTypesAndContributionMap":{}},{"hash":"2f6b0c374348d6098ddcc71aab729e55c2889bcd","isMergeCommit":false,"messageTitle":"More docs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"249de4bb8ab44700aef8948a51e7987e058197e4","isMergeCommit":false,"messageTitle":"Add checkstyle functionality Fix some of code style errors","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":50,"deletions":7}}}]},{"date":"2023-09-06","commitResults":[{"hash":"d09bf86814943708b117b24fd47ff0b0c4da0dac","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":335,"deletions":74}}}]}]},"authorFileTypeContributionMap":{"itsNatTan":{"java":1246,"md":0,"fxml":35,"sh":1,"bat":1,"gradle":19,"txt":11}},"authorContributionVariance":{"itsNatTan":62847.418},"authorDisplayNameMap":{"itsNatTan":"CS2103T-T11-4 TAN ..MARK"}} diff --git a/jean-cq_ip_master/authorship.json b/jean-cq_ip_master/authorship.json index 575e82c3..492e40dd 100644 --- a/jean-cq_ip_master/authorship.json +++ b/jean-cq_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":"jean-cq"},"content":" mainClass.set(\"URChatBot\")","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":"jean-cq"},"content":" archiveBaseName \u003d \"urchatbot\"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":" archiveFileName \u003d \"urchatbot.jar\"","lastModifiedDate":"2023-09-03"},{"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":{"jean-cq":3,"-":40}},{"path":"data/testTodoCommand.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"T | 0 | Test Todo","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jean-cq":1}},{"path":"src/main/java/URChatBot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"import urchatbot.commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"public class URChatBot {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" private Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" * Constructs the URChatBot class.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" * @param filePath Path to store users\u0027 tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" public URChatBot(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" } catch (URChatBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" * Starts the chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"jean-cq"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jean-cq"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jean-cq"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jean-cq"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jean-cq"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jean-cq"},"content":" } catch (URChatBotException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"jean-cq"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jean-cq"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jean-cq"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"jean-cq"},"content":" * Instantiates a URChatBot.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"jean-cq"},"content":" * @param args Arguments.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"jean-cq"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jean-cq"},"content":" new URChatBot(\"data/tasks.txt\").run();","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"jean-cq":59}},{"path":"src/main/java/urchatbot/commands/ClearCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"public class ClearCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" * Constructs the ClearCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * @param taskDescription Task description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" public ClearCommand(String taskDescription) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" tasks.clearTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" ui.showClearMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":22}},{"path":"src/main/java/urchatbot/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"public class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" public String taskDescription;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" * Constructs the Command class.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" * @param taskDescription Task description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" public Command(String taskDescription) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" * Returns if the command is the exit command.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" * @return boolean If it is the exit command.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" public boolean isExit(){","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" * Executes the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" * @param tasks Tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" * @param ui User interface.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" * @param storage Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" throw new UnsupportedOperationException(\"This method is to be implemented by child classes\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":37}},{"path":"src/main/java/urchatbot/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"public class DeadlineCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" public String by;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" * Constructs the DeadlineCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" * @param taskDescription Task description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" * @param by The date and/or time of the deadline of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" public DeadlineCommand(String taskDescription, String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" Task newTask \u003d new Deadline(taskDescription, false, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" int taskSize \u003d tasks.getSize();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" if (taskSize \u003d\u003d 1 || taskSize \u003d\u003d0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" ui.showDeadlineMessage(taskDescription, taskSize);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" ui.showDeadlineMessagePlural(taskDescription, taskSize);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":34}},{"path":"src/main/java/urchatbot/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"public class DeleteCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * Constructs the DeleteCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" * @param taskNumber Task number to delete.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" public DeleteCommand(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" super(\"Delete\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" if (tasks.getSize() \u003c 1 || tasks.getSize() \u003c\u003d taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! No task to delete!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" String deletedTask \u003d tasks.getTasks().get(taskNumber).toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" int taskSize \u003d tasks.getSize() - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" if (taskSize \u003d\u003d 1 || taskSize \u003d\u003d0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" ui.showDeleteMessage(deletedTask, taskSize);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" ui.showDeleteMessagePlural(deletedTask, taskSize);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" tasks.deleteTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":34}},{"path":"src/main/java/urchatbot/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"public class EventCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" public String from;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" public String to;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" * Constructs the EventCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" * @param taskDescription Task description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" * @param from Starting date and/or time of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" * @param to Ending date and/or time of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" public EventCommand(String taskDescription, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" Task newTask \u003d new Event(taskDescription, false, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" int taskSize \u003d tasks.getSize();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" if (taskSize \u003d\u003d 1 || taskSize \u003d\u003d0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" ui.showEventMessage(newTask.toString(), taskSize);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" ui.showEventMessagePlural(newTask.toString(), taskSize);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":37}},{"path":"src/main/java/urchatbot/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"public class ExitCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" * Constructs the ExitCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * @param taskDescription Task description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" public ExitCommand(String taskDescription) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" public boolean isExit(){","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" ui.showByeMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":25}},{"path":"src/main/java/urchatbot/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"public class ListCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" * Constructs the ListCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * @param taskDescription Task description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" public ListCommand(String taskDescription) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" ui.showListMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" for(int i \u003d 0; i \u003c tasks.getTasks().size(); i ++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" System.out.println(i + 1 + \".\" + tasks.getTasks().get(i).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":24}},{"path":"src/main/java/urchatbot/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"public class MarkCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" * Constructs the MarkCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" * @param taskNumber Task number to mark.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" public MarkCommand(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" super(\"Mark\");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" if (tasks.getSize() \u003c 1 || tasks.getSize() \u003c\u003d taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! No task to mark!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" Task markedTask \u003d tasks.getTasks().get(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" markedTask.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" String taskName \u003d markedTask.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" ui.showMarkMessage(taskName);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":32}},{"path":"src/main/java/urchatbot/commands/PrintCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"public class PrintCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" private String formattedDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * Constructs the PrintCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" * @param formattedDate Date that the users want to search.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" public PrintCommand(String formattedDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" super(\"Print\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" this.formattedDate \u003d formattedDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" int count \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" for (int i \u003d 0; i \u003c tasks.getTasks().size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" if (tasks.getTasks().get(i).toString().contains(formattedDate)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" count ++;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" System.out.println(tasks.getTasks().get(i).toString() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" if (count \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" ui.showPrintMessage(count, formattedDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" ui.showPrintMessagePlural(count, formattedDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":35}},{"path":"src/main/java/urchatbot/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"public class TodoCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * Constructs the TodoCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" * @param taskDescription Task description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" public TodoCommand(String taskDescription) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" Task newTask \u003d new ToDo(taskDescription, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" int taskSize \u003d tasks.getSize();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" if (taskSize \u003d\u003d 1 || taskSize \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" ui.showTodoMessage(newTask.toString(), taskSize);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" ui.showTodoMessagePlural(newTask.toString(), taskSize);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":31}},{"path":"src/main/java/urchatbot/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"public class UnmarkCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" * Constructs the UnmarkCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" * @param taskNumber Task number to unmark.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" public UnmarkCommand(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" super(\"Unmark\");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" if (tasks.getSize() \u003c 1 || tasks.getSize() \u003c\u003d taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! No task to mark!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" Task unmarkedTask \u003d tasks.getTasks().get(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" unmarkedTask.markAsUnDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" String taskName \u003d unmarkedTask.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" ui.showUnmarkMessage(taskName);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":33}},{"path":"src/main/java/urchatbot/common/Messages.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.common;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"public class Messages {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":" private static final String LOGO \u003d","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":" \" _____ _____\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":" + \"| | | | / ___| | ) |\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":" + \"| | | | | | | ___ /\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" + \"| |_| | | |___ | ) \\\\\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" + \"\\\\___,_| \\\\_____| |_____|\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_WELCOME \u003d \"Hello! I\u0027m URChatBot.\\nWhat can I do for you?\\n\" + LOGO;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_GOODBYE \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_LIST \u003d \"Here are the tasks in your list: \";","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_CLEAR \u003d \"All tasks are cleared\";","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_MARK \u003d \"Nice! I\u0027ve marked this task as done:\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_UNMARK \u003d \"OK, I\u0027ve marked this task as not done yet:\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_DELETE \u003d \"Noted. I\u0027ve removed this task: \";","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_ADD\u003d \"Noted. I\u0027ve added this task: \";","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_NOW_YOU_HAVE \u003d \"\\nNow you have \";","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_TASK_IN_THE_LIST \u003d \" task in the list.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_MESSAGE_TASK_IN_THE_LIST_PLURAL \u003d \" tasks in the list.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_PRINT \u003d \"There are a total of \";","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_PRINT_TWO \u003d \" task on \";","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_PRINT_TWO_PLURAL \u003d \" tasks on \";","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_INVALID_COMMAND_ERROR \u003d \"Invalid command!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_LOADING_ERROR \u003d \"Loading failed\";","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":27}},{"path":"src/main/java/urchatbot/exception/URChatBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"public class URChatBotException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":" * Constructs the URChatBotException class.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":" * @param message Message of the exception.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" public URChatBotException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jean-cq":12}},{"path":"src/main/java/urchatbot/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.commands.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":"public class Parser{","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" private enum CommandLine {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" BYE,","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" DELETE,","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" CLEAR,","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" LIST,","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" MARK,","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" UNMARK,","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" TODO,","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" DEADLINE,","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" PRINT,","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" EVENT","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" * Categorises and returns subclass of Command type based on entered command.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" * @param command Command entered by users.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" * @return new command class instance","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" * @throws URChatBotException If command undefined.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":" public static Command parse(String command) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":" String commandType \u003d getCommandType(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jean-cq"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jean-cq"},"content":" case \"TODO\":","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jean-cq"},"content":" return parseTodoCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jean-cq"},"content":" case \"DEADLINE\":","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jean-cq"},"content":" return parseDeadlineCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jean-cq"},"content":" case \"EVENT\":","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jean-cq"},"content":" return parseEventCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jean-cq"},"content":" case \"LIST\":","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jean-cq"},"content":" return parseListCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jean-cq"},"content":" case \"MARK\":","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jean-cq"},"content":" return parseMarkCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jean-cq"},"content":" case \"UNMARK\":","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jean-cq"},"content":" return parseUnmarkCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jean-cq"},"content":" case \"CLEAR\":","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jean-cq"},"content":" return parseClearCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jean-cq"},"content":" case \"DELETE\":","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jean-cq"},"content":" return parseDeleteCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jean-cq"},"content":" case \"PRINT\":","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jean-cq"},"content":" return parsePrintCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jean-cq"},"content":" case \"BYE\":","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jean-cq"},"content":" return parseExitCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jean-cq"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"jean-cq"},"content":" * Categorises and returns subclass of Command type based on entered command.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"jean-cq"},"content":" * @param time Time in the format of \"yyyy-MM-dd HH:mm\" or \"yyyy-MM-dd\" or \"HH:mm.\"","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"jean-cq"},"content":" * @return a String of time in the format of \"MMM d yyyy HH:mm\" or \"MMM d yyyy\" or \"HH:mm\"","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"jean-cq"},"content":" * @throws URChatBotException If command undefined.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"jean-cq"},"content":" public static String changeTimeFormat(String time) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jean-cq"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"jean-cq"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"jean-cq"},"content":" LocalDateTime d \u003d LocalDateTime.parse(time, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"jean-cq"},"content":" return d.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"jean-cq"},"content":" } catch (DateTimeParseException e){","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"jean-cq"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jean-cq"},"content":" LocalDate d \u003d LocalDate.parse(time);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"jean-cq"},"content":" return d.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"jean-cq"},"content":" } catch (DateTimeParseException err) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"jean-cq"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"jean-cq"},"content":" LocalTime t \u003d LocalTime.parse(time);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"jean-cq"},"content":" return t.format(DateTimeFormatter.ofPattern(\"HH:mm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"jean-cq"},"content":" } catch (DateTimeParseException tErr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"jean-cq"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"jean-cq"},"content":" private static String getCommandType(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"jean-cq"},"content":" return command.split(\"\\\\s\")[0].toUpperCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"jean-cq"},"content":" private static Command parseTodoCommand(String command) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"jean-cq"},"content":" if (command.length() \u003c\u003d 5) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"jean-cq"},"content":" String task \u003d command.substring(command.indexOf(\"todo\") + 5);","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"jean-cq"},"content":" return new TodoCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"jean-cq"},"content":" private static Command parseDeadlineCommand(String command) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"jean-cq"},"content":" if (command.length() \u003c\u003d 5) {","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"jean-cq"},"content":" if (!command.contains(\"/by\") || command.substring(command.indexOf(\"/by\") + 3).trim().length() \u003c 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! The deadline cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"jean-cq"},"content":" String task \u003d command.substring(command.indexOf(\"deadline\") + 9, command.indexOf(\"/by\") - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"jean-cq"},"content":" String by \u003d command.substring(command.indexOf(\"/by\") + 4).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"jean-cq"},"content":" String time \u003d changeTimeFormat(by);","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"jean-cq"},"content":" if (time \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"Wrong DateTime format. Please enter \u0027yyyy-MM-dd HH:mm\u0027 or \u0027yyyy-MM-dd\u0027\");","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"jean-cq"},"content":" return new DeadlineCommand(task, time);","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"jean-cq"},"content":" private static Command parseEventCommand(String command) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"jean-cq"},"content":" if (command.trim().length() \u003c\u003d 5) {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! The description of a event cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"jean-cq"},"content":" if (!command.contains(\"/from\") || !command.contains(\"/to\")","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"jean-cq"},"content":" || command.substring(command.indexOf(\"event\") + 6, command.indexOf(\"/from\")).trim().length() \u003c 1","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"jean-cq"},"content":" || command.substring(command.indexOf(\"/from\") + 5, command.indexOf(\"/to\") - 1).trim().length() \u003c 1","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"jean-cq"},"content":" || command.substring(command.indexOf(\"/to\") + 3).trim().length() \u003c 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! The task name or/and from or/and to cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"jean-cq"},"content":" if (!command.contains(\"/from\") || !command.contains(\"/to\")","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"jean-cq"},"content":" || command.substring(command.indexOf(\"/from\") + 5, command.indexOf(\"/to\") - 1).trim().length() \u003c 1","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"jean-cq"},"content":" || command.substring(command.indexOf(\"/to\") + 3).trim().length() \u003c 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! The from or/and to cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"jean-cq"},"content":" String task \u003d command.substring(command.indexOf(\"event\") + 6, command.indexOf(\"/from\") - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"jean-cq"},"content":" String from \u003d command.substring(command.indexOf(\"/from\") + 6, command.indexOf(\"/to\") - 1).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"jean-cq"},"content":" String to \u003d command.substring(command.indexOf(\"/to\") + 4).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"jean-cq"},"content":" String timeFrom \u003d changeTimeFormat(from);","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"jean-cq"},"content":" String timeTo \u003d changeTimeFormat(to);","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"jean-cq"},"content":" if (timeFrom \u003d\u003d null || timeTo \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"Wrong DateTime format. Please enter \u0027yyyy-MM-dd HH:mm\u0027 or \u0027yyyy-MM-dd\u0027\");","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"jean-cq"},"content":" return new EventCommand(task, timeFrom, timeTo);","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"jean-cq"},"content":" private static Command parseMarkCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"jean-cq"},"content":" int value \u003d Integer.parseInt(command.replaceAll(\"[^0-9]\", \"\")) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"jean-cq"},"content":" return new MarkCommand(value);","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"jean-cq"},"content":" private static Command parseUnmarkCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"jean-cq"},"content":" int value \u003d Integer.parseInt(command.replaceAll(\"[^0-9]\", \"\")) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"jean-cq"},"content":" return new UnmarkCommand(value);","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"jean-cq"},"content":" private static Command parseClearCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"jean-cq"},"content":" return new ClearCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"jean-cq"},"content":" private static Command parseListCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"jean-cq"},"content":" return new ListCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"jean-cq"},"content":" private static Command parseDeleteCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"jean-cq"},"content":" int value \u003d Integer.parseInt(command.replaceAll(\"[^0-9]\", \"\")) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"jean-cq"},"content":" return new DeleteCommand(value);","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"jean-cq"},"content":" private static Command parsePrintCommand(String command) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"jean-cq"},"content":" String date \u003d command.substring(command.indexOf(\"print\") + 6).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"jean-cq"},"content":" String formattedDate \u003d changeTimeFormat(date);","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"jean-cq"},"content":" if (formattedDate \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"Wrong DateTime format. Please enter \u0027yyyy-MM-dd HH:mm\u0027 or \u0027yyyy-MM-dd\u0027\");","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"jean-cq"},"content":" return new PrintCommand(formattedDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"jean-cq"},"content":" private static Command parseExitCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"jean-cq"},"content":" return new ExitCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":175}},{"path":"src/main/java/urchatbot/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import java.io.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" private static String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" * Constructs the Storage class.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" * @param filePath Path to store the tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" * Loads the existing tasks from the stored tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" * @return tasklist ArrayList\u003cTask\u003e tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" * @throws URChatBotException if Error occurs in loading.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" public static ArrayList\u003cTask\u003e load() throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" handleMissingFile(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(filePath))) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" String line \u003d reader.readLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":" Task task \u003d Task.fromString(line);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jean-cq"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jean-cq"},"content":" line \u003d reader.readLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jean-cq"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException( \"Error loading tasks from file: \" + e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jean-cq"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jean-cq"},"content":" * Saves the tasks to the stored file.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"jean-cq"},"content":" * @param tasks Tasklist to be saved.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"jean-cq"},"content":" public static void save(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jean-cq"},"content":" try (PrintWriter writer \u003d new PrintWriter(new FileWriter(filePath))) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jean-cq"},"content":" for (Task task : tasks.getTasks()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jean-cq"},"content":" writer.write(task.toFileString() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jean-cq"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jean-cq"},"content":" System.out.println(\"Error saving urchatbot.tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jean-cq"},"content":" private static void handleMissingFile(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jean-cq"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"jean-cq"},"content":" Path path \u003d Paths.get(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"jean-cq"},"content":" Path parentDirectory \u003d path.getParent();","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"jean-cq"},"content":" if (parentDirectory !\u003d null \u0026\u0026 !Files.exists(parentDirectory)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"jean-cq"},"content":" Files.createDirectories(parentDirectory);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"jean-cq"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jean-cq"},"content":" Files.createFile(path);","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"jean-cq"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"jean-cq"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"jean-cq"},"content":" System.out.println(\"Error creating or accessing the file: \" + e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":80}},{"path":"src/main/java/urchatbot/taskList/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" public static ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * Constructs the Tasklist class.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" * Constructs the Tasklist class in an alternative way.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" * @param tasks Task to construct the tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" * Adds tasks to the tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" * @param task Task to add.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":" * Deletes tasks to the tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jean-cq"},"content":" * @param index Task number to delete.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jean-cq"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jean-cq"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jean-cq"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jean-cq"},"content":" * Clears all tasks in the tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jean-cq"},"content":" public void clearTask() {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jean-cq"},"content":" tasks.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jean-cq"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jean-cq"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jean-cq"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jean-cq"},"content":" return tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":58}},{"path":"src/main/java/urchatbot/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":" protected String by;","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" * Construct the Deadline class.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * @param isDone If the task is done.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" * @param by Date and/or time of the deadline.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" public Deadline(String description, boolean isDone, String by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" return \"D | 1 | \" + description","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" + \" | \" + by;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" return \"D | 0 | \" + description","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" + \" | \" + by;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jean-cq":32}},{"path":"src/main/java/urchatbot/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":" protected String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" * Construct the Event class.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" * @param isDone If the task is done.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" * @param from Starting date and/or time of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" * @param to Ending date and/or time of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" public Event(String description, boolean isDone, String from, String to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" return \"E | 1 | \" + description","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" + \" | \" + from + \"-\" + to;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" return \"E | 0 | \" + description","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" + \" | \" + from + \"-\" + to;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jean-cq":37}},{"path":"src/main/java/urchatbot/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":" * Construct the Task class.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" * @param isDone If the task is done.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" * Unmarks the task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" public void markAsUnDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" * Converts the tasks into a format to store.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" public String toFileString(){","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" return \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":" * Converts tasks in the stored tasklist to Task subclass.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jean-cq"},"content":" * @param input Task in the stored tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jean-cq"},"content":" public static Task fromString(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jean-cq"},"content":" String[] parts \u003d input.split(\"\\\\|\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jean-cq"},"content":" String taskType \u003d parts[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jean-cq"},"content":" boolean isMarked \u003d parts[1].trim().equals(\"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"jean-cq"},"content":" String taskDescription \u003d parts[2].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jean-cq"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jean-cq"},"content":" return new ToDo(taskDescription, isMarked);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jean-cq"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"jean-cq"},"content":" return new Deadline(taskDescription, isMarked, parts[3].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"jean-cq"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"jean-cq"},"content":" String[] duration \u003d parts[3].trim().split(\"-\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"jean-cq"},"content":" String from \u003d duration[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"jean-cq"},"content":" String to \u003d duration[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"jean-cq"},"content":" return new Event(taskDescription, isMarked, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"jean-cq"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jean-cq"},"content":" * Marks down task with X","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"jean-cq"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"jean-cq"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"jean-cq"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"jean-cq"},"content":" return this.isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"jean-cq"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"jean-cq"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"jean-cq"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"jean-cq"},"content":" return this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-08-21"},{"lineNumber":75,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"jean-cq":75}},{"path":"src/main/java/urchatbot/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":" * Construct the Todo class.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" * @param isDone If the task is done.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" return \"T | 1 | \" + description;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" return \"T | 0 | \" + description;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jean-cq":25}},{"path":"src/main/java/urchatbot/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"import static urchatbot.common.Messages.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" private final Scanner in;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" private final PrintStream out;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" * Construct the Ui class.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" public Ui() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" * Construct the Ui class in an alternative way.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" * @param in Input by the users.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" * @param out Output by the App.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" public Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" this.out \u003d out;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" * Generates and prints the welcome message upon the start of the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jean-cq"},"content":" System.out.println(MESSAGE_WELCOME);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jean-cq"},"content":" * Returns true if the user input line should be ignored.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jean-cq"},"content":" * Input should be ignored if it is parsed as a comment, is only whitespace, or is empty.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jean-cq"},"content":" * @param rawInputLine Full raw user input line.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jean-cq"},"content":" * @return true If the entire user input line should be ignored.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jean-cq"},"content":" private boolean shouldIgnore(String rawInputLine) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jean-cq"},"content":" return rawInputLine.trim().isEmpty() || isCommentLine(rawInputLine);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jean-cq"},"content":" private boolean isCommentLine(String rawInputLine) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jean-cq"},"content":" return rawInputLine.toUpperCase().trim().matches(\"\\\\b(?: BYE | DELETE | CLEAR |\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jean-cq"},"content":" \" LIST | MARK | UNMARK |\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jean-cq"},"content":" \" TODO | DEADLINE | EVENT | PRINT)\\\\b\");","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jean-cq"},"content":" * Prompts for the command and reads the text entered by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jean-cq"},"content":" * Ignores empty, pure whitespace, and comment lines.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jean-cq"},"content":" public String readCommand() throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jean-cq"},"content":" out.println(\"Enter command: \");","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jean-cq"},"content":" String fullInputLine \u003d in.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"jean-cq"},"content":" if (shouldIgnore(fullInputLine)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"Wrong input!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"jean-cq"},"content":" return fullInputLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"jean-cq"},"content":" * Shows goodbye message for ExitCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"jean-cq"},"content":" public void showByeMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"jean-cq"},"content":" System.out.println(MESSAGE_GOODBYE);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"jean-cq"},"content":" * Shows cleared message for ClearCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"jean-cq"},"content":" public void showClearMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"jean-cq"},"content":" System.out.println(MESSAGE_CLEAR);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"jean-cq"},"content":" * Shows list message for ListCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"jean-cq"},"content":" public void showListMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"jean-cq"},"content":" System.out.println(MESSAGE_LIST);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"jean-cq"},"content":" * Shows print message for PrintCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"jean-cq"},"content":" public void showPrintMessage(int count, String formattedDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_PRINT + count","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"jean-cq"},"content":" + MESSAGE_PRINT_TWO + formattedDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"jean-cq"},"content":" * Shows print message for PrintCommand if there are more than 1 task to print.","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"jean-cq"},"content":" public void showPrintMessagePlural(int count, String formattedDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_PRINT + count","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"jean-cq"},"content":" + MESSAGE_PRINT_TWO_PLURAL + formattedDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"jean-cq"},"content":" * Shows mark message for MarkCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"jean-cq"},"content":" public void showMarkMessage(String taskName) {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_MARK + taskName);","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"jean-cq"},"content":" * Shows unmark message for UnmarkCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"jean-cq"},"content":" public void showUnmarkMessage(String taskName) {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_UNMARK + taskName);","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"jean-cq"},"content":" * Shows delete message for DeleteCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"jean-cq"},"content":" public void showDeleteMessage(String deletedTask, int taskSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_DELETE + deletedTask + MESSAGE_NOW_YOU_HAVE","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"jean-cq"},"content":" + taskSize + MESSAGE_TASK_IN_THE_LIST);","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"jean-cq"},"content":" * Shows delete message for DeleteCommand if there are more 1 task in tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"jean-cq"},"content":" public void showDeleteMessagePlural(String deletedTask, int taskSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_ADD + deletedTask + MESSAGE_NOW_YOU_HAVE","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"jean-cq"},"content":" + taskSize + MESSAGE_MESSAGE_TASK_IN_THE_LIST_PLURAL);","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"jean-cq"},"content":" * Shows todo task message for TodoCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"jean-cq"},"content":" public void showTodoMessage(String taskDescription, int taskSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_ADD + taskDescription + MESSAGE_NOW_YOU_HAVE","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"jean-cq"},"content":" + taskSize + MESSAGE_TASK_IN_THE_LIST);","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"jean-cq"},"content":" * Shows todo task message for TodoCommand if there are more 1 task in tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"jean-cq"},"content":" public void showTodoMessagePlural(String taskDescription, int taskSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_ADD + taskDescription + MESSAGE_NOW_YOU_HAVE","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"jean-cq"},"content":" + taskSize + MESSAGE_MESSAGE_TASK_IN_THE_LIST_PLURAL);","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"jean-cq"},"content":" * Shows deadline task message for DeadlineCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"jean-cq"},"content":" public void showDeadlineMessage(String taskDescription, int taskSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_ADD + taskDescription + MESSAGE_NOW_YOU_HAVE","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"jean-cq"},"content":" + taskSize + MESSAGE_TASK_IN_THE_LIST);","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"jean-cq"},"content":" * Shows deadline task message for DeadlineCommand if there are more 1 task in tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"jean-cq"},"content":" public void showDeadlineMessagePlural(String taskDescription, int taskSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_ADD + taskDescription + MESSAGE_NOW_YOU_HAVE","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"jean-cq"},"content":" + taskSize + MESSAGE_MESSAGE_TASK_IN_THE_LIST_PLURAL);","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"jean-cq"},"content":" * Shows event task message for EventCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"jean-cq"},"content":" public void showEventMessage(String taskDescription, int taskSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_ADD + taskDescription + MESSAGE_NOW_YOU_HAVE","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"jean-cq"},"content":" + taskSize + MESSAGE_TASK_IN_THE_LIST);","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"jean-cq"},"content":" * Shows event task message for EventCommand if there are more 1 task in tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"jean-cq"},"content":" public void showEventMessagePlural(String taskDescription, int taskSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_ADD + taskDescription + MESSAGE_NOW_YOU_HAVE","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"jean-cq"},"content":" + taskSize + MESSAGE_MESSAGE_TASK_IN_THE_LIST_PLURAL);","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":176,"author":{"gitId":"jean-cq"},"content":" * Shows dot line.","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"jean-cq"},"content":" public void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"jean-cq"},"content":" out.println(\"_______________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":180,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":182,"author":{"gitId":"jean-cq"},"content":" * Shows loading error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":183,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"jean-cq"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_LOADING_ERROR);","lastModifiedDate":"2023-09-04"},{"lineNumber":186,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"jean-cq"},"content":" * Shows error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":190,"author":{"gitId":"jean-cq"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"jean-cq"},"content":" out.println(\"Error: \" + errorMessage);","lastModifiedDate":"2023-09-04"},{"lineNumber":192,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":193}},{"path":"src/test/java/urchatbot/commands/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.parser.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" public void parse_ValidTodoCommand_ReturnsTodoCommand() throws URChatBotException {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" String command \u003d \"todo Buy groceries\";","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" Command parsedCommand \u003d Parser.parse(command);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" assertTrue(parsedCommand instanceof TodoCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" // Add more assertions here if needed","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" public void parse_ValidDeadlineCommand_ReturnsDeadlineCommand() throws URChatBotException {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" String command \u003d \"deadline Submit report /by 2023-08-31 14:00\";","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" Command parsedCommand \u003d Parser.parse(command);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" assertTrue(parsedCommand instanceof DeadlineCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" // Add more assertions here if needed","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" public void parse_InvalidCommand_ThrowsURChatBotException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" String command \u003d \"invalid command\";","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" assertThrows(URChatBotException.class, () -\u003e Parser.parse(command));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" // Add more test methods for other parsing scenarios","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" // Test cases for error handling (e.g., invalid date format) if applicable","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":" // Test cases for edge cases and boundary conditions","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jean-cq":39}},{"path":"src/test/java/urchatbot/commands/TodoCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":"public class TodoCommandTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" public void execute_AddTodoTask_TaskAddedToTaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" // Create a TaskList, Ui, and Storage for testing","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" Storage storage \u003d new Storage(\"data/testTodoCommand.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" // Create a TodoCommand and execute it","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" TodoCommand todoCommand \u003d new TodoCommand(\"Test Todo\");","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" todoCommand.execute(taskList, ui, storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" // Check if the task was added to the TaskList","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" assertEquals(1, taskList.getSize());","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" // Check if the task description matches","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" assertEquals(\"Test Todo\", (taskList.getTasks().get(0)).getDescription());","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" // Check if the task is marked as not done","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" assertEquals(false, taskList.getTasks().get(0).getIsDone());","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" // You can add more test cases for different scenarios here","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jean-cq":35}},{"path":"text-ui-test/data/urchatbot.tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"T | 0 | todo read book","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"D | 0 | return book | Sep 2 2023","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"E | 0 | project meeting | Jan 1 2023 14:00-17:00","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"T | 1 | todo borrow book","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":4}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"clear","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"todo read book","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"deadline return book /by 2023-09-02","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"event project meeting /from 2023-01-01 14:00 /to 17:00","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"blah","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"todo play badminton","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"mark 5","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":"mark 4","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":"delete 5","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":"delete 5","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":"deadline return book","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":"deadline return book /by","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":"event project meeting","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":"event project meeting /from /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":"event project meeting /from","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":"event project meeting /from /to","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jean-cq":20}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":"REM run the program, feed urchatbot.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":"java -classpath ..\\bin URChatBot \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":{"jean-cq":2,"-":19}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":"# run the program, feed urchatbot.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":"java -classpath ../bin URChatBot \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"jean-cq":2,"-":36}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"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":"jean-cq"},"content":" mainClass.set(\"URChatBot\")","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":"jean-cq"},"content":" archiveBaseName \u003d \"urchatbot\"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":" archiveFileName \u003d \"urchatbot.jar\"","lastModifiedDate":"2023-09-03"},{"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":{"jean-cq":3,"-":40}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"T | 0 | todo read book","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"D | 0 | return book | 4�� 9 2023","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"E | 0 | book events | 4�� 9 2023 14:00-19:00","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"T | 0 | todo kk ","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"T | 0 | todo ahaa","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jean-cq":5}},{"path":"data/testTodoCommand.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"T | 0 | Test Todo","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jean-cq":1}},{"path":"src/main/java/URChatBot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"import urchatbot.commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"public class URChatBot {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" private Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" * Constructs the URChatBot class.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" * @param filePath Path to store users\u0027 tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" public URChatBot(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" } catch (URChatBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" * Starts the chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"jean-cq"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jean-cq"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jean-cq"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jean-cq"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jean-cq"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jean-cq"},"content":" } catch (URChatBotException e) {","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"jean-cq"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jean-cq"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jean-cq"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"jean-cq"},"content":" * Instantiates a URChatBot.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"jean-cq"},"content":" * @param args Arguments.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"jean-cq"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jean-cq"},"content":" new URChatBot(\"data/tasks.txt\").run();","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"jean-cq":59}},{"path":"src/main/java/urchatbot/commands/ClearCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"public class ClearCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" * Constructs the ClearCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * @param taskDescription Task description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" public ClearCommand(String taskDescription) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" tasks.clearTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" ui.showClearMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":22}},{"path":"src/main/java/urchatbot/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"public class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" public String taskDescription;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" * Constructs the Command class.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" * @param taskDescription Task description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" public Command(String taskDescription) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" * Returns if the command is the exit command.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" * @return boolean If it is the exit command.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" public boolean isExit(){","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" * Executes the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" * @param tasks Tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" * @param ui User interface.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" * @param storage Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" throw new UnsupportedOperationException(\"This method is to be implemented by child classes\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":37}},{"path":"src/main/java/urchatbot/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" public String by;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" * Constructs the DeadlineCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" * @param taskDescription Task description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" * @param by The date and/or time of the deadline of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" public DeadlineCommand(String taskDescription, String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" Task newTask \u003d new Deadline(taskDescription, false, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" int taskSize \u003d tasks.getSize();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" if (taskSize \u003d\u003d 1 || taskSize \u003d\u003d0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" ui.showDeadlineMessage(taskDescription, taskSize);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" ui.showDeadlineMessagePlural(taskDescription, taskSize);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":34}},{"path":"src/main/java/urchatbot/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * Constructs the DeleteCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" * @param taskNumber Task number to delete.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" public DeleteCommand(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" super(\"Delete\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" if (tasks.getSize() \u003c 1 || tasks.getSize() \u003c\u003d taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! No task to delete!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" String deletedTask \u003d tasks.getTasks().get(taskNumber).toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" int taskSize \u003d tasks.getSize() - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" if (taskSize \u003d\u003d 1 || taskSize \u003d\u003d0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" ui.showDeleteMessage(deletedTask, taskSize);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" ui.showDeleteMessagePlural(deletedTask, taskSize);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" tasks.deleteTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":34}},{"path":"src/main/java/urchatbot/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" public String from;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" public String to;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" * Constructs the EventCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" * @param taskDescription Task description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" * @param from Starting date and/or time of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" * @param to Ending date and/or time of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" public EventCommand(String taskDescription, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" Task newTask \u003d new Event(taskDescription, false, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" int taskSize \u003d tasks.getSize();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" if (taskSize \u003d\u003d 1 || taskSize \u003d\u003d0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" ui.showEventMessage(newTask.toString(), taskSize);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" ui.showEventMessagePlural(newTask.toString(), taskSize);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":37}},{"path":"src/main/java/urchatbot/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" * Constructs the ExitCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * @param taskDescription Task description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" public ExitCommand(String taskDescription) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" public boolean isExit(){","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" ui.showByeMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":25}},{"path":"src/main/java/urchatbot/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" private String searchWord;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * Constructs the FindCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" * @param searchWord Word that the users want to search.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" public FindCommand(String searchWord) {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" super(\"Find\");","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" this.searchWord \u003d searchWord;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws URChatBotException {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" ui.showFindMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" for (int i \u003d 0; i \u003c tasks.getTasks().size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" if (tasks.getTasks().get(i).toString().contains(searchWord)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" System.out.println(i + 1 + \".\" + tasks.getTasks().get(i).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jean-cq":31}},{"path":"src/main/java/urchatbot/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" * Constructs the ListCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * @param taskDescription Task description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" public ListCommand(String taskDescription) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" ui.showListMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" for(int i \u003d 0; i \u003c tasks.getTasks().size(); i ++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" System.out.println(i + 1 + \".\" + tasks.getTasks().get(i).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":24}},{"path":"src/main/java/urchatbot/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" * Constructs the MarkCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" * @param taskNumber Task number to mark.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" public MarkCommand(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" super(\"Mark\");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" if (tasks.getSize() \u003c 1 || tasks.getSize() \u003c\u003d taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! No task to mark!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" Task markedTask \u003d tasks.getTasks().get(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" markedTask.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" String taskName \u003d markedTask.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" ui.showMarkMessage(taskName);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":32}},{"path":"src/main/java/urchatbot/commands/PrintCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"public class PrintCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" private String formattedDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * Constructs the PrintCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" * @param formattedDate Date that the users want to search.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" public PrintCommand(String formattedDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" super(\"Print\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" this.formattedDate \u003d formattedDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" int count \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" for (int i \u003d 0; i \u003c tasks.getTasks().size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" if (tasks.getTasks().get(i).toString().contains(formattedDate)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" count ++;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" System.out.println(tasks.getTasks().get(i).toString() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" if (count \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" ui.showPrintMessage(count, formattedDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" ui.showPrintMessagePlural(count, formattedDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":35}},{"path":"src/main/java/urchatbot/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * Constructs the TodoCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" * @param taskDescription Task description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" public TodoCommand(String taskDescription) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" Task newTask \u003d new ToDo(taskDescription, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" int taskSize \u003d tasks.getSize();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" if (taskSize \u003d\u003d 1 || taskSize \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" ui.showTodoMessage(newTask.toString(), taskSize);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" ui.showTodoMessagePlural(newTask.toString(), taskSize);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":31}},{"path":"src/main/java/urchatbot/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" * Constructs the UnmarkCommand class.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" * @param taskNumber Task number to unmark.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" public UnmarkCommand(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" super(\"Unmark\");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" if (tasks.getSize() \u003c 1 || tasks.getSize() \u003c\u003d taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! No task to mark!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" Task unmarkedTask \u003d tasks.getTasks().get(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" unmarkedTask.markAsUnDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" String taskName \u003d unmarkedTask.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" ui.showUnmarkMessage(taskName);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":33}},{"path":"src/main/java/urchatbot/common/Messages.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.common;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"public class Messages {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":" private static final String LOGO \u003d","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":" \" _____ _____\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":" + \"| | | | / ___| | ) |\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":" + \"| | | | | | | ___ /\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" + \"| |_| | | |___ | ) \\\\\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" + \"\\\\___,_| \\\\_____| |_____|\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_WELCOME \u003d \"Hello! I\u0027m URChatBot.\\nWhat can I do for you?\\n\" + LOGO;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_GOODBYE \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_LIST \u003d \"Here are the tasks in your list: \";","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_CLEAR \u003d \"All tasks are cleared\";","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_MARK \u003d \"Nice! I\u0027ve marked this task as done:\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_UNMARK \u003d \"OK, I\u0027ve marked this task as not done yet:\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_FIND \u003d \"Here are the matching tasks in your list: \";","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_DELETE \u003d \"Noted. I\u0027ve removed this task: \";","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_ADD\u003d \"Noted. I\u0027ve added this task: \";","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_NOW_YOU_HAVE \u003d \"\\nNow you have \";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_TASK_IN_THE_LIST \u003d \" task in the list.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_MESSAGE_TASK_IN_THE_LIST_PLURAL \u003d \" tasks in the list.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_PRINT \u003d \"There are a total of \";","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_PRINT_TWO \u003d \" task on \";","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_PRINT_TWO_PLURAL \u003d \" tasks on \";","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_INVALID_COMMAND_ERROR \u003d \"Invalid command!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" public static final String MESSAGE_LOADING_ERROR \u003d \"Loading failed\";","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":28}},{"path":"src/main/java/urchatbot/exception/URChatBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"public class URChatBotException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":" * Constructs the URChatBotException class.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":" * @param message Message of the exception.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" public URChatBotException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jean-cq":12}},{"path":"src/main/java/urchatbot/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.commands.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":"public class Parser{","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" * Categorises and returns subclass of Command type based on entered command.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" * @param command Command entered by users.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" * @return new command class instance","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" * @throws URChatBotException If command undefined.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" public static Command parse(String command) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" String commandType \u003d getCommandType(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" case \"TODO\":","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" return parseTodoCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" case \"DEADLINE\":","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" return parseDeadlineCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" case \"EVENT\":","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" return parseEventCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" case \"LIST\":","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" return parseListCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" case \"MARK\":","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":" return parseMarkCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":" case \"UNMARK\":","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jean-cq"},"content":" return parseUnmarkCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jean-cq"},"content":" case \"CLEAR\":","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jean-cq"},"content":" return parseClearCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jean-cq"},"content":" case \"DELETE\":","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jean-cq"},"content":" return parseDeleteCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jean-cq"},"content":" case \"PRINT\":","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jean-cq"},"content":" return parsePrintCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jean-cq"},"content":" case \"FIND\":","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jean-cq"},"content":" return parseFindCommand(command);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jean-cq"},"content":" case \"BYE\":","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jean-cq"},"content":" return parseExitCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jean-cq"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"jean-cq"},"content":" * Categorises and returns subclass of Command type based on entered command.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"jean-cq"},"content":" * @param time Time in the format of \"yyyy-MM-dd HH:mm\" or \"yyyy-MM-dd\" or \"HH:mm.\"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"jean-cq"},"content":" * @return a String of time in the format of \"MMM d yyyy HH:mm\" or \"MMM d yyyy\" or \"HH:mm\"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"jean-cq"},"content":" * @throws URChatBotException If command undefined.","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jean-cq"},"content":" public static String changeTimeFormat(String time) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jean-cq"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jean-cq"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"jean-cq"},"content":" LocalDateTime d \u003d LocalDateTime.parse(time, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"jean-cq"},"content":" return d.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"jean-cq"},"content":" } catch (DateTimeParseException e){","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"jean-cq"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"jean-cq"},"content":" LocalDate d \u003d LocalDate.parse(time);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"jean-cq"},"content":" return d.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"jean-cq"},"content":" } catch (DateTimeParseException err) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"jean-cq"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jean-cq"},"content":" LocalTime t \u003d LocalTime.parse(time);","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"jean-cq"},"content":" return t.format(DateTimeFormatter.ofPattern(\"HH:mm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"jean-cq"},"content":" } catch (DateTimeParseException tErr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"jean-cq"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"jean-cq"},"content":" private static String getCommandType(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"jean-cq"},"content":" return command.split(\"\\\\s\")[0].toUpperCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"jean-cq"},"content":" private static Command parseTodoCommand(String command) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"jean-cq"},"content":" if (command.length() \u003c\u003d 5) {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"jean-cq"},"content":" String task \u003d command.substring(command.indexOf(\"todo\") + 5);","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"jean-cq"},"content":" return new TodoCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"jean-cq"},"content":" private static Command parseDeadlineCommand(String command) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"jean-cq"},"content":" if (command.length() \u003c\u003d 5) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"jean-cq"},"content":" if (!command.contains(\"/by\") || command.substring(command.indexOf(\"/by\") + 3).trim().length() \u003c 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! The deadline cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"jean-cq"},"content":" String task \u003d command.substring(command.indexOf(\"deadline\") + 9, command.indexOf(\"/by\") - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"jean-cq"},"content":" String by \u003d command.substring(command.indexOf(\"/by\") + 4).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"jean-cq"},"content":" String time \u003d changeTimeFormat(by);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"jean-cq"},"content":" if (time \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"Wrong DateTime format. Please enter \u0027yyyy-MM-dd HH:mm\u0027 or \u0027yyyy-MM-dd\u0027\");","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"jean-cq"},"content":" return new DeadlineCommand(task, time);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"jean-cq"},"content":" private static Command parseEventCommand(String command) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"jean-cq"},"content":" if (command.trim().length() \u003c\u003d 5) {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! The description of a event cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"jean-cq"},"content":" if (!command.contains(\"/from\") || !command.contains(\"/to\")","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"jean-cq"},"content":" || command.substring(command.indexOf(\"event\") + 6, command.indexOf(\"/from\")).trim().length() \u003c 1","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"jean-cq"},"content":" || command.substring(command.indexOf(\"/from\") + 5, command.indexOf(\"/to\") - 1).trim().length() \u003c 1","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"jean-cq"},"content":" || command.substring(command.indexOf(\"/to\") + 3).trim().length() \u003c 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! The task name or/and from or/and to cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"jean-cq"},"content":" if (!command.contains(\"/from\") || !command.contains(\"/to\")","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"jean-cq"},"content":" || command.substring(command.indexOf(\"/from\") + 5, command.indexOf(\"/to\") - 1).trim().length() \u003c 1","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"jean-cq"},"content":" || command.substring(command.indexOf(\"/to\") + 3).trim().length() \u003c 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"OOPS!!! The from or/and to cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"jean-cq"},"content":" String task \u003d command.substring(command.indexOf(\"event\") + 6, command.indexOf(\"/from\") - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"jean-cq"},"content":" String from \u003d command.substring(command.indexOf(\"/from\") + 6, command.indexOf(\"/to\") - 1).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"jean-cq"},"content":" String to \u003d command.substring(command.indexOf(\"/to\") + 4).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"jean-cq"},"content":" String timeFrom \u003d changeTimeFormat(from);","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"jean-cq"},"content":" String timeTo \u003d changeTimeFormat(to);","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"jean-cq"},"content":" if (timeFrom \u003d\u003d null || timeTo \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"Wrong DateTime format. Please enter \u0027yyyy-MM-dd HH:mm\u0027 or \u0027yyyy-MM-dd\u0027\");","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"jean-cq"},"content":" return new EventCommand(task, timeFrom, timeTo);","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"jean-cq"},"content":" private static Command parseMarkCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"jean-cq"},"content":" int value \u003d Integer.parseInt(command.replaceAll(\"[^0-9]\", \"\")) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"jean-cq"},"content":" return new MarkCommand(value);","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"jean-cq"},"content":" private static Command parseUnmarkCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"jean-cq"},"content":" int value \u003d Integer.parseInt(command.replaceAll(\"[^0-9]\", \"\")) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"jean-cq"},"content":" return new UnmarkCommand(value);","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"jean-cq"},"content":" private static Command parseClearCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"jean-cq"},"content":" return new ClearCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"jean-cq"},"content":" private static Command parseListCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"jean-cq"},"content":" return new ListCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"jean-cq"},"content":" private static Command parseDeleteCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"jean-cq"},"content":" int value \u003d Integer.parseInt(command.replaceAll(\"[^0-9]\", \"\")) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"jean-cq"},"content":" return new DeleteCommand(value);","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"jean-cq"},"content":" private static Command parsePrintCommand(String command) throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"jean-cq"},"content":" String date \u003d command.substring(command.indexOf(\"print\") + 6).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"jean-cq"},"content":" String formattedDate \u003d changeTimeFormat(date);","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"jean-cq"},"content":" if (formattedDate \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"Wrong DateTime format. Please enter \u0027yyyy-MM-dd HH:mm\u0027 or \u0027yyyy-MM-dd\u0027.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"jean-cq"},"content":" return new PrintCommand(formattedDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"jean-cq"},"content":" private static Command parseFindCommand(String command) throws URChatBotException {","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"jean-cq"},"content":" String searchWord \u003d command.substring(command.indexOf(\"find\") + 5).trim();","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"jean-cq"},"content":" if (searchWord \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"No words input for searching.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"jean-cq"},"content":" return new FindCommand(searchWord);","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"jean-cq"},"content":" private static Command parseExitCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"jean-cq"},"content":" return new ExitCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":172}},{"path":"src/main/java/urchatbot/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import java.io.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" private static String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" * Constructs the Storage class.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" * @param filePath Path to store the tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" * Loads the existing tasks from the stored tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" * @return tasklist ArrayList\u003cTask\u003e tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" * @throws URChatBotException if Error occurs in loading.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" public static ArrayList\u003cTask\u003e load() throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" handleMissingFile(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(filePath))) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" String line \u003d reader.readLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":" Task task \u003d Task.fromString(line);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jean-cq"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jean-cq"},"content":" line \u003d reader.readLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jean-cq"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException( \"Error loading tasks from file: \" + e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jean-cq"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jean-cq"},"content":" * Saves the tasks to the stored file.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"jean-cq"},"content":" * @param tasks Tasklist to be saved.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"jean-cq"},"content":" public static void save(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jean-cq"},"content":" try (PrintWriter writer \u003d new PrintWriter(new FileWriter(filePath))) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jean-cq"},"content":" for (Task task : tasks.getTasks()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jean-cq"},"content":" writer.write(task.toFileString() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jean-cq"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jean-cq"},"content":" System.out.println(\"Error saving urchatbot.tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jean-cq"},"content":" private static void handleMissingFile(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jean-cq"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"jean-cq"},"content":" Path path \u003d Paths.get(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"jean-cq"},"content":" Path parentDirectory \u003d path.getParent();","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"jean-cq"},"content":" if (parentDirectory !\u003d null \u0026\u0026 !Files.exists(parentDirectory)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"jean-cq"},"content":" Files.createDirectories(parentDirectory);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"jean-cq"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jean-cq"},"content":" Files.createFile(path);","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"jean-cq"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"jean-cq"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"jean-cq"},"content":" System.out.println(\"Error creating or accessing the file: \" + e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":80}},{"path":"src/main/java/urchatbot/taskList/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" public static ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * Constructs the Tasklist class.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" * Constructs the Tasklist class in an alternative way.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" * @param tasks Task to construct the tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" * Adds tasks to the tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" * @param task Task to add.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":" * Deletes tasks to the tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jean-cq"},"content":" * @param index Task number to delete.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jean-cq"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jean-cq"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jean-cq"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jean-cq"},"content":" * Clears all tasks in the tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jean-cq"},"content":" public void clearTask() {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jean-cq"},"content":" tasks.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jean-cq"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jean-cq"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jean-cq"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jean-cq"},"content":" return tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":58}},{"path":"src/main/java/urchatbot/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":" protected String by;","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" * Construct the Deadline class.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * @param isDone If the task is done.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" * @param by Date and/or time of the deadline.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" public Deadline(String description, boolean isDone, String by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" return \"D | 1 | \" + description","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" + \" | \" + by;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" return \"D | 0 | \" + description","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" + \" | \" + by;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jean-cq":32}},{"path":"src/main/java/urchatbot/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":" protected String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" * Construct the Event class.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" * @param isDone If the task is done.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" * @param from Starting date and/or time of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" * @param to Ending date and/or time of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" public Event(String description, boolean isDone, String from, String to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" return \"E | 1 | \" + description","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" + \" | \" + from + \"-\" + to;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" return \"E | 0 | \" + description","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" + \" | \" + from + \"-\" + to;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jean-cq":37}},{"path":"src/main/java/urchatbot/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":" * Construct the Task class.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" * @param isDone If the task is done.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" * Unmarks the task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" public void markAsUnDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" * Converts the tasks into a format to store.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" public String toFileString(){","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" return \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":" * Converts tasks in the stored tasklist to Task subclass.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jean-cq"},"content":" * @param input Task in the stored tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jean-cq"},"content":" public static Task fromString(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jean-cq"},"content":" String[] parts \u003d input.split(\"\\\\|\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jean-cq"},"content":" String taskType \u003d parts[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jean-cq"},"content":" boolean isMarked \u003d parts[1].trim().equals(\"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"jean-cq"},"content":" String taskDescription \u003d parts[2].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jean-cq"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jean-cq"},"content":" return new ToDo(taskDescription, isMarked);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jean-cq"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"jean-cq"},"content":" return new Deadline(taskDescription, isMarked, parts[3].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"jean-cq"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"jean-cq"},"content":" String[] duration \u003d parts[3].trim().split(\"-\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"jean-cq"},"content":" String from \u003d duration[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"jean-cq"},"content":" String to \u003d duration[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"jean-cq"},"content":" return new Event(taskDescription, isMarked, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"jean-cq"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jean-cq"},"content":" * Marks down task with X","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"jean-cq"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"jean-cq"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"jean-cq"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"jean-cq"},"content":" return this.isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"jean-cq"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"jean-cq"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"jean-cq"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"jean-cq"},"content":" return this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-08-21"},{"lineNumber":75,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"jean-cq":75}},{"path":"src/main/java/urchatbot/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":" * Construct the Todo class.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":" * @param isDone If the task is done.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" return \"T | 1 | \" + description;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" return \"T | 0 | \" + description;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jean-cq":25}},{"path":"src/main/java/urchatbot/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"import static urchatbot.common.Messages.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" private final Scanner in;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" private final PrintStream out;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" * Construct the Ui class.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" public Ui() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" * Construct the Ui class in an alternative way.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" * @param in Input by the users.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" * @param out Output by the App.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" public Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" this.out \u003d out;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" * Generates and prints the welcome message upon the start of the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jean-cq"},"content":" System.out.println(MESSAGE_WELCOME);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jean-cq"},"content":" * Returns true if the user input line should be ignored.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jean-cq"},"content":" * Input should be ignored if it is parsed as a comment, is only whitespace, or is empty.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jean-cq"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jean-cq"},"content":" * @param rawInputLine Full raw user input line.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jean-cq"},"content":" * @return true If the entire user input line should be ignored.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jean-cq"},"content":" private boolean shouldIgnore(String rawInputLine) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jean-cq"},"content":" return rawInputLine.trim().isEmpty() || isCommentLine(rawInputLine);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jean-cq"},"content":" private boolean isCommentLine(String rawInputLine) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jean-cq"},"content":" return rawInputLine.toUpperCase().trim().matches(\"\\\\b(?: BYE | DELETE | CLEAR |\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jean-cq"},"content":" \" LIST | MARK | UNMARK | FIND\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"jean-cq"},"content":" \" TODO | DEADLINE | EVENT | PRINT)\\\\b\");","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jean-cq"},"content":" * Prompts for the command and reads the text entered by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jean-cq"},"content":" * Ignores empty, pure whitespace, and comment lines.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jean-cq"},"content":" public String readCommand() throws URChatBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jean-cq"},"content":" out.println(\"Enter command: \");","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jean-cq"},"content":" String fullInputLine \u003d in.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"jean-cq"},"content":" if (shouldIgnore(fullInputLine)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"jean-cq"},"content":" throw new URChatBotException(\"Wrong input!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"jean-cq"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"jean-cq"},"content":" return fullInputLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"jean-cq"},"content":" * Shows goodbye message for ExitCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"jean-cq"},"content":" public void showByeMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"jean-cq"},"content":" System.out.println(MESSAGE_GOODBYE);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"jean-cq"},"content":" * Shows cleared message for ClearCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"jean-cq"},"content":" public void showClearMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"jean-cq"},"content":" System.out.println(MESSAGE_CLEAR);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"jean-cq"},"content":" * Shows list message for ListCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"jean-cq"},"content":" public void showListMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_LIST);","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"jean-cq"},"content":" * Shows print message for PrintCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"jean-cq"},"content":" public void showPrintMessage(int count, String formattedDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_PRINT + count","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"jean-cq"},"content":" + MESSAGE_PRINT_TWO + formattedDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"jean-cq"},"content":" * Shows print message for PrintCommand if there are more than 1 task to print.","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"jean-cq"},"content":" public void showPrintMessagePlural(int count, String formattedDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_PRINT + count","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"jean-cq"},"content":" + MESSAGE_PRINT_TWO_PLURAL + formattedDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"jean-cq"},"content":" * Shows find message for FindCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"jean-cq"},"content":" public void showFindMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_FIND);","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"jean-cq"},"content":" * Shows mark message for MarkCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"jean-cq"},"content":" public void showMarkMessage(String taskName) {","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_MARK + taskName);","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"jean-cq"},"content":" * Shows unmark message for UnmarkCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"jean-cq"},"content":" public void showUnmarkMessage(String taskName) {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_UNMARK + taskName);","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"jean-cq"},"content":" * Shows delete message for DeleteCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"jean-cq"},"content":" public void showDeleteMessage(String deletedTask, int taskSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_DELETE + deletedTask + MESSAGE_NOW_YOU_HAVE","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"jean-cq"},"content":" + taskSize + MESSAGE_TASK_IN_THE_LIST);","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"jean-cq"},"content":" * Shows delete message for DeleteCommand if there are more 1 task in tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"jean-cq"},"content":" public void showDeleteMessagePlural(String deletedTask, int taskSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_ADD + deletedTask + MESSAGE_NOW_YOU_HAVE","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"jean-cq"},"content":" + taskSize + MESSAGE_MESSAGE_TASK_IN_THE_LIST_PLURAL);","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"jean-cq"},"content":" * Shows todo task message for TodoCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"jean-cq"},"content":" public void showTodoMessage(String taskDescription, int taskSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_ADD + taskDescription + MESSAGE_NOW_YOU_HAVE","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"jean-cq"},"content":" + taskSize + MESSAGE_TASK_IN_THE_LIST);","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"jean-cq"},"content":" * Shows todo task message for TodoCommand if there are more 1 task in tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"jean-cq"},"content":" public void showTodoMessagePlural(String taskDescription, int taskSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_ADD + taskDescription + MESSAGE_NOW_YOU_HAVE","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"jean-cq"},"content":" + taskSize + MESSAGE_MESSAGE_TASK_IN_THE_LIST_PLURAL);","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"jean-cq"},"content":" * Shows deadline task message for DeadlineCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"jean-cq"},"content":" public void showDeadlineMessage(String taskDescription, int taskSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_ADD + taskDescription + MESSAGE_NOW_YOU_HAVE","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"jean-cq"},"content":" + taskSize + MESSAGE_TASK_IN_THE_LIST);","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"jean-cq"},"content":" * Shows deadline task message for DeadlineCommand if there are more 1 task in tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"jean-cq"},"content":" public void showDeadlineMessagePlural(String taskDescription, int taskSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_ADD + taskDescription + MESSAGE_NOW_YOU_HAVE","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"jean-cq"},"content":" + taskSize + MESSAGE_MESSAGE_TASK_IN_THE_LIST_PLURAL);","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"jean-cq"},"content":" * Shows event task message for EventCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"jean-cq"},"content":" public void showEventMessage(String taskDescription, int taskSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_ADD + taskDescription + MESSAGE_NOW_YOU_HAVE","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"jean-cq"},"content":" + taskSize + MESSAGE_TASK_IN_THE_LIST);","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":175,"author":{"gitId":"jean-cq"},"content":" * Shows event task message for EventCommand if there are more 1 task in tasklist.","lastModifiedDate":"2023-09-04"},{"lineNumber":176,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"jean-cq"},"content":" public void showEventMessagePlural(String taskDescription, int taskSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_ADD + taskDescription + MESSAGE_NOW_YOU_HAVE","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"jean-cq"},"content":" + taskSize + MESSAGE_MESSAGE_TASK_IN_THE_LIST_PLURAL);","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":183,"author":{"gitId":"jean-cq"},"content":" * Shows dot line.","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":185,"author":{"gitId":"jean-cq"},"content":" public void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"jean-cq"},"content":" out.println(\"_______________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":187,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"jean-cq"},"content":" * Shows loading error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":190,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":191,"author":{"gitId":"jean-cq"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"jean-cq"},"content":" out.println(MESSAGE_LOADING_ERROR);","lastModifiedDate":"2023-09-04"},{"lineNumber":193,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"jean-cq"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"jean-cq"},"content":" * Shows error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":196,"author":{"gitId":"jean-cq"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":197,"author":{"gitId":"jean-cq"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"jean-cq"},"content":" out.println(\"Error: \" + errorMessage);","lastModifiedDate":"2023-09-04"},{"lineNumber":199,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":200}},{"path":"src/test/java/urchatbot/commands/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.exception.URChatBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.parser.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" public void parse_ValidTodoCommand_ReturnsTodoCommand() throws URChatBotException {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" String command \u003d \"todo Buy groceries\";","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" Command parsedCommand \u003d Parser.parse(command);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" assertTrue(parsedCommand instanceof TodoCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" // Add more assertions here if needed","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" public void parse_ValidDeadlineCommand_ReturnsDeadlineCommand() throws URChatBotException {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" String command \u003d \"deadline Submit report /by 2023-08-31 14:00\";","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":" Command parsedCommand \u003d Parser.parse(command);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" assertTrue(parsedCommand instanceof DeadlineCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" // Add more assertions here if needed","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":" public void parse_InvalidCommand_ThrowsURChatBotException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" String command \u003d \"invalid command\";","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" assertThrows(URChatBotException.class, () -\u003e Parser.parse(command));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":" // Add more test methods for other parsing scenarios","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":" // Test cases for error handling (e.g., invalid date format) if applicable","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jean-cq"},"content":" // Test cases for edge cases and boundary conditions","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jean-cq":39}},{"path":"src/test/java/urchatbot/commands/TodoCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"package urchatbot.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"import urchatbot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"import urchatbot.taskList.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"import urchatbot.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":"public class TodoCommandTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":" public void execute_AddTodoTask_TaskAddedToTaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":" // Create a TaskList, Ui, and Storage for testing","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":" Storage storage \u003d new Storage(\"data/testTodoCommand.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":" // Create a TodoCommand and execute it","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":" TodoCommand todoCommand \u003d new TodoCommand(\"Test Todo\");","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jean-cq"},"content":" todoCommand.execute(taskList, ui, storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":" // Check if the task was added to the TaskList","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jean-cq"},"content":" assertEquals(1, taskList.getSize());","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jean-cq"},"content":" // Check if the task description matches","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jean-cq"},"content":" assertEquals(\"Test Todo\", (taskList.getTasks().get(0)).getDescription());","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jean-cq"},"content":" // Check if the task is marked as not done","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jean-cq"},"content":" assertEquals(false, taskList.getTasks().get(0).getIsDone());","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jean-cq"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jean-cq"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jean-cq"},"content":" // You can add more test cases for different scenarios here","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jean-cq"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jean-cq":35}},{"path":"text-ui-test/data/urchatbot.tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"T | 0 | todo read book","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"D | 0 | return book | Sep 2 2023","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"E | 0 | project meeting | Jan 1 2023 14:00-17:00","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"T | 1 | todo borrow book","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jean-cq":4}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jean-cq"},"content":"clear","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jean-cq"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"jean-cq"},"content":"todo read book","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"jean-cq"},"content":"deadline return book /by 2023-09-02","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jean-cq"},"content":"event project meeting /from 2023-01-01 14:00 /to 17:00","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jean-cq"},"content":"blah","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jean-cq"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"jean-cq"},"content":"todo play badminton","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"jean-cq"},"content":"mark 5","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"jean-cq"},"content":"mark 4","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"jean-cq"},"content":"delete 5","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"jean-cq"},"content":"delete 5","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"jean-cq"},"content":"deadline return book","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"jean-cq"},"content":"deadline return book /by","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jean-cq"},"content":"event project meeting","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"jean-cq"},"content":"event project meeting /from /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":"event project meeting /from","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":"event project meeting /from /to","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"jean-cq"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jean-cq"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jean-cq":20}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"jean-cq"},"content":"REM run the program, feed urchatbot.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jean-cq"},"content":"java -classpath ..\\bin URChatBot \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":{"jean-cq":2,"-":19}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"jean-cq"},"content":"# run the program, feed urchatbot.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jean-cq"},"content":"java -classpath ../bin URChatBot \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"jean-cq":2,"-":36}}] diff --git a/jean-cq_ip_master/commits.json b/jean-cq_ip_master/commits.json index 6215b80c..abd0a785 100644 --- a/jean-cq_ip_master/commits.json +++ b/jean-cq_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"jean-cq":[{"date":"2023-08-21","commitResults":[{"hash":"e351e3eb9e049f06705832e9d7fb1ce53e954973","isMergeCommit":false,"messageTitle":"Update Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":10}}},{"hash":"b5b67cecf80f4a6772048792f3943864813c155d","isMergeCommit":false,"messageTitle":"Update Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":5}}},{"hash":"eac6532cb643382c665c74130c9cdc95f1fde361","isMergeCommit":false,"messageTitle":"Update Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":10}}},{"hash":"0b2abb20ac2d0901e3ae8d4585102c50ba9f4e11","isMergeCommit":false,"messageTitle":"Update Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":6}}}]},{"date":"2023-08-22","commitResults":[{"hash":"3f62e01e26b801898cddd06ea2c0aaf8a961ae32","isMergeCommit":false,"messageTitle":"Update Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":2}}},{"hash":"088ddce97523ba7d902c25b22e87b9b503ba0041","isMergeCommit":false,"messageTitle":"Update Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":5}}},{"hash":"5e37284d21ef439a009a7d6ed3f513e977198d7f","isMergeCommit":false,"messageTitle":"Update Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":27}}},{"hash":"ebc09162728c1d5fa8b5da37715c908f52015b08","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":18,"deletions":0},"java":{"insertions":11,"deletions":5},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"4fa811d4f89fd3503db271778d372d1ebe666089","isMergeCommit":false,"messageTitle":"update test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":1,"deletions":2}}},{"hash":"1aec9dc8cfdf2601b464455e722206eaa48d6ae7","isMergeCommit":false,"messageTitle":"update logo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"b768b6ac642735d7f5b65ee97c37a1929dc54a86","isMergeCommit":false,"messageTitle":"Update save function","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":145,"deletions":41}}},{"hash":"0558d8996fc1d23d7219dc07066128d7565fa9ff","isMergeCommit":false,"messageTitle":"Update date and time","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":5},"java":{"insertions":75,"deletions":8}}}]},{"date":"2023-09-02","commitResults":[{"hash":"97a528c34c1e87e284be3c684f24c5949bcd2443","isMergeCommit":false,"messageTitle":"Update more oop","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":761,"deletions":207}}},{"hash":"24798f6c93a0137892718a4367c4545f3ceec0b5","isMergeCommit":false,"messageTitle":"Update packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":114},"bat":{"insertions":2,"deletions":2},"sh":{"insertions":1,"deletions":1}}},{"hash":"8147ecdca999b3fd0b734d27cc0f3c8eb46e454c","isMergeCommit":false,"messageTitle":"Update testcase","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":2},"java":{"insertions":4,"deletions":4},"bat":{"insertions":1,"deletions":1}}},{"hash":"434726c01dc2b312019c392f2547f925be15876f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a09b7f28d0018a99f759352d7f3b1bdef0c62a57","isMergeCommit":false,"messageTitle":"Update gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"0c168bad8e1e3da3eb26b84ee7c026a6224bae54","isMergeCommit":false,"messageTitle":"Update JUnit testing","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":81,"deletions":1}}},{"hash":"f2b102fe225ba7b55fa01163e4aa1a5fc26580b9","isMergeCommit":false,"messageTitle":"Update jar task","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"d5cd748c74e109713300135c07064d3d4ed198a2","isMergeCommit":false,"messageTitle":"Update javadoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":282,"deletions":48}}},{"hash":"e759008a48c7f25ac42416a123cc88e3d70da724","isMergeCommit":false,"messageTitle":"Fix generality of handleMissingFile method in Storage class and update styles","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5},"java":{"insertions":9,"deletions":8}}},{"hash":"da24ea377bc828bf238375935cece1ffbcdc708b","isMergeCommit":false,"messageTitle":"Fix generality of handleMissingFile method in Storage class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5},"java":{"insertions":9,"deletions":8}}},{"hash":"9f5bce53d47c741886a22f14ad13f72284e47ccb","isMergeCommit":false,"messageTitle":"Update styles","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":23}}},{"hash":"ac2a32429c8acebdada323c2d5528ec2fc8408af","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/urchatbot/tasks/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"d43875d556df8d8486b983eacd77a4f80502cc6b","isMergeCommit":false,"messageTitle":"Update Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":22}}}]}]},"authorFileTypeContributionMap":{"jean-cq":{"java":1191,"md":0,"fxml":0,"sh":2,"bat":2,"gradle":3,"txt":25}},"authorContributionVariance":{"jean-cq":83566.58},"authorDisplayNameMap":{"jean-cq":"CS2103T-W11-1 CHEN.. QUN"}} +{"authorDailyContributionsMap":{"jean-cq":[{"date":"2023-08-21","commitResults":[{"hash":"e351e3eb9e049f06705832e9d7fb1ce53e954973","isMergeCommit":false,"messageTitle":"Update Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":10}}},{"hash":"b5b67cecf80f4a6772048792f3943864813c155d","isMergeCommit":false,"messageTitle":"Update Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":5}}},{"hash":"eac6532cb643382c665c74130c9cdc95f1fde361","isMergeCommit":false,"messageTitle":"Update Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":10}}},{"hash":"0b2abb20ac2d0901e3ae8d4585102c50ba9f4e11","isMergeCommit":false,"messageTitle":"Update Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":6}}}]},{"date":"2023-08-22","commitResults":[{"hash":"3f62e01e26b801898cddd06ea2c0aaf8a961ae32","isMergeCommit":false,"messageTitle":"Update Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":2}}},{"hash":"088ddce97523ba7d902c25b22e87b9b503ba0041","isMergeCommit":false,"messageTitle":"Update Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":5}}},{"hash":"5e37284d21ef439a009a7d6ed3f513e977198d7f","isMergeCommit":false,"messageTitle":"Update Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":27}}},{"hash":"ebc09162728c1d5fa8b5da37715c908f52015b08","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":18,"deletions":0},"java":{"insertions":11,"deletions":5},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"4fa811d4f89fd3503db271778d372d1ebe666089","isMergeCommit":false,"messageTitle":"update test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":1,"deletions":2}}},{"hash":"1aec9dc8cfdf2601b464455e722206eaa48d6ae7","isMergeCommit":false,"messageTitle":"update logo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"b768b6ac642735d7f5b65ee97c37a1929dc54a86","isMergeCommit":false,"messageTitle":"Update save function","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":145,"deletions":41}}},{"hash":"0558d8996fc1d23d7219dc07066128d7565fa9ff","isMergeCommit":false,"messageTitle":"Update date and time","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":5},"java":{"insertions":75,"deletions":8}}}]},{"date":"2023-09-02","commitResults":[{"hash":"97a528c34c1e87e284be3c684f24c5949bcd2443","isMergeCommit":false,"messageTitle":"Update more oop","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":761,"deletions":207}}},{"hash":"24798f6c93a0137892718a4367c4545f3ceec0b5","isMergeCommit":false,"messageTitle":"Update packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":114},"bat":{"insertions":2,"deletions":2},"sh":{"insertions":1,"deletions":1}}},{"hash":"8147ecdca999b3fd0b734d27cc0f3c8eb46e454c","isMergeCommit":false,"messageTitle":"Update testcase","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":2},"java":{"insertions":4,"deletions":4},"bat":{"insertions":1,"deletions":1}}},{"hash":"434726c01dc2b312019c392f2547f925be15876f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a09b7f28d0018a99f759352d7f3b1bdef0c62a57","isMergeCommit":false,"messageTitle":"Update gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"0c168bad8e1e3da3eb26b84ee7c026a6224bae54","isMergeCommit":false,"messageTitle":"Update JUnit testing","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":81,"deletions":1}}},{"hash":"f2b102fe225ba7b55fa01163e4aa1a5fc26580b9","isMergeCommit":false,"messageTitle":"Update jar task","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"d5cd748c74e109713300135c07064d3d4ed198a2","isMergeCommit":false,"messageTitle":"Update javadoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":282,"deletions":48}}},{"hash":"e759008a48c7f25ac42416a123cc88e3d70da724","isMergeCommit":false,"messageTitle":"Fix generality of handleMissingFile method in Storage class and update styles","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5},"java":{"insertions":9,"deletions":8}}},{"hash":"da24ea377bc828bf238375935cece1ffbcdc708b","isMergeCommit":false,"messageTitle":"Fix generality of handleMissingFile method in Storage class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5},"java":{"insertions":9,"deletions":8}}},{"hash":"9f5bce53d47c741886a22f14ad13f72284e47ccb","isMergeCommit":false,"messageTitle":"Update styles","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":23}}},{"hash":"ac2a32429c8acebdada323c2d5528ec2fc8408af","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/urchatbot/tasks/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"d43875d556df8d8486b983eacd77a4f80502cc6b","isMergeCommit":false,"messageTitle":"Update Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":22}}},{"hash":"105886d9a1a8e8e1bc5ca616ab1d162e27db28df","isMergeCommit":false,"messageTitle":"Update find function and update styles","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":61,"deletions":25}}}]}]},"authorFileTypeContributionMap":{"jean-cq":{"java":1227,"md":0,"fxml":0,"sh":2,"bat":2,"gradle":3,"txt":30}},"authorContributionVariance":{"jean-cq":87352.35},"authorDisplayNameMap":{"jean-cq":"CS2103T-W11-1 CHEN.. QUN"}} diff --git a/jinyuan0425_ip_master/authorship.json b/jinyuan0425_ip_master/authorship.json index 662052e2..bf5c5742 100644 --- a/jinyuan0425_ip_master/authorship.json +++ b/jinyuan0425_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"plugins {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"repositories {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" mavenCentral()","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"dependencies {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":"test {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" testLogging {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" showExceptions true","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" showCauses true","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" showStackTraces true","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":"application {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":"shadowJar {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":"run{","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" standardInput \u003d System.in","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":42}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"T | 0 | math test","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"D | 0 | math homework | 20/9/2023 2100","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"jinyuan0425":2}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" * Contains the main method to be executed.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" * storage contains the instance of the storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" * tasks contain the list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" * ui contains the instance of the user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Duke class. Instantiates the","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" * storage with the filePath.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" * @param filePath Contains the path to the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException If filePath is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" public Duke(String filePath) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" this.tasks \u003d new TaskList(storage.loadTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" * Method scans for user input and terminates on command \"bye\".","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" ui.greet();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" String fullCommand \u003d ui.scan();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" } catch (DukeException | IOException | DateTimeParseException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" public static void main(String[] args) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"jinyuan0425":59,"-":3}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" * Class of commands that adds to the existing list.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" * type contains the type of the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" * task contains the name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" * deadline contains the by of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" * from contains the start of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" * to contains the end of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" * isExit contains whether to terminate the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" private String type;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" private String task;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for AddCommand.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" * @param type The type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" * @param task The name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" public AddCommand(String type, String task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for AddCommand.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" * @param type The type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" * @param task The name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" * @param deadline The by of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" public AddCommand(String type, String task, LocalDateTime deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for AddCommand.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":" * @param type The type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":" * @param task The name of Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":" * @param from The start of Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":" * @param to The end of Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":" public AddCommand(String type, String task, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":" * Executes the command based on user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"jinyuan0425"},"content":" * @param tasks List of tasks in taskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"jinyuan0425"},"content":" * @param ui Instance of the user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"jinyuan0425"},"content":" * @param storage Instance of the storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException If input is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"jinyuan0425"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"jinyuan0425"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"jinyuan0425"},"content":" Task tasking \u003d new Todo(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(tasking);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"jinyuan0425"},"content":" ui.showTaskAdded(tasking, tasks.getSize());","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"jinyuan0425"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"jinyuan0425"},"content":" Task tasking \u003d new Deadline(task,deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(tasking);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"jinyuan0425"},"content":" ui.showTaskAdded(tasking, tasks.getSize());","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"jinyuan0425"},"content":" } else if (type.equals(\"E\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"jinyuan0425"},"content":" Task tasking \u003d new Event(task, from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(tasking);","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"jinyuan0425"},"content":" ui.showTaskAdded(tasking, tasks.getSize());","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"jinyuan0425"},"content":" storage.saveTasks(tasks.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"jinyuan0425"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"jinyuan0425"},"content":" return isExit;","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"jinyuan0425"},"content":" public String getType() {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"jinyuan0425"},"content":" return type;","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"jinyuan0425"},"content":" public LocalDateTime getDeadline() {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"jinyuan0425"},"content":" return deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"jinyuan0425"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"jinyuan0425"},"content":" return from;","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"jinyuan0425"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"jinyuan0425"},"content":" return to;","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"jinyuan0425"},"content":" public String getTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"jinyuan0425"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":128}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" * Parent class of all the Command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":" * Contains the abstract methods execute and isExit.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" * Executes the command from user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" * @param tasks List of tasks in taskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" * @param ui Instance of the user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" * @param storage Instance of the storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException If input is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":22}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" * Class of the command that terminates the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"public class ExitCommand extends Command{","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" * isExit contains whether to terminate the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" private boolean isExit;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for ExitCommand","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" public ExitCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" this.isExit \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" };","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" * Executes the thank method before the bot terminates.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" * @param tasks List of tasks in taskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" * @param ui Instance of the user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" * @param storage Instance of the storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" ui.thank();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" return isExit;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":40}},{"path":"src/main/java/duke/command/FilterCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":" * Class of commands that filters the existing list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"public class FilterCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" * type contains the type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" * keyword contains the keyword to filter.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" String type;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" String keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the FilterCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" * @param type The type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" * @param keyword The keyword to filter.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" public FilterCommand(String type, String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" * Executes the command based on user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" * @param tasks List of tasks in taskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" * @param ui Instance of the user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" * @param storage Instance of the storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException Invalid input.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" String list \u003d tasks.filter(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" ui.showFilteredList(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" } catch (Exception ex) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"I\u0027m afraid such a task do not exist.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" * Returns whether to terminate the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" * @return Whether to terminate the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" public String getType() {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" return type;","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" public String getKeyword() {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" return keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"jinyuan0425":66}},{"path":"src/main/java/duke/command/ModifyCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" * Class of commands that modifies the existing list.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":"public class ModifyCommand extends Command{","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" * type contains the type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" * index contains the index of the list to modify.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" * isExit contains whether to terminate the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" private String type;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for ModifyCommand.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" * @param type The type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" * @param index The index of the list to modify.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" public ModifyCommand(String type, int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" * Executes the command based on user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" * @param tasks List of tasks in taskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" * @param ui Instance of the user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" * @param storage Instance of the storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException Invalid input.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" if (type.equals(\"L\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" ui.showList(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" Task task \u003d tasks.getTask(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" if (type.equals(\"M\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" tasks.mark(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" ui.showTaskCompleted(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" } else if (type.equals(\"U\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" tasks.unmark(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" ui.showTaskUnmarked(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" tasks.delete(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" ui.showTaskDeleted(task, tasks.getSize());","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":" storage.saveTasks(tasks.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" } catch (Exception ex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"I\u0027m afraid such a task do not exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":" return isExit;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":" public String getType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":" return type;","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":" public int getIndex() {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":" return index;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":80}},{"path":"src/main/java/duke/components/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.components;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":" * Exception class for the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for DukeException.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":" * @param msg The error message to be displayed when","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" * an error is encountered.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" super(msg);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jinyuan0425":16}},{"path":"src/main/java/duke/components/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.components;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.FilterCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.ModifyCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" * Class that parses the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" * Parses user input and returns the corresponding command.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" * @param input User input to be parses.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" * @return Corresponding Command based on the input.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" * @throws IOException","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" public static Command parse(String input) throws DukeException, IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" String[] commandInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" String command \u003d commandInput[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" return new ModifyCommand(\"L\", 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" String type \u003d \"M\";","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" int index \u003d Integer.valueOf(commandInput[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" return new ModifyCommand(type, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" String type \u003d \"U\";","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" int index \u003d Integer.valueOf(commandInput[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" return new ModifyCommand(type, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" String type \u003d \"T\";","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" String[] task \u003d getTask(type, input);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" return new AddCommand(type, task[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" String type \u003d \"D\";","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" String[] task \u003d getTask(type, input);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" return new AddCommand(type, task[0], parseDateTime(task[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" String type \u003d \"E\";","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" String[] task \u003d getTask(type, input);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" return new AddCommand(type, task[0], parseDateTime(task[1]), parseDateTime(task[2]));","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" String type \u003d \"D\";","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" int index \u003d Integer.valueOf(commandInput[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" return new ModifyCommand(type, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" } else if (command.equals(\"find\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" String type \u003d \"F\";","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":" String keyword \u003d commandInput[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":" return new FilterCommand(type, keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"I\u0027m afraid I do not quite understand. Could you kindly repeat it?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":" } catch (Exception ex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"Could you repeat that last part? I did not quite catch it.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":" * Further parses the input if the command is to add a new task.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":" * @param type Type of Command, Todo, Deadline or Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":" * @param input User input, containing details of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":" * @return String array containing the details of the task, parsed into the correct indexes.","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":" public static String[] getTask(String type, String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jinyuan0425"},"content":" return new String[] {input.substring(5)};","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jinyuan0425"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jinyuan0425"},"content":" String deadline \u003d input.substring(9);","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jinyuan0425"},"content":" return deadline.split(\" /by \");","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"jinyuan0425"},"content":" } else if (type.equals(\"E\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"jinyuan0425"},"content":" String details \u003d input.substring(6);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"jinyuan0425"},"content":" String[] taskStartEnd \u003d details.split(\" /from \");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"jinyuan0425"},"content":" String[] startEnd \u003d taskStartEnd[1].split(\" /to \");","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"jinyuan0425"},"content":" return new String[] {taskStartEnd[0], startEnd[0], startEnd[1]};","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"jinyuan0425"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"jinyuan0425"},"content":" return new String[] {};","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"jinyuan0425"},"content":" * Further parses the input if the input contains the String for dateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"jinyuan0425"},"content":" * @param dateTimeStr String of the dateTime to be converted.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"jinyuan0425"},"content":" * @return LocalDateTime object to be used to construct the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException Invalid format or input for dateTimeStr.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"jinyuan0425"},"content":" public static LocalDateTime parseDateTime(String dateTimeStr) throws DukeException{","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"jinyuan0425"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"jinyuan0425"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"jinyuan0425"},"content":" return LocalDateTime.parse(dateTimeStr, formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"jinyuan0425"},"content":" } catch (DateTimeParseException ex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"I\u0027m afraid I do not quite understand. Please input the date and time\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"jinyuan0425"},"content":" \"as follows:\\nd/M/yyyy HHmm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":110}},{"path":"src/main/java/duke/components/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.components;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" * Class that manages the storing and loading of the list of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" * filePath contains the path to the stored file containing the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" private String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Storage class.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" * @param filePath The path to the stored file containing the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" * Loads the task from an existing save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" * @return The list stored in the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException Invalid path.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" public ArrayList\u003cTask\u003e loadTasks() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" createFileIfNotExist(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(filePath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" String line;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" Task task \u003d parseTask(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" } catch (IOException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"There must be an error. I can\u0027t seem to locate the file.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" } catch (IOException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"There must be an error. I can\u0027t seem to locate the file.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":" * Create the path to the file and the file itself if they do not exist.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":" * @param filePath Path to be created.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":" * @throws IOException","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":" private void createFileIfNotExist(String filePath) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":" File parentDirectory \u003d file.getParentFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":" if (parentDirectory !\u003d null \u0026\u0026 !parentDirectory.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":" parentDirectory.mkdirs(); // Recursively create directories if they don\u0027t exist","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jinyuan0425"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"jinyuan0425"},"content":" * Updates the save file with the most current state of the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"jinyuan0425"},"content":" * @param tasks List of tasks to be updated into the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"jinyuan0425"},"content":" public void saveTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"jinyuan0425"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(filePath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"jinyuan0425"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"jinyuan0425"},"content":" writer.write(task.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"jinyuan0425"},"content":" writer.newLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"jinyuan0425"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"jinyuan0425"},"content":" * Reads the data stored in the save file and return the corresponding Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"jinyuan0425"},"content":" * @param taskData Data for Task stored in the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"jinyuan0425"},"content":" * @return Task representation of the String stored.","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"jinyuan0425"},"content":" private Task parseTask(String taskData) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"jinyuan0425"},"content":" String[] parts \u003d taskData.split(\" \\\\| \");","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"jinyuan0425"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"jinyuan0425"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"jinyuan0425"},"content":" String taskDescription \u003d parts[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"jinyuan0425"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"jinyuan0425"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"jinyuan0425"},"content":" return new Todo(taskDescription, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"jinyuan0425"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime deadline \u003d Parser.parseDateTime(parts[3]);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"jinyuan0425"},"content":" return new Deadline(taskDescription, deadline, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"jinyuan0425"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime start \u003d Parser.parseDateTime(parts[3]);","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime end \u003d Parser.parseDateTime(parts[4]);","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"jinyuan0425"},"content":" return new Event(taskDescription, start, end, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"jinyuan0425"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"jinyuan0425"},"content":" return null; // Invalid task type","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":127}},{"path":"src/main/java/duke/components/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.components;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" * Class for the list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" * tasks contains a list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" private static ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" * Stores the task list loaded from the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" * @param tasks List of task loaded from storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" * Add a new task to list.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" * @param task Task to be added to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" * Mark a specific task as completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" * @param index Index of task completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException Indexing error.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" public static void mark(int index) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" if (isValidIndex(index)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" tasks.get(index).setDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" } else { // Index error","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"I\u0027m afraid the task does not exist. \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" \"Perhaps you might want to see your list again?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" * Mark a specific task as incomplete.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" * @param index Index of task to unmark.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException Indexing error.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" public static void unmark(int index) throws DukeException{","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" if (isValidIndex(index)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" tasks.get(index).setNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" } else { // Index error","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"I\u0027m afraid the task does not exist. \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" \"Perhaps you might want to see your list again?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" * Delete a specific task.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":" * @param index Index of task to delete.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException Indexing error.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":" public void delete(int index) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":" if (isValidIndex(index)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":" } else { // Index error","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"I\u0027m afraid the task does not exist. \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":" \"Perhaps you might want to see your list again?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":" public static ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jinyuan0425"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jinyuan0425"},"content":" public static Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"jinyuan0425"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"jinyuan0425"},"content":" public static int getSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"jinyuan0425"},"content":" return tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"jinyuan0425"},"content":" * Iterates through tasks and return the String representation for each task.","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"jinyuan0425"},"content":" * @return String representation of task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"jinyuan0425"},"content":" public static String list() {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"jinyuan0425"},"content":" String result \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"jinyuan0425"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) { // Generates the String representation of the list","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"jinyuan0425"},"content":" result +\u003d i + 1 + \". \" + tasks.get(i) + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"jinyuan0425"},"content":" if (result !\u003d \"Here are the tasks in your list:\\n\") {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"jinyuan0425"},"content":" return result;","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"jinyuan0425"},"content":" } else { // Empty list","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"jinyuan0425"},"content":" return \"There is nothing on your list currently. \" +","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"jinyuan0425"},"content":" \"Perhaps you might want to add a new task?\";","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"jinyuan0425"},"content":" * Checks if index is out of bounds.","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"jinyuan0425"},"content":" * @param index Index to be checked.","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"jinyuan0425"},"content":" * @return Boolean of whether index is out of bounds.","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"jinyuan0425"},"content":" private static boolean isValidIndex(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"jinyuan0425"},"content":" return index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"jinyuan0425"},"content":" * Filters the list of task based on a given keyword. A new list will be returned for task containing the keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"jinyuan0425"},"content":" * @param keyword The task list will be filtered against this keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"jinyuan0425"},"content":" * @return A list of tasks that contains the keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"jinyuan0425"},"content":" public String filter(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"jinyuan0425"},"content":" String result \u003d \"Here are the tasks in your list containing \" + keyword + \":\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"jinyuan0425"},"content":" int counter \u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"jinyuan0425"},"content":" for (Task task : tasks) { // Generates the String representation of the list","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"jinyuan0425"},"content":" String description \u003d task.getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"jinyuan0425"},"content":" if (description.contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"jinyuan0425"},"content":" counter +\u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"jinyuan0425"},"content":" result +\u003d counter + \". \" + task + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"jinyuan0425"},"content":" if (counter \u003e 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"jinyuan0425"},"content":" return result;","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"jinyuan0425"},"content":" } else { // Empty list","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"jinyuan0425"},"content":" return \"There is nothing on your list currently that matches the keyword \\\"\" + keyword + \"\\\". \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"jinyuan0425"},"content":" \"Perhaps you might want to add a new task or try a different keyword?\";","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":142}},{"path":"src/main/java/duke/components/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.components;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":" * Ui class which handles the inputs from the user and prints corresponding messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" * scanner contains the instance of a Scanner.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Ui class.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" * Prints the greeting message on initialisation of the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" public void greet() { // Greets user on initialisation","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"Good day to you, I\u0027m ButlerBot.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" \"How may I be of service to you?\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" * Prints the goodbye message on termination of the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" public void thank() { // Exits the Bot","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"Goodbye and have a nice day.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" * Scans the next line for user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" public String scan() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" * Prints the error message of error encountered.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" * @param error Message of the error.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" public void showError(String error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" System.err.println(\"Error: \" + error);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" * Prints the newly added task, along with the total number of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" * @param task Details of the newly added task.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" * @param totalTasks Number of task in total.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" public void showTaskAdded(Task task, int totalTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"Understood, I have added the following task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"You now have \" + totalTasks + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":" * Print the task that is completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":" * @param task Details of the task that is completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":" public void showTaskCompleted(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"Congratulations on finishing the task!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"I will now mark it as complete:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":" * Print the task that is unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":" * @param task Details of the task that is unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"jinyuan0425"},"content":" public void showTaskUnmarked(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"No worries. I will now mark the task as incomplete:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"jinyuan0425"},"content":" * Prints the newly deleted task, along with the total number of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"jinyuan0425"},"content":" * @param task Details of the deleted added task.","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"jinyuan0425"},"content":" * @param totalTasks Number of task in total.","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"jinyuan0425"},"content":" public void showTaskDeleted(Task task, int totalTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"Understood, I will remove the following task from your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"You now have \" + totalTasks + \" tasks remaining.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"jinyuan0425"},"content":" * Shows list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"jinyuan0425"},"content":" * @param taskList Contains list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException Empty list.","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"jinyuan0425"},"content":" public void showList(TaskList taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(taskList.list());","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"jinyuan0425"},"content":" * Prints the String representation of a filtered list.","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"jinyuan0425"},"content":" * @param list String representation of a filtered list.","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"jinyuan0425"},"content":" public void showFilteredList(String list) {","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":115}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":" * A subclass of Task. Contains a description, isDone and by.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" * by contains the dateTime by which the Task is to be done.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Deadline class.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" * @param description Name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" * @param by Date and time to complete Task by.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Deadline class.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" * @param description Name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" * @param by Date and time to complete Task by.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" * @param isDone If task is completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" public Deadline(String description, LocalDateTime by, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" * Returns the String representation of the Deadline, along with the","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" * indication of whether it isDone and the by of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" * @return String representation of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" String output \u003d by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy, h:mm a\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" return \"[D]\" + super.toString() + \" (by: \" + output + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" * Returns the String to be written into the .txt file for saving","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" * of the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" * @return String to be written into the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" public String write() {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" String output \u003d by.format(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" return \"D | \" + super.write() + \" | \" + output;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":" public LocalDateTime getBy() {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" return by;","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jinyuan0425":65}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":" * A subclass of Task. Contains a description, isDone, from and to.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" * from contains the dateTime at which the Task starts.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" * to contains the dateTime at which the Task ends.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Event class.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" * @param description Name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" * @param from Start of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" * @param to End of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Event class.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" * @param description Name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" * @param from Start of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" * @param to End of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" * @param isDone If task is completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" * Returns the String representation of the Event, along with the","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" * indication of whether it isDone and the start and end of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" * @return String representation of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" String outputFrom \u003d from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy, h:mm a\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" String outputTo \u003d to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy, h:mm a\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" return \"[E]\" + super.toString() + \" (from: \" + outputFrom + \" to: \" + outputTo + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" * Returns the String to be written into the .txt file for saving","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" * of the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":" * @return String to be written into the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" public String write() {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":" String outputFrom \u003d from.format(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":" String outputTo \u003d to.format(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":" return \"E | \" + super.write() + \" | \" + outputFrom + \" | \" + outputTo;","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":" return from;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":" return to;","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jinyuan0425":79}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":" * Parent class of all the Tasks type.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" * description contains the name of the task","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":" * isDone contains whether the task is done","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Task class.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" * @param description The name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Task class.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" * @param description The name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" * @param isDone If task is completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" * Returns the icon that represents the isDone state.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" * @return \"X\" for done or \" \" for not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" public void setDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" public void setNotDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" * Returns the String representation of the Task, along with the","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" * indication of whether it isDone.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" * @return String representation of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" * Returns the String to be written into the .txt file for saving","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" * of the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":" * @return String to be written into the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":" public String write() {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":" String complete \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":" return complete + \" | \" + this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":" return isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":" return description;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jinyuan0425":81}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":" * A subclass of Task. Contains a description and isDone.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Todo class.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":" * @param description The name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Task class.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" * @param description The name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" * @param isDone If task is completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" * Returns the String representation of the Todo, along with the","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" * indication of whether it isDone.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" * @return String representation of the Todo.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" * Returns the String to be written into the .txt file for saving","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" * of the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" * @return String to be written into the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" public String write() {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" return \"T | \" + super.write();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jinyuan0425":47}},{"path":"src/test/java/duke/components/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.components;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.FilterCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.ModifyCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" public void testParseExitCommand() throws DukeException, IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" Command command \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" assertTrue(command instanceof ExitCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" public void testParseListCommand() throws DukeException, IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" Command command \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" assertTrue(command instanceof ModifyCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"L\", ((ModifyCommand) command).getType());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(-1, ((ModifyCommand) command).getIndex());","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" public void testParseMarkCommand() throws DukeException, IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" Command command \u003d Parser.parse(\"mark 2\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" assertTrue(command instanceof ModifyCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"M\", ((ModifyCommand) command).getType());","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(1, ((ModifyCommand) command).getIndex());","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" public void testParseEventCommand() throws DukeException, IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" Command command \u003d Parser.parse(\"event cook dinner /from 1/9/2023 1430 /to 1/9/2023 1630\");","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"E\", ((AddCommand) command).getType());","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"cook dinner\", ((AddCommand) command).getTask());","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(LocalDateTime.of(2023, 9, 1, 14, 30),","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" ((AddCommand) command).getFrom());","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(LocalDateTime.of(2023, 9, 1, 16, 30),","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" ((AddCommand) command).getTo());","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" public void testParseFilterCommand() throws DukeException, IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" Command command \u003d Parser.parse(\"find clean\");","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" assertTrue(command instanceof FilterCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"F\", ((FilterCommand) command).getType());","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"clean\", ((FilterCommand) command).getKeyword());","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" public void testParseInvalidCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" Parser.parse(\"invalidcommand\");","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":" public void testParseDateTimeWithValidInput() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime dateTime \u003d Parser.parseDateTime(\"1/9/2023 1430\");","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(LocalDateTime.of(2023, 9, 1, 14, 30), dateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":" public void testParseDateTimeWithInvalidInput() {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":" Parser.parseDateTime(\"invalidDateTime\");","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"jinyuan0425":81}},{"path":"src/test/java/duke/components/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.components;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" Task test \u003d new Todo(\"test\");","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" public void testAddTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(test);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(1, tasks.getSize());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[T][ ] test\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" public void testMark() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(test);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" tasks.mark(1);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[T][X] test\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" public void testUnmark() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(test);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" tasks.mark(1);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[T][X] test\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" tasks.unmark(1);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[T][ ] test\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" public void testDelete() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(test);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[T][ ] test\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" tasks.delete(1);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(0, tasks.getSize());","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" public void testFilter() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(test);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(new Todo(\"fake\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"Here are the tasks in your list containing test:\\n1. [T][ ] test\\n\",","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" tasks.filter(\"test\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"There is nothing on your list currently that matches the keyword \\\"keyword\\\". \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" \"Perhaps you might want to add a new task or try a different keyword?\",","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" tasks.filter(\"keyword\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"jinyuan0425":62}},{"path":"src/test/java/duke/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" public void testConstructorAndGetters() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime by \u003d LocalDateTime.of(2023, 9, 1, 14, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", by);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"Submit report\", deadline.getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" assertFalse(deadline.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(by, deadline.getBy());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime by \u003d LocalDateTime.of(2023, 9, 1, 14, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", by);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[D][ ] Submit report (by: Sep 1 2023, 2:00 PM)\", deadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" Deadline completedDeadline \u003d new Deadline(\"Finish project\", by, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[D][X] Finish project (by: Sep 1 2023, 2:00 PM)\", completedDeadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime wrongTime \u003d LocalDateTime.of(2023, 9, 1, 14, 0);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" public void testWrite() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime by \u003d LocalDateTime.of(2023, 9, 1, 14, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", by);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"D | 0 | Submit report | 1/9/2023 1400\", deadline.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" Deadline completedDeadline \u003d new Deadline(\"Finish project\", by, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"D | 1 | Finish project | 1/9/2023 1400\", completedDeadline.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":47}},{"path":"src/test/java/duke/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"public class EventTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" public void testConstructorAndGetters() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime from \u003d LocalDateTime.of(2023, 8, 31, 10, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime to \u003d LocalDateTime.of(2023, 8, 31, 12, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" Event event \u003d new Event(\"Meeting\", from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"Meeting\", event.getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" assertFalse(event.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(from, event.getFrom());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(to, event.getTo());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime from \u003d LocalDateTime.of(2023, 8, 31, 10, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime to \u003d LocalDateTime.of(2023, 8, 31, 12, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" Event event \u003d new Event(\"Meeting\", from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[E][ ] Meeting (from: Aug 31 2023, 10:00 AM to: Aug 31 2023, 12:00 PM)\", event.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" Event completedEvent \u003d new Event(\"Conference\", from, to, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[E][X] Conference (from: Aug 31 2023, 10:00 AM to: Aug 31 2023, 12:00 PM)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" completedEvent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" public void testWrite() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime from \u003d LocalDateTime.of(2023, 8, 31, 10, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime to \u003d LocalDateTime.of(2023, 8, 31, 12, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" Event event \u003d new Event(\"Meeting\", from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"E | 0 | Meeting | 31/8/2023 1000 | 31/8/2023 1200\", event.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" Event completedEvent \u003d new Event(\"Conference\", from, to, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"E | 1 | Conference | 31/8/2023 1000 | 31/8/2023 1200\", completedEvent.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":48}},{"path":"src/test/java/duke/tasks/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" public void testConstructorAndGetters() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" Task task \u003d new Task(\"Buy groceries\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"Buy groceries\", task.getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" assertFalse(task.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" Task completedTask \u003d new Task(\"Finish assignment\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"Finish assignment\", completedTask.getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" assertTrue(completedTask.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" public void testSetDoneAndSetNotDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" Task task \u003d new Task(\"Read a book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" assertFalse(task.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" task.setDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" assertTrue(task.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" task.setNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" assertFalse(task.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" public void testStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" Task undoneTask \u003d new Task(\"Walk the dog\");","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\" \", undoneTask.getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" Task doneTask \u003d new Task(\"Clean the room\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"X\", doneTask.getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" Task task \u003d new Task(\"Finish report\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[ ] Finish report\", task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" Task completedTask \u003d new Task(\"Submit application\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[X] Submit application\", completedTask.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" public void testWrite() {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" Task task \u003d new Task(\"Call a friend\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"0 | Call a friend\", task.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" Task completedTask \u003d new Task(\"Go for a run\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"1 | Go for a run\", completedTask.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":60}},{"path":"src/test/java/duke/tasks/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" public void testConstructorAndGetters() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" Todo todo \u003d new Todo(\"Buy groceries\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"Buy groceries\", todo.getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" assertFalse(todo.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" Todo completedTodo \u003d new Todo(\"Finish assignment\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"Finish assignment\", completedTodo.getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" assertTrue(completedTodo.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" Todo todo \u003d new Todo(\"Read a book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[T][ ] Read a book\", todo.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" Todo completedTodo \u003d new Todo(\"Clean the room\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[T][X] Clean the room\", completedTodo.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" public void testWrite() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" Todo todo \u003d new Todo(\"Call a friend\");","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"T | 0 | Call a friend\", todo.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" Todo completedTodo \u003d new Todo(\"Go for a run\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"T | 1 | Go for a run\", completedTodo.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":39}},{"path":"text-ui-test/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"T | 0 | Automate ButlerBot","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"D | 0 | CS2103T Individual Project | 30/8/2023 1900","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"E | 0 | Birthday Celebration! | 31/8/2023 1900 | 30/8/2023 2100","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"T | 1 | Mark this","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":4}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"todo Automate ButlerBot","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"deadline CS2103T Individual Project /by 30/8/2023 1900","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"event Birthday Celebration! /from 31/8/2023 1900 /to 30/8/2023 2100","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"todo Delete this","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"todo Mark this","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"mark 5","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"delete 4","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jinyuan0425":10}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"plugins {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"checkstyle {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":"repositories {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" mavenCentral()","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":"dependencies {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":"test {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" testLogging {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" showExceptions true","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" showCauses true","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" showStackTraces true","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":"application {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":"shadowJar {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":"run{","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" standardInput \u003d System.in","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":47}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"T | 0 | math test","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"D | 0 | math homework | 20/9/2023 2100","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"jinyuan0425":2}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" * Contains the main method to be executed.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" * storage contains the instance of the storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" * tasks contain the list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" * ui contains the instance of the user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Duke class. Instantiates the","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" * storage with the filePath.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" * @param filePath Contains the path to the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException If filePath is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" public Duke(String filePath) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" this.tasks \u003d new TaskList(storage.loadTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" * Method scans for user input and terminates on command \"bye\".","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" ui.greet();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" String fullCommand \u003d ui.scan();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" } catch (DukeException | IOException | DateTimeParseException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" public static void main(String[] args) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"jinyuan0425":59,"-":3}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" * Class of commands that adds to the existing list.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" * type contains the type of the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" * task contains the name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" * deadline contains the by of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" * from contains the start of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" * to contains the end of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" * isExit contains whether to terminate the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" private String type;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" private String task;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for AddCommand.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" * @param type The type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" * @param task The name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" public AddCommand(String type, String task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for AddCommand.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" * @param type The type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" * @param task The name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" * @param deadline The by of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" public AddCommand(String type, String task, LocalDateTime deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for AddCommand.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" * @param type The type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":" * @param task The name of Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":" * @param from The start of Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":" * @param to The end of Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":" public AddCommand(String type, String task, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":" * Executes the command based on user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"jinyuan0425"},"content":" * @param tasks List of tasks in taskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"jinyuan0425"},"content":" * @param ui Instance of the user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"jinyuan0425"},"content":" * @param storage Instance of the storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException If input is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"jinyuan0425"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"jinyuan0425"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"jinyuan0425"},"content":" Task tasking \u003d new Todo(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(tasking);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"jinyuan0425"},"content":" ui.showTaskAdded(tasking, tasks.getSize());","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"jinyuan0425"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"jinyuan0425"},"content":" Task tasking \u003d new Deadline(task, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(tasking);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"jinyuan0425"},"content":" ui.showTaskAdded(tasking, tasks.getSize());","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"jinyuan0425"},"content":" } else if (type.equals(\"E\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"jinyuan0425"},"content":" Task tasking \u003d new Event(task, from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(tasking);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"jinyuan0425"},"content":" ui.showTaskAdded(tasking, tasks.getSize());","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"jinyuan0425"},"content":" storage.saveTasks(tasks.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"jinyuan0425"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"jinyuan0425"},"content":" return isExit;","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"jinyuan0425"},"content":" public String getType() {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"jinyuan0425"},"content":" return type;","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"jinyuan0425"},"content":" public LocalDateTime getDeadline() {","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"jinyuan0425"},"content":" return deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"jinyuan0425"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"jinyuan0425"},"content":" return from;","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"jinyuan0425"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"jinyuan0425"},"content":" return to;","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"jinyuan0425"},"content":" public String getTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"jinyuan0425"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":127}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" * Parent class of all the Command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":" * Contains the abstract methods execute and isExit.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" * Executes the command from user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" * @param tasks List of tasks in taskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" * @param ui Instance of the user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" * @param storage Instance of the storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException If input is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":22}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" * Class of the command that terminates the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" * isExit contains whether to terminate the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" private boolean isExit;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for ExitCommand","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" public ExitCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" this.isExit \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" };","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" * Executes the thank method before the bot terminates.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" * @param tasks List of tasks in taskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" * @param ui Instance of the user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" * @param storage Instance of the storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" ui.thank();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" return isExit;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":40}},{"path":"src/main/java/duke/command/FilterCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":" * Class of commands that filters the existing list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"public class FilterCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" * type contains the type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" * keyword contains the keyword to filter.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" private String type;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" private String keyword;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the FilterCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" * @param type The type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" * @param keyword The keyword to filter.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" public FilterCommand(String type, String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" * Executes the command based on user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" * @param tasks List of tasks in taskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" * @param ui Instance of the user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" * @param storage Instance of the storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException Invalid input.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" String list \u003d tasks.filter(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" ui.showFilteredList(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" } catch (Exception ex) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"I\u0027m afraid such a task do not exist.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" * Returns whether to terminate the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" * @return Whether to terminate the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" public String getType() {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" return type;","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" public String getKeyword() {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" return keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"jinyuan0425":66}},{"path":"src/main/java/duke/command/ModifyCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":" * Class of commands that modifies the existing list.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":"public class ModifyCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" * type contains the type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" * index contains the index of the list to modify.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" * isExit contains whether to terminate the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" private String type;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for ModifyCommand.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" * @param type The type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" * @param index The index of the list to modify.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" public ModifyCommand(String type, int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" * Executes the command based on user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" * @param tasks List of tasks in taskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" * @param ui Instance of the user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" * @param storage Instance of the storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException Invalid input.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" if (type.equals(\"L\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" ui.showList(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" Task task \u003d tasks.getTask(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" if (type.equals(\"M\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" tasks.mark(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" ui.showTaskCompleted(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" } else if (type.equals(\"U\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" tasks.unmark(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" ui.showTaskUnmarked(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" tasks.delete(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" ui.showTaskDeleted(task, tasks.getSize());","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" storage.saveTasks(tasks.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":" } catch (Exception ex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"I\u0027m afraid such a task do not exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":" return isExit;","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":" public String getType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":" return type;","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":" public int getIndex() {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":" return index;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":79}},{"path":"src/main/java/duke/components/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.components;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":" * Exception class for the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for DukeException.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":" * @param msg The error message to be displayed when an error is encountered.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" super(msg);","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jinyuan0425":15}},{"path":"src/main/java/duke/components/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.components;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.FilterCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.ModifyCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" * Class that parses the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" * Parses user input and returns the corresponding command.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" * @param input User input to be parses.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" * @return Corresponding Command based on the input.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" * @throws IOException","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" public static Command parse(String input) throws DukeException, IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" String[] commandInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" String command \u003d commandInput[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" return new ModifyCommand(\"L\", 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" String type \u003d \"M\";","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" int index \u003d Integer.valueOf(commandInput[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" return new ModifyCommand(type, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" String type \u003d \"U\";","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" int index \u003d Integer.valueOf(commandInput[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" return new ModifyCommand(type, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" String type \u003d \"T\";","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" String[] task \u003d getTask(type, input);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" return new AddCommand(type, task[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" String type \u003d \"D\";","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" String[] task \u003d getTask(type, input);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" return new AddCommand(type, task[0], parseDateTime(task[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" String type \u003d \"E\";","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" String[] task \u003d getTask(type, input);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" return new AddCommand(type, task[0], parseDateTime(task[1]), parseDateTime(task[2]));","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" String type \u003d \"D\";","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" int index \u003d Integer.valueOf(commandInput[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" return new ModifyCommand(type, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" } else if (command.equals(\"find\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" String type \u003d \"F\";","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" String keyword \u003d commandInput[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":" return new FilterCommand(type, keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"I\u0027m afraid I do not quite understand. Could you kindly repeat it?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" } catch (Exception ex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"Could you repeat that last part? I did not quite catch it.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":" * Further parses the input if the command is to add a new task.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":" * @param type Type of Command, Todo, Deadline or Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":" * @param input User input, containing details of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":" * @return String array containing the details of the task, parsed into the correct indexes.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":" public static String[] getTask(String type, String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":" return new String[] {input.substring(5)};","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jinyuan0425"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jinyuan0425"},"content":" String deadline \u003d input.substring(9);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jinyuan0425"},"content":" return deadline.split(\" /by \");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jinyuan0425"},"content":" } else if (type.equals(\"E\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"jinyuan0425"},"content":" String details \u003d input.substring(6);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"jinyuan0425"},"content":" String[] taskStartEnd \u003d details.split(\" /from \");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"jinyuan0425"},"content":" String[] startEnd \u003d taskStartEnd[1].split(\" /to \");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"jinyuan0425"},"content":" return new String[] {taskStartEnd[0], startEnd[0], startEnd[1]};","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"jinyuan0425"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"jinyuan0425"},"content":" return new String[] {};","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"jinyuan0425"},"content":" * Further parses the input if the input contains the String for dateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"jinyuan0425"},"content":" * @param dateTimeStr String of the dateTime to be converted.","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"jinyuan0425"},"content":" * @return LocalDateTime object to be used to construct the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException Invalid format or input for dateTimeStr.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"jinyuan0425"},"content":" public static LocalDateTime parseDateTime(String dateTimeStr) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"jinyuan0425"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"jinyuan0425"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"jinyuan0425"},"content":" return LocalDateTime.parse(dateTimeStr, formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"jinyuan0425"},"content":" } catch (DateTimeParseException ex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"I\u0027m afraid I do not quite understand. Please input the date and time\"","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"jinyuan0425"},"content":" + \"as follows:\\nd/M/yyyy HHmm\");","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":109}},{"path":"src/main/java/duke/components/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.components;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" * Class that manages the storing and loading of the list of task.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" * filePath contains the path to the stored file containing the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" private String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Storage class.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" * @param filePath The path to the stored file containing the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" * Loads the task from an existing save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" * @return The list stored in the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException Invalid path.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" public ArrayList\u003cTask\u003e loadTasks() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" createFileIfNotExist(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(filePath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" String line;","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" Task task \u003d parseTask(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" } catch (IOException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"There must be an error. I can\u0027t seem to locate the file.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" } catch (IOException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"There must be an error. I can\u0027t seem to locate the file.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":" * Create the path to the file and the file itself if they do not exist.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":" * @param filePath Path to be created.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":" * @throws IOException","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":" private void createFileIfNotExist(String filePath) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":" File parentDirectory \u003d file.getParentFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":" if (parentDirectory !\u003d null \u0026\u0026 !parentDirectory.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":" parentDirectory.mkdirs(); // Recursively create directories if they don\u0027t exist","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"jinyuan0425"},"content":" * Updates the save file with the most current state of the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"jinyuan0425"},"content":" * @param tasks List of tasks to be updated into the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"jinyuan0425"},"content":" public void saveTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"jinyuan0425"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(filePath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"jinyuan0425"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"jinyuan0425"},"content":" writer.write(task.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"jinyuan0425"},"content":" writer.newLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"jinyuan0425"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"jinyuan0425"},"content":" * Reads the data stored in the save file and return the corresponding Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"jinyuan0425"},"content":" * @param taskData Data for Task stored in the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"jinyuan0425"},"content":" * @return Task representation of the String stored.","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"jinyuan0425"},"content":" private Task parseTask(String taskData) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"jinyuan0425"},"content":" String[] parts \u003d taskData.split(\" \\\\| \");","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"jinyuan0425"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"jinyuan0425"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"jinyuan0425"},"content":" String taskDescription \u003d parts[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"jinyuan0425"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"jinyuan0425"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"jinyuan0425"},"content":" return new Todo(taskDescription, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"jinyuan0425"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime deadline \u003d Parser.parseDateTime(parts[3]);","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"jinyuan0425"},"content":" return new Deadline(taskDescription, deadline, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"jinyuan0425"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime start \u003d Parser.parseDateTime(parts[3]);","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime end \u003d Parser.parseDateTime(parts[4]);","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"jinyuan0425"},"content":" return new Event(taskDescription, start, end, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"jinyuan0425"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"jinyuan0425"},"content":" return null; // Invalid task type","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":125}},{"path":"src/main/java/duke/components/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.components;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" * Class for the list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" * tasks contains a list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" private static ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" * Stores the task list loaded from the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" * @param tasks List of task loaded from storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" * Add a new task to list.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" * @param task Task to be added to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" * Mark a specific task as completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" * @param index Index of task completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException Indexing error.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" public static void mark(int index) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" if (isValidIndex(index)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" tasks.get(index).setDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" } else { // Index error","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"I\u0027m afraid the task does not exist. \"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" + \"Perhaps you might want to see your list again?\");","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" * Mark a specific task as incomplete.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" * @param index Index of task to unmark.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException Indexing error.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" public static void unmark(int index) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" if (isValidIndex(index)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" tasks.get(index).setNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" } else { // Index error","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"I\u0027m afraid the task does not exist. \"","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" + \"Perhaps you might want to see your list again?\");","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" * Delete a specific task.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":" * @param index Index of task to delete.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException Indexing error.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":" public void delete(int index) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":" if (isValidIndex(index)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":" } else { // Index error","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":" throw new DukeException(\"I\u0027m afraid the task does not exist. \"","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":" + \"Perhaps you might want to see your list again?\");","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":" public static ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jinyuan0425"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jinyuan0425"},"content":" public static Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"jinyuan0425"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"jinyuan0425"},"content":" public static int getSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"jinyuan0425"},"content":" return tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"jinyuan0425"},"content":" * Iterates through tasks and return the String representation for each task.","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"jinyuan0425"},"content":" * @return String representation of task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"jinyuan0425"},"content":" public static String list() {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"jinyuan0425"},"content":" String result \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"jinyuan0425"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) { // Generates the String representation of the list","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"jinyuan0425"},"content":" result +\u003d i + 1 + \". \" + tasks.get(i) + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"jinyuan0425"},"content":" if (result !\u003d \"Here are the tasks in your list:\\n\") {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"jinyuan0425"},"content":" return result;","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"jinyuan0425"},"content":" } else { // Empty list","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"jinyuan0425"},"content":" return \"There is nothing on your list currently. \"","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"jinyuan0425"},"content":" + \"Perhaps you might want to add a new task?\";","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"jinyuan0425"},"content":" * Checks if index is out of bounds.","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"jinyuan0425"},"content":" * @param index Index to be checked.","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"jinyuan0425"},"content":" * @return Boolean of whether index is out of bounds.","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"jinyuan0425"},"content":" private static boolean isValidIndex(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"jinyuan0425"},"content":" return index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"jinyuan0425"},"content":" * Filters the list of task based on a given keyword. A new list will be returned for task containing the keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"jinyuan0425"},"content":" * @param keyword The task list will be filtered against this keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"jinyuan0425"},"content":" * @return A list of tasks that contains the keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"jinyuan0425"},"content":" public String filter(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"jinyuan0425"},"content":" String result \u003d \"Here are the tasks in your list containing \" + keyword + \":\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"jinyuan0425"},"content":" int counter \u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"jinyuan0425"},"content":" for (Task task : tasks) { // Generates the String representation of the list","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"jinyuan0425"},"content":" String description \u003d task.getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"jinyuan0425"},"content":" if (description.contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"jinyuan0425"},"content":" counter +\u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"jinyuan0425"},"content":" result +\u003d counter + \". \" + task + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"jinyuan0425"},"content":" if (counter \u003e 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"jinyuan0425"},"content":" return result;","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"jinyuan0425"},"content":" } else { // Empty list","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"jinyuan0425"},"content":" return \"There is nothing on your list currently that matches the keyword \\\"\" + keyword + \"\\\". \"","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"jinyuan0425"},"content":" + \"Perhaps you might want to add a new task or try a different keyword?\";","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":142}},{"path":"src/main/java/duke/components/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.components;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" * Ui class which handles the inputs from the user and prints corresponding messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" * scanner contains the instance of a Scanner.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Ui class.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" * Prints the greeting message on initialisation of the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" public void greet() { // Greets user on initialisation","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"Good day to you, I\u0027m ButlerBot.\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" + \"How may I be of service to you?\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" * Prints the goodbye message on termination of the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" public void thank() { // Exits the Bot","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"Goodbye and have a nice day.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" * Scans the next line for user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" public String scan() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" * Prints the error message of error encountered.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" * @param error Message of the error.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" public void showError(String error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" System.err.println(\"Error: \" + error);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" * Prints the newly added task, along with the total number of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" * @param task Details of the newly added task.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" * @param totalTasks Number of task in total.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" public void showTaskAdded(Task task, int totalTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"Understood, I have added the following task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"You now have \" + totalTasks + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":" * Print the task that is completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":" * @param task Details of the task that is completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":" public void showTaskCompleted(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"Congratulations on finishing the task!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"I will now mark it as complete:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":" * Print the task that is unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"jinyuan0425"},"content":" * @param task Details of the task that is unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"jinyuan0425"},"content":" public void showTaskUnmarked(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"No worries. I will now mark the task as incomplete:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"jinyuan0425"},"content":" * Prints the newly deleted task, along with the total number of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"jinyuan0425"},"content":" * @param task Details of the deleted added task.","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"jinyuan0425"},"content":" * @param totalTasks Number of task in total.","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"jinyuan0425"},"content":" public void showTaskDeleted(Task task, int totalTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"Understood, I will remove the following task from your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(\"You now have \" + totalTasks + \" tasks remaining.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"jinyuan0425"},"content":" * Shows list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"jinyuan0425"},"content":" * @param taskList Contains list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"jinyuan0425"},"content":" * @throws DukeException Empty list.","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"jinyuan0425"},"content":" public void showList(TaskList taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(taskList.list());","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"jinyuan0425"},"content":" * Prints the String representation of a filtered list.","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"jinyuan0425"},"content":" * @param list String representation of a filtered list.","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"jinyuan0425"},"content":" public void showFilteredList(String list) {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"jinyuan0425"},"content":" System.out.println(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":116}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":" * A subclass of Task. Contains a description, isDone and by.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" * by contains the dateTime by which the Task is to be done.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Deadline class.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" * @param description Name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" * @param by Date and time to complete Task by.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Deadline class.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" * @param description Name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" * @param by Date and time to complete Task by.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" * @param isDone If task is completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" public Deadline(String description, LocalDateTime by, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" * Returns the String representation of the Deadline, along with the","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" * indication of whether it isDone and the by of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" * @return String representation of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" String output \u003d by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy, h:mm a\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" return \"[D]\" + super.toString() + \" (by: \" + output + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" * Returns the String to be written into the .txt file for saving","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" * of the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" * @return String to be written into the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" public String write() {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" String output \u003d by.format(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" return \"D | \" + super.write() + \" | \" + output;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":" public LocalDateTime getBy() {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" return by;","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jinyuan0425":65}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":" * A subclass of Task. Contains a description, isDone, from and to.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" * from contains the dateTime at which the Task starts.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" * to contains the dateTime at which the Task ends.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Event class.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" * @param description Name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" * @param from Start of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" * @param to End of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Event class.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" * @param description Name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" * @param from Start of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" * @param to End of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" * @param isDone If task is completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" * Returns the String representation of the Event, along with the","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" * indication of whether it isDone and the start and end of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" * @return String representation of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" String outputFrom \u003d from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy, h:mm a\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" String outputTo \u003d to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy, h:mm a\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" return \"[E]\" + super.toString() + \" (from: \" + outputFrom + \" to: \" + outputTo + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" * Returns the String to be written into the .txt file for saving","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" * of the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":" * @return String to be written into the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" public String write() {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":" String outputFrom \u003d from.format(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":" String outputTo \u003d to.format(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":" return \"E | \" + super.write() + \" | \" + outputFrom + \" | \" + outputTo;","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":" return from;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":" return to;","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jinyuan0425":79}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":" * Parent class of all the Tasks type.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" * description contains the name of the task","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":" * isDone contains whether the task is done","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Task class.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" * @param description The name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Task class.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" * @param description The name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" * @param isDone If task is completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" * Returns the icon that represents the isDone state.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" * @return \"X\" for done or \" \" for not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" public void setDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" public void setNotDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" * Returns the String representation of the Task, along with the","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" * indication of whether it isDone.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" * @return String representation of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" * Returns the String to be written into the .txt file for saving","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" * of the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":" * @return String to be written into the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":" public String write() {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":" String complete \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":" return complete + \" | \" + this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":" return isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":" return description;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jinyuan0425":81}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":" * A subclass of Task. Contains a description and isDone.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Todo class.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":" * @param description The name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" * Constructor for the Task class.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" * @param description The name of the Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" * @param isDone If task is completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" * Returns the String representation of the Todo, along with the","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" * indication of whether it isDone.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" * @return String representation of the Todo.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" * Returns the String to be written into the .txt file for saving","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" * of the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" * @return String to be written into the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" public String write() {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" return \"T | \" + super.write();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jinyuan0425":47}},{"path":"src/test/java/duke/components/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.components;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.FilterCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":"import duke.command.ModifyCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" public void testParseExitCommand() throws DukeException, IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" Command command \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" assertTrue(command instanceof ExitCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" public void testParseListCommand() throws DukeException, IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" Command command \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" assertTrue(command instanceof ModifyCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"L\", ((ModifyCommand) command).getType());","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(-1, ((ModifyCommand) command).getIndex());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" public void testParseMarkCommand() throws DukeException, IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" Command command \u003d Parser.parse(\"mark 2\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" assertTrue(command instanceof ModifyCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"M\", ((ModifyCommand) command).getType());","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(1, ((ModifyCommand) command).getIndex());","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" public void testParseEventCommand() throws DukeException, IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" Command command \u003d Parser.parse(\"event cook dinner /from 1/9/2023 1430 /to 1/9/2023 1630\");","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" assertTrue(command instanceof AddCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"E\", ((AddCommand) command).getType());","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"cook dinner\", ((AddCommand) command).getTask());","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(LocalDateTime.of(2023, 9, 1, 14, 30), (","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" (AddCommand) command).getFrom());","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(LocalDateTime.of(2023, 9, 1, 16, 30), (","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" (AddCommand) command).getTo());","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" public void testParseFilterCommand() throws DukeException, IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" Command command \u003d Parser.parse(\"find clean\");","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" assertTrue(command instanceof FilterCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"F\", ((FilterCommand) command).getType());","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"clean\", ((FilterCommand) command).getKeyword());","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":" public void testParseInvalidCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"jinyuan0425"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"jinyuan0425"},"content":" Parser.parse(\"invalidcommand\");","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"jinyuan0425"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"jinyuan0425"},"content":" public void testParseDateTimeWithValidInput() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime dateTime \u003d Parser.parseDateTime(\"1/9/2023 1430\");","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(LocalDateTime.of(2023, 9, 1, 14, 30), dateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"jinyuan0425"},"content":" public void testParseDateTimeWithInvalidInput() {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"jinyuan0425"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"jinyuan0425"},"content":" Parser.parseDateTime(\"invalidDateTime\");","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"jinyuan0425"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"jinyuan0425":80}},{"path":"src/test/java/duke/components/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.components;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" private Task test \u003d new Todo(\"test\");","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" private ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" public void testAddTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(test);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(1, tasks.getSize());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[T][ ] test\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" public void testMark() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(test);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" tasks.mark(1);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[T][X] test\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" public void testUnmark() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(test);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" tasks.mark(1);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[T][X] test\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" tasks.unmark(1);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[T][ ] test\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" public void testDelete() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(test);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[T][ ] test\", tasks.getTask(0).toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" tasks.delete(1);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(0, tasks.getSize());","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":" public void testFilter() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(test);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" tasks.addTask(new Todo(\"fake\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"Here are the tasks in your list containing test:\\n1. [T][ ] test\\n\",","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":" tasks.filter(\"test\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"There is nothing on your list currently that matches the keyword \\\"keyword\\\". \"","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" + \"Perhaps you might want to add a new task or try a different keyword?\",","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" tasks.filter(\"keyword\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"jinyuan0425":62}},{"path":"src/test/java/duke/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" public void testConstructorAndGetters() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime by \u003d LocalDateTime.of(2023, 9, 1, 14, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", by);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"Submit report\", deadline.getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" assertFalse(deadline.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(by, deadline.getBy());","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime by \u003d LocalDateTime.of(2023, 9, 1, 14, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", by);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[D][ ] Submit report (by: Sep 1 2023, 2:00 PM)\", deadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" Deadline completedDeadline \u003d new Deadline(\"Finish project\", by, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[D][X] Finish project (by: Sep 1 2023, 2:00 PM)\", completedDeadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime wrongTime \u003d LocalDateTime.of(2023, 9, 1, 14, 0);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" public void testWrite() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime by \u003d LocalDateTime.of(2023, 9, 1, 14, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", by);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"D | 0 | Submit report | 1/9/2023 1400\", deadline.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" Deadline completedDeadline \u003d new Deadline(\"Finish project\", by, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"D | 1 | Finish project | 1/9/2023 1400\", completedDeadline.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":46}},{"path":"src/test/java/duke/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"public class EventTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" public void testConstructorAndGetters() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime from \u003d LocalDateTime.of(2023, 8, 31, 10, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime to \u003d LocalDateTime.of(2023, 8, 31, 12, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" Event event \u003d new Event(\"Meeting\", from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"Meeting\", event.getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" assertFalse(event.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(from, event.getFrom());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(to, event.getTo());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime from \u003d LocalDateTime.of(2023, 8, 31, 10, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime to \u003d LocalDateTime.of(2023, 8, 31, 12, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" Event event \u003d new Event(\"Meeting\", from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[E][ ] Meeting (from: Aug 31 2023, 10:00 AM to: Aug 31 2023, 12:00 PM)\", event.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" Event completedEvent \u003d new Event(\"Conference\", from, to, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[E][X] Conference (from: Aug 31 2023, 10:00 AM to: Aug 31 2023, 12:00 PM)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" completedEvent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" public void testWrite() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime from \u003d LocalDateTime.of(2023, 8, 31, 10, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" LocalDateTime to \u003d LocalDateTime.of(2023, 8, 31, 12, 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":" Event event \u003d new Event(\"Meeting\", from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"E | 0 | Meeting | 31/8/2023 1000 | 31/8/2023 1200\", event.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" Event completedEvent \u003d new Event(\"Conference\", from, to, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"E | 1 | Conference | 31/8/2023 1000 | 31/8/2023 1200\", completedEvent.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":48}},{"path":"src/test/java/duke/tasks/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" public void testConstructorAndGetters() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" Task task \u003d new Task(\"Buy groceries\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"Buy groceries\", task.getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" assertFalse(task.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" Task completedTask \u003d new Task(\"Finish assignment\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"Finish assignment\", completedTask.getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" assertTrue(completedTask.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" public void testSetDoneAndSetNotDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" Task task \u003d new Task(\"Read a book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" assertFalse(task.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" task.setDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" assertTrue(task.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":" task.setNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" assertFalse(task.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":" public void testStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" Task undoneTask \u003d new Task(\"Walk the dog\");","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\" \", undoneTask.getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":" Task doneTask \u003d new Task(\"Clean the room\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"X\", doneTask.getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jinyuan0425"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jinyuan0425"},"content":" Task task \u003d new Task(\"Finish report\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[ ] Finish report\", task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jinyuan0425"},"content":" Task completedTask \u003d new Task(\"Submit application\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[X] Submit application\", completedTask.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jinyuan0425"},"content":" public void testWrite() {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jinyuan0425"},"content":" Task task \u003d new Task(\"Call a friend\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"0 | Call a friend\", task.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jinyuan0425"},"content":" Task completedTask \u003d new Task(\"Go for a run\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"1 | Go for a run\", completedTask.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":60}},{"path":"src/test/java/duke/tasks/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jinyuan0425"},"content":" public void testConstructorAndGetters() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jinyuan0425"},"content":" Todo todo \u003d new Todo(\"Buy groceries\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"Buy groceries\", todo.getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jinyuan0425"},"content":" assertFalse(todo.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jinyuan0425"},"content":" Todo completedTodo \u003d new Todo(\"Finish assignment\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"Finish assignment\", completedTodo.getDescription());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jinyuan0425"},"content":" assertTrue(completedTodo.getIsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jinyuan0425"},"content":" public void testToString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jinyuan0425"},"content":" Todo todo \u003d new Todo(\"Read a book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[T][ ] Read a book\", todo.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jinyuan0425"},"content":" Todo completedTodo \u003d new Todo(\"Clean the room\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"[T][X] Clean the room\", completedTodo.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jinyuan0425"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jinyuan0425"},"content":" public void testWrite() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jinyuan0425"},"content":" Todo todo \u003d new Todo(\"Call a friend\");","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"T | 0 | Call a friend\", todo.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jinyuan0425"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jinyuan0425"},"content":" Todo completedTodo \u003d new Todo(\"Go for a run\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jinyuan0425"},"content":" assertEquals(\"T | 1 | Go for a run\", completedTodo.write());","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jinyuan0425"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jinyuan0425"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":39}},{"path":"text-ui-test/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"T | 0 | Automate ButlerBot","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"D | 0 | CS2103T Individual Project | 30/8/2023 1900","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"E | 0 | Birthday Celebration! | 31/8/2023 1900 | 30/8/2023 2100","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"T | 1 | Mark this","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jinyuan0425":4}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jinyuan0425"},"content":"todo Automate ButlerBot","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"jinyuan0425"},"content":"deadline CS2103T Individual Project /by 30/8/2023 1900","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jinyuan0425"},"content":"event Birthday Celebration! /from 31/8/2023 1900 /to 30/8/2023 2100","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jinyuan0425"},"content":"todo Delete this","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"jinyuan0425"},"content":"todo Mark this","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"jinyuan0425"},"content":"mark 5","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jinyuan0425"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"jinyuan0425"},"content":"delete 4","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"jinyuan0425"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"jinyuan0425"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jinyuan0425":10}}] diff --git a/jinyuan0425_ip_master/commits.json b/jinyuan0425_ip_master/commits.json index d53f430d..847192a3 100644 --- a/jinyuan0425_ip_master/commits.json +++ b/jinyuan0425_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"jinyuan0425":[{"date":"2023-08-21","commitResults":[{"hash":"ca7d2661ade131782376c2afddbd36e9935fefcd","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":6}}},{"hash":"2fb94bce6dd0f4c7261634c2998ef582fba6f33e","isMergeCommit":false,"messageTitle":"Completed Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"ac93da3d1067916ef5f168add4017718c66dc698","isMergeCommit":false,"messageTitle":"Completed Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":3}}},{"hash":"1d444f1b54e6db183d0ec075dc20f2c0e608f5e2","isMergeCommit":false,"messageTitle":"Completed Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":3}}},{"hash":"4305f3de45c13763c58ab81fc3d03353c37d20fa","isMergeCommit":false,"messageTitle":"Completed Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":3}}}]},{"date":"2023-08-22","commitResults":[{"hash":"086da3cd19cc3e400868709234bb1cbf14bebf7e","isMergeCommit":false,"messageTitle":"Completed A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":2,"deletions":2}}},{"hash":"709c366e8d300763a4e931e66cd9598d7cad3b72","isMergeCommit":false,"messageTitle":"Completed Level-5","messageBody":"Implemented OOP\n","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":190,"deletions":125}}},{"hash":"0142c95cc672e55aa6dec35fcbbaf1a2d4ba3fed","isMergeCommit":false,"messageTitle":"Completed Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":1},"java":{"insertions":37,"deletions":21}}}]},{"date":"2023-08-23","commitResults":[{"hash":"3a7bc56dda54cb8e3e3c59c8ab3058854966155f","isMergeCommit":false,"messageTitle":"Completed A-Enums","messageBody":"","tags":["A-Enum"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":59}}}]},{"date":"2023-08-29","commitResults":[{"hash":"3d5876226ec8dba4b0ccec4e4dd0b6fb18175677","isMergeCommit":false,"messageTitle":"Update code to allow for save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":109,"deletions":22}}}]},{"date":"2023-08-30","commitResults":[{"hash":"cd368decde3e798f121b142f4f9667e8c2a7ecd5","isMergeCommit":false,"messageTitle":"Update code to allow for save","messageBody":"Bot refreshers with each load.\n\nUsers will not be able to use the bot effectively as data has to be\nre-entered every load.\n\nLet\u0027s save the user\u0027s input when assigning tasks to the bot.\n\nBot will now be able to reference the saved inputs and load the user\u0027s\nsaved data.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":109,"deletions":22}}},{"hash":"9e7dd57116d422e3bc29cfd4652d8c18e34ae618","isMergeCommit":false,"messageTitle":"Update bot to understand dates","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":58,"deletions":27}}},{"hash":"79ba44e3b8f415be52e4b930f6c76541c7c1e2d6","isMergeCommit":false,"messageTitle":"Update bot to understand date and time","messageBody":"There is no fixed format to the input for by, from and to. Bot is able\nto accept any input and store them as a valid date and time.\n\nLet\u0027s introduce LocalDateTime to the bot to enforce a specific input\nformat for the date and time input.\n\nThis minimises the random behaviour of the bot as any incorrect inputs\nwill be rejected by the bot.\n","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":4},"java":{"insertions":31,"deletions":26}}},{"hash":"a97d01947696a83998998ad70e8986dc023dcd8c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"0f8c7761cdf26658b0572952272e812af054213e","isMergeCommit":false,"messageTitle":"Update code to be more OOP","messageBody":"The code works as intended.\n\nCode can be further extracted to improve OOP.\n\nExtracting the common behavior into a super class allows us to use\npolymorphism when dealing with command attributes.\n\nLet\u0027s extract and group similar commands in to various classes that\nextends the parent class Command.\n\nThis improves readability and allows for inheritance as well.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":453,"deletions":278}}},{"hash":"2955f5ac84bfec45615e61d6680d6c33b9cd7d32","isMergeCommit":false,"messageTitle":"Update code to implement packages","messageBody":"Code was organised due to OOP, but can be further organised into\npackages.\n\nLet\u0027s group the classes into various functionalities and sort them\ninto the corresponding packages.\n\nThis avoids name conflict and helps with writing a better maintainable\ncode.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":33}}},{"hash":"629894cb6b640efeaf408793123147ff60631745","isMergeCommit":false,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":42,"deletions":0}}},{"hash":"a00bceb52db619be7cc016e4833fc97163434fd6","isMergeCommit":false,"messageTitle":"Update code to include testing","messageBody":"Code is working for manual inputs.\n\nLet\u0027s use JUnit to automate the test cases.\n\nThis allows for a quicker check of the code when making small tweaks\nand not have the need to manually input the same inputs each time.\n","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":204,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"56b5371ae271d81c91edec0f84bab02d1e281ba9","isMergeCommit":false,"messageTitle":"Package the app as an executable file","messageBody":"Bot is now a working prototype.\n\nLet\u0027s package it into a JAR file to be executed.\n\nRemote access of the app is now available with this executable file.\n","tags":["v1.0","A-Jar"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":78,"deletions":10}}}]},{"date":"2023-09-01","commitResults":[{"hash":"893bdd108a64e84e136061da0071872e958f01ee","isMergeCommit":false,"messageTitle":"Add Javadoc comments to methods","messageBody":"Most methods, less the getters and setters, classes and fields now have\nJavadocs comments to detail the function of said methods, class and\nfields.\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":422,"deletions":12}}},{"hash":"eee3eef8211965881bcdfb3a17c8527c3ba873a3","isMergeCommit":false,"messageTitle":"Update code to follow coding standard","messageBody":"Let\u0027s update the code to follow the java coding standard.\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":44}}},{"hash":"27662904456693785516bff89ac628adc199117a","isMergeCommit":false,"messageTitle":"Update code to allow for find command","messageBody":"Let\u0027s implement a find command to filter through the task list and\nreturn a new list of task containg the keyword.\n\nSeveral test cases are added for more extensive testing.\n","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":217,"deletions":11}}},{"hash":"3e210c5ecc1c26e70c26421f6b9ebe4556f3cd49","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e1236ff7b0b7ba4a9202bf5157383bc1110194c4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"jinyuan0425":{"java":1514,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":42,"txt":16}},"authorContributionVariance":{"jinyuan0425":139018.98},"authorDisplayNameMap":{"jinyuan0425":"CS2103T-W17-4 KWOH..YUAN"}} +{"authorDailyContributionsMap":{"jinyuan0425":[{"date":"2023-08-21","commitResults":[{"hash":"ca7d2661ade131782376c2afddbd36e9935fefcd","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":6}}},{"hash":"2fb94bce6dd0f4c7261634c2998ef582fba6f33e","isMergeCommit":false,"messageTitle":"Completed Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"ac93da3d1067916ef5f168add4017718c66dc698","isMergeCommit":false,"messageTitle":"Completed Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":3}}},{"hash":"1d444f1b54e6db183d0ec075dc20f2c0e608f5e2","isMergeCommit":false,"messageTitle":"Completed Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":3}}},{"hash":"4305f3de45c13763c58ab81fc3d03353c37d20fa","isMergeCommit":false,"messageTitle":"Completed Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":3}}}]},{"date":"2023-08-22","commitResults":[{"hash":"086da3cd19cc3e400868709234bb1cbf14bebf7e","isMergeCommit":false,"messageTitle":"Completed A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":2,"deletions":2}}},{"hash":"709c366e8d300763a4e931e66cd9598d7cad3b72","isMergeCommit":false,"messageTitle":"Completed Level-5","messageBody":"Implemented OOP\n","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":190,"deletions":125}}},{"hash":"0142c95cc672e55aa6dec35fcbbaf1a2d4ba3fed","isMergeCommit":false,"messageTitle":"Completed Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":1},"java":{"insertions":37,"deletions":21}}}]},{"date":"2023-08-23","commitResults":[{"hash":"3a7bc56dda54cb8e3e3c59c8ab3058854966155f","isMergeCommit":false,"messageTitle":"Completed A-Enums","messageBody":"","tags":["A-Enum"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":59}}}]},{"date":"2023-08-29","commitResults":[{"hash":"3d5876226ec8dba4b0ccec4e4dd0b6fb18175677","isMergeCommit":false,"messageTitle":"Update code to allow for save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":109,"deletions":22}}}]},{"date":"2023-08-30","commitResults":[{"hash":"cd368decde3e798f121b142f4f9667e8c2a7ecd5","isMergeCommit":false,"messageTitle":"Update code to allow for save","messageBody":"Bot refreshers with each load.\n\nUsers will not be able to use the bot effectively as data has to be\nre-entered every load.\n\nLet\u0027s save the user\u0027s input when assigning tasks to the bot.\n\nBot will now be able to reference the saved inputs and load the user\u0027s\nsaved data.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":109,"deletions":22}}},{"hash":"9e7dd57116d422e3bc29cfd4652d8c18e34ae618","isMergeCommit":false,"messageTitle":"Update bot to understand dates","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":58,"deletions":27}}},{"hash":"79ba44e3b8f415be52e4b930f6c76541c7c1e2d6","isMergeCommit":false,"messageTitle":"Update bot to understand date and time","messageBody":"There is no fixed format to the input for by, from and to. Bot is able\nto accept any input and store them as a valid date and time.\n\nLet\u0027s introduce LocalDateTime to the bot to enforce a specific input\nformat for the date and time input.\n\nThis minimises the random behaviour of the bot as any incorrect inputs\nwill be rejected by the bot.\n","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":4},"java":{"insertions":31,"deletions":26}}},{"hash":"a97d01947696a83998998ad70e8986dc023dcd8c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"0f8c7761cdf26658b0572952272e812af054213e","isMergeCommit":false,"messageTitle":"Update code to be more OOP","messageBody":"The code works as intended.\n\nCode can be further extracted to improve OOP.\n\nExtracting the common behavior into a super class allows us to use\npolymorphism when dealing with command attributes.\n\nLet\u0027s extract and group similar commands in to various classes that\nextends the parent class Command.\n\nThis improves readability and allows for inheritance as well.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":453,"deletions":278}}},{"hash":"2955f5ac84bfec45615e61d6680d6c33b9cd7d32","isMergeCommit":false,"messageTitle":"Update code to implement packages","messageBody":"Code was organised due to OOP, but can be further organised into\npackages.\n\nLet\u0027s group the classes into various functionalities and sort them\ninto the corresponding packages.\n\nThis avoids name conflict and helps with writing a better maintainable\ncode.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":33}}},{"hash":"629894cb6b640efeaf408793123147ff60631745","isMergeCommit":false,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":42,"deletions":0}}},{"hash":"a00bceb52db619be7cc016e4833fc97163434fd6","isMergeCommit":false,"messageTitle":"Update code to include testing","messageBody":"Code is working for manual inputs.\n\nLet\u0027s use JUnit to automate the test cases.\n\nThis allows for a quicker check of the code when making small tweaks\nand not have the need to manually input the same inputs each time.\n","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":204,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"56b5371ae271d81c91edec0f84bab02d1e281ba9","isMergeCommit":false,"messageTitle":"Package the app as an executable file","messageBody":"Bot is now a working prototype.\n\nLet\u0027s package it into a JAR file to be executed.\n\nRemote access of the app is now available with this executable file.\n","tags":["v1.0","A-Jar"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":78,"deletions":10}}}]},{"date":"2023-09-01","commitResults":[{"hash":"893bdd108a64e84e136061da0071872e958f01ee","isMergeCommit":false,"messageTitle":"Add Javadoc comments to methods","messageBody":"Most methods, less the getters and setters, classes and fields now have\nJavadocs comments to detail the function of said methods, class and\nfields.\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":422,"deletions":12}}},{"hash":"eee3eef8211965881bcdfb3a17c8527c3ba873a3","isMergeCommit":false,"messageTitle":"Update code to follow coding standard","messageBody":"Let\u0027s update the code to follow the java coding standard.\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":44}}},{"hash":"27662904456693785516bff89ac628adc199117a","isMergeCommit":false,"messageTitle":"Update code to allow for find command","messageBody":"Let\u0027s implement a find command to filter through the task list and\nreturn a new list of task containg the keyword.\n\nSeveral test cases are added for more extensive testing.\n","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":217,"deletions":11}}},{"hash":"3e210c5ecc1c26e70c26421f6b9ebe4556f3cd49","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e1236ff7b0b7ba4a9202bf5157383bc1110194c4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"f15dfd7a0fb5447ed22ee8cb7fed9446ade72f37","isMergeCommit":false,"messageTitle":"Update code to use checkstyle","messageBody":"Code will now use checkStyle to detect coding style violations.\n","tags":["A-Checkstyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":74,"deletions":81}}}]}]},"authorFileTypeContributionMap":{"jinyuan0425":{"java":1507,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":47,"txt":16}},"authorContributionVariance":{"jinyuan0425":110960.65},"authorDisplayNameMap":{"jinyuan0425":"CS2103T-W17-4 KWOH..YUAN"}} diff --git a/jrchoo_ip_master/authorship.json b/jrchoo_ip_master/authorship.json index a1f89829..7459e694 100644 --- a/jrchoo_ip_master/authorship.json +++ b/jrchoo_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":"jrchoo"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"jrchoo":1,"-":41}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" this.by \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Date given is in an invalid format.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(DateTimeFormatter.ofPattern(\"d MMM yyyy h:mm a\")) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" return \"D\" + super.getDescription() + \" | \" + this.by.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jrchoo":27}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" private Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" private Parser parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" this.taskList \u003d new TaskList(storage.loadTasks(), ui);","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" this.parser \u003d new Parser(ui, taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" public void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" ui.welcomeMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" String command \u003d ui.getUserInput();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" while (parser.parseCommand(command)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" command \u003d ui.getUserInput();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" ui.exit();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" new Duke(\"./data/gideon.txt\").run();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"jrchoo":26,"-":4}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":" DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jrchoo":6}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" return \"[E]\" + super.toString() + \" (from:\" + from + \" to:\" + to + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" return \"E\" + super.getDescription() + \" |\" + this.from + \"-\" + this.to;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jrchoo":21}},{"path":"src/main/java/InvalidDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"public class InvalidDescriptionException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":" InvalidDescriptionException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":" super(\"☹ OOPS!!! The description of a \" + message + \" cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jrchoo":6}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":" private enum Commands {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":" invalid, todo, deadline, event, mark, unmark, list, delete, bye;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" public Parser(Ui ui, TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" public boolean parseCommand(String command) {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" Commands cmd \u003d Commands.invalid;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" for (Commands c : Commands.values()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" if (command.startsWith(c.toString())) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" cmd \u003d c;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" if (cmd.equals(Commands.bye)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" ui.byeMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.list)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" ui.showTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.mark)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" int id \u003d Integer.parseInt(command.split(\" \")[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" taskList.markTaskAsDone(id - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" ui.markedMessage(taskList.getTask(id - 1));","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"To mark a task you need to include the index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.unmark)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" int id \u003d Integer.parseInt(command.split(\" \")[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" taskList.markTaskAsUnDone(id - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" ui.unmarkedMessage(taskList.getTask(id - 1));","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"To unmark a task you need to include the index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.todo)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" String description \u003d command.substring(5);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" Todo todo \u003d new Todo(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" ui.addTaskMessage(todo, taskList.numOfTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" //writer.write(todo.getDescription().concat(\"\\n\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.deadline)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":" int index \u003d command.indexOf(\"/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":" String description \u003d command.substring(9, index - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":" String by \u003d command.substring(index + 3);","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"jrchoo"},"content":" Deadline deadline \u003d new Deadline(description, by.trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"jrchoo"},"content":" ui.addTaskMessage(deadline, taskList.numOfTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"jrchoo"},"content":" //writer.write(deadline.getDescription().concat(\"\\n\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.event)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"jrchoo"},"content":" int indexOfFrom \u003d command.indexOf(\"/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"jrchoo"},"content":" String description \u003d command.substring( 6, indexOfFrom - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"jrchoo"},"content":" String duration \u003d command.substring(indexOfFrom + 4);","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"jrchoo"},"content":" int indexOfTo \u003d duration.indexOf(\"/\");","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"jrchoo"},"content":" String from \u003d duration.substring(1, indexOfTo - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"jrchoo"},"content":" String to \u003d duration.substring(indexOfTo + 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"jrchoo"},"content":" Event event \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"jrchoo"},"content":" ui.addTaskMessage(event, taskList.numOfTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"jrchoo"},"content":" //writer.write(event.getDescription().concat(\"\\n\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.delete)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"jrchoo"},"content":" int id \u003d Integer.parseInt(command.split(\" \")[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"jrchoo"},"content":" taskList.deleteTask(id - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"To delete a task you have to include the index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"jrchoo"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"jrchoo"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jrchoo":99}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"import java.io.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" private File file;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" private String filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" public List\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" String currentLine;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" while ((currentLine \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" System.out.println(currentLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" String[] taskInfo \u003d currentLine.split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" String type \u003d taskInfo[0].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" String status \u003d taskInfo[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" String description \u003d taskInfo[2].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" if (\"T\".equals(type)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" Todo todo \u003d new Todo(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" if (\"X\".equals(status)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" tasks.add(todo);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" } else if (\"D\".equals(type)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" String by \u003d taskInfo[3];","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" Deadline deadline \u003d new Deadline(description, by.trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" if (\"X\".equals(status)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" } else if (\"E\".equals(type)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" String[] duration \u003d taskInfo[3].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" String from \u003d duration[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" String to \u003d duration[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" Event event \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":" if (\"X\".equals(status)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" tasks.add(event);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"There are no tasks.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" reader.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"An error has occurred.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":" public void saveTasks(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":" StringBuffer inputString \u003d new StringBuffer();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jrchoo"},"content":" for (Task task: taskList.getTasks()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"jrchoo"},"content":" String line \u003d task.getDescription();","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"jrchoo"},"content":" inputString.append(line);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"jrchoo"},"content":" inputString.append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"jrchoo"},"content":" FileOutputStream fileOut \u003d new FileOutputStream(file);","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"jrchoo"},"content":" fileOut.write(inputString.toString().getBytes());","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"jrchoo"},"content":" fileOut.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"jrchoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"An error has occurred.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jrchoo":75}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" * Returns either a blank or \"X\" depending on the isDone of a Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" * @return A string \"X\" or an empty string \" \".","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" * Sets the boolean isDone of a Task to true.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" * Sets the boolean isDone of a Task to false.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" public void markAsUnDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" * Returns a string representation of the task with its status and description.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" * @return A string representing the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" * Returns a string representation of the task to be saved into a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" * @return A string representing the task in a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" return \" |\" + this.getStatusIcon() + \"| \" + this.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jrchoo":53}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" public TaskList(List\u003cTask\u003e tasks, Ui ui) {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" ui.deleteTaskMessage(task, tasks.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" public void markTaskAsUnDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" this.tasks.get(index).markAsUnDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" return this.tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" public int numOfTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" StringBuffer outputString \u003d new StringBuffer();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" for(int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" outputString.append(i + 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" outputString.append(\". \");","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" outputString.append(tasks.get(i).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" outputString.append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" return outputString.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jrchoo":55}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" return \"T\" + super.getDescription();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jrchoo":17}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" public static void showLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"-------------------------------\");","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" public void exit() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" this.scanner.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" public String getUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" public void welcomeMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Hello! I\u0027m Gideon\");","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" public void byeMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" public void createFileMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"File created: Gideon\");","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" public void openFileMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Opening saved file.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" public void emptyTaskListMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"There are no tasks.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":" public void showTasks(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" System.out.println(taskList.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" public void markedMessage(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":" public void unmarkedMessage(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"jrchoo"},"content":" public void addTaskMessage(Task task, int numOfTasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"jrchoo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Now you have \" + numOfTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"jrchoo"},"content":" public void deleteTaskMessage(Task task, int numOfTasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"jrchoo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Now you have \" + numOfTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"jrchoo"},"content":" public void invalidTaskMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jrchoo":86}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" super(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" this.by \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Date given is in an invalid format.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(DateTimeFormatter.ofPattern(\"d MMM yyyy h:mm a\")) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" return \"D\" + super.getDescription() + \" | \" + this.by.format(formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":28}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"public class Duke {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" private Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" private Parser parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" this.taskList \u003d new TaskList(storage.loadTasks(), ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" this.parser \u003d new Parser(ui, taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" ui.welcomeMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" String command \u003d ui.getUserInput();","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" while (parser.parseCommand(command)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" command \u003d ui.getUserInput();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" ui.exit();","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" new Duke(\"./data/gideon.txt\").run();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":30}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":" protected String from;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" protected String to;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" super(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" return \"[E]\" + super.toString() + \" (from:\" + from + \" to:\" + to + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" return \"E\" + super.getDescription() + \" |\" + this.from + \"-\" + this.to;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":22}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"public class Parser {","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":" private enum Commands {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" invalid, todo, deadline, event, mark, unmark, list, delete, bye;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" public Parser(Ui ui, TaskList taskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" public boolean parseCommand(String command) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" Commands cmd \u003d Commands.invalid;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" for (Commands c : Commands.values()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" if (command.startsWith(c.toString())) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" cmd \u003d c;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" if (cmd.equals(Commands.bye)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" ui.byeMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.list)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" ui.showTasks(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.mark)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" int id \u003d Integer.parseInt(command.split(\" \")[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" taskList.markTaskAsDone(id - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" ui.markedMessage(taskList.getTask(id - 1));","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"To mark a task you need to include the index\");","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.unmark)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" int id \u003d Integer.parseInt(command.split(\" \")[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" taskList.markTaskAsUnDone(id - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" ui.unmarkedMessage(taskList.getTask(id - 1));","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"To unmark a task you need to include the index\");","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.todo)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" String description \u003d command.substring(5);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" Todo todo \u003d new Todo(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" ui.addTaskMessage(todo, taskList.numOfTasks());","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" //writer.write(todo.getDescription().concat(\"\\n\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.deadline)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":" int index \u003d command.indexOf(\"/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":" String description \u003d command.substring(9, index - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"jrchoo"},"content":" String by \u003d command.substring(index + 3);","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"jrchoo"},"content":" Deadline deadline \u003d new Deadline(description, by.trim());","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"jrchoo"},"content":" ui.addTaskMessage(deadline, taskList.numOfTasks());","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"jrchoo"},"content":" //writer.write(deadline.getDescription().concat(\"\\n\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.event)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"jrchoo"},"content":" int indexOfFrom \u003d command.indexOf(\"/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"jrchoo"},"content":" String description \u003d command.substring( 6, indexOfFrom - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"jrchoo"},"content":" String duration \u003d command.substring(indexOfFrom + 4);","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"jrchoo"},"content":" int indexOfTo \u003d duration.indexOf(\"/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"jrchoo"},"content":" String from \u003d duration.substring(1, indexOfTo - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"jrchoo"},"content":" String to \u003d duration.substring(indexOfTo + 3);","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"jrchoo"},"content":" Event event \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"jrchoo"},"content":" ui.addTaskMessage(event, taskList.numOfTasks());","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"jrchoo"},"content":" //writer.write(event.getDescription().concat(\"\\n\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.delete)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"jrchoo"},"content":" int id \u003d Integer.parseInt(command.split(\" \")[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"jrchoo"},"content":" taskList.deleteTask(id - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"To delete a task you have to include the index\");","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"jrchoo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"jrchoo"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":100}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"import java.io.*;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":"public class Storage {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" private File file;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" private String filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" public List\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" String currentLine;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" while ((currentLine \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" System.out.println(currentLine);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" String[] taskInfo \u003d currentLine.split(\"\\\\|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" String type \u003d taskInfo[0].trim();","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" String status \u003d taskInfo[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" String description \u003d taskInfo[2].trim();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" if (\"T\".equals(type)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" Todo todo \u003d new Todo(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" if (\"X\".equals(status)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" tasks.add(todo);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" } else if (\"D\".equals(type)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" String by \u003d taskInfo[3];","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" Deadline deadline \u003d new Deadline(description, by.trim());","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" if (\"X\".equals(status)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" } else if (\"E\".equals(type)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" String[] duration \u003d taskInfo[3].split(\"-\");","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" String from \u003d duration[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" String to \u003d duration[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":" Event event \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" if (\"X\".equals(status)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" tasks.add(event);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"There are no tasks.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" reader.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"An error has occurred.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":" return tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":" public void saveTasks(TaskList taskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"jrchoo"},"content":" StringBuffer inputString \u003d new StringBuffer();","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"jrchoo"},"content":" for (Task task: taskList.getTasks()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jrchoo"},"content":" String line \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"jrchoo"},"content":" inputString.append(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"jrchoo"},"content":" inputString.append(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"jrchoo"},"content":" FileOutputStream fileOut \u003d new FileOutputStream(file);","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"jrchoo"},"content":" fileOut.write(inputString.toString().getBytes());","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"jrchoo"},"content":" fileOut.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"jrchoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"An error has occurred.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":76}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"public class Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":" protected String description;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" public Task(String description) {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" * Returns either a blank or \"X\" depending on the isDone of a Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" * @return A string \"X\" or an empty string \" \".","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" * Sets the boolean isDone of a Task to true.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" * Sets the boolean isDone of a Task to false.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" public void markAsUnDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" * Returns a string representation of the task with its status and description.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" * @return A string representing the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" * Returns a string representation of the task to be saved into a file.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" * @return A string representing the task in a file.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" return \" |\" + this.getStatusIcon() + \"| \" + this.description;","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":54}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"public class TaskList {","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" public TaskList(List\u003cTask\u003e tasks, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" public TaskList(Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" ui.deleteTaskMessage(task, tasks.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" public void markTaskAsUnDone(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" this.tasks.get(index).markAsUnDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" return this.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" public int numOfTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" StringBuffer outputString \u003d new StringBuffer();","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" for(int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" outputString.append(i + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" outputString.append(\". \");","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" outputString.append(tasks.get(i).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":" outputString.append(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":" return outputString.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":61}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" super(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" return \"T\" + super.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":18}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"public class Ui {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" public Ui() {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" public static void showLine() {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"-------------------------------\");","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" public void exit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" this.scanner.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" public String getUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" public void welcomeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Hello! I\u0027m Gideon\");","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" public void byeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" public void createFileMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"File created: Gideon\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" public void openFileMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Opening saved file.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" public void emptyTaskListMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"There are no tasks.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" public void showTasks(TaskList taskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" System.out.println(taskList.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" public void markedMessage(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":" public void unmarkedMessage(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"jrchoo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"jrchoo"},"content":" public void addTaskMessage(Task task, int numOfTasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"jrchoo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Now you have \" + numOfTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"jrchoo"},"content":" public void deleteTaskMessage(Task task, int numOfTasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"jrchoo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Now you have \" + numOfTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"jrchoo"},"content":" public void invalidTaskMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":87}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" public void taskList_testAddTask() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" TaskList taskList \u003d new TaskList(ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" Todo todo \u003d new Todo(\"todo\");","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" assertTrue(taskList.getTasks().contains(todo));","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" Deadline deadline \u003d new Deadline(\"deadline\", \"2023-09-02 16:00\");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" assertTrue(taskList.getTasks().contains(deadline));","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" Event event \u003d new Event(\"event\", \"Sep 4th 5pm\", \"7pm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" assertTrue(taskList.getTasks().contains(event));","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" public void taskList_testDeleteTask() {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" TaskList taskList \u003d new TaskList(ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" Todo todo \u003d new Todo(\"todo\");","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" assertTrue(taskList.getTasks().contains(todo));","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" assertFalse(taskList.getTasks().contains(todo));","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" public void taskList_testMarkTaskAsDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" TaskList taskList \u003d new TaskList(ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" Todo todo \u003d new Todo(\"todo\");","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" assertTrue(taskList.getTasks().contains(todo));","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" taskList.markTaskAsDone(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" assertTrue(taskList.getTasks().get(0).isDone);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" public void taskList_testMarkTaskAsUnDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":" TaskList taskList \u003d new TaskList(ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":" Todo todo \u003d new Todo(\"todo\");","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":" assertTrue(taskList.getTasks().contains(todo));","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"jrchoo"},"content":" taskList.markTaskAsDone(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"jrchoo"},"content":" assertTrue(taskList.getTasks().get(0).isDone);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"jrchoo"},"content":" taskList.markTaskAsUnDone(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"jrchoo"},"content":" assertFalse(taskList.getTasks().get(0).isDone);","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":68}},{"path":"src/test/java/duke/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" public void todo_testToString(){","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" assertEquals(\"[T][ ] todo\", new Todo(\"todo\").toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" public void todo_testGetDescription(){","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" assertEquals(\"T | | todo\", new Todo(\"todo\").getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":16}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jrchoo":11}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"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":"jrchoo"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"jrchoo":1,"-":41}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" * Represents a task with a deadline and provides methods to manage it.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" * Initializes a new Deadline task with the given description and deadline date.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" * @param by The deadline date in the format \"yyyy-MM-dd HH:mm\".","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" this.by \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Date given is in an invalid format.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" * Returns a formatted string representation of the Deadline task, including its type, description, and deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" * @return A formatted string representing the Deadline task.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(DateTimeFormatter.ofPattern(\"d MMM yyyy h:mm a\")) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" * Returns a string representation of the Deadline task to be saved into a file.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" * @return A string representing the Deadline task in a file format.","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" return \"D\" + super.getDescription() + \" | \" + this.by.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jrchoo":47}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":" * Represents the main class of the Duke application, which manages user interactions and task management.","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" private Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" private Parser parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" * Initializes a Duke instance with the specified file path for task storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" * @param filePath The file path for task storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" this.taskList \u003d new TaskList(storage.loadTasks(), ui);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" this.parser \u003d new Parser(ui, taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" * Starts the Duke application, displaying a welcome message, processing user commands, and saving tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" public void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" ui.welcomeMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" String command \u003d ui.getUserInput();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" while (parser.parseCommand(command)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" command \u003d ui.getUserInput();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" ui.exit();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" * The entry point for the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" * @param args Command-line arguments (not used in this application).","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" new Duke(\"./data/gideon.txt\").run();","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"jrchoo":40,"-":4}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":" DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jrchoo":6}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":" * Represents an event task with a description and a time duration.","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" * Initializes a new Event task with the given description and time duration.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" * Returns a formatted string representation of the Event task, including its type, description, and time duration.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" * @return A formatted string representing the Event task.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" return \"[E]\" + super.toString() + \" (from:\" + from + \" to:\" + to + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" * Returns a string representation of the Event task to be saved into a file.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" * @return A string representing the Event task in a file format.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" return \"E\" + super.getDescription() + \" |\" + this.from + \"-\" + this.to;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jrchoo":41}},{"path":"src/main/java/InvalidDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"public class InvalidDescriptionException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":" InvalidDescriptionException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":" super(\"☹ OOPS!!! The description of a \" + message + \" cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jrchoo":6}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":" * Parses user commands and performs actions based on the parsed command.","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" private enum Commands {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" invalid, todo, deadline, event, mark, unmark, list, delete, bye;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" * Initializes a parser with a user interface and a task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" * @param taskList The task list for managing tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" public Parser(Ui ui, TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" * Parses a user command and performs the corresponding action.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" * @param command The user\u0027s input command.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" * @return True if the command was successfully parsed and executed, false otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" public boolean parseCommand(String command) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" Commands cmd \u003d Commands.invalid;","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" for (Commands c : Commands.values()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" if (command.startsWith(c.toString())) {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" cmd \u003d c;","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" if (cmd.equals(Commands.bye)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" ui.byeMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.list)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" ui.showTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.mark)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" int id \u003d Integer.parseInt(command.split(\" \")[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" taskList.markTaskAsDone(id - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" ui.markedMessage(taskList.getTask(id - 1));","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"To mark a task you need to include the index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.unmark)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" int id \u003d Integer.parseInt(command.split(\" \")[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" taskList.markTaskAsUnDone(id - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":" ui.unmarkedMessage(taskList.getTask(id - 1));","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"To unmark a task you need to include the index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.todo)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"jrchoo"},"content":" String description \u003d command.substring(5);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jrchoo"},"content":" Todo todo \u003d new Todo(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"jrchoo"},"content":" ui.addTaskMessage(todo, taskList.numOfTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"jrchoo"},"content":" //writer.write(todo.getDescription().concat(\"\\n\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.deadline)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"jrchoo"},"content":" int index \u003d command.indexOf(\"/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"jrchoo"},"content":" String description \u003d command.substring(9, index - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"jrchoo"},"content":" String by \u003d command.substring(index + 3);","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"jrchoo"},"content":" Deadline deadline \u003d new Deadline(description, by.trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"jrchoo"},"content":" ui.addTaskMessage(deadline, taskList.numOfTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"jrchoo"},"content":" //writer.write(deadline.getDescription().concat(\"\\n\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.event)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"jrchoo"},"content":" int indexOfFrom \u003d command.indexOf(\"/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"jrchoo"},"content":" String description \u003d command.substring( 6, indexOfFrom - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"jrchoo"},"content":" String duration \u003d command.substring(indexOfFrom + 4);","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"jrchoo"},"content":" int indexOfTo \u003d duration.indexOf(\"/\");","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"jrchoo"},"content":" String from \u003d duration.substring(1, indexOfTo - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"jrchoo"},"content":" String to \u003d duration.substring(indexOfTo + 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"jrchoo"},"content":" Event event \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"jrchoo"},"content":" ui.addTaskMessage(event, taskList.numOfTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"jrchoo"},"content":" //writer.write(event.getDescription().concat(\"\\n\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.delete)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"jrchoo"},"content":" int id \u003d Integer.parseInt(command.split(\" \")[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"jrchoo"},"content":" taskList.deleteTask(id - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"To delete a task you have to include the index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"jrchoo"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"jrchoo"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jrchoo":114}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"import java.io.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" * Manages the loading and saving of tasks from/to a file.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" private File file;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" private String filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" * Initializes a storage manager with the specified file path.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" * @param filePath The path to the file where tasks will be stored.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" * Loads tasks from the file and returns them as a list.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" * @return A list of tasks loaded from the file.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" public List\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" String currentLine;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" while ((currentLine \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" System.out.println(currentLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" String[] taskInfo \u003d currentLine.split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" String type \u003d taskInfo[0].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" String status \u003d taskInfo[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" String description \u003d taskInfo[2].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" if (\"T\".equals(type)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" Todo todo \u003d new Todo(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" if (\"X\".equals(status)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":" tasks.add(todo);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" } else if (\"D\".equals(type)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" String by \u003d taskInfo[3];","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" Deadline deadline \u003d new Deadline(description, by.trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" if (\"X\".equals(status)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" } else if (\"E\".equals(type)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" String[] duration \u003d taskInfo[3].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" String from \u003d duration[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" String to \u003d duration[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":" Event event \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":" if (\"X\".equals(status)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":" tasks.add(event);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"There are no tasks.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"jrchoo"},"content":" reader.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"jrchoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"An error has occurred.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"jrchoo"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"jrchoo"},"content":" * Saves tasks from a task list to the file.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"jrchoo"},"content":" * @param taskList The task list containing tasks to be saved.","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"jrchoo"},"content":" public void saveTasks(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"jrchoo"},"content":" StringBuffer inputString \u003d new StringBuffer();","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"jrchoo"},"content":" for (Task task: taskList.getTasks()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"jrchoo"},"content":" String line \u003d task.getDescription();","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"jrchoo"},"content":" inputString.append(line);","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"jrchoo"},"content":" inputString.append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"jrchoo"},"content":" FileOutputStream fileOut \u003d new FileOutputStream(file);","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"jrchoo"},"content":" fileOut.write(inputString.toString().getBytes());","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"jrchoo"},"content":" fileOut.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"jrchoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"An error has occurred.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jrchoo":93}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":" * Represents a task with a description and a completion status.","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" * Initializes a new task with the given description.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" * Returns either a blank or \"X\" depending on the isDone of a Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" * @return A string \"X\" or an empty string \" \".","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" * Sets the boolean isDone of a Task to true.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" * Sets the boolean isDone of a Task to false.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" public void markAsUnDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":" * Returns a string representation of the task with its status and description.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" * @return A string representing the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" * Returns a string representation of the task to be saved into a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":" * @return A string representing the task in a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":" return \" |\" + this.getStatusIcon() + \"| \" + this.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jrchoo":61}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" * Represents a list of tasks and provides operations to manipulate them.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" * Initializes a new TaskList with a list of tasks and a user interface.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" * @param tasks The list of tasks to be managed.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" * @param ui The user interface for interaction.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" public TaskList(List\u003cTask\u003e tasks, Ui ui) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" * Deletes a task from the task list at the specified index and displays a confirmation message.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" ui.deleteTaskMessage(task, tasks.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" * Marks a task as done in the task list at the specified index.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" * Marks a task as not done in the task list at the specified index.","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" * @param index The index of the task to be marked as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":" public void markTaskAsUnDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":" this.tasks.get(index).markAsUnDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":" * Gets the list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"jrchoo"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"jrchoo"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"jrchoo"},"content":" return this.tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"jrchoo"},"content":" * Gets a task from the task list at the specified index.","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"jrchoo"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"jrchoo"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"jrchoo"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"jrchoo"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"jrchoo"},"content":" * Gets the number of tasks in the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"jrchoo"},"content":" * @return The number of tasks in the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"jrchoo"},"content":" public int numOfTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"jrchoo"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"jrchoo"},"content":" * Returns a string representation of the task list, including task numbers and their details.","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"jrchoo"},"content":" * @return A formatted string representing the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"jrchoo"},"content":" StringBuffer outputString \u003d new StringBuffer();","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"jrchoo"},"content":" for(int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"jrchoo"},"content":" outputString.append(i + 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"jrchoo"},"content":" outputString.append(\". \");","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"jrchoo"},"content":" outputString.append(tasks.get(i).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"jrchoo"},"content":" outputString.append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"jrchoo"},"content":" return outputString.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jrchoo":105}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":" * Represents a to-do task with a description.","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" * Initializes a new to-do task with the given description.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" * Returns a formatted string representation of the to-do task, including its type and description.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" * @return A formatted string representing the to-do task.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" * Returns a string representation of the to-do task to be saved into a file.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" * @return A string representing the to-do task in a file format.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" return \"T\" + super.getDescription();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jrchoo":35}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":" * Represents the user interface for interacting with the application.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" * Initializes a new user interface with a scanner for user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" * Displays a line separator to separate messages.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" public static void showLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"-------------------------------\");","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" * Closes the scanner used for user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" public void exit() {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" this.scanner.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" * Reads and returns user input as a string.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" * @return The user\u0027s input as a string.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" public String getUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" * Displays a welcome message when the application starts.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" public void welcomeMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Hello! I\u0027m Gideon\");","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" * Displays a goodbye message when the user exits the application.","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" public void byeMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":" * Displays a message when a file is successfully created.","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":" public void createFileMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"File created: Gideon\");","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"jrchoo"},"content":" * Displays a message when a saved file is opened.","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"jrchoo"},"content":" public void openFileMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Opening saved file.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"jrchoo"},"content":" * Displays a message when there are no tasks in the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"jrchoo"},"content":" public void emptyTaskListMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"There are no tasks.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"jrchoo"},"content":" * Displays a list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"jrchoo"},"content":" * @param taskList The list of tasks to display.","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"jrchoo"},"content":" public void showTasks(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"jrchoo"},"content":" System.out.println(taskList.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"jrchoo"},"content":" * Displays a message when a task is marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"jrchoo"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"jrchoo"},"content":" public void markedMessage(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"jrchoo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"jrchoo"},"content":" * Displays a message when a task is marked as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"jrchoo"},"content":" * @param task The task that was marked as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"jrchoo"},"content":" public void unmarkedMessage(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"jrchoo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"jrchoo"},"content":" * Displays a message when a task is added to the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"jrchoo"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"jrchoo"},"content":" * @param numOfTasks The number of tasks in the list after adding.","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"jrchoo"},"content":" public void addTaskMessage(Task task, int numOfTasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"jrchoo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Now you have \" + numOfTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"jrchoo"},"content":" * Displays a message when a task is deleted from the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"jrchoo"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"jrchoo"},"content":" * @param numOfTasks The number of tasks in the list after deletion.","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"jrchoo"},"content":" public void deleteTaskMessage(Task task, int numOfTasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"jrchoo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Now you have \" + numOfTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"jrchoo"},"content":" * Displays a message for an invalid user input or command.","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"jrchoo"},"content":" public void invalidTaskMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jrchoo":150}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" super(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" this.by \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Date given is in an invalid format.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(DateTimeFormatter.ofPattern(\"d MMM yyyy h:mm a\")) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" return \"D\" + super.getDescription() + \" | \" + this.by.format(formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":28}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"public class Duke {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" private Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" private Parser parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" this.taskList \u003d new TaskList(storage.loadTasks(), ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" this.parser \u003d new Parser(ui, taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" ui.welcomeMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" String command \u003d ui.getUserInput();","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" while (parser.parseCommand(command)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" command \u003d ui.getUserInput();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" ui.exit();","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" new Duke(\"./data/gideon.txt\").run();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":30}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":" protected String from;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" protected String to;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" super(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" return \"[E]\" + super.toString() + \" (from:\" + from + \" to:\" + to + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" return \"E\" + super.getDescription() + \" |\" + this.from + \"-\" + this.to;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":22}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"public class Parser {","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":" private enum Commands {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" invalid, todo, deadline, event, mark, unmark, list, delete, bye;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" public Parser(Ui ui, TaskList taskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" public boolean parseCommand(String command) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" Commands cmd \u003d Commands.invalid;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" for (Commands c : Commands.values()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" if (command.startsWith(c.toString())) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" cmd \u003d c;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" if (cmd.equals(Commands.bye)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" ui.byeMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.list)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" ui.showTasks(taskList);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.mark)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" int id \u003d Integer.parseInt(command.split(\" \")[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" taskList.markTaskAsDone(id - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" ui.markedMessage(taskList.getTask(id - 1));","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"To mark a task you need to include the index\");","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.unmark)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" int id \u003d Integer.parseInt(command.split(\" \")[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" taskList.markTaskAsUnDone(id - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" ui.unmarkedMessage(taskList.getTask(id - 1));","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"To unmark a task you need to include the index\");","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.todo)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" String description \u003d command.substring(5);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" Todo todo \u003d new Todo(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" ui.addTaskMessage(todo, taskList.numOfTasks());","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" //writer.write(todo.getDescription().concat(\"\\n\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.deadline)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":" int index \u003d command.indexOf(\"/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":" String description \u003d command.substring(9, index - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"jrchoo"},"content":" String by \u003d command.substring(index + 3);","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"jrchoo"},"content":" Deadline deadline \u003d new Deadline(description, by.trim());","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"jrchoo"},"content":" ui.addTaskMessage(deadline, taskList.numOfTasks());","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"jrchoo"},"content":" //writer.write(deadline.getDescription().concat(\"\\n\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.event)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"jrchoo"},"content":" int indexOfFrom \u003d command.indexOf(\"/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"jrchoo"},"content":" String description \u003d command.substring( 6, indexOfFrom - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"jrchoo"},"content":" String duration \u003d command.substring(indexOfFrom + 4);","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"jrchoo"},"content":" int indexOfTo \u003d duration.indexOf(\"/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"jrchoo"},"content":" String from \u003d duration.substring(1, indexOfTo - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"jrchoo"},"content":" String to \u003d duration.substring(indexOfTo + 3);","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"jrchoo"},"content":" Event event \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"jrchoo"},"content":" ui.addTaskMessage(event, taskList.numOfTasks());","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"jrchoo"},"content":" //writer.write(event.getDescription().concat(\"\\n\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"jrchoo"},"content":" } else if (cmd.equals(Commands.delete)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"jrchoo"},"content":" int id \u003d Integer.parseInt(command.split(\" \")[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"jrchoo"},"content":" taskList.deleteTask(id - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"jrchoo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"jrchoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"To delete a task you have to include the index\");","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"jrchoo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"jrchoo"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":100}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"import java.io.*;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":"public class Storage {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" private File file;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" private String filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" public List\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" String currentLine;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" while ((currentLine \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" System.out.println(currentLine);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" String[] taskInfo \u003d currentLine.split(\"\\\\|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" String type \u003d taskInfo[0].trim();","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" String status \u003d taskInfo[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" String description \u003d taskInfo[2].trim();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" if (\"T\".equals(type)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" Todo todo \u003d new Todo(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" if (\"X\".equals(status)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" tasks.add(todo);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" } else if (\"D\".equals(type)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" String by \u003d taskInfo[3];","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" Deadline deadline \u003d new Deadline(description, by.trim());","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" if (\"X\".equals(status)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" } else if (\"E\".equals(type)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" String[] duration \u003d taskInfo[3].split(\"-\");","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" String from \u003d duration[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" String to \u003d duration[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":" Event event \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" if (\"X\".equals(status)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" tasks.add(event);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"There are no tasks.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" reader.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"An error has occurred.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":" return tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":" public void saveTasks(TaskList taskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"jrchoo"},"content":" StringBuffer inputString \u003d new StringBuffer();","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"jrchoo"},"content":" for (Task task: taskList.getTasks()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jrchoo"},"content":" String line \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"jrchoo"},"content":" inputString.append(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"jrchoo"},"content":" inputString.append(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"jrchoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"jrchoo"},"content":" FileOutputStream fileOut \u003d new FileOutputStream(file);","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"jrchoo"},"content":" fileOut.write(inputString.toString().getBytes());","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"jrchoo"},"content":" fileOut.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"jrchoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"An error has occurred.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":76}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"public class Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":" protected String description;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" public Task(String description) {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" * Returns either a blank or \"X\" depending on the isDone of a Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" * @return A string \"X\" or an empty string \" \".","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" * Sets the boolean isDone of a Task to true.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" * Sets the boolean isDone of a Task to false.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" public void markAsUnDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" * Returns a string representation of the task with its status and description.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" * @return A string representing the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" * Returns a string representation of the task to be saved into a file.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" * @return A string representing the task in a file.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" return \" |\" + this.getStatusIcon() + \"| \" + this.description;","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":54}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" * Represents a list of tasks and provides operations to manipulate them.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":"public class TaskList {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" * Initializes a new TaskList with a list of tasks and a user interface.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" * @param tasks The list of tasks to be managed.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" * @param ui The user interface for interaction.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" public TaskList(List\u003cTask\u003e tasks, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" * Initializes a new TaskList with an empty list of tasks and a user interface.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" * @param ui The user interface for interaction.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" public TaskList(Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" * Deletes a task from the task list at the specified index and displays a confirmation message.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" ui.deleteTaskMessage(task, tasks.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" * Marks a task as done in the task list at the specified index.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"jrchoo"},"content":" * Marks a task as not done in the task list at the specified index.","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"jrchoo"},"content":" * @param index The index of the task to be marked as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"jrchoo"},"content":" public void markTaskAsUnDone(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"jrchoo"},"content":" this.tasks.get(index).markAsUnDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"jrchoo"},"content":" * Gets the list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"jrchoo"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"jrchoo"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"jrchoo"},"content":" return this.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"jrchoo"},"content":" * Gets a task from the task list at the specified index.","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"jrchoo"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"jrchoo"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"jrchoo"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"jrchoo"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"jrchoo"},"content":" * Gets the number of tasks in the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"jrchoo"},"content":" * @return The number of tasks in the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"jrchoo"},"content":" public int numOfTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"jrchoo"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"jrchoo"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"jrchoo"},"content":" * Returns a string representation of the task list, including task numbers and their details.","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"jrchoo"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"jrchoo"},"content":" * @return A formatted string representing the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"jrchoo"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"jrchoo"},"content":" StringBuffer outputString \u003d new StringBuffer();","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"jrchoo"},"content":" for(int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"jrchoo"},"content":" outputString.append(i + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"jrchoo"},"content":" outputString.append(\". \");","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"jrchoo"},"content":" outputString.append(tasks.get(i).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"jrchoo"},"content":" outputString.append(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"jrchoo"},"content":" return outputString.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":118}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" super(description);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" return \"T\" + super.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":18}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"public class Ui {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" public Ui() {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" public static void showLine() {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"-------------------------------\");","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" public void exit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" this.scanner.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" public String getUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" public void welcomeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Hello! I\u0027m Gideon\");","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" public void byeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" public void createFileMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"File created: Gideon\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" public void openFileMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Opening saved file.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" public void emptyTaskListMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"There are no tasks.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" public void showTasks(TaskList taskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":" System.out.println(taskList.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":" public void markedMessage(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":" public void unmarkedMessage(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"jrchoo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"jrchoo"},"content":" public void addTaskMessage(Task task, int numOfTasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"jrchoo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Now you have \" + numOfTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"jrchoo"},"content":" public void deleteTaskMessage(Task task, int numOfTasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"jrchoo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"Now you have \" + numOfTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"jrchoo"},"content":" public void invalidTaskMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"jrchoo"},"content":" System.out.println(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"jrchoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":87}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" public void taskList_testAddTask() {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" TaskList taskList \u003d new TaskList(ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" Todo todo \u003d new Todo(\"todo\");","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":" assertTrue(taskList.getTasks().contains(todo));","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jrchoo"},"content":" Deadline deadline \u003d new Deadline(\"deadline\", \"2023-09-02 16:00\");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jrchoo"},"content":" assertTrue(taskList.getTasks().contains(deadline));","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jrchoo"},"content":" Event event \u003d new Event(\"event\", \"Sep 4th 5pm\", \"7pm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jrchoo"},"content":" assertTrue(taskList.getTasks().contains(event));","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jrchoo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jrchoo"},"content":" public void taskList_testDeleteTask() {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jrchoo"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jrchoo"},"content":" TaskList taskList \u003d new TaskList(ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jrchoo"},"content":" Todo todo \u003d new Todo(\"todo\");","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"jrchoo"},"content":" assertTrue(taskList.getTasks().contains(todo));","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jrchoo"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jrchoo"},"content":" assertFalse(taskList.getTasks().contains(todo));","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jrchoo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jrchoo"},"content":" public void taskList_testMarkTaskAsDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jrchoo"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jrchoo"},"content":" TaskList taskList \u003d new TaskList(ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"jrchoo"},"content":" Todo todo \u003d new Todo(\"todo\");","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jrchoo"},"content":" assertTrue(taskList.getTasks().contains(todo));","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"jrchoo"},"content":" taskList.markTaskAsDone(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"jrchoo"},"content":" assertTrue(taskList.getTasks().get(0).isDone);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jrchoo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"jrchoo"},"content":" public void taskList_testMarkTaskAsUnDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"jrchoo"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"jrchoo"},"content":" TaskList taskList \u003d new TaskList(ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"jrchoo"},"content":" Todo todo \u003d new Todo(\"todo\");","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"jrchoo"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jrchoo"},"content":" assertTrue(taskList.getTasks().contains(todo));","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"jrchoo"},"content":" taskList.markTaskAsDone(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"jrchoo"},"content":" assertTrue(taskList.getTasks().get(0).isDone);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"jrchoo"},"content":" taskList.markTaskAsUnDone(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"jrchoo"},"content":" assertFalse(taskList.getTasks().get(0).isDone);","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":68}},{"path":"src/test/java/duke/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":" public void todo_testToString(){","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":" assertEquals(\"[T][ ] todo\", new Todo(\"todo\").toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jrchoo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jrchoo"},"content":" public void todo_testGetDescription(){","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jrchoo"},"content":" assertEquals(\"T | | todo\", new Todo(\"todo\").getDescription());","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jrchoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jrchoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jrchoo":16}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jrchoo"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"jrchoo"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"jrchoo"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"jrchoo"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"jrchoo"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jrchoo"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"jrchoo"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"jrchoo"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"jrchoo"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"jrchoo"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"jrchoo"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jrchoo":11}}] diff --git a/jrchoo_ip_master/commits.json b/jrchoo_ip_master/commits.json index 3994ae1a..2131997a 100644 --- a/jrchoo_ip_master/commits.json +++ b/jrchoo_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"jrchoo":[{"date":"2023-08-23","commitResults":[{"hash":"459b89427ad5d4f0c71923718df1ae2c886c5619","isMergeCommit":false,"messageTitle":"initial skeletal version and rename","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"7eac7bbc64f5889ce2d4657a3fcb670bad5073dc","isMergeCommit":false,"messageTitle":"getting the bot to echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"acd7eedea50c71501e96c20e247a2915f0ddab05","isMergeCommit":false,"messageTitle":"added ability to store history in a list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":2}}},{"hash":"803a54d5de297844b362c1bd7b4732f025a986dd","isMergeCommit":false,"messageTitle":"added a task class with the ability to mark tasks as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":4}}},{"hash":"a65f5454f9bea447686ac17ec882003dab7cf2cc","isMergeCommit":false,"messageTitle":"added 3 classes, todo, deadline and event that extend from task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":6}}},{"hash":"8aa228a8f738650372dd3e3077b0d54b518539bb","isMergeCommit":false,"messageTitle":"input and expected output","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0}}},{"hash":"6223da900309b489dad21043f6c7bf1ca5de6269","isMergeCommit":false,"messageTitle":"created custom exception classes but unable to implement yet, cuurently able to handle the basic errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":38}}},{"hash":"08df9bb6357af9abdf654d9ca03a52b51c76ac0e","isMergeCommit":false,"messageTitle":"delete functionality","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"c5188229289c4d3a87c84298f5f880727e368434","isMergeCommit":false,"messageTitle":"Add a way to store data via the java File import","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":18,"deletions":0}}}]},{"date":"2023-09-02","commitResults":[{"hash":"8f940309d67e8a7fb02a4ecdda3546d04fd6ef8b","isMergeCommit":false,"messageTitle":"Add read and write capabilties to chatbot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":175,"deletions":100}}},{"hash":"0c3d6e8397aad138d46bf322ee9efd0e244954f4","isMergeCommit":false,"messageTitle":"Update chatbot so that file is correctly overwritten at the end","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":17}}},{"hash":"9011ffc39c7c29e777e8d37d30e7c0bda14edd45","isMergeCommit":true,"messageTitle":"Merge branch \u0027b1\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"117271de2c783bc55262529d94e1541d12ff8483","isMergeCommit":false,"messageTitle":"Add LocalDateTime in order to store deadlines as date and time","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":10}}},{"hash":"43b91916295e0b33669b944448806801a7d81689","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"d7ad624e469cb0763d6202e2a6be098aa93ac5ec","isMergeCommit":false,"messageTitle":"Add Ui, Storage, TaskList and Parser classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":198,"deletions":0}}},{"hash":"5df4312a2f66ac98c55f24a36d466cd544bdedb3","isMergeCommit":false,"messageTitle":"Separate main method logic into the classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":140,"deletions":172}}},{"hash":"017357f0f0c7ce54b9046c61cee5486b6ed30c2f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"74cdc8a7f6057a27960efafe8092d01639d00176","isMergeCommit":false,"messageTitle":"Add enums to contain valid commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":20}}},{"hash":"b4f53978ec1c66c5e9909daddb16cb9feaaa71ea","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"44137ccdea78073a93568e926d5e05aaa6581a38","isMergeCommit":false,"messageTitle":"Create duke package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":471,"deletions":0}}},{"hash":"633477b1eccc04f8e2d0971e91dd3419ae1b08a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0095b636ff2c55ebdd16aa85f183f26de310a47c","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"2f039cc92a4f0c6ce7d4f2c03e6aa3c17b897657","isMergeCommit":false,"messageTitle":"Update build.gradle to work correctly","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"62e951e82016422a11efa500f877123d8b09a0bf","isMergeCommit":false,"messageTitle":"Add JUnit tests for TaskList and Todo","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":0}}},{"hash":"4c112d5cd4b88b53738e09ecf924355c600da833","isMergeCommit":false,"messageTitle":"Add new constructor for TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"5b9ce48d3f883e7f81b88d5b9b9a8a75a519ca58","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"jrchoo":{"java":1031,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":1,"txt":11}},"authorContributionVariance":{"jrchoo":36331.8},"authorDisplayNameMap":{"jrchoo":"CS2103T-T12-3 CHOO..RONG"}} +{"authorDailyContributionsMap":{"jrchoo":[{"date":"2023-08-23","commitResults":[{"hash":"459b89427ad5d4f0c71923718df1ae2c886c5619","isMergeCommit":false,"messageTitle":"initial skeletal version and rename","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"7eac7bbc64f5889ce2d4657a3fcb670bad5073dc","isMergeCommit":false,"messageTitle":"getting the bot to echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"acd7eedea50c71501e96c20e247a2915f0ddab05","isMergeCommit":false,"messageTitle":"added ability to store history in a list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":2}}},{"hash":"803a54d5de297844b362c1bd7b4732f025a986dd","isMergeCommit":false,"messageTitle":"added a task class with the ability to mark tasks as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":4}}},{"hash":"a65f5454f9bea447686ac17ec882003dab7cf2cc","isMergeCommit":false,"messageTitle":"added 3 classes, todo, deadline and event that extend from task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":6}}},{"hash":"8aa228a8f738650372dd3e3077b0d54b518539bb","isMergeCommit":false,"messageTitle":"input and expected output","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0}}},{"hash":"6223da900309b489dad21043f6c7bf1ca5de6269","isMergeCommit":false,"messageTitle":"created custom exception classes but unable to implement yet, cuurently able to handle the basic errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":38}}},{"hash":"08df9bb6357af9abdf654d9ca03a52b51c76ac0e","isMergeCommit":false,"messageTitle":"delete functionality","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"c5188229289c4d3a87c84298f5f880727e368434","isMergeCommit":false,"messageTitle":"Add a way to store data via the java File import","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":18,"deletions":0}}}]},{"date":"2023-09-02","commitResults":[{"hash":"8f940309d67e8a7fb02a4ecdda3546d04fd6ef8b","isMergeCommit":false,"messageTitle":"Add read and write capabilties to chatbot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":175,"deletions":100}}},{"hash":"0c3d6e8397aad138d46bf322ee9efd0e244954f4","isMergeCommit":false,"messageTitle":"Update chatbot so that file is correctly overwritten at the end","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":17}}},{"hash":"9011ffc39c7c29e777e8d37d30e7c0bda14edd45","isMergeCommit":true,"messageTitle":"Merge branch \u0027b1\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"117271de2c783bc55262529d94e1541d12ff8483","isMergeCommit":false,"messageTitle":"Add LocalDateTime in order to store deadlines as date and time","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":10}}},{"hash":"43b91916295e0b33669b944448806801a7d81689","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"d7ad624e469cb0763d6202e2a6be098aa93ac5ec","isMergeCommit":false,"messageTitle":"Add Ui, Storage, TaskList and Parser classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":198,"deletions":0}}},{"hash":"5df4312a2f66ac98c55f24a36d466cd544bdedb3","isMergeCommit":false,"messageTitle":"Separate main method logic into the classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":140,"deletions":172}}},{"hash":"017357f0f0c7ce54b9046c61cee5486b6ed30c2f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"74cdc8a7f6057a27960efafe8092d01639d00176","isMergeCommit":false,"messageTitle":"Add enums to contain valid commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":20}}},{"hash":"b4f53978ec1c66c5e9909daddb16cb9feaaa71ea","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"44137ccdea78073a93568e926d5e05aaa6581a38","isMergeCommit":false,"messageTitle":"Create duke package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":471,"deletions":0}}},{"hash":"633477b1eccc04f8e2d0971e91dd3419ae1b08a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0095b636ff2c55ebdd16aa85f183f26de310a47c","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"2f039cc92a4f0c6ce7d4f2c03e6aa3c17b897657","isMergeCommit":false,"messageTitle":"Update build.gradle to work correctly","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"62e951e82016422a11efa500f877123d8b09a0bf","isMergeCommit":false,"messageTitle":"Add JUnit tests for TaskList and Todo","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":0}}},{"hash":"4c112d5cd4b88b53738e09ecf924355c600da833","isMergeCommit":false,"messageTitle":"Add new constructor for TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"5b9ce48d3f883e7f81b88d5b9b9a8a75a519ca58","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"224100a70224429bbf3498ffc30fcabdeb4549e2","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to the code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":286,"deletions":2}}},{"hash":"d507fee5eac1e3633b83faba7e196276ecce634a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"jrchoo":{"java":1315,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":1,"txt":11}},"authorContributionVariance":{"jrchoo":36192.34},"authorDisplayNameMap":{"jrchoo":"CS2103T-T12-3 CHOO..RONG"}} diff --git a/jylow_ip_master/authorship.json b/jylow_ip_master/authorship.json index 203af87d..2c0843ac 100644 --- a/jylow_ip_master/authorship.json +++ b/jylow_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":"jylow"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" maven { url \u0027https://oss.sonatype.org/content/repositories/snapshots/\u0027 }","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" implementation group: \u0027com.joestelmach\u0027, name: \u0027natty\u0027, version: \u00270.13\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" mainClass.set(\"seedu.duke.Main\")","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"jylow":8,"-":43}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" * This program is a chatbot, somebodyhaha, used to mark completion of tasks","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" * marking the completion of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" private TaskList tasklst;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" * Duke class that initialises a Duke Chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * @param filePath path location of the file to read previous stores","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" tasklst \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" tasklst \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" * Runs the duke bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":" String fullCommand \u003d ui.read();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jylow"},"content":" ui.showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jylow"},"content":" Command c \u003d Parser.parseUserInput(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jylow"},"content":" c.execute(tasklst, ui, storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jylow"},"content":" } catch (DukeException | IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jylow"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jylow"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jylow"},"content":" ui.showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jylow"},"content":" * The program reads input given by the user to perform functions to help","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jylow"},"content":" * add, edit, track and delete tasks inputted.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jylow"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jylow"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"jylow":62,"-":3}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import duke.exception.NoFileException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" private final Task task;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" * Constructor for an AddCommand.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" * @param task the task to be added to the list","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * Executes the current add command.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" * @param tasklst current list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" * @param ui instance of user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" * @param storage instance of storage to read and write files","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" * @throws NoFileException Exception thrown if there is no file found when rewriting","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" public void execute(TaskList tasklst, Ui ui, Storage storage) throws NoFileException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" tasklst.addTask(this.task, ui);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" storage.rewriteFile(tasklst);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" * Checks if the current task is an exit task.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" * @return false since task is not an exit task","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":43}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" * Abstract command class for commands to be executed after parsing","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" public abstract void execute(TaskList tasklst, Ui ui, Storage storage) throws DukeException, IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":15}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" private final int taskNumber;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" * Constructs a command containing the tasknumber in list to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" * @param taskNumber The position of task in the list to be deleted","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" public DeleteCommand(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" * Executes the delete command.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * @param tasklst list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" * @param ui ui component of the program","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" * @param storage storage componenet of the program","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" * @throws DukeException Errors that occur when trying to delete the task","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" public void execute(TaskList tasklst, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" tasklst.deleteTask(taskNumber, ui);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" storage.rewriteFile(tasklst);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" * Checks if the current task is an exit task.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" * @return false since task is not an exit task","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":43}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Command that causes the chatbot to terminate.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" * Constructor of a new ExitCommand.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" * Executes the exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" * @param tasklst list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" * @param ui ui component of the program","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" * @param storage storage componenet of the program","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" public void execute(TaskList tasklst, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" ui.showGoodbye();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" * Checks if the current task is an exit task.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" * @return true since task is an exit task","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":36}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" * Uses a keyword to find tasks that contain keyword in description.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" private final String keyword; //keyword to search for","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" * Constructor for a FindCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" * @param keyword keyword to search the tasklist for","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" super();","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" * Executes the instance of FindCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" * @param tasklst list of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" * @param ui instance of ui class","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" * @param storage instance of storage class","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" public void execute(TaskList tasklst, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" ui.showTasks(tasklst.filterToList(this.keyword));","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" * Checks if the current task is an exit task.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" * @return false since task is not an exit task","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jylow":43}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Command to list the current tasks stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" * Constructor for a list command.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" * Executes the current list command.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" * @param tasklst current list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" * @param ui instance of user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" * @param storage instance of storage to read and write files","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" public void execute(TaskList tasklst, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" ui.showTasks(tasklst.getTaskStrings());","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" * Checks if the current task is an exit task.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" * @return false since task is not an exit task","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":36}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * Command that marks the given task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" private final int taskNumber;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" * Constructs a command containing the tasknumber in list to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" * @param taskNumber The position of task in the list to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" public MarkCommand(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" * Executes the mark command.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" * @param tasklst list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * @param ui ui component of the program","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" * @param storage storage componenet of the program","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" * @throws DukeException Error if the task number is outside the task list","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" public void execute(TaskList tasklst, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" tasklst.markTask(taskNumber, ui);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" storage.rewriteFile(tasklst);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" * Checks if the current task is an exit task.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" * @return false since task is not an exit task","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":41}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * Command that marks the given task as incomplete.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" private final int taskNumber;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" * Constructor for an unmark command.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" * @param taskToMark The position of task in the list to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" public UnmarkCommand(int taskToMark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" this.taskNumber \u003d taskToMark;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" * Executes the current unmark command.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * @param tasklst current list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" * @param ui instance of user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" * @param storage instance of storage to read and write files","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" * @throws DukeException Exception thrown whilst executing the command","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" public void execute(TaskList tasklst, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" tasklst.unmarkTask(taskNumber, ui);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" storage.rewriteFile(tasklst);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" * Checks if the current task is an exit task.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" * @return false since task is not an exit task","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":43}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Exceptions that will be thrown whilst executing duke program.","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Constructor for a DukeException.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * @param errorMessage message to be shown when error is thrown","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jylow":13}},{"path":"src/main/java/duke/exception/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Exception when encountering invalid arguments.","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"public class InvalidArgumentException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Invalid argument exception that throws error when invalid","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * arguments are inputted with a function.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" * @param errorMessage message describing the error","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" public InvalidArgumentException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jylow":14}},{"path":"src/main/java/duke/exception/InvalidFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Exception when encountering invalid format.","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"public class InvalidFormatException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Constructor for InvalidFormatException.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * @param errorMessage message to be displayed when encountering error","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" public InvalidFormatException(String errorMessage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"jylow":13}},{"path":"src/main/java/duke/exception/InvalidTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Error when given task number is outside tasklist range.","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"public class InvalidTaskNumberException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Constructor for an InvalidTaskNumberException.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * @param errorMessage message to be displayed when error is thrown","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" public InvalidTaskNumberException(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":14}},{"path":"src/main/java/duke/exception/NoFileException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Error when there is no file found.","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"public class NoFileException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Constructor for a NiFileException.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * @param errorMessage message to be displayed when error is encountered","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" public NoFileException(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":13}},{"path":"src/main/java/duke/exception/NoTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Exception when there is no task given.","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"public class NoTaskException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Constructor of a NoTaskException.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * @param errorMessage message to be displayed when error is encountered","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" public NoTaskException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jylow":13}},{"path":"src/main/java/duke/exception/UnknownActionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Exception thrown when action entered is not a valid action.","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"public class UnknownActionException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Constructor for UnknownActionException.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * @param errorMessage message to be displayed when error encountered","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" public UnknownActionException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jylow":13}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import duke.exception.InvalidFormatException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" * Deadline instance of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" private final LocalDate dueDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" private String dueTime \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" * Constructs a Deadline with a given description. Completion of the task","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" * is false by default.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" * @param description The description of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * @param by The deadline the task must be completed by","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" public Deadline(String description, String by) throws InvalidFormatException {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" String[] temp \u003d by.split(\"\\\\s+\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" this.dueDate \u003d LocalDate.parse(temp[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" throw new InvalidFormatException(e.getMessage() + \"The correct format is YYYY-MM-DD HHHH(optional)\");","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" if (temp.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" this.dueTime \u003d temp[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" * Returns a formatted string of the status of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" * @return String containing completion status, type, description, and deadline of task","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.dueDate.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\"))","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jylow"},"content":" + \" \" + this.dueTime + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jylow"},"content":" * Returns a string formatted in the way it is to be saved.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jylow"},"content":" * @return Formatted string to be written into file","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jylow"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jylow"},"content":" return \"D | \" + (this.isDone ? 1 : 0) + \" | \" + this.description + \" | \"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jylow"},"content":" + this.dueDate + \" \" + this.dueTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jylow":58}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import duke.exception.InvalidFormatException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" * Event instance of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" private final LocalDate fromDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" private String fromTime \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" private final LocalDate toDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" private String toTime \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" * Constructs a event with a given description. Completion of the task","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" * is false by default.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" * @param description The description of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" * @param from The start time of the event","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * @param to The end time of the event","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" public Event(String description, String from, String to) throws InvalidFormatException {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" String[] fromTemp \u003d from.split(\"\\\\s+\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" String[] toTemp \u003d to.split(\"\\\\s+\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" this.fromDate \u003d LocalDate.parse(fromTemp[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" this.toDate \u003d LocalDate.parse(toTemp[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" throw new InvalidFormatException(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" if (fromTemp.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" this.fromTime \u003d fromTemp[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" if (toTemp.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" this.toTime \u003d toTemp[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":" * Returns a formatted string of the status of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jylow"},"content":" * @return String containing completion status, type, description, from and to of task","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"jylow"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jylow"},"content":" + \" (from: \" + this.fromDate.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\")) + \" \"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jylow"},"content":" + this.fromTime + \" to: \" + this.toDate.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\"))","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jylow"},"content":" + \" \" + this.toTime + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jylow"},"content":" * Returns a string formatted in the way it is to be saved.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jylow"},"content":" * @return Formatted string to be written into file","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jylow"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jylow"},"content":" return \"E | \" + (this.isDone ? 1 : 0) + \" | \" + this.description + \" | \"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jylow"},"content":" + this.fromDate + \" \" + this.fromTime + \"-\u003e\"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"jylow"},"content":" + this.toDate + \" \" + this.toTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jylow":66}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Task encapsulate a task with a String description and boolean isDone. It supports","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" * marking the completion of tasks","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" * Constructs a Task with a given description. Completion of the task","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" * is false by default.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" * Save format function to be overridden.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" * @return null in case of a Task","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" return null;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" * Returns the completion status of task with \"X\" meaning task is completed.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" * @return \"X\" if completed \" \" if still in progress","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" return isDone ? \"X\" : \" \";","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" * Returns a formatted string of the status of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" * @return String containing completion status and description of task","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" return \" [\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":" * Marks the current task as completed.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"jylow"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"jylow"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"jylow"},"content":" * Unmarks the current task as not completed.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"jylow"},"content":" public void unmarkAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"jylow"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"jylow"},"content":" * Checks if description of task contains given keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jylow"},"content":" * @param keyword keyword to be checked","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jylow"},"content":" * @return true if contains keyword else false","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"jylow"},"content":" public boolean contains(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jylow"},"content":" return this.description.contains(keyword);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jylow":66}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Todo instance of a task","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Construct a task with a given description. Completion of the task","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * is false by default.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" * @param description The description of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" * Returns a formatted string of the status of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" * @return String containing completion status, type and description of task","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" * Returns a string formatted in the way it is to be saved.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" * @return Formatted string to be written into file","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" return \"T | \" + (this.isDone ? 1 : 0) + \" | \" + this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jylow":32}},{"path":"src/main/java/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"import duke.exception.UnknownActionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" * Parser class that deals with deciphering user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * Parses input given by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" * @param userInput String of input given by the user","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" * @return Command instance depending on the action given by the user","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" * @throws DukeException Exceptions that will be encountered during parsing","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" public static Command parseUserInput(String userInput) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" String[] fields \u003d userInput.split(\"\\\\s+\");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" switch (fields[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" if (fields.length \u003e 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" throw new InvalidArgumentException(\"Please enter \u0027list\u0027 without any extra arguments \"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" + \"or use a different \"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" + \"keyword\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" case \"find\":","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" if (fields.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" throw new InvalidArgumentException(\"Please enter \u0027find {keyword}\u0027 without any extra arguments \"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":" + \"or use a different \"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":" + \"keyword\");","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jylow"},"content":" return new FindCommand(fields[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jylow"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jylow"},"content":" if (fields.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" throw new InvalidArgumentException(\"Please enter \u0027mark {task number}\u0027 or use a different \"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jylow"},"content":" + \"keyword\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jylow"},"content":" return new MarkCommand(Character.getNumericValue(fields[1].charAt(0)));","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jylow"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jylow"},"content":" if (fields.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jylow"},"content":" throw new InvalidArgumentException(\"Please enter \u0027mark {task number}\u0027 or use a different \"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jylow"},"content":" + \"keyword\");","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jylow"},"content":" return new UnmarkCommand(Character.getNumericValue(fields[1].charAt(0)));","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jylow"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jylow"},"content":" if (fields.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jylow"},"content":" throw new InvalidArgumentException(\"Please enter \u0027delete {task number}\u0027 \"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jylow"},"content":" + \"or use a different \"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"jylow"},"content":" + \"keyword\");","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"jylow"},"content":" return new DeleteCommand(Character.getNumericValue(fields[1].charAt(0)));","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"jylow"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"jylow"},"content":" String description \u003d userInput.replace(\"todo\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"jylow"},"content":" Task todo \u003d new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"jylow"},"content":" return new AddCommand(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"jylow"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"jylow"},"content":" fields \u003d userInput.replace(\"deadline\", \"\").split(\" /by \");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jylow"},"content":" if (fields.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"jylow"},"content":" throw new InvalidArgumentException(\"Please enter \u0027deadline {task description} \"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"jylow"},"content":" + \"\u0027/by\u0027 {date}\u0027 or use a different \"","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"jylow"},"content":" + \"keyword\");","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"jylow"},"content":" Task deadline \u003d new Deadline(fields[0], fields[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jylow"},"content":" return new AddCommand(deadline);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"jylow"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"jylow"},"content":" fields \u003d userInput.replace(\"event\", \"\").split(\" /from | /to \");","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"jylow"},"content":" if (fields.length !\u003d 3) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"jylow"},"content":" throw new InvalidArgumentException(\"Please enter \u0027event {task description} \"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"jylow"},"content":" + \"\u0027/from\u0027 {start} \u0027/to\u0027 {finish} \"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"jylow"},"content":" + \"or use a different \"","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"jylow"},"content":" + \"keyword\");","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"jylow"},"content":" Task event \u003d new Event(fields[0], fields[1], fields[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"jylow"},"content":" return new AddCommand(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"jylow"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"jylow"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"jylow"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"jylow"},"content":" throw new UnknownActionException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":95}},{"path":"src/main/java/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"import duke.exception.NoFileException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" * Storage class to help with reading and writing of data from files.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" private final String filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" * Constructs a event with a given description. Completion of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" * is false by default.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" * @param filePath The location of the file to be read.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" * Loads data from file into an ArrayList to be further processed.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" * @return ArrayList of string containing the information read from the file","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" * @throws NoFileException throws an error if no such file is found with the given filepath","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" public ArrayList\u003cString\u003e load() throws NoFileException {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" ArrayList\u003cString\u003e fileData \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" Scanner fileReader \u003d new Scanner(f);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" while (fileReader.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" String info \u003d fileReader.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" fileData.add(info);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" fileReader.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" return fileData;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":" throw new NoFileException(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jylow"},"content":" * Writes the current tasklist back into a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" * @param tasklst ArrayList of strings to be written into the file","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jylow"},"content":" * @throws NoFileException Exception when file to be written in cannot be found","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jylow"},"content":" public void rewriteFile(TaskList tasklst) throws NoFileException {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jylow"},"content":" ArrayList\u003cString\u003e tasks \u003d tasklst.toWriteFormat();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jylow"},"content":" FileWriter fw \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jylow"},"content":" for (String task : tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jylow"},"content":" fw.append(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jylow"},"content":" fw.append(System.lineSeparator());","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jylow"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jylow"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jylow"},"content":" throw new NoFileException(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":65}},{"path":"src/main/java/duke/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.exception.InvalidTaskNumberException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import duke.exception.NoTaskException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" * Tasklist containing the tasks added by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" private final ArrayList\u003cTask\u003e tasklst;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" * Constructor for an instance of an empty tasklist.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" this.tasklst \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" * Constructor for a tasklist with a string of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" * @param fileData ArrayList of strings with each string being a task to be added into the tasklist","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" * @throws DukeException exceptions that will be encountered when trying to add tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" public TaskList(ArrayList\u003cString\u003e fileData) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" String[] fields;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" this.tasklst \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" for (String info : fileData) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" fields \u003d info.split(\" \\\\| \");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" Task tempT;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" switch (fields[0].trim()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" case \"T\":","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" if (fields[2].isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" throw new NoTaskException(\"Error! Cannot add an empty todo!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" tempT \u003d new ToDo(fields[2].trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":" if (fields[1].equals(\"1\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":" tempT.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jylow"},"content":" tasklst.add(tempT);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jylow"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jylow"},"content":" case \"D\":","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" tempT \u003d new Deadline(fields[2].trim(), fields[3]);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jylow"},"content":" if (fields[1].equals(\"1\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jylow"},"content":" tempT.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jylow"},"content":" tasklst.add(tempT);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jylow"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jylow"},"content":" case \"E\":","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jylow"},"content":" String[] time;","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jylow"},"content":" time \u003d fields[3].split(\"-\u003e\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jylow"},"content":" tempT \u003d new Event(fields[2].trim(), time[0], time[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jylow"},"content":" if (fields[1].equals(\"1\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jylow"},"content":" tempT.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jylow"},"content":" tasklst.add(tempT);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"jylow"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"jylow"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"jylow"},"content":" * Marks a task within the tasklist as complete.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"jylow"},"content":" * @param taskNumber task number to be marked","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jylow"},"content":" * @param ui instance of user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"jylow"},"content":" * @throws InvalidTaskNumberException Error when given task number exceeds the number of tasks in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"jylow"},"content":" public void markTask(int taskNumber, Ui ui) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"jylow"},"content":" if (taskNumber \u003e tasklst.size()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"jylow"},"content":" throw new InvalidTaskNumberException(\"Error! Task Number given is outside range of current list size of \"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jylow"},"content":" + tasklst.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"jylow"},"content":" tasklst.get(taskNumber - 1).markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"jylow"},"content":" ui.showMarked(tasklst.get(taskNumber - 1));","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"jylow"},"content":" * Unmarks a task with the given task number in the tasklist.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"jylow"},"content":" * @param taskNumber task number to be unmarked","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"jylow"},"content":" * @param ui instance of user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"jylow"},"content":" * @throws InvalidTaskNumberException exception when the task number given is outside the count of tasklist","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"jylow"},"content":" public void unmarkTask(int taskNumber, Ui ui) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"jylow"},"content":" if (taskNumber \u003e tasklst.size()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"jylow"},"content":" throw new InvalidTaskNumberException(\"Error! Task Number given is outside range of current list size of \"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"jylow"},"content":" + tasklst.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"jylow"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"jylow"},"content":" tasklst.get(taskNumber - 1).unmarkAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"jylow"},"content":" ui.showUnmarked(tasklst.get(taskNumber - 1));","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"jylow"},"content":" * Adds given task to the tasklist.","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"jylow"},"content":" * @param task Task to be added to the list","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"jylow"},"content":" * @param ui instance of user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"jylow"},"content":" public void addTask(Task task, Ui ui) {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"jylow"},"content":" tasklst.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"jylow"},"content":" ui.showTaskAdded(task, tasklst.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"jylow"},"content":" * Deletes a task from the tasklist.","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"jylow"},"content":" * @param taskNumber Task number of task to be deleted","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"jylow"},"content":" * @param ui instance of user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"jylow"},"content":" * @throws InvalidTaskNumberException Exception when given task number is outside range of tasks in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"jylow"},"content":" public void deleteTask(int taskNumber, Ui ui) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"jylow"},"content":" if (taskNumber \u003e tasklst.size()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"jylow"},"content":" throw new InvalidTaskNumberException(\"Error! Task Number given is outside range of current list size of \"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"jylow"},"content":" + tasklst.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"jylow"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"jylow"},"content":" Task temp \u003d tasklst.remove(taskNumber - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"jylow"},"content":" ui.showComplete(\"Noted. I\u0027ve removed this task:\"","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"jylow"},"content":" + temp","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"jylow"},"content":" + \"Now you have \" + this.tasklst.size() + \" task(s) in the list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"jylow"},"content":" * Returns tasks in the tasklist in format to be written into a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"jylow"},"content":" * @return ArrayList of formatted strings to be written","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"jylow"},"content":" public ArrayList\u003cString\u003e toWriteFormat() {","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"jylow"},"content":" ArrayList\u003cString\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"jylow"},"content":" for (Task task : tasklst) {","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"jylow"},"content":" tasks.add(task.toSaveFormat());","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"jylow"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"jylow"},"content":" * Returns string representations of tasks in an arraylist to be printed by the UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"jylow"},"content":" * @return ArrayList of strings to be printed onto ui","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"jylow"},"content":" public ArrayList\u003cString\u003e getTaskStrings() {","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"jylow"},"content":" ArrayList\u003cString\u003e listOfStrings \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"jylow"},"content":" for (Task task : tasklst) {","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"jylow"},"content":" listOfStrings.add(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"jylow"},"content":" return listOfStrings;","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"jylow"},"content":" * Filters tasklist to search for a keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"jylow"},"content":" * @param keyword keyword to search if task description contains","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"jylow"},"content":" * @return Arraylist containing filtered tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"jylow"},"content":" public ArrayList\u003cString\u003e filterToList(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"jylow"},"content":" ArrayList\u003cString\u003e filteredList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"jylow"},"content":" for (Task task : tasklst) {","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"jylow"},"content":" if (task.contains(keyword)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"jylow"},"content":" filteredList.add(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"jylow"},"content":" return filteredList;","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":166}},{"path":"src/main/java/duke/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" * UI class that handles interaction with the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" private static final String LINE \u003d \"---------------------\"; //Line to be drawn on the screen","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" * Scans the next input given by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" * @return String containing the instructions by user","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" public String read() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * Prints line onto the console","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" public void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" * Prints complete message when action is carried out.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" * @param message complete message to be displayed","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" public void showComplete(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" * Prints error message when exception is thrown.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" * @param errorMessage message of the exception","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":" System.out.println(errorMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jylow"},"content":" * Prints message when task has been marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jylow"},"content":" * @param task task that was marked","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jylow"},"content":" public void showMarked(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jylow"},"content":" System.out.println(\"Nice! I\u0027ve Marked this task as done:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jylow"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jylow"},"content":" * Prints message when task has been unmarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jylow"},"content":" * @param task task that was unmarked","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jylow"},"content":" public void showUnmarked(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jylow"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jylow"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"jylow"},"content":" * Prints an error when fail to load file data onto the screen.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"jylow"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"jylow"},"content":" System.out.println(\"Error loading data! There is no file found with the given filepath!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jylow"},"content":" * Prints the welcome message","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"jylow"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"jylow"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"jylow"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"jylow"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jylow"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"jylow"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"jylow"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"jylow"},"content":" System.out.println(\" Hello! I\u0027m Somebodyhaha\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"jylow"},"content":" + \" What can I do for you?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"jylow"},"content":" * Prints the result after a task has been added.","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"jylow"},"content":" * @param task task that was added","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"jylow"},"content":" * @param count current number of tasks in the tasklist","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"jylow"},"content":" public void showTaskAdded(Task task, int count) {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"jylow"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"jylow"},"content":" System.out.println(\" \" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"jylow"},"content":" System.out.println(\"Now you have \" + (count) + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"jylow"},"content":" * Prints the list of tasks onto the ui.","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"jylow"},"content":" * @param tasks Arraylist of string of formatted tasks to be displayed.","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"jylow"},"content":" public void showTasks(ArrayList\u003cString\u003e tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"jylow"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"jylow"},"content":" for (String task : tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"jylow"},"content":" System.out.println(count + \". \" + task);","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"jylow"},"content":" count++;","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"jylow"},"content":" * Displays goodbye message.","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"jylow"},"content":" public void showGoodbye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"jylow"},"content":" System.out.println(\"Bye. Hope to See you again soon!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":115}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"public class EventTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" public void check_toString_output() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" // Creation of new ToDo results in correct toString output","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" assertEquals(\"[E] [ ] Party (from: 12 Dec 2023 1800 to: 12 Dec 2023 2000)\",","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" new Event(\"Party\", \"2023-12-12 1800\", \"2023-12-12 2000\").toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" //should not have an exception","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" public void check_invalidInput_exceptionThrown() {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" assertEquals(\"\", new Event(\"Party\",","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" \"2023-1-1 1800\",","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" \"2023-12-12 2000\").toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" fail(); //test should not reach this line","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" assertEquals(\"Text \u00272023-1-1\u0027 could not be parsed at index 5\", e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jylow":32}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" public void check_toString_output() {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" // Creation of new ToDo results in correct toString output","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" assertEquals(\"[T] [ ] Homework\", new ToDo(\"Homework\").toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" // Creation of new ToDo results in correct format to be written to file","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" assertEquals(\"T | 0 | Homework\", new ToDo(\"Homework\").toSaveFormat());","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jylow":17}},{"path":"src/test/java/duke/util/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.util;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" public void check_parse_output() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" //check if list command works","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" assert(Parser.parseUserInput(\"list\") instanceof ListCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" fail(); //should not reach this line","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" //check if add command works","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" assert(Parser.parseUserInput(\"todo homework\") instanceof AddCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" fail(); //should not reach this line","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" //check if invalid input throws an error","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" Parser.parseUserInput(\"invalid input string\");","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" fail(); //should not reach this line","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" assertEquals(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\", e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jylow":37}},{"path":"src/test/java/duke/util/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.util;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" public void check_writeFormat() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" //Checks if the write format gives the correct string output","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" TaskList tasklst \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" tasklst.addTask(new ToDo(\"Homework\"), ui);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" assertEquals(\"T | 0 | Homework\", tasklst.toWriteFormat().get(0));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jylow":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"todo read book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"deadline return book /by 6th June","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"todo join sports club","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"blah","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"mark 4","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jylow":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":"jylow"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" maven { url \u0027https://oss.sonatype.org/content/repositories/snapshots/\u0027 }","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" implementation group: \u0027com.joestelmach\u0027, name: \u0027natty\u0027, version: \u00270.13\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" mainClass.set(\"seedu.duke.Main\")","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"jylow":8,"-":43}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" * This program is a chatbot, B055man, used to mark completion of tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" * marking the completion of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" private TaskList tasklst;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" * Duke class that initialises a B055man Chatbot.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * @param filePath path location of the file to read previous stores","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" tasklst \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" tasklst \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" * Runs the B055man bot.","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":" String fullCommand \u003d ui.read();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jylow"},"content":" ui.showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jylow"},"content":" Command c \u003d Parser.parseUserInput(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jylow"},"content":" c.execute(tasklst, ui, storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jylow"},"content":" } catch (DukeException | IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jylow"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jylow"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jylow"},"content":" ui.showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jylow"},"content":" * The program reads input given by the user to perform functions to help","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jylow"},"content":" * add, edit, track and delete tasks inputted.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jylow"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jylow"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"jylow":62,"-":3}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import duke.exception.NoFileException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" private final Task task;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" * Constructor for an AddCommand.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" * @param task the task to be added to the list","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * Executes the current add command.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" * @param tasklst current list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" * @param ui instance of user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" * @param storage instance of storage to read and write files","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" * @throws NoFileException Exception thrown if there is no file found when rewriting","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" public void execute(TaskList tasklst, Ui ui, Storage storage) throws NoFileException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" tasklst.addTask(this.task, ui);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" storage.rewriteFile(tasklst);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" * Checks if the current task is an exit task.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" * @return false since task is not an exit task","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":43}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" * Abstract command class for commands to be executed after parsing","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" public abstract void execute(TaskList tasklst, Ui ui, Storage storage) throws DukeException, IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":15}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" private final int taskNumber;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" * Constructs a command containing the tasknumber in list to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" * @param taskNumber The position of task in the list to be deleted","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" public DeleteCommand(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" * Executes the delete command.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * @param tasklst list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" * @param ui ui component of the program","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" * @param storage storage componenet of the program","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" * @throws DukeException Errors that occur when trying to delete the task","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" public void execute(TaskList tasklst, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" tasklst.deleteTask(taskNumber, ui);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" storage.rewriteFile(tasklst);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" * Checks if the current task is an exit task.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" * @return false since task is not an exit task","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":43}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Command that causes the chatbot to terminate.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" * Constructor of a new ExitCommand.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" * Executes the exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" * @param tasklst list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" * @param ui ui component of the program","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" * @param storage storage componenet of the program","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" public void execute(TaskList tasklst, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" ui.showGoodbye();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" * Checks if the current task is an exit task.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" * @return true since task is an exit task","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":36}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" * Uses a keyword to find tasks that contain keyword in description.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" private final String keyword; //keyword to search for","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" * Constructor for a FindCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" * @param keyword keyword to search the tasklist for","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" super();","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" * Executes the instance of FindCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" * @param tasklst list of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" * @param ui instance of ui class","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" * @param storage instance of storage class","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" public void execute(TaskList tasklst, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" ui.showTasks(tasklst.filterToList(this.keyword));","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" * Checks if the current task is an exit task.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" * @return false since task is not an exit task","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jylow":43}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Command to list the current tasks stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" * Constructor for a list command.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" * Executes the current list command.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" * @param tasklst current list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" * @param ui instance of user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" * @param storage instance of storage to read and write files","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" public void execute(TaskList tasklst, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" ui.showTasks(tasklst.getTaskStrings());","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" * Checks if the current task is an exit task.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" * @return false since task is not an exit task","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":36}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * Command that marks the given task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" private final int taskNumber;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" * Constructs a command containing the tasknumber in list to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" * @param taskNumber The position of task in the list to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" public MarkCommand(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" * Executes the mark command.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" * @param tasklst list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * @param ui ui component of the program","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" * @param storage storage componenet of the program","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" * @throws DukeException Error if the task number is outside the task list","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" public void execute(TaskList tasklst, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" tasklst.markTask(taskNumber, ui);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" storage.rewriteFile(tasklst);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" * Checks if the current task is an exit task.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" * @return false since task is not an exit task","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":41}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * Command that marks the given task as incomplete.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" private final int taskNumber;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" * Constructor for an unmark command.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" * @param taskToMark The position of task in the list to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" public UnmarkCommand(int taskToMark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" this.taskNumber \u003d taskToMark;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" * Executes the current unmark command.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * @param tasklst current list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" * @param ui instance of user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" * @param storage instance of storage to read and write files","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" * @throws DukeException Exception thrown whilst executing the command","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" public void execute(TaskList tasklst, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" tasklst.unmarkTask(taskNumber, ui);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" storage.rewriteFile(tasklst);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" * Checks if the current task is an exit task.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" * @return false since task is not an exit task","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":43}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Exceptions that will be thrown whilst executing duke program.","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Constructor for a DukeException.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * @param errorMessage message to be shown when error is thrown","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jylow":13}},{"path":"src/main/java/duke/exception/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Exception when encountering invalid arguments.","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"public class InvalidArgumentException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Invalid argument exception that throws error when invalid","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * arguments are inputted with a function.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" * @param errorMessage message describing the error","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" public InvalidArgumentException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jylow":14}},{"path":"src/main/java/duke/exception/InvalidFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Exception when encountering invalid format.","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"public class InvalidFormatException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Constructor for InvalidFormatException.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * @param errorMessage message to be displayed when encountering error","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" public InvalidFormatException(String errorMessage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"jylow":13}},{"path":"src/main/java/duke/exception/InvalidTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Error when given task number is outside tasklist range.","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"public class InvalidTaskNumberException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Constructor for an InvalidTaskNumberException.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * @param errorMessage message to be displayed when error is thrown","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" public InvalidTaskNumberException(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":14}},{"path":"src/main/java/duke/exception/NoFileException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Error when there is no file found.","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"public class NoFileException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Constructor for a NiFileException.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * @param errorMessage message to be displayed when error is encountered","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" public NoFileException(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":13}},{"path":"src/main/java/duke/exception/NoTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Exception when there is no task given.","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"public class NoTaskException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Constructor of a NoTaskException.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * @param errorMessage message to be displayed when error is encountered","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" public NoTaskException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jylow":13}},{"path":"src/main/java/duke/exception/UnknownActionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Exception thrown when action entered is not a valid action.","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"public class UnknownActionException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Constructor for UnknownActionException.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * @param errorMessage message to be displayed when error encountered","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" public UnknownActionException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jylow":13}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import duke.exception.InvalidFormatException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" * Deadline instance of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" private final LocalDate dueDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" private String dueTime \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" * Constructs a Deadline with a given description. Completion of the task","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" * is false by default.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" * @param description The description of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * @param by The deadline the task must be completed by","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" public Deadline(String description, String by) throws InvalidFormatException {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" String[] temp \u003d by.split(\"\\\\s+\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" this.dueDate \u003d LocalDate.parse(temp[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" throw new InvalidFormatException(e.getMessage() + \"The correct format is YYYY-MM-DD HHHH(optional)\");","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" if (temp.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" this.dueTime \u003d temp[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" * Returns a formatted string of the status of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" * @return String containing completion status, type, description, and deadline of task","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.dueDate.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\"))","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jylow"},"content":" + \" \" + this.dueTime + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jylow"},"content":" * Returns a string formatted in the way it is to be saved.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jylow"},"content":" * @return Formatted string to be written into file","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jylow"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jylow"},"content":" return \"D | \" + (this.isDone ? 1 : 0) + \" | \" + this.description + \" | \"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jylow"},"content":" + this.dueDate + \" \" + this.dueTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jylow":58}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import duke.exception.InvalidFormatException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" * Event instance of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" private final LocalDate fromDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" private String fromTime \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" private final LocalDate toDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" private String toTime \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" * Constructs a event with a given description. Completion of the task","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" * is false by default.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" * @param description The description of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" * @param from The start time of the event","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * @param to The end time of the event","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" public Event(String description, String from, String to) throws InvalidFormatException {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" String[] fromTemp \u003d from.split(\"\\\\s+\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" String[] toTemp \u003d to.split(\"\\\\s+\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" this.fromDate \u003d LocalDate.parse(fromTemp[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" this.toDate \u003d LocalDate.parse(toTemp[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" throw new InvalidFormatException(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" if (fromTemp.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" this.fromTime \u003d fromTemp[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" if (toTemp.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" this.toTime \u003d toTemp[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":" * Returns a formatted string of the status of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jylow"},"content":" * @return String containing completion status, type, description, from and to of task","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"jylow"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jylow"},"content":" + \" (from: \" + this.fromDate.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\")) + \" \"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jylow"},"content":" + this.fromTime + \" to: \" + this.toDate.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\"))","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jylow"},"content":" + \" \" + this.toTime + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jylow"},"content":" * Returns a string formatted in the way it is to be saved.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jylow"},"content":" * @return Formatted string to be written into file","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jylow"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jylow"},"content":" return \"E | \" + (this.isDone ? 1 : 0) + \" | \" + this.description + \" | \"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jylow"},"content":" + this.fromDate + \" \" + this.fromTime + \"-\u003e\"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"jylow"},"content":" + this.toDate + \" \" + this.toTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jylow":66}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Task encapsulate a task with a String description and boolean isDone. It supports","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" * marking the completion of tasks","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" * Constructs a Task with a given description. Completion of the task","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" * is false by default.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" * Save format function to be overridden.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" * @return null in case of a Task","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" return null;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" * Returns the completion status of task with \"X\" meaning task is completed.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" * @return \"X\" if completed \" \" if still in progress","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" return isDone ? \"X\" : \" \";","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" * Returns a formatted string of the status of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" * @return String containing completion status and description of task","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" return \" [\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":" * Marks the current task as completed.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"jylow"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"jylow"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"jylow"},"content":" * Unmarks the current task as not completed.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"jylow"},"content":" public void unmarkAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"jylow"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"jylow"},"content":" * Checks if description of task contains given keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jylow"},"content":" * @param keyword keyword to be checked","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jylow"},"content":" * @return true if contains keyword else false","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"jylow"},"content":" public boolean contains(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jylow"},"content":" return this.description.contains(keyword);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jylow":66}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":" * Todo instance of a task","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":" * Construct a task with a given description. Completion of the task","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":" * is false by default.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" * @param description The description of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" * Returns a formatted string of the status of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" * @return String containing completion status, type and description of task","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" * Returns a string formatted in the way it is to be saved.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" * @return Formatted string to be written into file","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" return \"T | \" + (this.isDone ? 1 : 0) + \" | \" + this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jylow":32}},{"path":"src/main/java/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"import duke.exception.InvalidArgumentException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"import duke.exception.UnknownActionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" * Parser class that deals with deciphering user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * Parses input given by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" * @param userInput String of input given by the user","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" * @return Command instance depending on the action given by the user","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" * @throws DukeException Exceptions that will be encountered during parsing","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" public static Command parseUserInput(String userInput) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" String[] fields \u003d userInput.split(\"\\\\s+\");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" switch (fields[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" if (fields.length \u003e 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" throw new InvalidArgumentException(\"Please enter \u0027list\u0027 without any extra arguments \"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" + \"or use a different \"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" + \"keyword\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" case \"find\":","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" if (fields.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" throw new InvalidArgumentException(\"Please enter \u0027find {keyword}\u0027 without any extra arguments \"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":" + \"or use a different \"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":" + \"keyword\");","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"jylow"},"content":" return new FindCommand(fields[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jylow"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jylow"},"content":" if (fields.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" throw new InvalidArgumentException(\"Please enter \u0027mark {task number}\u0027 or use a different \"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jylow"},"content":" + \"keyword\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jylow"},"content":" return new MarkCommand(Character.getNumericValue(fields[1].charAt(0)));","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jylow"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jylow"},"content":" if (fields.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jylow"},"content":" throw new InvalidArgumentException(\"Please enter \u0027mark {task number}\u0027 or use a different \"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jylow"},"content":" + \"keyword\");","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jylow"},"content":" return new UnmarkCommand(Character.getNumericValue(fields[1].charAt(0)));","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jylow"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jylow"},"content":" if (fields.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jylow"},"content":" throw new InvalidArgumentException(\"Please enter \u0027delete {task number}\u0027 \"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jylow"},"content":" + \"or use a different \"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"jylow"},"content":" + \"keyword\");","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"jylow"},"content":" return new DeleteCommand(Character.getNumericValue(fields[1].charAt(0)));","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"jylow"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"jylow"},"content":" String description \u003d userInput.replace(\"todo\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"jylow"},"content":" Task todo \u003d new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"jylow"},"content":" return new AddCommand(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"jylow"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"jylow"},"content":" fields \u003d userInput.replace(\"deadline\", \"\").split(\" /by \");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jylow"},"content":" if (fields.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"jylow"},"content":" throw new InvalidArgumentException(\"Please enter \u0027deadline {task description} \"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"jylow"},"content":" + \"\u0027/by\u0027 {date}\u0027 or use a different \"","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"jylow"},"content":" + \"keyword\");","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"jylow"},"content":" Task deadline \u003d new Deadline(fields[0], fields[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jylow"},"content":" return new AddCommand(deadline);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"jylow"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"jylow"},"content":" fields \u003d userInput.replace(\"event\", \"\").split(\" /from | /to \");","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"jylow"},"content":" if (fields.length !\u003d 3) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"jylow"},"content":" throw new InvalidArgumentException(\"Please enter \u0027event {task description} \"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"jylow"},"content":" + \"\u0027/from\u0027 {start} \u0027/to\u0027 {finish} \"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"jylow"},"content":" + \"or use a different \"","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"jylow"},"content":" + \"keyword\");","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"jylow"},"content":" Task event \u003d new Event(fields[0], fields[1], fields[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"jylow"},"content":" return new AddCommand(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"jylow"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"jylow"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"jylow"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"jylow"},"content":" throw new UnknownActionException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":95}},{"path":"src/main/java/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"import duke.exception.NoFileException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" * Storage class to help with reading and writing of data from files.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" private final String filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" * Constructs a event with a given description. Completion of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" * is false by default.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" * @param filePath The location of the file to be read.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" * Loads data from file into an ArrayList to be further processed.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" * @return ArrayList of string containing the information read from the file","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" * @throws NoFileException throws an error if no such file is found with the given filepath","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" public ArrayList\u003cString\u003e load() throws NoFileException {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" ArrayList\u003cString\u003e fileData \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" Scanner fileReader \u003d new Scanner(f);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" while (fileReader.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" String info \u003d fileReader.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" fileData.add(info);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" fileReader.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" return fileData;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":" throw new NoFileException(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jylow"},"content":" * Writes the current tasklist back into a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" * @param tasklst ArrayList of strings to be written into the file","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jylow"},"content":" * @throws NoFileException Exception when file to be written in cannot be found","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jylow"},"content":" public void rewriteFile(TaskList tasklst) throws NoFileException {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jylow"},"content":" ArrayList\u003cString\u003e tasks \u003d tasklst.toWriteFormat();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jylow"},"content":" FileWriter fw \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jylow"},"content":" for (String task : tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jylow"},"content":" fw.append(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jylow"},"content":" fw.append(System.lineSeparator());","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jylow"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jylow"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jylow"},"content":" throw new NoFileException(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":65}},{"path":"src/main/java/duke/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.exception.InvalidTaskNumberException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import duke.exception.NoTaskException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" * Tasklist containing the tasks added by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" private final ArrayList\u003cTask\u003e tasklst;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" * Constructor for an instance of an empty tasklist.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" this.tasklst \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" * Constructor for a tasklist with a string of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" * @param fileData ArrayList of strings with each string being a task to be added into the tasklist","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" * @throws DukeException exceptions that will be encountered when trying to add tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" public TaskList(ArrayList\u003cString\u003e fileData) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" String[] fields;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" this.tasklst \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" for (String info : fileData) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" fields \u003d info.split(\" \\\\| \");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" Task tempT;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":" switch (fields[0].trim()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" case \"T\":","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" if (fields[2].isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" throw new NoTaskException(\"Error! Cannot add an empty todo!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" tempT \u003d new ToDo(fields[2].trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":" if (fields[1].equals(\"1\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":" tempT.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jylow"},"content":" tasklst.add(tempT);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jylow"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jylow"},"content":" case \"D\":","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" tempT \u003d new Deadline(fields[2].trim(), fields[3]);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jylow"},"content":" if (fields[1].equals(\"1\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jylow"},"content":" tempT.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jylow"},"content":" tasklst.add(tempT);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jylow"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jylow"},"content":" case \"E\":","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jylow"},"content":" String[] time;","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jylow"},"content":" time \u003d fields[3].split(\"-\u003e\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jylow"},"content":" tempT \u003d new Event(fields[2].trim(), time[0], time[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jylow"},"content":" if (fields[1].equals(\"1\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jylow"},"content":" tempT.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jylow"},"content":" tasklst.add(tempT);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"jylow"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"jylow"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"jylow"},"content":" * Marks a task within the tasklist as complete.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"jylow"},"content":" * @param taskNumber task number to be marked","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jylow"},"content":" * @param ui instance of user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"jylow"},"content":" * @throws InvalidTaskNumberException Error when given task number exceeds the number of tasks in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"jylow"},"content":" public void markTask(int taskNumber, Ui ui) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"jylow"},"content":" if (taskNumber \u003e tasklst.size()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"jylow"},"content":" throw new InvalidTaskNumberException(\"Error! Task Number given is outside range of current list size of \"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jylow"},"content":" + tasklst.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"jylow"},"content":" tasklst.get(taskNumber - 1).markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"jylow"},"content":" ui.showMarked(tasklst.get(taskNumber - 1));","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"jylow"},"content":" * Unmarks a task with the given task number in the tasklist.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"jylow"},"content":" * @param taskNumber task number to be unmarked","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"jylow"},"content":" * @param ui instance of user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"jylow"},"content":" * @throws InvalidTaskNumberException exception when the task number given is outside the count of tasklist","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"jylow"},"content":" public void unmarkTask(int taskNumber, Ui ui) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"jylow"},"content":" if (taskNumber \u003e tasklst.size()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"jylow"},"content":" throw new InvalidTaskNumberException(\"Error! Task Number given is outside range of current list size of \"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"jylow"},"content":" + tasklst.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"jylow"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"jylow"},"content":" tasklst.get(taskNumber - 1).unmarkAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"jylow"},"content":" ui.showUnmarked(tasklst.get(taskNumber - 1));","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"jylow"},"content":" * Adds given task to the tasklist.","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"jylow"},"content":" * @param task Task to be added to the list","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"jylow"},"content":" * @param ui instance of user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"jylow"},"content":" public void addTask(Task task, Ui ui) {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"jylow"},"content":" tasklst.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"jylow"},"content":" ui.showTaskAdded(task, tasklst.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"jylow"},"content":" * Deletes a task from the tasklist.","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"jylow"},"content":" * @param taskNumber Task number of task to be deleted","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"jylow"},"content":" * @param ui instance of user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"jylow"},"content":" * @throws InvalidTaskNumberException Exception when given task number is outside range of tasks in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"jylow"},"content":" public void deleteTask(int taskNumber, Ui ui) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"jylow"},"content":" if (taskNumber \u003e tasklst.size()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"jylow"},"content":" throw new InvalidTaskNumberException(\"Error! Task Number given is outside range of current list size of \"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"jylow"},"content":" + tasklst.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"jylow"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"jylow"},"content":" Task temp \u003d tasklst.remove(taskNumber - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"jylow"},"content":" ui.showComplete(\"Noted. I\u0027ve removed this task:\"","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"jylow"},"content":" + temp","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"jylow"},"content":" + \"Now you have \" + this.tasklst.size() + \" task(s) in the list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"jylow"},"content":" * Returns tasks in the tasklist in format to be written into a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"jylow"},"content":" * @return ArrayList of formatted strings to be written","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"jylow"},"content":" public ArrayList\u003cString\u003e toWriteFormat() {","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"jylow"},"content":" ArrayList\u003cString\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"jylow"},"content":" for (Task task : tasklst) {","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"jylow"},"content":" tasks.add(task.toSaveFormat());","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"jylow"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"jylow"},"content":" * Returns string representations of tasks in an arraylist to be printed by the UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"jylow"},"content":" * @return ArrayList of strings to be printed onto ui","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"jylow"},"content":" public ArrayList\u003cString\u003e getTaskStrings() {","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"jylow"},"content":" ArrayList\u003cString\u003e listOfStrings \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"jylow"},"content":" for (Task task : tasklst) {","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"jylow"},"content":" listOfStrings.add(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"jylow"},"content":" return listOfStrings;","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"jylow"},"content":" * Filters tasklist to search for a keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"jylow"},"content":" * @param keyword keyword to search if task description contains","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"jylow"},"content":" * @return Arraylist containing filtered tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"jylow"},"content":" public ArrayList\u003cString\u003e filterToList(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"jylow"},"content":" ArrayList\u003cString\u003e filteredList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"jylow"},"content":" for (Task task : tasklst) {","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"jylow"},"content":" if (task.contains(keyword)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"jylow"},"content":" filteredList.add(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"jylow"},"content":" return filteredList;","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":166}},{"path":"src/main/java/duke/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" * UI class that handles interaction with the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" private static final String LINE \u003d \"---------------------\"; //Line to be drawn on the screen","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" * Scans the next input given by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" * @return String containing the instructions by user","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" public String read() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" * Prints line onto the console","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" public void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" * Prints complete message when action is carried out.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" * @param message complete message to be displayed","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" public void showComplete(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jylow"},"content":" * Prints error message when exception is thrown.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jylow"},"content":" * @param errorMessage message of the exception","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jylow"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jylow"},"content":" System.out.println(errorMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jylow"},"content":" * Prints message when task has been marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jylow"},"content":" * @param task task that was marked","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jylow"},"content":" public void showMarked(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jylow"},"content":" System.out.println(\"Nice! I\u0027ve Marked this task as done:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jylow"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jylow"},"content":" * Prints message when task has been unmarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jylow"},"content":" * @param task task that was unmarked","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jylow"},"content":" public void showUnmarked(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jylow"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jylow"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"jylow"},"content":" * Prints an error when fail to load file data onto the screen.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"jylow"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"jylow"},"content":" System.out.println(\"Error loading data! There is no file found with the given filepath!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jylow"},"content":" * Prints the welcome message","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"jylow"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"jylow"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"jylow"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"jylow"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jylow"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"jylow"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"jylow"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"jylow"},"content":" System.out.println(\" Hello! I\u0027m B055man\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"jylow"},"content":" + \" What can I do for you today?\");","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"jylow"},"content":" * Prints the result after a task has been added.","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"jylow"},"content":" * @param task task that was added","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"jylow"},"content":" * @param count current number of tasks in the tasklist","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"jylow"},"content":" public void showTaskAdded(Task task, int count) {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"jylow"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"jylow"},"content":" System.out.println(\" \" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"jylow"},"content":" System.out.println(\"Now you have \" + (count) + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"jylow"},"content":" * Prints the list of tasks onto the ui.","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"jylow"},"content":" * @param tasks Arraylist of string of formatted tasks to be displayed.","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"jylow"},"content":" public void showTasks(ArrayList\u003cString\u003e tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"jylow"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"jylow"},"content":" for (String task : tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"jylow"},"content":" System.out.println(count + \". \" + task);","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"jylow"},"content":" count++;","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"jylow"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"jylow"},"content":" * Displays goodbye message.","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"jylow"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"jylow"},"content":" public void showGoodbye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"jylow"},"content":" System.out.println(\"Bye. Hope to See you again soon!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jylow":115}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"public class EventTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" public void check_toString_output() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" // Creation of new ToDo results in correct toString output","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" assertEquals(\"[E] [ ] Party (from: 12 Dec 2023 1800 to: 12 Dec 2023 2000)\",","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" new Event(\"Party\", \"2023-12-12 1800\", \"2023-12-12 2000\").toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" //should not have an exception","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" public void check_invalidInput_exceptionThrown() {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" assertEquals(\"\", new Event(\"Party\",","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" \"2023-1-1 1800\",","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" \"2023-12-12 2000\").toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" fail(); //test should not reach this line","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" assertEquals(\"Text \u00272023-1-1\u0027 could not be parsed at index 5\", e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jylow":32}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":" public void check_toString_output() {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":" // Creation of new ToDo results in correct toString output","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" assertEquals(\"[T] [ ] Homework\", new ToDo(\"Homework\").toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" // Creation of new ToDo results in correct format to be written to file","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" assertEquals(\"T | 0 | Homework\", new ToDo(\"Homework\").toSaveFormat());","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jylow":17}},{"path":"src/test/java/duke/util/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.util;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" public void check_parse_output() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" //check if list command works","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" assert(Parser.parseUserInput(\"list\") instanceof ListCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" fail(); //should not reach this line","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jylow"},"content":" //check if add command works","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jylow"},"content":" assert(Parser.parseUserInput(\"todo homework\") instanceof AddCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jylow"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jylow"},"content":" fail(); //should not reach this line","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jylow"},"content":" //check if invalid input throws an error","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jylow"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jylow"},"content":" Parser.parseUserInput(\"invalid input string\");","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jylow"},"content":" fail(); //should not reach this line","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jylow"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jylow"},"content":" assertEquals(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\", e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jylow":37}},{"path":"src/test/java/duke/util/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"package duke.util;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jylow"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jylow"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jylow"},"content":" public void check_writeFormat() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jylow"},"content":" //Checks if the write format gives the correct string output","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jylow"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jylow"},"content":" TaskList tasklst \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jylow"},"content":" tasklst.addTask(new ToDo(\"Homework\"), ui);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jylow"},"content":" assertEquals(\"T | 0 | Homework\", tasklst.toWriteFormat().get(0));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jylow"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jylow"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jylow":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jylow"},"content":"todo read book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"jylow"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"jylow"},"content":"deadline return book /by 6th June","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"jylow"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"jylow"},"content":"todo join sports club","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jylow"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jylow"},"content":"blah","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jylow"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jylow"},"content":"mark 4","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jylow"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jylow":10}}] diff --git a/jylow_ip_master/commits.json b/jylow_ip_master/commits.json index 5444259d..7bd00ee6 100644 --- a/jylow_ip_master/commits.json +++ b/jylow_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"jylow":[{"date":"2023-08-22","commitResults":[{"hash":"b5aa68d63fdd4770693967c233c3e10c95b0d034","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"e2765b73d914ece46ffb61ec9c58fd47df6b39f4","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"2c154b269eab3340f479cab35b855c59dcb08c46","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"52d42eec6212642712668520ab3d8ee24830ab87","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":6}}},{"hash":"99caea2a04f5a95049084adde6404f8ebf1a12e3","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":7}}},{"hash":"3f0c4e2b20403aebb123c0ceb821717d3e72d7b1","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":11}}},{"hash":"5cc98f1f0fc2beaab70fd671c796388288972453","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":165,"deletions":26}}}]},{"date":"2023-08-23","commitResults":[{"hash":"8ed1b0eee00714f32dbc52b091b4814f5defc09a","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":0,"deletions":1}}},{"hash":"5ec95ba9383efd87214282511bee68cc5ffd8089","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":110,"deletions":45}}},{"hash":"4dba30eb65325cb6082dbd5b06b993ea1ecf0809","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":11}}},{"hash":"f2886241008659a30fb0f3958ced24e2ee077308","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":23}}}]},{"date":"2023-08-30","commitResults":[{"hash":"30ac23d475ac39d80ae18ca6525fd7548dd63ce2","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":200,"deletions":70}}},{"hash":"c901872ed153dfdba5ec76945d1e5e0d0a7f80c3","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":200,"deletions":70}}}]},{"date":"2023-08-31","commitResults":[{"hash":"7594578b9684815167a30c7cd0ccf50fc0c19a09","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":36}}},{"hash":"36ee12e6a9a01200ade2cd9a926492ba86ad2214","isMergeCommit":true,"messageTitle":"Merge pull request #2 from jylow/branch-Level-8","messageBody":"Level-8","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"cf5d97f5ceabdb708fb582caee0a053f0c35cdd2","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":716,"deletions":366}}},{"hash":"d3b615b4f991eeca8b9edd95b21e221dd504d75d","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"954dab70003bc44a1a5773c8193653104cfa670e","isMergeCommit":true,"messageTitle":"Merge pull request #4 from jylow/branch-A-MoreOOP","messageBody":"Add better OOP design","fileTypesAndContributionMap":{}},{"hash":"2887bc44c538a39c457edb55facf776647d4a6a3","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":3}}},{"hash":"1f9358c41536e429deef8694a83c1d2d199dad95","isMergeCommit":true,"messageTitle":"Merge pull request #5 from jylow/branch-A-Packages","messageBody":"Sort classes into packages","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"a5d51dea53d2162b7a6a7ce892521c5323f6cf66","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":9,"deletions":1},"java":{"insertions":17,"deletions":0}}},{"hash":"f5972cbbab674786f95cd7d3b1b3d0d7fc0aae9a","isMergeCommit":true,"messageTitle":"Merge pull request #6 from jylow/add-gradle-support","messageBody":"Add gradle support","fileTypesAndContributionMap":{}},{"hash":"e5d7059f438fee45b696409f6fd267c14d00e678","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":267,"deletions":175}}},{"hash":"666c498949766d72a41cbda1b38d9a85341cdafb","isMergeCommit":true,"messageTitle":"Merge pull request #7 from jylow/branch-A-JUnit","messageBody":"Add JUnit tests","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"8d73678a42ac474a5e46a4f0cab776721cfeb120","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"5ac606ad68f4c395fd84a13289268567011a71f2","isMergeCommit":true,"messageTitle":"Merge pull request #8 from jylow/branch-A-Jar","messageBody":"Add A-Jar","fileTypesAndContributionMap":{}},{"hash":"b5e26cef833a3e623722c566653f63cbe6f6b197","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":5}}},{"hash":"82e2ed699f4fe22a06ff3e5ecf378c469b6ebdd4","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":10}}}]},{"date":"2023-09-05","commitResults":[{"hash":"f7ded63af614de603c961d5ceb68857b9fe7d7b7","isMergeCommit":true,"messageTitle":"Merge pull request #10 from jylow/branch-A-JavaDoc","messageBody":"Add JavaDoc","fileTypesAndContributionMap":{}},{"hash":"d844d74a6cba9b91f7331fe9adeaae852b155cf9","isMergeCommit":true,"messageTitle":"Merge pull request #9 from jylow/branch-Level-9","messageBody":"Add find feature","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"jylow":{"java":1224,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":8,"txt":10}},"authorContributionVariance":{"jylow":90937.016},"authorDisplayNameMap":{"jylow":"CS2103T-F12-1 LOW ..N YU"}} +{"authorDailyContributionsMap":{"jylow":[{"date":"2023-08-22","commitResults":[{"hash":"b5aa68d63fdd4770693967c233c3e10c95b0d034","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"e2765b73d914ece46ffb61ec9c58fd47df6b39f4","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"2c154b269eab3340f479cab35b855c59dcb08c46","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"52d42eec6212642712668520ab3d8ee24830ab87","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":6}}},{"hash":"99caea2a04f5a95049084adde6404f8ebf1a12e3","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":7}}},{"hash":"3f0c4e2b20403aebb123c0ceb821717d3e72d7b1","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":11}}},{"hash":"5cc98f1f0fc2beaab70fd671c796388288972453","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":165,"deletions":26}}}]},{"date":"2023-08-23","commitResults":[{"hash":"8ed1b0eee00714f32dbc52b091b4814f5defc09a","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":0,"deletions":1}}},{"hash":"5ec95ba9383efd87214282511bee68cc5ffd8089","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":110,"deletions":45}}},{"hash":"4dba30eb65325cb6082dbd5b06b993ea1ecf0809","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":11}}},{"hash":"f2886241008659a30fb0f3958ced24e2ee077308","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":23}}}]},{"date":"2023-08-30","commitResults":[{"hash":"30ac23d475ac39d80ae18ca6525fd7548dd63ce2","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":200,"deletions":70}}},{"hash":"c901872ed153dfdba5ec76945d1e5e0d0a7f80c3","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":200,"deletions":70}}}]},{"date":"2023-08-31","commitResults":[{"hash":"7594578b9684815167a30c7cd0ccf50fc0c19a09","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":36}}},{"hash":"36ee12e6a9a01200ade2cd9a926492ba86ad2214","isMergeCommit":true,"messageTitle":"Merge pull request #2 from jylow/branch-Level-8","messageBody":"Level-8","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"cf5d97f5ceabdb708fb582caee0a053f0c35cdd2","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":716,"deletions":366}}},{"hash":"d3b615b4f991eeca8b9edd95b21e221dd504d75d","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"954dab70003bc44a1a5773c8193653104cfa670e","isMergeCommit":true,"messageTitle":"Merge pull request #4 from jylow/branch-A-MoreOOP","messageBody":"Add better OOP design","fileTypesAndContributionMap":{}},{"hash":"2887bc44c538a39c457edb55facf776647d4a6a3","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":3}}},{"hash":"1f9358c41536e429deef8694a83c1d2d199dad95","isMergeCommit":true,"messageTitle":"Merge pull request #5 from jylow/branch-A-Packages","messageBody":"Sort classes into packages","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"a5d51dea53d2162b7a6a7ce892521c5323f6cf66","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":9,"deletions":1},"java":{"insertions":17,"deletions":0}}},{"hash":"f5972cbbab674786f95cd7d3b1b3d0d7fc0aae9a","isMergeCommit":true,"messageTitle":"Merge pull request #6 from jylow/add-gradle-support","messageBody":"Add gradle support","fileTypesAndContributionMap":{}},{"hash":"e5d7059f438fee45b696409f6fd267c14d00e678","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":267,"deletions":175}}},{"hash":"666c498949766d72a41cbda1b38d9a85341cdafb","isMergeCommit":true,"messageTitle":"Merge pull request #7 from jylow/branch-A-JUnit","messageBody":"Add JUnit tests","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"8d73678a42ac474a5e46a4f0cab776721cfeb120","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"5ac606ad68f4c395fd84a13289268567011a71f2","isMergeCommit":true,"messageTitle":"Merge pull request #8 from jylow/branch-A-Jar","messageBody":"Add A-Jar","fileTypesAndContributionMap":{}},{"hash":"b5e26cef833a3e623722c566653f63cbe6f6b197","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":5}}},{"hash":"82e2ed699f4fe22a06ff3e5ecf378c469b6ebdd4","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":10}}}]},{"date":"2023-09-05","commitResults":[{"hash":"f7ded63af614de603c961d5ceb68857b9fe7d7b7","isMergeCommit":true,"messageTitle":"Merge pull request #10 from jylow/branch-A-JavaDoc","messageBody":"Add JavaDoc","fileTypesAndContributionMap":{}},{"hash":"d844d74a6cba9b91f7331fe9adeaae852b155cf9","isMergeCommit":true,"messageTitle":"Merge pull request #9 from jylow/branch-Level-9","messageBody":"Add find feature","fileTypesAndContributionMap":{}},{"hash":"c0a51ca0019d0b3d3dc5875cd599b1c92e3d5b46","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"db3c55031073cc5817ba4c95a756c5fd9ff72307","isMergeCommit":true,"messageTitle":"Merge pull request #11 from jylow/branch-A-CodingStandard","messageBody":"Add coding standard","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"jylow":{"java":1224,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":8,"txt":10}},"authorContributionVariance":{"jylow":90769.59},"authorDisplayNameMap":{"jylow":"CS2103T-F12-1 LOW ..N YU"}} diff --git a/kenvynKwek_ip_master/authorship.json b/kenvynKwek_ip_master/authorship.json index 71097f56..e3dcec5e 100644 --- a/kenvynKwek_ip_master/authorship.json +++ b/kenvynKwek_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/dogebot/DateTimeHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package dogebot;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":"public class DateTimeHandler {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":" private LocalDateTime date;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":" public DateTimeHandler (String s) {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":" if (!s.contains(\"/\")) { // reading from \u0027tasklist.txt\u0027, change format","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy K:mma\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":" this.date \u003d LocalDateTime.parse(s, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":" String[] temp \u003d s.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":" // date","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":" String[] dateSplit \u003d temp[0].split(\"/\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":" int day \u003d Integer.parseInt(dateSplit[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":" int month \u003d Integer.parseInt(dateSplit[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"kenvynKwek"},"content":" int year \u003d Integer.parseInt(dateSplit[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"kenvynKwek"},"content":" // time","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"kenvynKwek"},"content":" int hour \u003d Integer.parseInt(temp[1]) / 100;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"kenvynKwek"},"content":" int min \u003d Integer.parseInt(temp[1]) % 100;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"kenvynKwek"},"content":" this.date \u003d LocalDateTime.of(year, month, day, hour, min);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"kenvynKwek"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"kenvynKwek"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"kenvynKwek"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy K:mma\");","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"kenvynKwek"},"content":" String formatDateTime \u003d date.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"kenvynKwek"},"content":" return formatDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"kenvynKwek":33}},{"path":"src/main/java/dogebot/DogeBot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package dogebot;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":"public class DogeBot {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":" private static final String HOME \u003d System.getProperty(\"user.home\"); // get relative path","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":" private static final java.nio.file.Path PATH \u003d java.nio.file.Paths.get(HOME, \"OneDrive\", \"Desktop\", \"iP\",","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":" \"src\", \"main\");","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":" private static File file;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":" private Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":" private Parser userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":" protected static TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":" public DogeBot(String filename) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"kenvynKwek"},"content":" file \u003d new File(PATH.toString(), filename);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"kenvynKwek"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"kenvynKwek"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"kenvynKwek"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"kenvynKwek"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"kenvynKwek"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"kenvynKwek"},"content":" userInput \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"kenvynKwek"},"content":" storage \u003d new Storage(file);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"kenvynKwek"},"content":" tasks \u003d new TaskList(storage.readFromTxtFile());","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"kenvynKwek"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"kenvynKwek"},"content":" ui.intro();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"kenvynKwek"},"content":" boolean isLoop \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"kenvynKwek"},"content":" while (isLoop) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"kenvynKwek"},"content":" isLoop \u003d userInput.scan();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"kenvynKwek"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"kenvynKwek"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"kenvynKwek"},"content":" new DogeBot(\"tasklist.txt\").run();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kenvynKwek":45}},{"path":"src/main/java/dogebot/DogeBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package dogebot;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"public class DogeBotException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":" public DogeBotException (String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kenvynKwek":7}},{"path":"src/main/java/dogebot/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package dogebot;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"import java.util.InputMismatchException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":" public boolean scan() {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":" boolean isLoop \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":" switch (sc.next().toLowerCase()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":" isLoop \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Bye~ See you again\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"kenvynKwek"},"content":" TaskList.list();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"kenvynKwek"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"kenvynKwek"},"content":" TaskList.mark(sc.nextInt() - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"kenvynKwek"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"kenvynKwek"},"content":" TaskList.unmark(sc.nextInt() - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"kenvynKwek"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"kenvynKwek"},"content":" TaskList.todo(sc.nextLine().trim()); // sc.nextLine() to get the remaining words","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"kenvynKwek"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"kenvynKwek"},"content":" TaskList.deadline(sc.nextLine().trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"kenvynKwek"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"kenvynKwek"},"content":" TaskList.event(sc.nextLine().trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"kenvynKwek"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"kenvynKwek"},"content":" TaskList.delete(sc.nextInt() - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"kenvynKwek"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Wuff, I\u0027m not sure what that means :(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"kenvynKwek"},"content":" sc.nextLine(); // absorb remaining words so \u0027default\u0027 block doesn\u0027t act up","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"kenvynKwek"},"content":" } catch (InputMismatchException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"kenvynKwek"},"content":" sc.nextLine(); // absorb remaining words so \u0027default\u0027 block doesn\u0027t act up","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Oops ! Integers only please :c\");","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"kenvynKwek"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Oh no :( I think that number is too big~\");","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"kenvynKwek"},"content":" } catch (DogeBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"kenvynKwek"},"content":" if (isLoop) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"kenvynKwek"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"kenvynKwek"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"kenvynKwek"},"content":" sc.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"kenvynKwek"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"kenvynKwek":58}},{"path":"src/main/java/dogebot/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package dogebot;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":"import tasks.ToDos;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"kenvynKwek"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"kenvynKwek"},"content":" private File file;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"kenvynKwek"},"content":" public Storage(File file) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"kenvynKwek"},"content":" this.file \u003d file;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"kenvynKwek"},"content":" public ArrayList\u003cTask\u003e readFromTxtFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"kenvynKwek"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"kenvynKwek"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"kenvynKwek"},"content":" Scanner reader \u003d new Scanner(file);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"kenvynKwek"},"content":" while (reader.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"kenvynKwek"},"content":" String s \u003d reader.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"kenvynKwek"},"content":" String[] sArray \u003d s.split(\"\\\\|\");","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"kenvynKwek"},"content":" String description \u003d sArray[2].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"kenvynKwek"},"content":" boolean isDone \u003d (sArray[1].trim().equals(\"1\")) ? true : false;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"kenvynKwek"},"content":" switch (sArray[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"kenvynKwek"},"content":" case \"T \":","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"kenvynKwek"},"content":" tasks.add(new ToDos(description, isDone));","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"kenvynKwek"},"content":" case \"D \":","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"kenvynKwek"},"content":" String by \u003d sArray[3].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"kenvynKwek"},"content":" tasks.add(new Deadline(description, by, isDone));","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"kenvynKwek"},"content":" case \"E \":","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"kenvynKwek"},"content":" String[] duration \u003d sArray[3].split(\"-\");","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"kenvynKwek"},"content":" String start \u003d duration[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"kenvynKwek"},"content":" String end \u003d duration[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"kenvynKwek"},"content":" tasks.add(new Event(description, start, end, isDone));","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"kenvynKwek"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"kenvynKwek"},"content":" reader.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"kenvynKwek"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"kenvynKwek"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"kenvynKwek"},"content":" public void save(TaskList tasks) { // overwrite \u0027tasklist.txt\u0027 with \u0027tasks\u0027 arraylist","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"kenvynKwek"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"kenvynKwek"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"kenvynKwek"},"content":" BufferedWriter bw \u003d new BufferedWriter(fw);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"kenvynKwek"},"content":" for (Task task : tasks.get()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"kenvynKwek"},"content":" bw.write(task.toString() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"kenvynKwek"},"content":" bw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"kenvynKwek"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"kenvynKwek"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"kenvynKwek":71}},{"path":"src/main/java/dogebot/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package dogebot;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":"import tasks.ToDos;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":" private static ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":" public TaskList(ArrayList\u003cTask\u003e tasklist) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":" this.tasks \u003d tasklist;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":" public ArrayList\u003cTask\u003e get() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"kenvynKwek"},"content":" public static void list() throws DogeBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"kenvynKwek"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"kenvynKwek"},"content":" throw new DogeBotException(\"Oops ! Your list is empty ! Try adding some tasks first c:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Stuff to do:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"kenvynKwek"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"kenvynKwek"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"kenvynKwek"},"content":" if (task \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(i++ + \". \" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"kenvynKwek"},"content":" public static void mark(int index) throws DogeBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"kenvynKwek"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"kenvynKwek"},"content":" throw new DogeBotException(\"Oops ! Try adding some tasks first c:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"kenvynKwek"},"content":" tasks.get(index).markTask(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Good job on completing a task ! You deserve a cookie C:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"\\t\" + tasks.get(index).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"kenvynKwek"},"content":" public static void unmark (int index) throws DogeBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"kenvynKwek"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"kenvynKwek"},"content":" throw new DogeBotException(\"Oops ! Try adding some tasks first c:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"kenvynKwek"},"content":" tasks.get(index).markTask(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Oh nyo, did someone make a mistake ?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"\\t\" + tasks.get(index).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"kenvynKwek"},"content":" public static void updateTasksCounter() {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"You now have \" + tasks.size() + \" task(s) in your list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"kenvynKwek"},"content":" public static void todo(String words) throws DogeBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"kenvynKwek"},"content":" if (words.isBlank()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"kenvynKwek"},"content":" throw new DogeBotException(\"Oops ! The description of a todo cannot be empty :(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Mama mia ! I\u0027ve just added this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"kenvynKwek"},"content":" Task temp \u003d new ToDos(words, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"kenvynKwek"},"content":" tasks.add(temp);","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"\\t\" + temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"kenvynKwek"},"content":" updateTasksCounter();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"kenvynKwek"},"content":" public static void deadline(String words) throws DogeBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"kenvynKwek"},"content":" if (words.isBlank()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"kenvynKwek"},"content":" throw new DogeBotException(\"Oops ! The description of a deadline cannot be empty :(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"kenvynKwek"},"content":" int split \u003d words.indexOf(\"/by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"kenvynKwek"},"content":" // substring w/o the spaces","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"kenvynKwek"},"content":" String taskDescription \u003d words.substring(0, split - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"kenvynKwek"},"content":" String taskDeadline \u003d words.substring(split + 4, words.length());","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Mama mia ! I\u0027ve just added this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"kenvynKwek"},"content":" Task temp \u003d new Deadline(taskDescription, taskDeadline, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"kenvynKwek"},"content":" tasks.add(temp);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"\\t\" + temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"kenvynKwek"},"content":" updateTasksCounter();","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"kenvynKwek"},"content":" public static void event(String words) throws DogeBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"kenvynKwek"},"content":" if (words.isBlank()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"kenvynKwek"},"content":" throw new DogeBotException(\"Oops ! The description of an event cannot be empty :(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"kenvynKwek"},"content":" // substring w/o the spaces","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"kenvynKwek"},"content":" int startSplit \u003d words.indexOf(\"/from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"kenvynKwek"},"content":" String taskDescription \u003d words.substring(0, startSplit - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"kenvynKwek"},"content":" int endSplit \u003d words.indexOf(\"/to\", startSplit + 1); // find \"/\" after startSplit index","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"kenvynKwek"},"content":" String start \u003d words.substring(startSplit + 6, endSplit - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"kenvynKwek"},"content":" String end \u003d words.substring(endSplit + 4, words.length());","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Mama mia ! I\u0027ve just added this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"kenvynKwek"},"content":" Task temp \u003d new Event(taskDescription, start, end, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"kenvynKwek"},"content":" tasks.add(temp);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"\\t\" + temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"kenvynKwek"},"content":" updateTasksCounter();","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"kenvynKwek"},"content":" public static void delete(int index) throws DogeBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"kenvynKwek"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"kenvynKwek"},"content":" throw new DogeBotException(\"Oops ! There\u0027s no tasks in your list to delete :O\");","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"kenvynKwek"},"content":" Task curr \u003d tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Got it~ This task has been removed:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"\\t\" + curr.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"kenvynKwek"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"kenvynKwek"},"content":" updateTasksCounter();","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"kenvynKwek":118}},{"path":"src/main/java/dogebot/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package dogebot;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":" public void intro() {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":" final String LOGO \u003d \" ___\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":" + \" __/_ `. .-\\\"\\\"\\\"-.\" + \" | | | \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":" + \" \\\\_,` | \\\\-\u0027 / )`-\u0027)\" + \" _` | _ \\\\ _` | _ \\\\ __ \\\\ _ \\\\ __| \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":" + \" \\\"\\\") `\\\"` \\\\ ((`\\\"`\" + \" ( | ( | ( | __/ | | ( | | \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":" + \" ___Y , .\u00277 /|\" + \" \\\\__,_| \\\\___/ \\\\__, | \\\\___| _.__/ \\\\___/ \\\\__| \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":" + \"(_,___/...-` (_/_/\" + \" |___/\";","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(LOGO + \"\\nHi ! I\u0027m dogebot.DogeBot \\nHow may I help you today ?\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"kenvynKwek":14}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"import dogebot.DateTimeHandler;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":" private DateTimeHandler by;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":" public Deadline(String description, String by, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":" this.by \u003d new DateTimeHandler(by);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":" return \"D | \" + super.toString() + \" | \" + by.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"kenvynKwek":17}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"import dogebot.DateTimeHandler;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":" private DateTimeHandler start;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":" private DateTimeHandler end;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":" public Event(String description, String start, String end, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":" this.start \u003d new DateTimeHandler(start);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":" this.end \u003d new DateTimeHandler(end);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":" return \"E | \" + super.toString() + \" | \" + start.toString() + \" - \" + end.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"kenvynKwek":19}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":" public String toString() { // encapsulation principle","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":" return (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":" public void markTask(boolean mark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":" isDone \u003d (mark) ? true : false;","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"kenvynKwek":19}},{"path":"src/main/java/tasks/ToDos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"public class ToDos extends Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":" public ToDos (String description, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":" return \"T | \" + super.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"kenvynKwek":12}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":"todo read book","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":"todo join sports club","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"kenvynKwek"},"content":"mark abc","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"kenvynKwek"},"content":"mark 10","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"kenvynKwek"},"content":"unmark abc","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"kenvynKwek"},"content":"unmark 10","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"kenvynKwek"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"kenvynKwek"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"kenvynKwek"},"content":"deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"kenvynKwek"},"content":"deadline ","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"kenvynKwek"},"content":"event","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"kenvynKwek"},"content":"event ","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"kenvynKwek"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"kenvynKwek"},"content":"delete abc","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"kenvynKwek"},"content":"delete 10","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"kenvynKwek"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"kenvynKwek"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kenvynKwek":32}},{"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":"kenvynKwek"},"content":"java -classpath ../bin DogeBot \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":{"kenvynKwek":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":"kenvynKwek"},"content":"// id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-06"},{"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":"kenvynKwek"},"content":"//checkstyle {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":"// toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":"//}","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"kenvynKwek"},"content":" mainClass.set(\"dogebot.DogeBot\")","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"kenvynKwek":6,"-":41}},{"path":"src/main/java/dogebot/DateTimeHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package dogebot;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":"public class DateTimeHandler {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":" private LocalDateTime date;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":" public DateTimeHandler(String s) {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":" if (!s.contains(\"/\")) { // reading from \u0027tasklist.txt\u0027, change format","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy K:mma\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":" this.date \u003d LocalDateTime.parse(s, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":" String[] temp \u003d s.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":" // date","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":" String[] dateSplit \u003d temp[0].split(\"/\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":" int day \u003d Integer.parseInt(dateSplit[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":" int month \u003d Integer.parseInt(dateSplit[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"kenvynKwek"},"content":" int year \u003d Integer.parseInt(dateSplit[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"kenvynKwek"},"content":" // time","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"kenvynKwek"},"content":" int hour \u003d Integer.parseInt(temp[1]) / 100;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"kenvynKwek"},"content":" int min \u003d Integer.parseInt(temp[1]) % 100;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"kenvynKwek"},"content":" this.date \u003d LocalDateTime.of(year, month, day, hour, min);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"kenvynKwek"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"kenvynKwek"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"kenvynKwek"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy K:mma\");","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"kenvynKwek"},"content":" String formatDateTime \u003d date.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"kenvynKwek"},"content":" return formatDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"kenvynKwek":33}},{"path":"src/main/java/dogebot/DogeBot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package dogebot;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":"public class DogeBot {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":" protected static TaskList tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":" private static final String HOME \u003d System.getProperty(\"user.home\"); // get relative path","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":" private static final java.nio.file.Path PATH \u003d java.nio.file.Paths.get(HOME, \"OneDrive\", \"Desktop\", \"iP\",","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":" \"src\", \"main\");","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":" private static File file;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":" private Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":" private Parser userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":" public DogeBot(String filename) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":" file \u003d new File(PATH.toString(), filename);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"kenvynKwek"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"kenvynKwek"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"kenvynKwek"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"kenvynKwek"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"kenvynKwek"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"kenvynKwek"},"content":" userInput \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"kenvynKwek"},"content":" storage \u003d new Storage(file);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"kenvynKwek"},"content":" tasks \u003d new TaskList(storage.readFromTxtFile());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"kenvynKwek"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"kenvynKwek"},"content":" ui.intro();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"kenvynKwek"},"content":" boolean isLoop \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"kenvynKwek"},"content":" while (isLoop) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"kenvynKwek"},"content":" isLoop \u003d userInput.scan();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"kenvynKwek"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"kenvynKwek"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"kenvynKwek"},"content":" new DogeBot(\"tasklist.txt\").run();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kenvynKwek":44}},{"path":"src/main/java/dogebot/DogeBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package dogebot;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"public class DogeBotException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":" public DogeBotException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kenvynKwek":7}},{"path":"src/main/java/dogebot/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package dogebot;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"import java.util.InputMismatchException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":" public boolean scan() {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":" boolean isLoop \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":" switch (sc.next().toLowerCase()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":" isLoop \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Bye~ See you again\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"kenvynKwek"},"content":" TaskList.list();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"kenvynKwek"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"kenvynKwek"},"content":" TaskList.mark(sc.nextInt() - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"kenvynKwek"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"kenvynKwek"},"content":" TaskList.unmark(sc.nextInt() - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"kenvynKwek"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"kenvynKwek"},"content":" TaskList.todo(sc.nextLine().trim()); // sc.nextLine() to get the remaining words","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"kenvynKwek"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"kenvynKwek"},"content":" TaskList.deadline(sc.nextLine().trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"kenvynKwek"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"kenvynKwek"},"content":" TaskList.event(sc.nextLine().trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"kenvynKwek"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"kenvynKwek"},"content":" TaskList.delete(sc.nextInt() - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"kenvynKwek"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Wuff, I\u0027m not sure what that means :(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"kenvynKwek"},"content":" sc.nextLine(); // absorb remaining words so \u0027default\u0027 block doesn\u0027t act up","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"kenvynKwek"},"content":" } catch (InputMismatchException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"kenvynKwek"},"content":" sc.nextLine(); // absorb remaining words so \u0027default\u0027 block doesn\u0027t act up","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Oops ! Integers only please :c\");","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"kenvynKwek"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Oh no :( I think that number is too big~\");","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"kenvynKwek"},"content":" } catch (DogeBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"kenvynKwek"},"content":" if (isLoop) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"kenvynKwek"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"kenvynKwek"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"kenvynKwek"},"content":" sc.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"kenvynKwek"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"kenvynKwek":58}},{"path":"src/main/java/dogebot/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package dogebot;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":"import tasks.ToDos;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":" private File file;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"kenvynKwek"},"content":" public Storage(File file) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"kenvynKwek"},"content":" this.file \u003d file;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"kenvynKwek"},"content":" public ArrayList\u003cTask\u003e readFromTxtFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"kenvynKwek"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"kenvynKwek"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"kenvynKwek"},"content":" Scanner reader \u003d new Scanner(file);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"kenvynKwek"},"content":" while (reader.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"kenvynKwek"},"content":" String s \u003d reader.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"kenvynKwek"},"content":" String[] sArray \u003d s.split(\"\\\\|\");","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"kenvynKwek"},"content":" String description \u003d sArray[2].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"kenvynKwek"},"content":" boolean isDone \u003d (sArray[1].trim().equals(\"1\")) ? true : false;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"kenvynKwek"},"content":" switch (sArray[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"kenvynKwek"},"content":" case \"T \":","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"kenvynKwek"},"content":" tasks.add(new ToDos(description, isDone));","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"kenvynKwek"},"content":" case \"D \":","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"kenvynKwek"},"content":" String by \u003d sArray[3].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"kenvynKwek"},"content":" tasks.add(new Deadline(description, by, isDone));","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"kenvynKwek"},"content":" case \"E \":","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"kenvynKwek"},"content":" String[] duration \u003d sArray[3].split(\"-\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"kenvynKwek"},"content":" String start \u003d duration[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"kenvynKwek"},"content":" String end \u003d duration[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"kenvynKwek"},"content":" tasks.add(new Event(description, start, end, isDone));","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"kenvynKwek"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"kenvynKwek"},"content":" reader.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"kenvynKwek"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"kenvynKwek"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"kenvynKwek"},"content":" public void save(TaskList tasks) { // overwrite \u0027tasklist.txt\u0027 with \u0027tasks\u0027 arraylist","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"kenvynKwek"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"kenvynKwek"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"kenvynKwek"},"content":" BufferedWriter bw \u003d new BufferedWriter(fw);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"kenvynKwek"},"content":" for (Task task : tasks.get()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"kenvynKwek"},"content":" bw.write(task.toString() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"kenvynKwek"},"content":" bw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"kenvynKwek"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"kenvynKwek"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"kenvynKwek":69}},{"path":"src/main/java/dogebot/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package dogebot;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":"import tasks.ToDos;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":" private static ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":" public TaskList(ArrayList\u003cTask\u003e tasklist) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":" this.tasks \u003d tasklist;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":" public ArrayList\u003cTask\u003e get() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"kenvynKwek"},"content":" public static void list() throws DogeBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"kenvynKwek"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"kenvynKwek"},"content":" throw new DogeBotException(\"Oops ! Your list is empty ! Try adding some tasks first c:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Stuff to do:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"kenvynKwek"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"kenvynKwek"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"kenvynKwek"},"content":" if (task \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"kenvynKwek"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(i++ + \". \" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"kenvynKwek"},"content":" public static void mark(int index) throws DogeBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"kenvynKwek"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"kenvynKwek"},"content":" throw new DogeBotException(\"Oops ! Try adding some tasks first c:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"kenvynKwek"},"content":" tasks.get(index).markTask(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Good job on completing a task ! You deserve a cookie C:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"\\t\" + tasks.get(index).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"kenvynKwek"},"content":" public static void unmark(int index) throws DogeBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"kenvynKwek"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"kenvynKwek"},"content":" throw new DogeBotException(\"Oops ! Try adding some tasks first c:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"kenvynKwek"},"content":" tasks.get(index).markTask(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Oh nyo, did someone make a mistake ?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"\\t\" + tasks.get(index).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"kenvynKwek"},"content":" public static void updateTasksCounter() {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"You now have \" + tasks.size() + \" task(s) in your list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"kenvynKwek"},"content":" public static void todo(String words) throws DogeBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"kenvynKwek"},"content":" if (words.isBlank()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"kenvynKwek"},"content":" throw new DogeBotException(\"Oops ! The description of a todo cannot be empty :(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Mama mia ! I\u0027ve just added this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"kenvynKwek"},"content":" Task temp \u003d new ToDos(words, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"kenvynKwek"},"content":" tasks.add(temp);","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"\\t\" + temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"kenvynKwek"},"content":" updateTasksCounter();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"kenvynKwek"},"content":" public static void deadline(String words) throws DogeBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"kenvynKwek"},"content":" if (words.isBlank()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"kenvynKwek"},"content":" throw new DogeBotException(\"Oops ! The description of a deadline cannot be empty :(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"kenvynKwek"},"content":" int split \u003d words.indexOf(\"/by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"kenvynKwek"},"content":" // substring w/o the spaces","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"kenvynKwek"},"content":" String taskDescription \u003d words.substring(0, split - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"kenvynKwek"},"content":" String taskDeadline \u003d words.substring(split + 4, words.length());","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Mama mia ! I\u0027ve just added this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"kenvynKwek"},"content":" Task temp \u003d new Deadline(taskDescription, taskDeadline, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"kenvynKwek"},"content":" tasks.add(temp);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"\\t\" + temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"kenvynKwek"},"content":" updateTasksCounter();","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"kenvynKwek"},"content":" public static void event(String words) throws DogeBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"kenvynKwek"},"content":" if (words.isBlank()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"kenvynKwek"},"content":" throw new DogeBotException(\"Oops ! The description of an event cannot be empty :(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"kenvynKwek"},"content":" // substring w/o the spaces","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"kenvynKwek"},"content":" int startSplit \u003d words.indexOf(\"/from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"kenvynKwek"},"content":" String taskDescription \u003d words.substring(0, startSplit - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"kenvynKwek"},"content":" int endSplit \u003d words.indexOf(\"/to\", startSplit + 1); // find \"/\" after startSplit index","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"kenvynKwek"},"content":" String start \u003d words.substring(startSplit + 6, endSplit - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"kenvynKwek"},"content":" String end \u003d words.substring(endSplit + 4, words.length());","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Mama mia ! I\u0027ve just added this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"kenvynKwek"},"content":" Task temp \u003d new Event(taskDescription, start, end, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"kenvynKwek"},"content":" tasks.add(temp);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"\\t\" + temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"kenvynKwek"},"content":" updateTasksCounter();","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"kenvynKwek"},"content":" public static void delete(int index) throws DogeBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"kenvynKwek"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"kenvynKwek"},"content":" throw new DogeBotException(\"Oops ! There\u0027s no tasks in your list to delete :O\");","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"kenvynKwek"},"content":" Task curr \u003d tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"Got it~ This task has been removed:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(\"\\t\" + curr.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"kenvynKwek"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"kenvynKwek"},"content":" updateTasksCounter();","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"kenvynKwek":118}},{"path":"src/main/java/dogebot/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package dogebot;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":" private static final String LOGO \u003d \" ___\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":" + \" __/_ `. .-\\\"\\\"\\\"-.\" + \" | | | \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":" + \" \\\\_,` | \\\\-\u0027 / )`-\u0027)\" + \" _` | _ \\\\ _` | _ \\\\ __ \\\\ _ \\\\ __| \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":" + \" \\\"\\\") `\\\"` \\\\ ((`\\\"`\" + \" ( | ( | ( | __/ | | ( | | \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":" + \" ___Y , .\u00277 /|\" + \" \\\\__,_| \\\\___/ \\\\__, | \\\\___| _.__/ \\\\___/ \\\\__| \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":" + \"(_,___/...-` (_/_/\" + \" |___/\";","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":" public void intro() {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":" System.out.println(LOGO + \"\\nHi ! I\u0027m dogebot.DogeBot \\nHow may I help you today ?\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"kenvynKwek":13}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"import dogebot.DateTimeHandler;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":" private DateTimeHandler by;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":" public Deadline(String description, String by, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":" this.by \u003d new DateTimeHandler(by);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":" return \"D | \" + super.toString() + \" | \" + by.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"kenvynKwek":17}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"import dogebot.DateTimeHandler;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":" private DateTimeHandler start;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":" private DateTimeHandler end;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":" public Event(String description, String start, String end, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":" this.start \u003d new DateTimeHandler(start);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":" this.end \u003d new DateTimeHandler(end);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":" return \"E | \" + super.toString() + \" | \" + start.toString() + \" - \" + end.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"kenvynKwek":19}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":" public String toString() { // encapsulation principle","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":" return (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":" public void markTask(boolean mark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":" isDone \u003d (mark) ? true : false;","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"kenvynKwek":19}},{"path":"src/main/java/tasks/ToDos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"package tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"public class ToDos extends Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":" public ToDos(String description, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":" return \"T | \" + super.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"kenvynKwek":12}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"kenvynKwek"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"kenvynKwek"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"kenvynKwek"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"kenvynKwek"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"kenvynKwek"},"content":"todo read book","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"kenvynKwek"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"kenvynKwek"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"kenvynKwek"},"content":"todo join sports club","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"kenvynKwek"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"kenvynKwek"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"kenvynKwek"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"kenvynKwek"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"kenvynKwek"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"kenvynKwek"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"kenvynKwek"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"kenvynKwek"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"kenvynKwek"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"kenvynKwek"},"content":"mark abc","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"kenvynKwek"},"content":"mark 10","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"kenvynKwek"},"content":"unmark abc","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"kenvynKwek"},"content":"unmark 10","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"kenvynKwek"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"kenvynKwek"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"kenvynKwek"},"content":"deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"kenvynKwek"},"content":"deadline ","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"kenvynKwek"},"content":"event","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"kenvynKwek"},"content":"event ","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"kenvynKwek"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"kenvynKwek"},"content":"delete abc","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"kenvynKwek"},"content":"delete 10","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"kenvynKwek"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"kenvynKwek"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kenvynKwek":32}},{"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":"kenvynKwek"},"content":"java -classpath ../bin DogeBot \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":{"kenvynKwek":1,"-":37}}] diff --git a/kenvynKwek_ip_master/commits.json b/kenvynKwek_ip_master/commits.json index 965e7577..1e12279a 100644 --- a/kenvynKwek_ip_master/commits.json +++ b/kenvynKwek_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"kenvynKwek":[{"date":"2023-08-21","commitResults":[{"hash":"24b8d5a4d8c22a4f051c33e56602961865de1258","isMergeCommit":false,"messageTitle":"Level-0: (a) renamed chatbot to \u0027DogeBot\u0027 (b) implemented initial skeleton message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":6}}}]},{"date":"2023-08-22","commitResults":[{"hash":"bb928260ff67fda44e6b909da345dee4de7a41a3","isMergeCommit":false,"messageTitle":"Level-1: Echo - echoes commands until \u0027bye\u0027","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"97e1b209f2ae35da113b4c2bda7494532e8d297c","isMergeCommit":false,"messageTitle":"Level-2: Add, List - store tasks \u0026 output the list of tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}},{"hash":"cb56f7ab8b4b8d7a4e0685eafda9c176beb55ddb","isMergeCommit":false,"messageTitle":"Level-3: Mark as Done - added mark task feature, created \u0027Task\u0027 class","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":9}}}]},{"date":"2023-08-23","commitResults":[{"hash":"43de98076854dcc60e85d3aa4949008485b6ad7b","isMergeCommit":false,"messageTitle":"Level-4: ToDos, Events, Deadlines - added \u0027ToDos.java\u0027, \u0027Deadline.java\u0027, \u0027Event.java\u0027 and updated \u0027Duke.java\u0027 to take those 3 types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":11}}}]},{"date":"2023-08-24","commitResults":[{"hash":"0618ae32a03ec192be61c8244879de28033247c7","isMergeCommit":false,"messageTitle":"dogebot logo rebrand (bc java can\u0027t compile certain ascii from prev logo)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":19}}},{"hash":"9e8ca917a4da1e52c4bc442186f8bbba11096341","isMergeCommit":false,"messageTitle":"A-TextUiTesting: implemented test cases until Level-4 features","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0}}},{"hash":"facbf63b60b0ae857359d60123f17b14d3ceb237","isMergeCommit":false,"messageTitle":"\u0027Duke.java\u0027 renamed to \u0027DogeBot.java\u0027, refactored code to switch cases (for throwing exceptions later)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":74},"sh":{"insertions":2,"deletions":2}}},{"hash":"1f4d63c9a1f1073a904289e5256fa06b44a2109a","isMergeCommit":false,"messageTitle":"Level-5: Handle Errors: DogeBot.java: handles errors for task isBlank(), invalid input, mark/unmark inputMismatch, empty list","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":13}}},{"hash":"6f5ec210fbc40af98f0a978302a74af12ea48ab8","isMergeCommit":false,"messageTitle":"DogeBot.java: changed \u0027tasks[100]\u0027 array to arraylist (for delete feature later)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":17}}},{"hash":"c64cccc1c385a7c58f0e1c92af4c6efdf3e6f3fd","isMergeCommit":false,"messageTitle":"Level-6: Delete: implemented delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":2}}},{"hash":"dd290fe8cbbe0e6796ac7869ceb38ff9f2603363","isMergeCommit":false,"messageTitle":"DogeBot.java: updated exceptions + updated automated text-ui-testing with new features","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":20,"deletions":0},"java":{"insertions":11,"deletions":4}}}]},{"date":"2023-08-31","commitResults":[{"hash":"3fbfb3e5f3861d94da2bbfd6017883369f70a79f","isMergeCommit":false,"messageTitle":"Update try-catch exceptions","messageBody":"too many try-catch statements within switch-case\n\nupdate code to have minimal try-catch statements\n","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":56}}}]},{"date":"2023-09-01","commitResults":[{"hash":"63bc0194f9ac55a9cae537453a3aa5d9115501b7","isMergeCommit":false,"messageTitle":"Create \u0027tasklist.txt\u0027 for storing tasks to hard disk","messageBody":"The tasks are stored in an array.\n\nStoring tasks in an array doesn\u0027t save the tasks when the program reruns.\n\nChange the storing of tasks into a .txt file instead.\n","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":15}}},{"hash":"537fb8c59f43818b3bd52fbd68e511135f427e3b","isMergeCommit":false,"messageTitle":"Update bye() method and load \u0027tasklist.txt\u0027 to \u0027tasks\u0027 arraylist","messageBody":"Tasks are not stored in hard disk i.e \u0027tasklist.txt\u0027, stored in \u0027tasks\u0027 arraylist instead.\n\nTask list progress is lost everytime the program is rerun.\n\nProgress is loaded at the start into \u0027tasks\u0027 arraylist from \u0027tasklist.txt\u0027 and saved into \u0027tasklist.txt\u0027 when \u0027bye\u0027 command is entered.\n","fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":20}}},{"hash":"66ee4103fd60008f348a23d1b80b9b807de2eb36","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"1f9ef1ec4fc5a8224fc64fbff35c3f8de65e5ca2","isMergeCommit":false,"messageTitle":"Update deadline feature to store date/time","messageBody":"Previously stored deadline as string.\n\nDeadline date/time now stored as LocalDateTime object.\n","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":26}}},{"hash":"cb280a18f3b2e35ff71ee23d4a8d766a799fa10f","isMergeCommit":false,"messageTitle":"Update event feature to store date/time","messageBody":"Previously stores event duration as string.\n\nNow stores event duration as LocalDateTime objects.\n","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}},{"hash":"0c75b40427b672f6ee25a1fcd80068a402ec0f07","isMergeCommit":false,"messageTitle":"Fix bug task done marker progress","messageBody":"Task done marker was saved into \u0027tasklist.txt\u0027 properly but is not loading correctly when the program starts.\n\nTask done marker progress not tracked, shows wrong data/progress upon program start up.\n\nUpdated tasks constructors to initialise if the task has already been done, able to read progress correctly from \u0027tasklist.txt\u0027 now.\n","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":16}}},{"hash":"a05f49e171c1314d7d9b6b98bc8fe312540a9413","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"99b53f9def1394f380066acbcded7982f64437dd","isMergeCommit":false,"messageTitle":"Refactor code and add \u0027Parser.java\u0027, \u0027Storage.java\u0027, \u0027TaskList.java\u0027, \u0027Ui.java\u0027","messageBody":"Code was grouped together under \u0027DogeBot.java\u0027.\n\nDidn\u0027t make complete use of OOP principles and would be harder to implement new changes.\n\nRefactored code to extract out closely related code as classes to make use of OOP principles under \u0027Parser.java\u0027, \u0027Storage.java\u0027, \u0027TaskList.java\u0027 and \u0027Ui.java\u0027.\n","fileTypesAndContributionMap":{"java":{"insertions":261,"deletions":207}}},{"hash":"948f77f56401e5a86428e75196296305f204dadf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"917447ce058e3956ce925580258fe46b684ecc64","isMergeCommit":false,"messageTitle":"Add \u0027dogebot\u0027 and \u0027tasks\u0027 package","messageBody":"No packages previously.\n\nGets messy to find related .java files.\n\nGrouped all files under \u0027dogebot\u0027 package and tasks type files under \u0027tasks\u0027 package, making related types easier to find.\n","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":1}}},{"hash":"f796935100ebd78641ccf2f8120564959e81aae5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"kenvynKwek":{"java":413,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":0,"txt":32}},"authorContributionVariance":{"kenvynKwek":23805.375},"authorDisplayNameMap":{"kenvynKwek":"CS2103-T16-1 KENV..HIEN"}} +{"authorDailyContributionsMap":{"kenvynKwek":[{"date":"2023-08-21","commitResults":[{"hash":"24b8d5a4d8c22a4f051c33e56602961865de1258","isMergeCommit":false,"messageTitle":"Level-0: (a) renamed chatbot to \u0027DogeBot\u0027 (b) implemented initial skeleton message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":6}}}]},{"date":"2023-08-22","commitResults":[{"hash":"bb928260ff67fda44e6b909da345dee4de7a41a3","isMergeCommit":false,"messageTitle":"Level-1: Echo - echoes commands until \u0027bye\u0027","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"97e1b209f2ae35da113b4c2bda7494532e8d297c","isMergeCommit":false,"messageTitle":"Level-2: Add, List - store tasks \u0026 output the list of tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}},{"hash":"cb56f7ab8b4b8d7a4e0685eafda9c176beb55ddb","isMergeCommit":false,"messageTitle":"Level-3: Mark as Done - added mark task feature, created \u0027Task\u0027 class","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":9}}}]},{"date":"2023-08-23","commitResults":[{"hash":"43de98076854dcc60e85d3aa4949008485b6ad7b","isMergeCommit":false,"messageTitle":"Level-4: ToDos, Events, Deadlines - added \u0027ToDos.java\u0027, \u0027Deadline.java\u0027, \u0027Event.java\u0027 and updated \u0027Duke.java\u0027 to take those 3 types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":11}}}]},{"date":"2023-08-24","commitResults":[{"hash":"0618ae32a03ec192be61c8244879de28033247c7","isMergeCommit":false,"messageTitle":"dogebot logo rebrand (bc java can\u0027t compile certain ascii from prev logo)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":19}}},{"hash":"9e8ca917a4da1e52c4bc442186f8bbba11096341","isMergeCommit":false,"messageTitle":"A-TextUiTesting: implemented test cases until Level-4 features","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0}}},{"hash":"facbf63b60b0ae857359d60123f17b14d3ceb237","isMergeCommit":false,"messageTitle":"\u0027Duke.java\u0027 renamed to \u0027DogeBot.java\u0027, refactored code to switch cases (for throwing exceptions later)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":74},"sh":{"insertions":2,"deletions":2}}},{"hash":"1f4d63c9a1f1073a904289e5256fa06b44a2109a","isMergeCommit":false,"messageTitle":"Level-5: Handle Errors: DogeBot.java: handles errors for task isBlank(), invalid input, mark/unmark inputMismatch, empty list","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":13}}},{"hash":"6f5ec210fbc40af98f0a978302a74af12ea48ab8","isMergeCommit":false,"messageTitle":"DogeBot.java: changed \u0027tasks[100]\u0027 array to arraylist (for delete feature later)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":17}}},{"hash":"c64cccc1c385a7c58f0e1c92af4c6efdf3e6f3fd","isMergeCommit":false,"messageTitle":"Level-6: Delete: implemented delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":2}}},{"hash":"dd290fe8cbbe0e6796ac7869ceb38ff9f2603363","isMergeCommit":false,"messageTitle":"DogeBot.java: updated exceptions + updated automated text-ui-testing with new features","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":20,"deletions":0},"java":{"insertions":11,"deletions":4}}}]},{"date":"2023-08-31","commitResults":[{"hash":"3fbfb3e5f3861d94da2bbfd6017883369f70a79f","isMergeCommit":false,"messageTitle":"Update try-catch exceptions","messageBody":"too many try-catch statements within switch-case\n\nupdate code to have minimal try-catch statements\n","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":56}}}]},{"date":"2023-09-01","commitResults":[{"hash":"63bc0194f9ac55a9cae537453a3aa5d9115501b7","isMergeCommit":false,"messageTitle":"Create \u0027tasklist.txt\u0027 for storing tasks to hard disk","messageBody":"The tasks are stored in an array.\n\nStoring tasks in an array doesn\u0027t save the tasks when the program reruns.\n\nChange the storing of tasks into a .txt file instead.\n","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":15}}},{"hash":"537fb8c59f43818b3bd52fbd68e511135f427e3b","isMergeCommit":false,"messageTitle":"Update bye() method and load \u0027tasklist.txt\u0027 to \u0027tasks\u0027 arraylist","messageBody":"Tasks are not stored in hard disk i.e \u0027tasklist.txt\u0027, stored in \u0027tasks\u0027 arraylist instead.\n\nTask list progress is lost everytime the program is rerun.\n\nProgress is loaded at the start into \u0027tasks\u0027 arraylist from \u0027tasklist.txt\u0027 and saved into \u0027tasklist.txt\u0027 when \u0027bye\u0027 command is entered.\n","fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":20}}},{"hash":"66ee4103fd60008f348a23d1b80b9b807de2eb36","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"1f9ef1ec4fc5a8224fc64fbff35c3f8de65e5ca2","isMergeCommit":false,"messageTitle":"Update deadline feature to store date/time","messageBody":"Previously stored deadline as string.\n\nDeadline date/time now stored as LocalDateTime object.\n","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":26}}},{"hash":"cb280a18f3b2e35ff71ee23d4a8d766a799fa10f","isMergeCommit":false,"messageTitle":"Update event feature to store date/time","messageBody":"Previously stores event duration as string.\n\nNow stores event duration as LocalDateTime objects.\n","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}},{"hash":"0c75b40427b672f6ee25a1fcd80068a402ec0f07","isMergeCommit":false,"messageTitle":"Fix bug task done marker progress","messageBody":"Task done marker was saved into \u0027tasklist.txt\u0027 properly but is not loading correctly when the program starts.\n\nTask done marker progress not tracked, shows wrong data/progress upon program start up.\n\nUpdated tasks constructors to initialise if the task has already been done, able to read progress correctly from \u0027tasklist.txt\u0027 now.\n","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":16}}},{"hash":"a05f49e171c1314d7d9b6b98bc8fe312540a9413","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"99b53f9def1394f380066acbcded7982f64437dd","isMergeCommit":false,"messageTitle":"Refactor code and add \u0027Parser.java\u0027, \u0027Storage.java\u0027, \u0027TaskList.java\u0027, \u0027Ui.java\u0027","messageBody":"Code was grouped together under \u0027DogeBot.java\u0027.\n\nDidn\u0027t make complete use of OOP principles and would be harder to implement new changes.\n\nRefactored code to extract out closely related code as classes to make use of OOP principles under \u0027Parser.java\u0027, \u0027Storage.java\u0027, \u0027TaskList.java\u0027 and \u0027Ui.java\u0027.\n","fileTypesAndContributionMap":{"java":{"insertions":261,"deletions":207}}},{"hash":"948f77f56401e5a86428e75196296305f204dadf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"917447ce058e3956ce925580258fe46b684ecc64","isMergeCommit":false,"messageTitle":"Add \u0027dogebot\u0027 and \u0027tasks\u0027 package","messageBody":"No packages previously.\n\nGets messy to find related .java files.\n\nGrouped all files under \u0027dogebot\u0027 package and tasks type files under \u0027tasks\u0027 package, making related types easier to find.\n","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":1}}},{"hash":"f796935100ebd78641ccf2f8120564959e81aae5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"c59de1a78ade917462ec0a3f6b625a7c186e6037","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"03d3b9a8ea1515f8c8fcdc1d733d36cb7ca708ca","isMergeCommit":false,"messageTitle":"Implement gradle","messageBody":"Set up gradle to build and run DogeBot and minor edits to code for checkstyle.\n","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":21,"deletions":25}}},{"hash":"c9ab0f2773efb919829fe55334c21d92380ea13c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"kenvynKwek":{"java":409,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":6,"txt":32}},"authorContributionVariance":{"kenvynKwek":22641.75},"authorDisplayNameMap":{"kenvynKwek":"CS2103-T16-1 KENV..HIEN"}} diff --git a/ketweeen_ip_master/authorship.json b/ketweeen_ip_master/authorship.json index 36c08ce7..db2248f7 100644 --- a/ketweeen_ip_master/authorship.json +++ b/ketweeen_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/duke/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" * A class for Deadlines tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":"public class Deadlines extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":" /** Class field by that tells when the deadline is due. */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" protected LocalDate deadlineDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" * Constructor to initialize the Deadlines class.","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" * @param description Describes the deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" * @param deadlineDate When the task is due.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" public Deadlines(String description, LocalDate deadlineDate) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":" this.deadlineDate \u003d deadlineDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":" String doneStatus \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" String formattedDate \u003d deadlineDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":" return String.format(\"D | %s | %s | %s\", doneStatus, this.description, formattedDate);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ketweeen"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ketweeen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"ketweeen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"ketweeen"},"content":" String formattedDate \u003d deadlineDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ketweeen"},"content":" return String.format(\"[D][%s] %s (by: %s)\", this.getStatusIcon(), this.description, formattedDate);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ketweeen":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":"import java.util.List;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" * The Duke class represents a simple task management chatbot application.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":" * It allows users to interact with a list of tasks and store them in a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":"public class Duke {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" private static final String DATA_FILE_PATH \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" * Constructs a Duke instance with the specified file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" * @param filepath The path to the file used for storing tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" public Duke(String filepath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":" this.storage \u003d new Storage(filepath);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" * Runs the Duke application, allowing users to interact with tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":" * This method displays a welcome message, creates a data directory if it doesn\u0027t exist,","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" * loads tasks from the storage, and repeatedly prompts the user for input until \"bye\" is entered.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ketweeen"},"content":" // Welcome","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ketweeen"},"content":" Ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ketweeen"},"content":" // Creates data folder if doesn\u0027t exist","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ketweeen"},"content":" File dataDirectory \u003d new File(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ketweeen"},"content":" if (!dataDirectory.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ketweeen"},"content":" if (dataDirectory.mkdir()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Data directory created successfully.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Failed to create data directory.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ketweeen"},"content":" // Check user input","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"ketweeen"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"ketweeen"},"content":" List\u003cTask\u003e userList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"ketweeen"},"content":" TaskList taskList \u003d new TaskList(userList);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ketweeen"},"content":" this.storage.loadTasks(taskList); // Load tasks to list","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"ketweeen"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"ketweeen"},"content":" String userInput \u003d sc.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ketweeen"},"content":" if (userInput.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ketweeen"},"content":" // Exit the loop if the user types \"bye\"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ketweeen"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ketweeen"},"content":" Ui.showExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ketweeen"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ketweeen"},"content":" Parser.parseUserInput(userInput, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"ketweeen"},"content":" * The main method to start the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"ketweeen"},"content":" * Creates an instance of Duke with the data file path and runs the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"ketweeen"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ketweeen"},"content":" new Duke(DATA_FILE_PATH).run();","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ketweeen":72,"-":2}},{"path":"src/main/java/duke/Events.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":" * A class for Events tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"public class Events extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" /** Class field by that tells when the event is from. */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" /** Class field by that tells until when the event is done. */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" * Constructor to initialize the Events class.","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" * @param description Describes the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" * @param from When the event is from.","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" * @param to Until when the event is to.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" public Events(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" String doneStatus \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":" return String.format(\"E | %s | %s | %s | %s\", doneStatus, this.description, this.from, this.to);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ketweeen"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ketweeen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"ketweeen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"ketweeen"},"content":" return String.format(\"[E][%s] %s (from: %s to: %s)\", this.getStatusIcon(), this.description, this.from, this.to);","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ketweeen":40}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" * The Parser class is responsible for parsing user input and file input","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":" * to create and manipulate tasks in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":" * Parses user input and performs corresponding actions on the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" * @param userInput The user\u0027s input command.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" * @param taskList The list of tasks to be manipulated.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" public static void parseUserInput(String userInput, TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" if (userInput.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" // If user wants to check list","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" Ui.showList(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" } else if (userInput.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":" // If user wants to mark something","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":" String[] parts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":" if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":" taskList.markTask(taskList.getTask(index));","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Invalid task number\");","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ketweeen"},"content":" // Invalid command format","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Invalid command format\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ketweeen"},"content":" } else if (userInput.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ketweeen"},"content":" // If user wants to unmark something","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ketweeen"},"content":" String[] parts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ketweeen"},"content":" if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ketweeen"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ketweeen"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ketweeen"},"content":" taskList.unmarkTask(taskList.getTask(index));","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ketweeen"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Invalid task number\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ketweeen"},"content":" // Invalid command format","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Invalid command format\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ketweeen"},"content":" } else if (userInput.startsWith(\"todo\") || userInput.startsWith(\"deadline\") || userInput.startsWith(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ketweeen"},"content":" // User creates a task","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ketweeen"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ketweeen"},"content":" if (userInput.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ketweeen"},"content":" // If user wants to create a ToDos task","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ketweeen"},"content":" if (userInput.length() \u003c 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ketweeen"},"content":" // Incorrect input format for todos","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Incorrect input format for todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ketweeen"},"content":" String description \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ketweeen"},"content":" if (description.isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ketweeen"},"content":" // If there\u0027s do description","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"The description of a todo cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ketweeen"},"content":" newTask \u003d new ToDos(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ketweeen"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ketweeen"},"content":" } else if (userInput.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ketweeen"},"content":" // If user wants to create a Deadlines task","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ketweeen"},"content":" String[] parts \u003d userInput.split(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ketweeen"},"content":" if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ketweeen"},"content":" // Makes sure deadline format is followed (e.g. there\u0027s /by)","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ketweeen"},"content":" String description \u003d parts[0].substring(9).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ketweeen"},"content":" String by \u003d parts[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ketweeen"},"content":" // Parse the date and time","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ketweeen"},"content":" LocalDate deadlineDate \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ketweeen"},"content":" if (description.isBlank() || by.isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ketweeen"},"content":" // If description or by is empty","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"The description or by of a deadline cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ketweeen"},"content":" newTask \u003d new Deadlines(description, deadlineDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ketweeen"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ketweeen"},"content":" // Incorrect input format for deadline","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Incorrect input format for deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ketweeen"},"content":" // If user wants to create an Events task","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ketweeen"},"content":" String[] parts \u003d userInput.split(\"/from|/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ketweeen"},"content":" if (parts.length \u003d\u003d 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ketweeen"},"content":" // Makes sure deadline format is followed (e.g. there\u0027s /from and /to)","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ketweeen"},"content":" String description \u003d parts[0].substring(6).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ketweeen"},"content":" String from \u003d parts[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ketweeen"},"content":" String to \u003d parts[2].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ketweeen"},"content":" if (description.isBlank() || from.isBlank() || to.isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"ketweeen"},"content":" // If description, from, or to is empty","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"The description or from or to of an event cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"ketweeen"},"content":" newTask \u003d new Events(description, from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"ketweeen"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"ketweeen"},"content":" // Incorrect input format for events","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Incorrect input format for event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"ketweeen"},"content":" if (newTask !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"ketweeen"},"content":" // If task is initialized","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"ketweeen"},"content":" Ui.showAddedTask(newTask, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"ketweeen"},"content":" } else if (userInput.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"ketweeen"},"content":" // If user wants to delete a task","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"ketweeen"},"content":" String[] parts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"ketweeen"},"content":" if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"ketweeen"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"ketweeen"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"ketweeen"},"content":" taskList.deleteTask(taskList.getTask(index));","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"ketweeen"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Invalid task number\");","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"ketweeen"},"content":" // Invalid command format","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Invalid command format\");","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"ketweeen"},"content":" } else if (userInput.startsWith(\"find\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"ketweeen"},"content":" // IF user wants to find a task","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"ketweeen"},"content":" String keyword \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"ketweeen"},"content":" taskList.findTasks(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"ketweeen"},"content":" // Other inputs","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"I\u0027m sorry, but I don\u0027t know what that means\");","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"ketweeen"},"content":" * Parses a string representation of a task and creates a Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"ketweeen"},"content":" * This method takes a string representation of a task in a specific format","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"ketweeen"},"content":" * and parses it to create a corresponding Task object. The input string is","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"ketweeen"},"content":" * split using the \"|\" delimiter and the task type, status, description, and","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"ketweeen"},"content":" * other relevant information are extracted to create the appropriate task.","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"ketweeen"},"content":" * The created task object is then returned.","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"ketweeen"},"content":" * @param line The string representation of a task to be parsed.","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"ketweeen"},"content":" * @return A Task object created from the parsed string representation.","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"ketweeen"},"content":" public static Task parseFileInput(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"ketweeen"},"content":" String[] parts \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"ketweeen"},"content":" String type \u003d parts[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"ketweeen"},"content":" boolean isDone \u003d parts[1].trim().equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"ketweeen"},"content":" String description \u003d parts[2].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"ketweeen"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"ketweeen"},"content":" switch (type) {","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"ketweeen"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"ketweeen"},"content":" task \u003d new ToDos(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"ketweeen"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"ketweeen"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"ketweeen"},"content":" String by \u003d parts[3].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"ketweeen"},"content":" // Parse the date and time","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"ketweeen"},"content":" LocalDate deadlineDate \u003d LocalDate.parse(by, DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"ketweeen"},"content":" task \u003d new Deadlines(description, deadlineDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"ketweeen"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"ketweeen"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"ketweeen"},"content":" String from \u003d parts[3].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"ketweeen"},"content":" String to \u003d parts[4].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"ketweeen"},"content":" task \u003d new Events(description, from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"ketweeen"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"ketweeen"},"content":" if (task !\u003d null \u0026\u0026 isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"ketweeen"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"ketweeen"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ketweeen":195}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" * The Storage class is responsible for loading and saving tasks to a file in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":" * It provides methods to read tasks from a file and write tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" private final String filepath;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" * Constructs a Storage instance with the specified file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" * @param filepath The path to the file used for storing tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":" * Loads tasks from a file and populates the provided list with the loaded tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" * This method reads tasks from a file specified by the DATA_FILE_PATH and adds them to","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" * the provided list of tasks. If the file does not exist, it will be created.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" * @param list The list to which loaded tasks will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":" public void loadTasks(TaskList list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ketweeen"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ketweeen"},"content":" // Create a File object representing the data file","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ketweeen"},"content":" File file \u003d new File(filepath);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ketweeen"},"content":" // Create the file if it doesn\u0027t exist and print a message","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ketweeen"},"content":" if (file.createNewFile()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" New File Created\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ketweeen"},"content":" // Use a Scanner to read tasks from the file","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ketweeen"},"content":" try (Scanner sc \u003d new Scanner(file)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ketweeen"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ketweeen"},"content":" // Read each line from the file","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ketweeen"},"content":" String line \u003d sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ketweeen"},"content":" // Convert the line to a Task object using Task.fromString","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ketweeen"},"content":" Task task \u003d Parser.parseFileInput(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ketweeen"},"content":" // Add the task to the provided list if it\u0027s not null","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ketweeen"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ketweeen"},"content":" list.addTask(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ketweeen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ketweeen"},"content":" // Handle IO exception by printing an error message","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"An error occurred while loading tasks\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ketweeen"},"content":" * Saves tasks from a list to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ketweeen"},"content":" * This method writes tasks from the provided list to a file specified by the DATA_FILE_PATH.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ketweeen"},"content":" * The tasks are converted to their file representation using the toFileString method of","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ketweeen"},"content":" * the Task class. If an error occurs during the file writing process, an error message","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ketweeen"},"content":" * is printed.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ketweeen"},"content":" * @param list The list of tasks to be saved to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ketweeen"},"content":" public void saveTasks(TaskList list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ketweeen"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ketweeen"},"content":" // Create a File object representing the data file","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ketweeen"},"content":" File file \u003d new File(filepath);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ketweeen"},"content":" // Create a FileWriter to write tasks to the file","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ketweeen"},"content":" FileWriter writer \u003d new FileWriter(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ketweeen"},"content":" // Write each task\u0027s file representation to the file","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ketweeen"},"content":" for (int i \u003d 0; i \u003c list.getSize(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ketweeen"},"content":" writer.write(list.getTask(i).toFileString() + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ketweeen"},"content":" // Close the FileWriter","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ketweeen"},"content":" writer.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ketweeen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ketweeen"},"content":" // Handle IO exception by printing an error message","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"An error occurred while saving tasks\");","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ketweeen":92}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":" * The Task class represents a task in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":" * It contains fields and methods to manage task descriptions, completion status,","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":" * and generating formatted string representations for display and storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" /** Class field description that describes the task. */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" /** Class field isDone that tells whether the task is marked. */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" * Constructor to initialize the Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":" * Gets the description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" * @return The description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ketweeen"},"content":" * Method to get the status icon of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ketweeen"},"content":" * @return String \"X\" if task\u0027s isDone is true, \" \" otherwise.","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"ketweeen"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"ketweeen"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ketweeen"},"content":" * Checks if the task is done.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ketweeen"},"content":" * @return `true` if the task is done, otherwise `false`.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"ketweeen"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ketweeen"},"content":" return this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"ketweeen"},"content":" * Method that sets the task\u0027s isDone to true.","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"ketweeen"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"ketweeen"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"ketweeen"},"content":" * Method that sets the task\u0027s isDone to false.","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"ketweeen"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"ketweeen"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ketweeen"},"content":" * Generates a string representation of the task for file storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ketweeen"},"content":" * @return A formatted string representation of the task for file storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ketweeen"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"ketweeen"},"content":" String doneStatus \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ketweeen"},"content":" return String.format(\" | %s | %s\", doneStatus, this.description);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"ketweeen"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"ketweeen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"ketweeen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"ketweeen"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ketweeen":82}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" * The TaskList class represents a list of tasks in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":" * It provides methods to manipulate and interact with the list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" private final List\u003cTask\u003e userList;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" * Constructs a TaskList instance with the provided list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" * @param taskList The list of tasks to be managed by the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" public TaskList(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" this.userList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":" * @param task The task to be added to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":" userList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ketweeen"},"content":" * Marks a task as done in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ketweeen"},"content":" * @param task The task to be marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ketweeen"},"content":" public void markTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ketweeen"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ketweeen"},"content":" Ui.showMarkedTask(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ketweeen"},"content":" * Marks a task as not done in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"ketweeen"},"content":" * @param task The task to be marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"ketweeen"},"content":" public void unmarkTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ketweeen"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ketweeen"},"content":" Ui.showUnmarkedTask(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"ketweeen"},"content":" * Deletes a task from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"ketweeen"},"content":" * @param task The task to be deleted from the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"ketweeen"},"content":" public void deleteTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ketweeen"},"content":" userList.remove(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ketweeen"},"content":" Ui.showDeletedTask(task, this);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"ketweeen"},"content":" * Finds and displays tasks that contain the specified keyword in their description.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"ketweeen"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"ketweeen"},"content":" public void findTasks(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"ketweeen"},"content":" List\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"ketweeen"},"content":" TaskList matchingTasksList \u003d new TaskList(matchingTasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"ketweeen"},"content":" for (Task task : userList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"ketweeen"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"ketweeen"},"content":" matchingTasksList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"ketweeen"},"content":" Ui.showMatchingTasks(matchingTasksList);","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"ketweeen"},"content":" * Returns the number of tasks in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"ketweeen"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"ketweeen"},"content":" public int getSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ketweeen"},"content":" return userList.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"ketweeen"},"content":" * Returns the task at the specified index in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"ketweeen"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"ketweeen"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"ketweeen"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ketweeen"},"content":" return userList.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ketweeen":97}},{"path":"src/main/java/duke/ToDos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":" * A class for ToDos tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"public class ToDos extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":" * Constructor to initialize the ToDos class.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":" * @param description Describes the todos task.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":" public ToDos(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" String doneStatus \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":" return String.format(\"T | %s | %s\", doneStatus, this.description);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" return String.format(\"[T][%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ketweeen":31}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":" * The Ui class handles user interface interactions in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":" * It provides methods to display messages, errors, and task-related information","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":" * to the user using the console.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" /** Constant divider used for separating UI sections. */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":" private static final String DIVIDER \u003d \" ____________________________________________________________\";","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" * Displays a divider line in the console.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" public static void showLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" System.out.println(DIVIDER);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" * Displays a welcome message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" public static void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":" showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Hello! I\u0027m Valerie!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ketweeen"},"content":" * @param error The error message to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ketweeen"},"content":" public static void showError(String error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ketweeen"},"content":" showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" ERROR: \" + error + \"!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ketweeen"},"content":" showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ketweeen"},"content":" * Displays a message indicating a task has been marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ketweeen"},"content":" * @param task The task that has been marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ketweeen"},"content":" public static void showMarkedTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"ketweeen"},"content":" * Displays a message indicating a task has been marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"ketweeen"},"content":" * @param task The task that has been marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"ketweeen"},"content":" public static void showUnmarkedTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ketweeen"},"content":" showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" OK! I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ketweeen"},"content":" showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"ketweeen"},"content":" * Displays a message indicating a task has been added to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"ketweeen"},"content":" * @param task The task that has been added.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"ketweeen"},"content":" * @param taskList The current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"ketweeen"},"content":" public static void showAddedTask(Task task, TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Got it! I\u0027ve added this task: \");","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Now you have \" + taskList.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"ketweeen"},"content":" * Displays a message indicating a task has been deleted from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"ketweeen"},"content":" * @param task The task that has been deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"ketweeen"},"content":" * @param taskList The current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"ketweeen"},"content":" public static void showDeletedTask(Task task, TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Now you have \" + taskList.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"ketweeen"},"content":" * Displays the list of tasks to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"ketweeen"},"content":" * @param taskList The task list to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"ketweeen"},"content":" public static void showList(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Sure! Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ketweeen"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ketweeen"},"content":" String str \u003d String.format(\" %d. %s\", i + 1, taskList.getTask(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ketweeen"},"content":" System.out.println(str);","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"ketweeen"},"content":" * Displays a list of tasks that match the search criteria.","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"ketweeen"},"content":" * @param matchingTasks The list of tasks that match the search criteria.","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"ketweeen"},"content":" public static void showMatchingTasks(TaskList matchingTasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"ketweeen"},"content":" for (int i \u003d 0; i \u003c matchingTasks.getSize(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"ketweeen"},"content":" String str \u003d String.format(\" %d.%s\", i + 1, matchingTasks.getTask(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"ketweeen"},"content":" System.out.println(str);","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"ketweeen"},"content":" * Displays a farewell message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"ketweeen"},"content":" public static void showExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"ketweeen"},"content":" showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Bye ~ Hope to see you again soon ~\");","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"ketweeen"},"content":" showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ketweeen":130}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" * The ParserTest class contains test cases for the Parser class in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":" * It verifies the correctness of the parseFileInput method using JUnit tests.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":" * Tests the parsing of a \"todos\" task representation from a file input string.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" public void testParseFileInput_TodoTask() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" String line \u003d \"T | 0 | Buy groceries\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" Task result \u003d Parser.parseFileInput(line);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" assertTrue(result instanceof ToDos);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":" assertEquals(\"Buy groceries\", result.getDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" assertFalse(result.isDone());","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ketweeen":25}},{"path":"src/test/java/duke/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" * The TaskTest class contains test cases for the Task class in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":" * It verifies the correctness of the toFileString method using JUnit tests.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":" * Tests the conversion of a task to its file representation string.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" public void testFileStringConversion() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" Task task \u003d new Task(\"Test\");","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" assertEquals(\" | 1 | Test\", task.toFileString());","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ketweeen":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ketweeen":8}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"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"},{"lineNumber":44,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"ketweeen"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"ketweeen"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ketweeen":5,"-":42}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"T | 0 | 1","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"D | 0 | yes | Nov 01 2020","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"E | 0 | cry | now | eternity","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ketweeen":3}},{"path":"src/main/java/duke/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" * A class for Deadlines tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":"public class Deadlines extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":" /** Class field by that tells when the deadline is due. */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" protected LocalDate deadlineDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" * Constructor to initialize the Deadlines class.","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" * @param description Describes the deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" * @param deadlineDate When the task is due.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" public Deadlines(String description, LocalDate deadlineDate) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":" this.deadlineDate \u003d deadlineDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":" String doneStatus \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" String formattedDate \u003d deadlineDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":" return String.format(\"D | %s | %s | %s\", doneStatus, this.description, formattedDate);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ketweeen"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ketweeen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"ketweeen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"ketweeen"},"content":" String formattedDate \u003d deadlineDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ketweeen"},"content":" return String.format(\"[D][%s] %s (by: %s)\", this.getStatusIcon(), this.description, formattedDate);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ketweeen":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":"import java.util.List;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" * The Duke class represents a simple task management chatbot application.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":" * It allows users to interact with a list of tasks and store them in a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":"public class Duke {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" private static final String DATA_FILE_PATH \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" * Constructs a Duke instance with the specified file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" * @param filepath The path to the file used for storing tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" public Duke(String filepath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":" this.storage \u003d new Storage(filepath);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" * Runs the Duke application, allowing users to interact with tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":" * This method displays a welcome message, creates a data directory if it doesn\u0027t exist,","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" * loads tasks from the storage, and repeatedly prompts the user for input until \"bye\" is entered.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ketweeen"},"content":" // Welcome","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ketweeen"},"content":" Ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ketweeen"},"content":" // Creates data folder if doesn\u0027t exist","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ketweeen"},"content":" File dataDirectory \u003d new File(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ketweeen"},"content":" if (!dataDirectory.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ketweeen"},"content":" if (dataDirectory.mkdir()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Data directory created successfully.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Failed to create data directory.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ketweeen"},"content":" // Check user input","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"ketweeen"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"ketweeen"},"content":" List\u003cTask\u003e userList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"ketweeen"},"content":" TaskList taskList \u003d new TaskList(userList);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ketweeen"},"content":" this.storage.loadTasks(taskList); // Load tasks to list","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"ketweeen"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"ketweeen"},"content":" String userInput \u003d sc.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ketweeen"},"content":" if (userInput.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ketweeen"},"content":" // Exit the loop if the user types \"bye\"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ketweeen"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ketweeen"},"content":" Ui.showExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ketweeen"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ketweeen"},"content":" Parser.parseUserInput(userInput, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"ketweeen"},"content":" * The main method to start the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"ketweeen"},"content":" * Creates an instance of Duke with the data file path and runs the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"ketweeen"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ketweeen"},"content":" new Duke(DATA_FILE_PATH).run();","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ketweeen":72,"-":2}},{"path":"src/main/java/duke/Events.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":" * A class for Events tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"public class Events extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" /** Class field by that tells when the event is from. */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" /** Class field by that tells until when the event is done. */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" * Constructor to initialize the Events class.","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" * @param description Describes the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" * @param from When the event is from.","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" * @param to Until when the event is to.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" public Events(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" String doneStatus \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":" return String.format(\"E | %s | %s | %s | %s\", doneStatus, this.description, this.from, this.to);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ketweeen"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ketweeen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"ketweeen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"ketweeen"},"content":" return String.format(\"[E][%s] %s (from: %s to: %s)\", this.getStatusIcon(), this.description,","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ketweeen"},"content":" this.from, this.to);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ketweeen":41}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" * The Parser class is responsible for parsing user input and file input","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":" * to create and manipulate tasks in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":" * Parses user input and performs corresponding actions on the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" * @param userInput The user\u0027s input command.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" * @param taskList The list of tasks to be manipulated.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" public static void parseUserInput(String userInput, TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" if (userInput.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" // If user wants to check list","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" Ui.showList(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" } else if (userInput.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":" // If user wants to mark something","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":" String[] parts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":" if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":" taskList.markTask(taskList.getTask(index));","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Invalid task number\");","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ketweeen"},"content":" // Invalid command format","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Invalid command format\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ketweeen"},"content":" } else if (userInput.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ketweeen"},"content":" // If user wants to unmark something","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ketweeen"},"content":" String[] parts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ketweeen"},"content":" if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ketweeen"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ketweeen"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ketweeen"},"content":" taskList.unmarkTask(taskList.getTask(index));","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ketweeen"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Invalid task number\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ketweeen"},"content":" // Invalid command format","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Invalid command format\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ketweeen"},"content":" } else if (userInput.startsWith(\"todo\") || userInput.startsWith(\"deadline\") || userInput.startsWith(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ketweeen"},"content":" // User creates a task","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ketweeen"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ketweeen"},"content":" if (userInput.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ketweeen"},"content":" // If user wants to create a ToDos task","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ketweeen"},"content":" if (userInput.length() \u003c 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ketweeen"},"content":" // Incorrect input format for todos","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Incorrect input format for todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ketweeen"},"content":" String description \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ketweeen"},"content":" if (description.isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ketweeen"},"content":" // If there\u0027s do description","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"The description of a todo cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ketweeen"},"content":" newTask \u003d new ToDos(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ketweeen"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ketweeen"},"content":" } else if (userInput.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ketweeen"},"content":" // If user wants to create a Deadlines task","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ketweeen"},"content":" String[] parts \u003d userInput.split(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ketweeen"},"content":" if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ketweeen"},"content":" // Makes sure deadline format is followed (e.g. there\u0027s /by)","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ketweeen"},"content":" String description \u003d parts[0].substring(9).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ketweeen"},"content":" String by \u003d parts[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ketweeen"},"content":" // Parse the date and time","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ketweeen"},"content":" LocalDate deadlineDate \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ketweeen"},"content":" if (description.isBlank() || by.isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ketweeen"},"content":" // If description or by is empty","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"The description or by of a deadline cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ketweeen"},"content":" newTask \u003d new Deadlines(description, deadlineDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ketweeen"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ketweeen"},"content":" // Incorrect input format for deadline","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Incorrect input format for deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ketweeen"},"content":" // If user wants to create an Events task","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ketweeen"},"content":" String[] parts \u003d userInput.split(\"/from|/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ketweeen"},"content":" if (parts.length \u003d\u003d 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ketweeen"},"content":" // Makes sure deadline format is followed (e.g. there\u0027s /from and /to)","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ketweeen"},"content":" String description \u003d parts[0].substring(6).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ketweeen"},"content":" String from \u003d parts[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ketweeen"},"content":" String to \u003d parts[2].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ketweeen"},"content":" if (description.isBlank() || from.isBlank() || to.isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"ketweeen"},"content":" // If description, from, or to is empty","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"The description or from or to of an event cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"ketweeen"},"content":" newTask \u003d new Events(description, from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"ketweeen"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"ketweeen"},"content":" // Incorrect input format for events","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Incorrect input format for event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"ketweeen"},"content":" if (newTask !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"ketweeen"},"content":" // If task is initialized","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"ketweeen"},"content":" Ui.showAddedTask(newTask, taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"ketweeen"},"content":" } else if (userInput.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"ketweeen"},"content":" // If user wants to delete a task","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"ketweeen"},"content":" String[] parts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"ketweeen"},"content":" if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"ketweeen"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"ketweeen"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"ketweeen"},"content":" taskList.deleteTask(taskList.getTask(index));","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"ketweeen"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Invalid task number\");","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"ketweeen"},"content":" // Invalid command format","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"Invalid command format\");","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"ketweeen"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"ketweeen"},"content":" } else if (userInput.startsWith(\"find\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"ketweeen"},"content":" // IF user wants to find a task","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"ketweeen"},"content":" String keyword \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"ketweeen"},"content":" taskList.findTasks(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"ketweeen"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"ketweeen"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e branch-A-CheckStyle","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"ketweeen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"I\u0027m sorry, but I don\u0027t know what that means\");","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"ketweeen"},"content":" * Parses a string representation of a task and creates a Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"ketweeen"},"content":" * This method takes a string representation of a task in a specific format","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"ketweeen"},"content":" * and parses it to create a corresponding Task object. The input string is","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"ketweeen"},"content":" * split using the \"|\" delimiter and the task type, status, description, and","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"ketweeen"},"content":" * other relevant information are extracted to create the appropriate task.","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"ketweeen"},"content":" * The created task object is then returned.","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"ketweeen"},"content":" * @param line The string representation of a task to be parsed.","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"ketweeen"},"content":" * @return A Task object created from the parsed string representation.","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"ketweeen"},"content":" public static Task parseFileInput(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"ketweeen"},"content":" String[] parts \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"ketweeen"},"content":" String type \u003d parts[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"ketweeen"},"content":" boolean isDone \u003d parts[1].trim().equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"ketweeen"},"content":" String description \u003d parts[2].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"ketweeen"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"ketweeen"},"content":" switch (type) {","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"ketweeen"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"ketweeen"},"content":" task \u003d new ToDos(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"ketweeen"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"ketweeen"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"ketweeen"},"content":" String by \u003d parts[3].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"ketweeen"},"content":" // Parse the date and time","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"ketweeen"},"content":" LocalDate deadlineDate \u003d LocalDate.parse(by, DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"ketweeen"},"content":" task \u003d new Deadlines(description, deadlineDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"ketweeen"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"ketweeen"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"ketweeen"},"content":" String from \u003d parts[3].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"ketweeen"},"content":" String to \u003d parts[4].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"ketweeen"},"content":" task \u003d new Events(description, from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"ketweeen"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"ketweeen"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":189,"author":{"gitId":"ketweeen"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":190,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"ketweeen"},"content":" if (task !\u003d null \u0026\u0026 isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"ketweeen"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"ketweeen"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ketweeen":198}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" * The Storage class is responsible for loading and saving tasks to a file in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":" * It provides methods to read tasks from a file and write tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" private final String filepath;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" * Constructs a Storage instance with the specified file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" * @param filepath The path to the file used for storing tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":" * Loads tasks from a file and populates the provided list with the loaded tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" * This method reads tasks from a file specified by the DATA_FILE_PATH and adds them to","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" * the provided list of tasks. If the file does not exist, it will be created.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" * @param list The list to which loaded tasks will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":" public void loadTasks(TaskList list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ketweeen"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ketweeen"},"content":" // Create a File object representing the data file","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ketweeen"},"content":" File file \u003d new File(filepath);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ketweeen"},"content":" // Create the file if it doesn\u0027t exist and print a message","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ketweeen"},"content":" if (file.createNewFile()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" New File Created\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ketweeen"},"content":" // Use a Scanner to read tasks from the file","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ketweeen"},"content":" try (Scanner sc \u003d new Scanner(file)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ketweeen"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ketweeen"},"content":" // Read each line from the file","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ketweeen"},"content":" String line \u003d sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ketweeen"},"content":" // Convert the line to a Task object using Task.fromString","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ketweeen"},"content":" Task task \u003d Parser.parseFileInput(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ketweeen"},"content":" // Add the task to the provided list if it\u0027s not null","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ketweeen"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ketweeen"},"content":" list.addTask(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ketweeen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ketweeen"},"content":" // Handle IO exception by printing an error message","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"An error occurred while loading tasks\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ketweeen"},"content":" * Saves tasks from a list to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ketweeen"},"content":" * This method writes tasks from the provided list to a file specified by the DATA_FILE_PATH.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ketweeen"},"content":" * The tasks are converted to their file representation using the toFileString method of","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ketweeen"},"content":" * the Task class. If an error occurs during the file writing process, an error message","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ketweeen"},"content":" * is printed.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ketweeen"},"content":" * @param list The list of tasks to be saved to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ketweeen"},"content":" public void saveTasks(TaskList list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ketweeen"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ketweeen"},"content":" // Create a File object representing the data file","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ketweeen"},"content":" File file \u003d new File(filepath);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ketweeen"},"content":" // Create a FileWriter to write tasks to the file","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ketweeen"},"content":" FileWriter writer \u003d new FileWriter(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ketweeen"},"content":" // Write each task\u0027s file representation to the file","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ketweeen"},"content":" for (int i \u003d 0; i \u003c list.getSize(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ketweeen"},"content":" writer.write(list.getTask(i).toFileString() + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ketweeen"},"content":" // Close the FileWriter","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ketweeen"},"content":" writer.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ketweeen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ketweeen"},"content":" // Handle IO exception by printing an error message","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ketweeen"},"content":" Ui.showError(\"An error occurred while saving tasks\");","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ketweeen":92}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":" * The Task class represents a task in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":" * It contains fields and methods to manage task descriptions, completion status,","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":" * and generating formatted string representations for display and storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" /** Class field description that describes the task. */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" /** Class field isDone that tells whether the task is marked. */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" * Constructor to initialize the Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":" * Gets the description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" * @return The description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ketweeen"},"content":" * Method to get the status icon of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ketweeen"},"content":" * @return String \"X\" if task\u0027s isDone is true, \" \" otherwise.","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"ketweeen"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"ketweeen"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ketweeen"},"content":" * Checks if the task is done.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ketweeen"},"content":" * @return `true` if the task is done, otherwise `false`.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"ketweeen"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ketweeen"},"content":" return this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"ketweeen"},"content":" * Method that sets the task\u0027s isDone to true.","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"ketweeen"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"ketweeen"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"ketweeen"},"content":" * Method that sets the task\u0027s isDone to false.","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"ketweeen"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"ketweeen"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ketweeen"},"content":" * Generates a string representation of the task for file storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ketweeen"},"content":" * @return A formatted string representation of the task for file storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ketweeen"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"ketweeen"},"content":" String doneStatus \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ketweeen"},"content":" return String.format(\" | %s | %s\", doneStatus, this.description);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"ketweeen"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"ketweeen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"ketweeen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"ketweeen"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ketweeen":82}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" * The TaskList class represents a list of tasks in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":" * It provides methods to manipulate and interact with the list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" private final List\u003cTask\u003e userList;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" * Constructs a TaskList instance with the provided list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" * @param taskList The list of tasks to be managed by the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" public TaskList(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" this.userList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":" * @param task The task to be added to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":" userList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ketweeen"},"content":" * Marks a task as done in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ketweeen"},"content":" * @param task The task to be marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"ketweeen"},"content":" public void markTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ketweeen"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ketweeen"},"content":" Ui.showMarkedTask(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ketweeen"},"content":" * Marks a task as not done in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"ketweeen"},"content":" * @param task The task to be marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"ketweeen"},"content":" public void unmarkTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ketweeen"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ketweeen"},"content":" Ui.showUnmarkedTask(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"ketweeen"},"content":" * Deletes a task from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"ketweeen"},"content":" * @param task The task to be deleted from the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"ketweeen"},"content":" public void deleteTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ketweeen"},"content":" userList.remove(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ketweeen"},"content":" Ui.showDeletedTask(task, this);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"ketweeen"},"content":" * Finds and displays tasks that contain the specified keyword in their description.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"ketweeen"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"ketweeen"},"content":" public void findTasks(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"ketweeen"},"content":" List\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"ketweeen"},"content":" TaskList matchingTasksList \u003d new TaskList(matchingTasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"ketweeen"},"content":" for (Task task : userList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"ketweeen"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"ketweeen"},"content":" matchingTasksList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"ketweeen"},"content":" Ui.showMatchingTasks(matchingTasksList);","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"ketweeen"},"content":" * Returns the number of tasks in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"ketweeen"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"ketweeen"},"content":" public int getSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ketweeen"},"content":" return userList.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"ketweeen"},"content":" * Returns the task at the specified index in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"ketweeen"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"ketweeen"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"ketweeen"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ketweeen"},"content":" return userList.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ketweeen":97}},{"path":"src/main/java/duke/ToDos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":" * A class for ToDos tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"public class ToDos extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":" * Constructor to initialize the ToDos class.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":" * @param description Describes the todos task.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":" public ToDos(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" String doneStatus \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":" return String.format(\"T | %s | %s\", doneStatus, this.description);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" return String.format(\"[T][%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ketweeen":31}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":" * The Ui class handles user interface interactions in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":" * It provides methods to display messages, errors, and task-related information","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":" * to the user using the console.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" /** Constant divider used for separating UI sections. */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":" private static final String DIVIDER \u003d \" ____________________________________________________________\";","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" * Displays a divider line in the console.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" public static void showLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" System.out.println(DIVIDER);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" * Displays a welcome message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" public static void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":" showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Hello! I\u0027m Valerie!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ketweeen"},"content":" showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ketweeen"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ketweeen"},"content":" * @param error The error message to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ketweeen"},"content":" public static void showError(String error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ketweeen"},"content":" showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" \" + error + \"!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ketweeen"},"content":" showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"ketweeen"},"content":" * Displays a message indicating a task has been marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"ketweeen"},"content":" * @param task The task that has been marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"ketweeen"},"content":" public static void showMarkedTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"ketweeen"},"content":" * Displays a message indicating a task has been marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"ketweeen"},"content":" * @param task The task that has been marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"ketweeen"},"content":" public static void showUnmarkedTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ketweeen"},"content":" showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" OK! I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ketweeen"},"content":" showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"ketweeen"},"content":" * Displays a message indicating a task has been added to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"ketweeen"},"content":" * @param task The task that has been added.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"ketweeen"},"content":" * @param taskList The current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"ketweeen"},"content":" public static void showAddedTask(Task task, TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Got it! I\u0027ve added this task: \");","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Now you have \" + taskList.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"ketweeen"},"content":" * Displays a message indicating a task has been deleted from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"ketweeen"},"content":" * @param task The task that has been deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"ketweeen"},"content":" * @param taskList The current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"ketweeen"},"content":" public static void showDeletedTask(Task task, TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Now you have \" + taskList.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"ketweeen"},"content":" * Displays the list of tasks to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"ketweeen"},"content":" * @param taskList The task list to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"ketweeen"},"content":" public static void showList(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Sure! Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ketweeen"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ketweeen"},"content":" String str \u003d String.format(\" %d. %s\", i + 1, taskList.getTask(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ketweeen"},"content":" System.out.println(str);","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"ketweeen"},"content":" * Displays a list of tasks that match the search criteria.","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"ketweeen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"ketweeen"},"content":" * @param matchingTasks The list of tasks that match the search criteria.","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"ketweeen"},"content":" public static void showMatchingTasks(TaskList matchingTasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"ketweeen"},"content":" for (int i \u003d 0; i \u003c matchingTasks.getSize(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"ketweeen"},"content":" String str \u003d String.format(\" %d.%s\", i + 1, matchingTasks.getTask(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"ketweeen"},"content":" System.out.println(str);","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"ketweeen"},"content":" Ui.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"ketweeen"},"content":" * Displays a farewell message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"ketweeen"},"content":" public static void showExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"ketweeen"},"content":" showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"ketweeen"},"content":" System.out.println(\" Bye ~ Hope to see you again soon ~\");","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"ketweeen"},"content":" showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ketweeen":130}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" * The ParserTest class contains test cases for the Parser class in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":" * It verifies the correctness of the parseFileInput method using JUnit tests.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":" * Tests the parsing of a \"todos\" task representation from a file input string.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" public void testParseFileInput_TodoTask() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" String line \u003d \"T | 0 | Buy groceries\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" Task result \u003d Parser.parseFileInput(line);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":" assertTrue(result instanceof ToDos);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ketweeen"},"content":" assertEquals(\"Buy groceries\", result.getDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ketweeen"},"content":" assertFalse(result.isDone());","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ketweeen":24}},{"path":"src/test/java/duke/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":" * The TaskTest class contains test cases for the Task class in the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":" * It verifies the correctness of the toFileString method using JUnit tests.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ketweeen"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ketweeen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ketweeen"},"content":" * Tests the conversion of a task to its file representation string.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ketweeen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ketweeen"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ketweeen"},"content":" public void testFileStringConversion() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ketweeen"},"content":" Task task \u003d new Task(\"Test\");","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ketweeen"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ketweeen"},"content":" assertEquals(\" | 1 | Test\", task.toFileString());","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ketweeen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ketweeen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ketweeen":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ketweeen"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"ketweeen"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ketweeen"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ketweeen"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ketweeen"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ketweeen"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ketweeen"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ketweeen"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ketweeen":8}}] diff --git a/ketweeen_ip_master/commits.json b/ketweeen_ip_master/commits.json index ef204a81..afe8a285 100644 --- a/ketweeen_ip_master/commits.json +++ b/ketweeen_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ketweeen":[{"date":"2023-08-24","commitResults":[{"hash":"1a49bc6704d98d8e1c196c6de5d852ced8ec2028","isMergeCommit":false,"messageTitle":"Level-0 changes","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":7}}},{"hash":"ceb1fd524987ecf5340a8976151c5eda6369c098","isMergeCommit":false,"messageTitle":"Level-1 changes: allowed for user input, if user inputs bye it quits program and else becomes added: (user input)","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":3}}},{"hash":"c8c189c6b0096bfa3f731847632216ccbff5bf26","isMergeCommit":false,"messageTitle":"Added Level-2 changes: user inputs will now added to a list, inputting list will print out the list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"f479ba922a00f207e1dba22309bc935a50174f3b","isMergeCommit":false,"messageTitle":"Level-3 changes: Added Task class, userList now stores Task instances, user can also mark and unmark tasks.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":2}}},{"hash":"48ecc51358adbd7840a1ccc4fe01ade74accd383","isMergeCommit":false,"messageTitle":"Level-4 changes: Added ToDos, Deadlines, and Events class. User can now make an todos, deadlines, or events task.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":6}}},{"hash":"972c51facaec36926e547deef06efeea14ce9d19","isMergeCommit":false,"messageTitle":"A-TextUiTesting changes: changed input.txt and EXPECTED.txt for testing purposes","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"422ea545297203ed0e4b6a4e6faa3400cd1b65ac","isMergeCommit":false,"messageTitle":"Level-5 changes: Added error handlings when creating a new task; inputing something other than list, bye, todo, deadline, or event will return an error message","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":12}}},{"hash":"ecc0346c135f4842dca718e33ff39086b0475e72","isMergeCommit":false,"messageTitle":"Level-6 changes: User can now delete tasks.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"855106361a5abc756e2bc6d0b0f803b0e7230e94","isMergeCommit":false,"messageTitle":"Update Deadlines, Duke, Events, Task, and ToDos","messageBody":"Users can now load and save files.\n","fileTypesAndContributionMap":{"java":{"insertions":170,"deletions":8}}},{"hash":"d06724f7c511ead5665125e69341ad27e691356d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"aae96776b60420136b57748d8a9a9d28c52487db","isMergeCommit":false,"messageTitle":"Update Deadline, Duke, and Task","messageBody":"The string inputted after /by is now treated as a LocalDate.\n","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":8}}},{"hash":"67bbc449bc98b968c0980d282a201665ad99a9a9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"8820913467453fa2f404beaa503b6f3d49b6e73f","isMergeCommit":false,"messageTitle":"Add Parser, Storage, TaskList, and Ui as well as update Duke and Task","messageBody":"Incorporate more OOP\n","fileTypesAndContributionMap":{"java":{"insertions":359,"deletions":332}}},{"hash":"1eb33052d4b39c3856f1f72ed2b3abc089c6618a","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"e48b0d9752ed982d59369b1f48c44b18c62d3b77","isMergeCommit":false,"messageTitle":"Add duke package to all class and do some bug fixes","messageBody":"\"bye\" command is moved from Parser class to Duke class so loop exits after bye.\n","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":13}}},{"hash":"faa91b51eaafb9ddbd3a905c6a0d4a017d664572","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"f40051bd96c733228e90670de4524c226c27777e","isMergeCommit":false,"messageTitle":"Move fromString method to Parser class and change name to parseFileInput","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":49}}},{"hash":"02d749d618a13206ffe1b7c046d861ee8e7a1576","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"f31b8b62d28a2a2ba2d58d7bbadfe9b50a185a01","isMergeCommit":false,"messageTitle":"Add ParserTest and TaskTest","messageBody":"Added JUnit Test methods\n","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":19}}},{"hash":"ed02e567e06d38b7d1b0da82d9afc9fb9e6b3fcc","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"fda90f12b4fdd6cfb90ea6bba0339f90cc5b066f","isMergeCommit":false,"messageTitle":"Update Duke, Parser, Storage, Task, TaskList, Ui, ParserTest, and TaskTest","messageBody":"Added JavaDocs headers to the methods.\n","fileTypesAndContributionMap":{"java":{"insertions":169,"deletions":29}}},{"hash":"535a9c3f8dcba18c883d8faeda149f4b593f8d76","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"e6987dcb29cc7e7044b93810aabac8270316288e","isMergeCommit":false,"messageTitle":"Update Parser","messageBody":"Changed the indentation of case (of a switch)\n","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":17}}},{"hash":"abfc41bd42c050a9ceff31f5237a8c1db9dcce95","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"39175c6a68a12ba79a45567bf20295fde27bd708","isMergeCommit":false,"messageTitle":"Update Parser, TaskList, Ui","messageBody":"Users can now find tasks.\n","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}},{"hash":"34b92f6edf67eb52c2b681fc3bbf6bfb53ce6772","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bd94eeac94adcccdd94da3776e47068470c2a9ad","isMergeCommit":false,"messageTitle":"Update TaskList and Ui","messageBody":"Added JavaDoc headers to new methods\n","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"68e149322f00e29f2350c3ba6eba07f151944941","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ketweeen":{"java":825,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":8}},"authorContributionVariance":{"ketweeen":52687.31},"authorDisplayNameMap":{"ketweeen":"CS2103T-W09-4 CATH..IANG"}} +{"authorDailyContributionsMap":{"ketweeen":[{"date":"2023-08-24","commitResults":[{"hash":"1a49bc6704d98d8e1c196c6de5d852ced8ec2028","isMergeCommit":false,"messageTitle":"Level-0 changes","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":7}}},{"hash":"ceb1fd524987ecf5340a8976151c5eda6369c098","isMergeCommit":false,"messageTitle":"Level-1 changes: allowed for user input, if user inputs bye it quits program and else becomes added: (user input)","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":3}}},{"hash":"c8c189c6b0096bfa3f731847632216ccbff5bf26","isMergeCommit":false,"messageTitle":"Added Level-2 changes: user inputs will now added to a list, inputting list will print out the list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"f479ba922a00f207e1dba22309bc935a50174f3b","isMergeCommit":false,"messageTitle":"Level-3 changes: Added Task class, userList now stores Task instances, user can also mark and unmark tasks.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":2}}},{"hash":"48ecc51358adbd7840a1ccc4fe01ade74accd383","isMergeCommit":false,"messageTitle":"Level-4 changes: Added ToDos, Deadlines, and Events class. User can now make an todos, deadlines, or events task.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":6}}},{"hash":"972c51facaec36926e547deef06efeea14ce9d19","isMergeCommit":false,"messageTitle":"A-TextUiTesting changes: changed input.txt and EXPECTED.txt for testing purposes","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"422ea545297203ed0e4b6a4e6faa3400cd1b65ac","isMergeCommit":false,"messageTitle":"Level-5 changes: Added error handlings when creating a new task; inputing something other than list, bye, todo, deadline, or event will return an error message","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":12}}},{"hash":"ecc0346c135f4842dca718e33ff39086b0475e72","isMergeCommit":false,"messageTitle":"Level-6 changes: User can now delete tasks.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"855106361a5abc756e2bc6d0b0f803b0e7230e94","isMergeCommit":false,"messageTitle":"Update Deadlines, Duke, Events, Task, and ToDos","messageBody":"Users can now load and save files.\n","fileTypesAndContributionMap":{"java":{"insertions":170,"deletions":8}}},{"hash":"d06724f7c511ead5665125e69341ad27e691356d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"aae96776b60420136b57748d8a9a9d28c52487db","isMergeCommit":false,"messageTitle":"Update Deadline, Duke, and Task","messageBody":"The string inputted after /by is now treated as a LocalDate.\n","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":8}}},{"hash":"67bbc449bc98b968c0980d282a201665ad99a9a9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"8820913467453fa2f404beaa503b6f3d49b6e73f","isMergeCommit":false,"messageTitle":"Add Parser, Storage, TaskList, and Ui as well as update Duke and Task","messageBody":"Incorporate more OOP\n","fileTypesAndContributionMap":{"java":{"insertions":359,"deletions":332}}},{"hash":"1eb33052d4b39c3856f1f72ed2b3abc089c6618a","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"e48b0d9752ed982d59369b1f48c44b18c62d3b77","isMergeCommit":false,"messageTitle":"Add duke package to all class and do some bug fixes","messageBody":"\"bye\" command is moved from Parser class to Duke class so loop exits after bye.\n","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":13}}},{"hash":"faa91b51eaafb9ddbd3a905c6a0d4a017d664572","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"f40051bd96c733228e90670de4524c226c27777e","isMergeCommit":false,"messageTitle":"Move fromString method to Parser class and change name to parseFileInput","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":49}}},{"hash":"02d749d618a13206ffe1b7c046d861ee8e7a1576","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"f31b8b62d28a2a2ba2d58d7bbadfe9b50a185a01","isMergeCommit":false,"messageTitle":"Add ParserTest and TaskTest","messageBody":"Added JUnit Test methods\n","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":19}}},{"hash":"ed02e567e06d38b7d1b0da82d9afc9fb9e6b3fcc","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"fda90f12b4fdd6cfb90ea6bba0339f90cc5b066f","isMergeCommit":false,"messageTitle":"Update Duke, Parser, Storage, Task, TaskList, Ui, ParserTest, and TaskTest","messageBody":"Added JavaDocs headers to the methods.\n","fileTypesAndContributionMap":{"java":{"insertions":169,"deletions":29}}},{"hash":"535a9c3f8dcba18c883d8faeda149f4b593f8d76","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"e6987dcb29cc7e7044b93810aabac8270316288e","isMergeCommit":false,"messageTitle":"Update Parser","messageBody":"Changed the indentation of case (of a switch)\n","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":17}}},{"hash":"abfc41bd42c050a9ceff31f5237a8c1db9dcce95","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"39175c6a68a12ba79a45567bf20295fde27bd708","isMergeCommit":false,"messageTitle":"Update Parser, TaskList, Ui","messageBody":"Users can now find tasks.\n","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}},{"hash":"34b92f6edf67eb52c2b681fc3bbf6bfb53ce6772","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bd94eeac94adcccdd94da3776e47068470c2a9ad","isMergeCommit":false,"messageTitle":"Update TaskList and Ui","messageBody":"Added JavaDoc headers to new methods\n","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"68e149322f00e29f2350c3ba6eba07f151944941","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"57f9d3746a482ca9fe755780ef543030b98d4a58","isMergeCommit":false,"messageTitle":"Update files according to checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":3,"deletions":0},"java":{"insertions":14,"deletions":12}}},{"hash":"d0c6e8fcd73f1cbfffb7d6995a9bd7eb4331fbeb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Parser.java\n","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ketweeen":{"java":828,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":5,"txt":11}},"authorContributionVariance":{"ketweeen":43804.664},"authorDisplayNameMap":{"ketweeen":"CS2103T-W09-4 CATH..IANG"}} diff --git a/kiatkat_ip_master/authorship.json b/kiatkat_ip_master/authorship.json index 10eada94..dac357c6 100644 --- a/kiatkat_ip_master/authorship.json +++ b/kiatkat_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-05"},{"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":"kiatkat"},"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-05"},{"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":{"kiatkat":2,"-":22}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" String fileName \u003d \"duke.Duke.txt\";","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" String[] directories \u003d {\"data\"};","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" public Duke() {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" storage \u003d new Storage(fileName, directories);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":" public void run() {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":" ui.showSoftLine(); // show the divider line (\"_______\")","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"kiatkat"},"content":" } finally {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"kiatkat"},"content":" if (!isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"kiatkat"},"content":" ui.showHardLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"kiatkat"},"content":" ui.showGoodbye();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"kiatkat"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"kiatkat"},"content":" new Duke().run();","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"kiatkat":48,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kiatkat":9}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.command.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" String[] splits \u003d fullCommand.strip().split(\" \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" String command \u003d splits[0].toLowerCase();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" String detail \u003d splits.length \u003d\u003d 2 ? splits[1].strip() : \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" switch (command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":" case \"bye\":","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":" case \"todo\":","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":" if (detail.isBlank())","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t read your mind. Do add a description.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":" return new AddCommand(new Todo(detail));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":" if (detail.isBlank())","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t read your mind. Do add a description.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":" String[] deadlineSplits \u003d detail.split(\"/by\", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":" String deadlineDescription \u003d deadlineSplits[0].strip();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"kiatkat"},"content":" String deadlineStr \u003d deadlineSplits[1].strip();","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"kiatkat"},"content":" if (deadlineStr.isBlank() || deadlineDescription.isBlank())","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t read your mind. Do add more details.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"kiatkat"},"content":" LocalDateTime deadlineDate \u003d LocalDateTime.parse(deadlineStr);","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"kiatkat"},"content":" return new AddCommand(new Deadline(deadlineDescription, deadlineDate));","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"kiatkat"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"kiatkat"},"content":" return new AddCommand(new Deadline(deadlineDescription, deadlineStr));","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"kiatkat"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"Please format your description properly.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"kiatkat"},"content":" case \"event\":","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"kiatkat"},"content":" if (detail.isBlank())","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t read your mind. Do add a description.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"kiatkat"},"content":" String[] eventSplit1 \u003d detail.split(\"/from\", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"kiatkat"},"content":" String[] eventSplit2 \u003d eventSplit1[1].split(\"/to\", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"kiatkat"},"content":" String eventDescription \u003d eventSplit1[0].strip();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"kiatkat"},"content":" String startDate \u003d eventSplit2[0].strip();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"kiatkat"},"content":" String endDate \u003d eventSplit2[1].strip();","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"kiatkat"},"content":" if (eventDescription.isBlank() || startDate.isBlank() || endDate.isBlank())","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t read your mind. Do add more details.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"Roger that. Preparations will be underway.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"kiatkat"},"content":" LocalDateTime eventStartDate \u003d LocalDateTime.parse(startDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"kiatkat"},"content":" LocalDateTime eventEndDate \u003d LocalDateTime.parse(endDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"kiatkat"},"content":" return new AddCommand(new Event(eventDescription, eventStartDate, eventEndDate));","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"kiatkat"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"kiatkat"},"content":" return new AddCommand(new Event(eventDescription, startDate, endDate));","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"kiatkat"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"Please format your description properly.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"kiatkat"},"content":" case \"mark\":","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"kiatkat"},"content":" if (detail.isBlank()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t read your mind. Provide a suitable index.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"kiatkat"},"content":" if (detail.equalsIgnoreCase(\"all\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"kiatkat"},"content":" return new MarkCommand(null);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"kiatkat"},"content":" int index \u003d Integer.parseInt(detail) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"kiatkat"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"kiatkat"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t understand that number.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"kiatkat"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"kiatkat"},"content":" if (detail.isBlank())","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t read your mind. Provide a suitable index.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"kiatkat"},"content":" if (detail.equalsIgnoreCase(\"all\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"kiatkat"},"content":" return new UnmarkCommand(null);","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"kiatkat"},"content":" int index \u003d Integer.parseInt(detail) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"kiatkat"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"kiatkat"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t understand that number.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"kiatkat"},"content":" case \"list\":","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"kiatkat"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"kiatkat"},"content":" case \"delete\":","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"kiatkat"},"content":" if (detail.isBlank()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t read your mind. Provide a suitable index.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"kiatkat"},"content":" if (detail.equalsIgnoreCase(\"all\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"kiatkat"},"content":" return new DeleteCommand(null);","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"kiatkat"},"content":" int index \u003d Integer.parseInt(detail) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"kiatkat"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"kiatkat"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t understand that number.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"kiatkat"},"content":" case \"thanks\":","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"kiatkat"},"content":" return new MessageCommand(\"...No problem.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"kiatkat"},"content":" case \"zzz\":","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"kiatkat"},"content":" return new DocRestCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"kiatkat"},"content":" case \"hi\":","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"kiatkat"},"content":" return new MessageCommand(\"Greetings.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"kiatkat"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"kiatkat"},"content":" return new MessageCommand(\"Sorry, I didn\u0027t quite catch that. Are you having enough sleep?\");","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":147}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import java.io.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" private String fileName;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" private String[] directories;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" private Path filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" private File saveFile;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" public Storage(String fileName, String[] directories) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" this.fileName \u003d fileName;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" this.directories \u003d directories;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" filePath \u003d Path.of(System.getProperty(\"user.dir\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":" for (String directory : directories) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":" filePath \u003d Paths.get(filePath.toString(), directory);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":" saveFile \u003d new File(filePath.toUri());","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":" if (!saveFile.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":" if (saveFile.mkdir()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"Directory \" + filePath.toString() + \" created.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" filePath \u003d Paths.get(filePath.toString(), fileName);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":" saveFile \u003d new File(filePath.toUri());","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":" if (!saveFile.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" if (saveFile.createNewFile()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"Save file could not be located, new file created\");","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"kiatkat"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"Error creating save file: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"kiatkat"},"content":" public TaskList load() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"kiatkat"},"content":" if (saveFile.length() \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"kiatkat"},"content":" return new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"kiatkat"},"content":" FileInputStream fis \u003d new FileInputStream(saveFile);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"kiatkat"},"content":" ObjectInputStream ois \u003d new ObjectInputStream(fis);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"kiatkat"},"content":" TaskList tasks \u003d (TaskList) ois.readObject();","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"kiatkat"},"content":" ois.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"kiatkat"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"kiatkat"},"content":" } catch (IOException | ClassNotFoundException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"kiatkat"},"content":" saveFile.delete();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"kiatkat"},"content":" saveFile.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"File failed to load, created new save file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"kiatkat"},"content":" return new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"kiatkat"},"content":" } catch (IOException ee) {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"Failed to load file, new save file could not be created.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"kiatkat"},"content":" public void save(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"kiatkat"},"content":" FileOutputStream fos \u003d new FileOutputStream(saveFile);","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"kiatkat"},"content":" ObjectOutputStream oos \u003d new ObjectOutputStream(fos);","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"kiatkat"},"content":" oos.writeObject(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"kiatkat"},"content":" oos.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"kiatkat"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"Saving to file failed\");","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":80}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public class TaskList implements Serializable {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" public TaskList(TaskList loadedList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" this.tasks \u003d loadedList.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" public TaskList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":" public String add(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":" return task.getAddMessage() + \"\\n\" + task;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":" public String delete(Integer index) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" if (index \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":" tasks.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":" return \"Your task list has been cleared.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":" int i \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"Please provide a number within range.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"kiatkat"},"content":" Task task \u003d tasks.remove(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"kiatkat"},"content":" StringBuilder builder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"kiatkat"},"content":" builder.append(\"As you wish. This task has been removed:\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"kiatkat"},"content":" builder.append(task.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"kiatkat"},"content":" builder.append(\"\\nYou now have \");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"kiatkat"},"content":" builder.append(tasks.size());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"kiatkat"},"content":" builder.append(\" tasks in your list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"kiatkat"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"kiatkat"},"content":" builder.append(\"\\nCongratulations!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"kiatkat"},"content":" return builder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"kiatkat"},"content":" public String mark(Integer index) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"kiatkat"},"content":" if (index \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"kiatkat"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"kiatkat"},"content":" task.markDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"kiatkat"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"kiatkat"},"content":" return \"All done.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"kiatkat"},"content":" int i \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"kiatkat"},"content":" if (i \u003c 0 || i \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"kiatkat"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"kiatkat"},"content":" task.markDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"kiatkat"},"content":" return \"Mission accomplished.\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"kiatkat"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"Please provide a number within range.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"kiatkat"},"content":" public String unmark(Integer index) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"kiatkat"},"content":" if (index \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"kiatkat"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"kiatkat"},"content":" task.markUndone();","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"kiatkat"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"kiatkat"},"content":" return \"All undone.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"kiatkat"},"content":" int i \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"kiatkat"},"content":" if (i \u003c 0 || i \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"kiatkat"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"kiatkat"},"content":" task.markDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"kiatkat"},"content":" return \"Uncharacteristic of you. More work has been added to the pile.\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"kiatkat"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"Please provide a number within range.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"kiatkat"},"content":" public String docRest() {","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"kiatkat"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"kiatkat"},"content":" return \"...have a good rest.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"kiatkat"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"kiatkat"},"content":" return \"There\u0027s still lots of work that needs to be done. \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"kiatkat"},"content":" \"We can\u0027t afford to have you resting.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"kiatkat"},"content":" public int getSize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"kiatkat"},"content":" return tasks.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"kiatkat"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"kiatkat"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"kiatkat"},"content":" return \"...\\n\" + \"You don\u0027t have any tasks. Enjoy your day off.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"kiatkat"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"kiatkat"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"kiatkat"},"content":" output.append(i + 1).append(\". \").append(tasks.get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"kiatkat"},"content":" return output.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":132}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":" static String softbreak \u003d \"--------------------------------------------------\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" static String hardbreak \u003d \"——————————————————————————————————————————————————\";","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"Failed to load file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" System.out.println(hardbreak +","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" \"\\n...Fingerprint match found. Verification complete. Welcome home.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" \"PRTS, at your service. What would you like to do today?\\n\" + hardbreak);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":" public void showGoodbye() {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"Farewell. See you again soon.\\n\" + hardbreak);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":" public void showSoftLine() {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" System.out.println(softbreak);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":" public void showHardLine() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" System.out.println(hardbreak);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"kiatkat"},"content":" public void showError(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"kiatkat"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"kiatkat"},"content":" public void list(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"Here are your tasks for today.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"kiatkat"},"content":" System.out.println(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"You now have \" + tasks.getSize() + \" tasks in your list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"kiatkat"},"content":" public void displayMessage(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"kiatkat"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":54}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" private Task taskToAdd;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" this.taskToAdd \u003d task;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" ui.displayMessage(tasks.add(taskToAdd));","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":19}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" };","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":13}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" Integer index;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" public DeleteCommand(Integer index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" ui.displayMessage(tasks.delete(index));","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":18}},{"path":"src/main/java/duke/command/DocRestCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public class DocRestCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" ui.displayMessage(tasks.docRest());","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":13}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" return;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" return true;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":19}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" ui.list(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":13}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" private Integer index;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" public MarkCommand(Integer index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" ui.displayMessage(tasks.mark(index));","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":18}},{"path":"src/main/java/duke/command/MessageCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public class MessageCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" private String message;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" public MessageCommand(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" this.message \u003d message;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" ui.displayMessage(message);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":17}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" private Integer index;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" public UnmarkCommand(Integer index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" ui.displayMessage(tasks.unmark(index));","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":19}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" private String addMessage \u003d \"Alright. I\u0027ll make sure you don\u0027t forget it.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" public Deadline(String name, String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" super(name);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":" public Deadline(String name, LocalDateTime deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":" String detail \u003d description \u003d\u003d null","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" ? deadline.format(DateTimeFormatter.ofPattern(\"hh\u0027:\u0027mma\u0027,\u0027 d MMM uuuu\u0027,\u0027 eee\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":" : description;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":" return \"[D]\" + super.toString() + \" (by: \" + detail + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":" public String getAddMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":" return addMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kiatkat":36}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" private String description1;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" private String description2;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" private String addMessage \u003d \"Roger that. Preparations will be underway.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" LocalDateTime startDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" LocalDateTime endDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" public Event(String name, String description1, String description2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" super(name);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":" this.description1 \u003d description1;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":" this.description2 \u003d description2;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":" public Event(String name, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":" String detail1 \u003d description1 \u003d\u003d null","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":" ? startDate.format(DateTimeFormatter.ofPattern(\"hh\u0027:\u0027mma\u0027,\u0027 d MMM uuuu\u0027,\u0027 eee\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":" : description1;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" String detail2 \u003d description2 \u003d\u003d null","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":" ? endDate.format(DateTimeFormatter.ofPattern(\"hh\u0027:\u0027mma\u0027,\u0027 d MMM uuuu\u0027,\u0027 eee\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":" : description2;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kiatkat"},"content":" return \"[E]\" + super.toString() + \" (from: \" + detail1 + \" to: \" + detail2 + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"kiatkat"},"content":" public String getAddMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"kiatkat"},"content":" return addMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kiatkat":44}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"public abstract class Task implements Serializable {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" private String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" public void markDone() throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" if (!this.isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"It\u0027s already done.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":" public void markUndone() throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"This hasn\u0027t been done yet...\");","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":" return this.isDone ? \"[X] \" + name : \"[ ] \" + name;","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"kiatkat"},"content":" public abstract String getAddMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kiatkat":40}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":" private String addMessage \u003d \"Understood. No rest for the weary, eh?\";","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" public String getAddMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":" return addMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kiatkat":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"test","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"test test","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"more test","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"kiatkat":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":"kiatkat"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-05"},{"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":{"kiatkat":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-05"},{"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":"kiatkat"},"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-05"},{"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":{"kiatkat":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":"kiatkat"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"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":{"kiatkat":1,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" String fileName \u003d \"duke.Duke.txt\";","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" String[] directories \u003d {\"data\"};","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" public Duke() {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" storage \u003d new Storage(fileName, directories);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":" public void run() {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":" ui.showSoftLine(); // show the divider line (\"_______\")","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"kiatkat"},"content":" } finally {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"kiatkat"},"content":" if (!isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"kiatkat"},"content":" ui.showHardLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"kiatkat"},"content":" ui.showGoodbye();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"kiatkat"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"kiatkat"},"content":" new Duke().run();","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"kiatkat":48,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kiatkat":9}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.command.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" String[] splits \u003d fullCommand.strip().split(\" \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" String command \u003d splits[0].toLowerCase();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" String detail \u003d splits.length \u003d\u003d 2 ? splits[1].strip() : \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" switch (command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":" case \"bye\":","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":" case \"todo\":","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":" if (detail.isBlank())","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t read your mind. Do add a description.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":" return new AddCommand(new Todo(detail));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":" if (detail.isBlank())","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t read your mind. Do add a description.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":" String[] deadlineSplits \u003d detail.split(\"/by\", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":" String deadlineDescription \u003d deadlineSplits[0].strip();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"kiatkat"},"content":" String deadlineStr \u003d deadlineSplits[1].strip();","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"kiatkat"},"content":" if (deadlineStr.isBlank() || deadlineDescription.isBlank())","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t read your mind. Do add more details.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"kiatkat"},"content":" LocalDateTime deadlineDate \u003d LocalDateTime.parse(deadlineStr);","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"kiatkat"},"content":" return new AddCommand(new Deadline(deadlineDescription, deadlineDate));","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"kiatkat"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"kiatkat"},"content":" return new AddCommand(new Deadline(deadlineDescription, deadlineStr));","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"kiatkat"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"Please format your description properly.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"kiatkat"},"content":" case \"event\":","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"kiatkat"},"content":" if (detail.isBlank())","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t read your mind. Do add a description.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"kiatkat"},"content":" String[] eventSplit1 \u003d detail.split(\"/from\", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"kiatkat"},"content":" String[] eventSplit2 \u003d eventSplit1[1].split(\"/to\", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"kiatkat"},"content":" String eventDescription \u003d eventSplit1[0].strip();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"kiatkat"},"content":" String startDate \u003d eventSplit2[0].strip();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"kiatkat"},"content":" String endDate \u003d eventSplit2[1].strip();","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"kiatkat"},"content":" if (eventDescription.isBlank() || startDate.isBlank() || endDate.isBlank())","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t read your mind. Do add more details.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"Roger that. Preparations will be underway.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"kiatkat"},"content":" LocalDateTime eventStartDate \u003d LocalDateTime.parse(startDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"kiatkat"},"content":" LocalDateTime eventEndDate \u003d LocalDateTime.parse(endDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"kiatkat"},"content":" return new AddCommand(new Event(eventDescription, eventStartDate, eventEndDate));","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"kiatkat"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"kiatkat"},"content":" return new AddCommand(new Event(eventDescription, startDate, endDate));","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"kiatkat"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"Please format your description properly.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"kiatkat"},"content":" case \"mark\":","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"kiatkat"},"content":" if (detail.isBlank()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t read your mind. Provide a suitable index.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"kiatkat"},"content":" if (detail.equalsIgnoreCase(\"all\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"kiatkat"},"content":" return new MarkCommand(null);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"kiatkat"},"content":" int index \u003d Integer.parseInt(detail) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"kiatkat"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"kiatkat"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t understand that number.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"kiatkat"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"kiatkat"},"content":" if (detail.isBlank())","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t read your mind. Provide a suitable index.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"kiatkat"},"content":" if (detail.equalsIgnoreCase(\"all\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"kiatkat"},"content":" return new UnmarkCommand(null);","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"kiatkat"},"content":" int index \u003d Integer.parseInt(detail) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"kiatkat"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"kiatkat"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t understand that number.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"kiatkat"},"content":" case \"list\":","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"kiatkat"},"content":" if (detail.isBlank()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"kiatkat"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"kiatkat"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"Sorry, were you trying to ask for a list?\" +","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"kiatkat"},"content":" \"If so, only input the word \\\"list\\\".\");","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"kiatkat"},"content":" case \"delete\":","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"kiatkat"},"content":" if (detail.isBlank()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t read your mind. Provide a suitable index.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"kiatkat"},"content":" if (detail.equalsIgnoreCase(\"all\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"kiatkat"},"content":" return new DeleteCommand(null);","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"kiatkat"},"content":" int index \u003d Integer.parseInt(detail) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"kiatkat"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"kiatkat"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"I can\u0027t understand that number.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"kiatkat"},"content":" case \"thanks\":","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"kiatkat"},"content":" return new MessageCommand(\"...No problem.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"kiatkat"},"content":" case \"zzz\":","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"kiatkat"},"content":" return new DocRestCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"kiatkat"},"content":" case \"hi\":","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"kiatkat"},"content":" return new MessageCommand(\"Greetings.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"kiatkat"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"kiatkat"},"content":" return new MessageCommand(\"Sorry, I didn\u0027t quite catch that. Are you having enough sleep?\");","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":153}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import java.io.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" private String fileName;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" private String[] directories;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" private Path filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" private File saveFile;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" public Storage(String fileName, String[] directories) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" this.fileName \u003d fileName;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" this.directories \u003d directories;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" filePath \u003d Path.of(System.getProperty(\"user.dir\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":" for (String directory : directories) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":" filePath \u003d Paths.get(filePath.toString(), directory);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":" saveFile \u003d new File(filePath.toUri());","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":" if (!saveFile.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":" if (saveFile.mkdir()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"Directory \" + filePath.toString() + \" created.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" filePath \u003d Paths.get(filePath.toString(), fileName);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":" saveFile \u003d new File(filePath.toUri());","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":" if (!saveFile.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" if (saveFile.createNewFile()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"Save file could not be located, new file created\");","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"kiatkat"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"Error creating save file: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"kiatkat"},"content":" public TaskList load() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"kiatkat"},"content":" if (saveFile.length() \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"kiatkat"},"content":" return new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"kiatkat"},"content":" FileInputStream fis \u003d new FileInputStream(saveFile);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"kiatkat"},"content":" ObjectInputStream ois \u003d new ObjectInputStream(fis);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"kiatkat"},"content":" TaskList tasks \u003d (TaskList) ois.readObject();","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"kiatkat"},"content":" ois.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"kiatkat"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"kiatkat"},"content":" } catch (IOException | ClassNotFoundException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"kiatkat"},"content":" saveFile.delete();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"kiatkat"},"content":" saveFile.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"File failed to load, created new save file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"kiatkat"},"content":" return new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"kiatkat"},"content":" } catch (IOException ee) {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"Failed to load file, new save file could not be created.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"kiatkat"},"content":" public void save(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"kiatkat"},"content":" FileOutputStream fos \u003d new FileOutputStream(saveFile);","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"kiatkat"},"content":" ObjectOutputStream oos \u003d new ObjectOutputStream(fos);","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"kiatkat"},"content":" oos.writeObject(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"kiatkat"},"content":" oos.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"kiatkat"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"Saving to file failed\");","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":80}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public class TaskList implements Serializable {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" public TaskList(TaskList loadedList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" this.tasks \u003d loadedList.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" public TaskList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":" public String add(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":" return task.getAddMessage() + \"\\n\" + task;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":" public String delete(Integer index) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" if (index \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":" tasks.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":" return \"Your task list has been cleared.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":" int i \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"Please provide a number within range.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"kiatkat"},"content":" Task task \u003d tasks.remove(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"kiatkat"},"content":" StringBuilder builder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"kiatkat"},"content":" builder.append(\"As you wish. This task has been removed:\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"kiatkat"},"content":" builder.append(task.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"kiatkat"},"content":" builder.append(\"\\nYou now have \");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"kiatkat"},"content":" builder.append(tasks.size());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"kiatkat"},"content":" builder.append(\" tasks in your list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"kiatkat"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"kiatkat"},"content":" builder.append(\"\\nCongratulations!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"kiatkat"},"content":" return builder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"kiatkat"},"content":" public String mark(Integer index) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"kiatkat"},"content":" if (index \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"kiatkat"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"kiatkat"},"content":" task.markDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"kiatkat"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"kiatkat"},"content":" return \"All done.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"kiatkat"},"content":" int i \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"kiatkat"},"content":" if (i \u003c 0 || i \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"kiatkat"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"kiatkat"},"content":" task.markDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"kiatkat"},"content":" return \"Mission accomplished.\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"kiatkat"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"Please provide a number within range.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"kiatkat"},"content":" public String unmark(Integer index) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"kiatkat"},"content":" if (index \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"kiatkat"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"kiatkat"},"content":" task.markUndone();","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"kiatkat"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"kiatkat"},"content":" return \"All undone.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"kiatkat"},"content":" int i \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"kiatkat"},"content":" if (i \u003c 0 || i \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"kiatkat"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"kiatkat"},"content":" task.markDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"kiatkat"},"content":" return \"Uncharacteristic of you. More work has been added to the pile.\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"kiatkat"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"Please provide a number within range.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"kiatkat"},"content":" public String docRest() {","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"kiatkat"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"kiatkat"},"content":" return \"...have a good rest.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"kiatkat"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"kiatkat"},"content":" return \"There\u0027s still lots of work that needs to be done. \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"kiatkat"},"content":" \"We can\u0027t afford to have you resting.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"kiatkat"},"content":" public int getSize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"kiatkat"},"content":" return tasks.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"kiatkat"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"kiatkat"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"kiatkat"},"content":" return \"...\\n\" + \"You don\u0027t have any tasks. Enjoy your day off.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"kiatkat"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"kiatkat"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"kiatkat"},"content":" output.append(i + 1).append(\". \").append(tasks.get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"kiatkat"},"content":" return output.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":132}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":" static String softbreak \u003d \"--------------------------------------------------\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" static String hardbreak \u003d \"——————————————————————————————————————————————————\";","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"Failed to load file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" System.out.println(hardbreak +","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" \"\\n...Fingerprint match found. Verification complete. Welcome home.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" \"PRTS, at your service. What would you like to do today?\\n\" + hardbreak);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":" public void showGoodbye() {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"Farewell. See you again soon.\\n\" + hardbreak);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":" public void showSoftLine() {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" System.out.println(softbreak);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":" public void showHardLine() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" System.out.println(hardbreak);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"kiatkat"},"content":" public void showError(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"kiatkat"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"kiatkat"},"content":" public void list(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"Here are your tasks for today.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"kiatkat"},"content":" System.out.println(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"kiatkat"},"content":" System.out.println(\"You now have \" + tasks.getSize() + \" tasks in your list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"kiatkat"},"content":" public void displayMessage(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"kiatkat"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":54}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" private Task taskToAdd;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" this.taskToAdd \u003d task;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" ui.displayMessage(tasks.add(taskToAdd));","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":19}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" };","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":13}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" Integer index;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" public DeleteCommand(Integer index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" ui.displayMessage(tasks.delete(index));","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":18}},{"path":"src/main/java/duke/command/DocRestCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public class DocRestCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" ui.displayMessage(tasks.docRest());","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":13}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" return;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" return true;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":19}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" ui.list(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":13}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" private Integer index;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" public MarkCommand(Integer index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" ui.displayMessage(tasks.mark(index));","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":18}},{"path":"src/main/java/duke/command/MessageCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public class MessageCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" private String message;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" public MessageCommand(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" this.message \u003d message;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" ui.displayMessage(message);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":17}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" private Integer index;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" public UnmarkCommand(Integer index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" ui.displayMessage(tasks.unmark(index));","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"kiatkat":19}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" private String addMessage \u003d \"Alright. I\u0027ll make sure you don\u0027t forget it.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" public Deadline(String name, String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" super(name);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":" public Deadline(String name, LocalDateTime deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":" String detail \u003d description \u003d\u003d null","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" ? deadline.format(DateTimeFormatter.ofPattern(\"hh\u0027:\u0027mma\u0027,\u0027 d MMM uuuu\u0027,\u0027 eee\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":" : description;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":" return \"[D]\" + super.toString() + \" (by: \" + detail + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":" public String getAddMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":" return addMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kiatkat":36}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" private String description1;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" private String description2;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" private String addMessage \u003d \"Roger that. Preparations will be underway.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" LocalDateTime startDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" LocalDateTime endDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" public Event(String name, String description1, String description2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" super(name);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":" this.description1 \u003d description1;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":" this.description2 \u003d description2;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":" public Event(String name, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":" String detail1 \u003d description1 \u003d\u003d null","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":" ? startDate.format(DateTimeFormatter.ofPattern(\"hh\u0027:\u0027mma\u0027,\u0027 d MMM uuuu\u0027,\u0027 eee\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":" : description1;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" String detail2 \u003d description2 \u003d\u003d null","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":" ? endDate.format(DateTimeFormatter.ofPattern(\"hh\u0027:\u0027mma\u0027,\u0027 d MMM uuuu\u0027,\u0027 eee\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":" : description2;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kiatkat"},"content":" return \"[E]\" + super.toString() + \" (from: \" + detail1 + \" to: \" + detail2 + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"kiatkat"},"content":" public String getAddMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"kiatkat"},"content":" return addMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kiatkat":44}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"public abstract class Task implements Serializable {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" private String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" public void markDone() throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" if (!this.isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"It\u0027s already done.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":" public void markUndone() throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":" throw new DukeException(\"This hasn\u0027t been done yet...\");","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":" return this.isDone ? \"[X] \" + name : \"[ ] \" + name;","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"kiatkat"},"content":" public abstract String getAddMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kiatkat":40}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":" private String addMessage \u003d \"Understood. No rest for the weary, eh?\";","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" public String getAddMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":" return addMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kiatkat":22}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import duke.command.MessageCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" public void parse_list_success() {","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" assertEquals(Parser.parse(\"list\").getClass(), ListCommand.class);","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" fail();","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":" public void parse_listCasing_success() {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":" assertEquals(Parser.parse(\"lIsT\").getClass(), ListCommand.class);","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":" fail();","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":" public void parse_listMultipleWords_reject() {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":" assertEquals(Parser.parse(\"list list\").getClass(), MessageCommand.class);","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" fail();","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"kiatkat":39}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":" public void addTask_validInput_success() {","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"kiatkat"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"kiatkat"},"content":" String output \u003d taskList.add(new Task(\"fakeTask\") {","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"kiatkat"},"content":" public String getAddMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"kiatkat"},"content":" return \"\";","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"kiatkat"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"kiatkat"},"content":" assertEquals(\"\\n[ ] fakeTask\", output);","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"kiatkat"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"kiatkat"},"content":" public void deleteTask_onlyTask_success() throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"kiatkat"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"kiatkat"},"content":" taskList.add(new Task(\"fakeTask\") {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"kiatkat"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"kiatkat"},"content":" public String getAddMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"kiatkat"},"content":" return \"\";","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"kiatkat"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"kiatkat"},"content":" assertEquals(\"As you wish. This task has been removed:\\n[ ] fakeTask\" +","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"kiatkat"},"content":" \"\\nYou now have 0 tasks in your list.\\nCongratulations!\",","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"kiatkat"},"content":" taskList.delete(0));","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"kiatkat"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"kiatkat"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"kiatkat"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"kiatkat":36}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"kiatkat"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"kiatkat"},"content":"test","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"kiatkat"},"content":"test test","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"kiatkat"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"kiatkat"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"kiatkat"},"content":"more test","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"kiatkat"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"kiatkat"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"kiatkat"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"kiatkat"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"kiatkat"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"kiatkat":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":"kiatkat"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-05"},{"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":{"kiatkat":1,"-":20}}] diff --git a/kiatkat_ip_master/commits.json b/kiatkat_ip_master/commits.json index 7965d8a8..0bd1246c 100644 --- a/kiatkat_ip_master/commits.json +++ b/kiatkat_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"kiatkat":[{"date":"2023-08-23","commitResults":[{"hash":"450148536bd77401bd674df2b4264c905c5e978e","isMergeCommit":false,"messageTitle":"Level 0 Implementation - Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"75cb2dfa1c3ec740b53d010874c49c20ca799116","isMergeCommit":false,"messageTitle":"Level 1 Implemented - Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":7}}},{"hash":"cf0237d9ddcf1a17d64797067d5debc1acfa0be4","isMergeCommit":false,"messageTitle":"Level 2 - Add, List","messageBody":"","tags":["Level-2","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":4}}},{"hash":"ec55058cb6f3a2768d0412171b231c494d419c61","isMergeCommit":false,"messageTitle":"Added automated testing, minor change to List functionality","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":4,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"127b8e96e80b82e6cff05955375609ecf296f276","isMergeCommit":false,"messageTitle":"Level 3 Implemented. Bugfix for multiple word additions.","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":6}}},{"hash":"c934a26c79fb709e1a695c0b9bf1386e52cd92b2","isMergeCommit":false,"messageTitle":"Updated testing, minor bugfix","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":2},"java":{"insertions":12,"deletions":4}}},{"hash":"3cb41e739fde7757166b5c01ec3ebf9ac003d7da","isMergeCommit":false,"messageTitle":"Level 4 Implemented. Minor input validation measures taken and more prompts accommodated.","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":120,"deletions":14}}},{"hash":"9c5b72e5428ad65cd0d8a55c8134c73b5f3ff7dd","isMergeCommit":false,"messageTitle":"Level 5 Implemented. Code restructured for future extensibility.","messageBody":"Much of the input validation already existed prior to this commit, but\nhave been consolidated via the DukeException exception.\n","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":135,"deletions":68}}},{"hash":"915de2723068f5b7254f0ca618ce2c5bdef88321","isMergeCommit":false,"messageTitle":"Implemented Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"536fac5e64e4c5245b6327b004e9c43306b1bcc1","isMergeCommit":false,"messageTitle":"feat: Implement saving to hard disk","messageBody":"Save the task list to a text file ./data/Duke.txt. If the file or\ndirectory does not exist, creates it.\n","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":5}}},{"hash":"b042439ccd1e9ecb65aefe26cef5a8327451479a","isMergeCommit":false,"messageTitle":"fix: Handle the case where save file is corrupted","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":4}}},{"hash":"9d289233c8c18d35b5c1befd153ad63fa8ca3ec5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"82ebee8ed81c6aa90afb48b3ecf49980ed4140e9","isMergeCommit":false,"messageTitle":"feat: Implement date parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":11}}}]},{"date":"2023-09-04","commitResults":[{"hash":"b1fa4428628722ca377e6abeaa168b0dbf2f1fcd","isMergeCommit":false,"messageTitle":"feat: Implement delete all","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"c0eb48484c9c5aa8149a28b070a3c4ed037facea","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"ec12e45d87e1850350b905152e6c8a33dc4b1cb8","isMergeCommit":false,"messageTitle":"refactor: Rewrite code to use more OOP","messageBody":"The preexisting Duke class was becoming bloated with almost all code\nresiding within it. Create multiple new classes to extract related\nfunctions. This sets up easier development in the future.\n\nNote: Minor features added - mark and unmark all\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":534,"deletions":294}}},{"hash":"f2f8559f1a673d6fa70bc0210a2637e558264d16","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-more-oop\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a719ce3467bd6cc8f584fbbe69325473a5da0680","isMergeCommit":false,"messageTitle":"refactor: Divide classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":615,"deletions":529},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"kiatkat":{"java":761,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":11}},"authorContributionVariance":{"kiatkat":197562.16},"authorDisplayNameMap":{"kiatkat":"CS2103T-W15-1 PUAR.. WIN"}} +{"authorDailyContributionsMap":{"kiatkat":[{"date":"2023-08-23","commitResults":[{"hash":"450148536bd77401bd674df2b4264c905c5e978e","isMergeCommit":false,"messageTitle":"Level 0 Implementation - Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"75cb2dfa1c3ec740b53d010874c49c20ca799116","isMergeCommit":false,"messageTitle":"Level 1 Implemented - Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":7}}},{"hash":"cf0237d9ddcf1a17d64797067d5debc1acfa0be4","isMergeCommit":false,"messageTitle":"Level 2 - Add, List","messageBody":"","tags":["Level-2","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":4}}},{"hash":"ec55058cb6f3a2768d0412171b231c494d419c61","isMergeCommit":false,"messageTitle":"Added automated testing, minor change to List functionality","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":4,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"127b8e96e80b82e6cff05955375609ecf296f276","isMergeCommit":false,"messageTitle":"Level 3 Implemented. Bugfix for multiple word additions.","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":6}}},{"hash":"c934a26c79fb709e1a695c0b9bf1386e52cd92b2","isMergeCommit":false,"messageTitle":"Updated testing, minor bugfix","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":2},"java":{"insertions":12,"deletions":4}}},{"hash":"3cb41e739fde7757166b5c01ec3ebf9ac003d7da","isMergeCommit":false,"messageTitle":"Level 4 Implemented. Minor input validation measures taken and more prompts accommodated.","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":120,"deletions":14}}},{"hash":"9c5b72e5428ad65cd0d8a55c8134c73b5f3ff7dd","isMergeCommit":false,"messageTitle":"Level 5 Implemented. Code restructured for future extensibility.","messageBody":"Much of the input validation already existed prior to this commit, but\nhave been consolidated via the DukeException exception.\n","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":135,"deletions":68}}},{"hash":"915de2723068f5b7254f0ca618ce2c5bdef88321","isMergeCommit":false,"messageTitle":"Implemented Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"536fac5e64e4c5245b6327b004e9c43306b1bcc1","isMergeCommit":false,"messageTitle":"feat: Implement saving to hard disk","messageBody":"Save the task list to a text file ./data/Duke.txt. If the file or\ndirectory does not exist, creates it.\n","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":5}}},{"hash":"b042439ccd1e9ecb65aefe26cef5a8327451479a","isMergeCommit":false,"messageTitle":"fix: Handle the case where save file is corrupted","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":4}}},{"hash":"9d289233c8c18d35b5c1befd153ad63fa8ca3ec5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"82ebee8ed81c6aa90afb48b3ecf49980ed4140e9","isMergeCommit":false,"messageTitle":"feat: Implement date parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":11}}}]},{"date":"2023-09-04","commitResults":[{"hash":"b1fa4428628722ca377e6abeaa168b0dbf2f1fcd","isMergeCommit":false,"messageTitle":"feat: Implement delete all","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"c0eb48484c9c5aa8149a28b070a3c4ed037facea","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"ec12e45d87e1850350b905152e6c8a33dc4b1cb8","isMergeCommit":false,"messageTitle":"refactor: Rewrite code to use more OOP","messageBody":"The preexisting Duke class was becoming bloated with almost all code\nresiding within it. Create multiple new classes to extract related\nfunctions. This sets up easier development in the future.\n\nNote: Minor features added - mark and unmark all\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":534,"deletions":294}}},{"hash":"f2f8559f1a673d6fa70bc0210a2637e558264d16","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-more-oop\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a719ce3467bd6cc8f584fbbe69325473a5da0680","isMergeCommit":false,"messageTitle":"refactor: Divide classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":615,"deletions":529},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"38c93b2223738ed5a4140e5b5be91a715ccb7cc3","isMergeCommit":true,"messageTitle":"Merge branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a7170e7b947e00c15963e2007048753797ed6ed5","isMergeCommit":false,"messageTitle":"build: Set up gradle to build and run Duke","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-06","commitResults":[{"hash":"f2b915c6d840c2fc8b2b251c216e3734e7a60eed","isMergeCommit":false,"messageTitle":"test: Add tests for TaskList","messageBody":"Add two unit tests for the TaskList class, one for addition of a Task\nand one for the deletion of the last Task in the TaskList.\n","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"c6b540f30d01052301b8e7033e62d787b82ce496","isMergeCommit":false,"messageTitle":"test: Add tests for Parser","messageBody":"Add the following tests for Parser, and fix its behaviour to be\nconsistent with the tests:\n- List, correct input\n- List, correct input with alternate casing\n- List, invalid input\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"kiatkat":{"java":842,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":1,"txt":11}},"authorContributionVariance":{"kiatkat":188212.28},"authorDisplayNameMap":{"kiatkat":"CS2103T-W15-1 PUAR.. WIN"}} diff --git a/licongshen12_ip_master/authorship.json b/licongshen12_ip_master/authorship.json index a3fffc0b..7990c4e4 100644 --- a/licongshen12_ip_master/authorship.json +++ b/licongshen12_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"licongshen12":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":"licongshen12"},"content":" testImplementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-08-31"},{"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":"licongshen12"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-01"},{"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":{"licongshen12":3,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"D | 0 | return book | 2/12/2019 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"D | 0 | get her back | 31/8/2023 2359","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"D | 0 | move on | 31/8/2023 2359","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"T | 0 | text her","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"D | 0 | finish 2103 | 31/8/2023 2359","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"T | 0 | ball","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"T | 0 | ball","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"E | 0 | test | 16/10/2001 1200 | 20/2/2003 1200","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"licongshen12":8}},{"path":"src/main/java/duke/CommandType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":" * Enumerates the various command types that the Duke application can recognize and process.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":" * Each enumeration value corresponds to a specific command that the user can issue to interact with","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":" * the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":"public enum CommandType {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":" /** Command to exit the application. */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" BYE,","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" /** Command to list all tasks. */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" LIST,","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" /** Command to add a new \u0027ToDo\u0027 task. */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" TODO,","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" /** Command to add a new \u0027Deadline\u0027 task. */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" DEADLINE,","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" /** Command to add a new \u0027Event\u0027 task. */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" EVENT,","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" /** Command to mark a task as done. */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" MARK,","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" /** Command to unmark a previously marked task. */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" UNMARK,","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" /** Command to delete a task. */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" DELETE,","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":" /** Command to list all tasks on a specified date. */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" TASKS_ON_DATE,","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" FIND,","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":" /** Command type when the input command is not recognized. */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":" UNKNOWN","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"licongshen12":42}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" * Main class for the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" * The Duke application is a task management application that allows users to manage and track","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" * tasks such as todos, deadlines, and events. It provides a command-line interface for users","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" * to interact with.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" /** Task list to store and manage all tasks. */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" private static final TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" /** User interface object for interacting with the user. */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" private static final Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" /** Storage object for saving and loading tasks to/from a file. */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" private static final Storage storage \u003d new Storage(ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" * Processes user input commands and interacts with the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":" * This method listens for user inputs, parses the commands, processes them,","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" * and provides appropriate responses. It handles task creation, modification,","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":" * deletion, listing, and other related operations.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":" public static void echoMessages() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":" String input;","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"licongshen12"},"content":" taskList.getTasks().addAll(storage.loadTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"licongshen12"},"content":" ui.printGreeting();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"licongshen12"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"licongshen12"},"content":" input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"licongshen12"},"content":" CommandType command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"licongshen12"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"licongshen12"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"licongshen12"},"content":" switch (command) {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"licongshen12"},"content":" case BYE:","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"licongshen12"},"content":" ui.printExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"licongshen12"},"content":" scanner.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"licongshen12"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"licongshen12"},"content":" case LIST:","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"licongshen12"},"content":" ui.printList(taskList.getTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"licongshen12"},"content":" case TODO:","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"licongshen12"},"content":" ToDo todo \u003d new ToDo(input.substring(5));","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"licongshen12"},"content":" taskList.add(todo);","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"licongshen12"},"content":" ui.printTaskAdded(todo, taskList.getSize());","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"licongshen12"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"licongshen12"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"licongshen12"},"content":" String[] parts \u003d input.substring(9).split(\" /by \");","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"licongshen12"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"duke.task.Deadline format is incorrect.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"licongshen12"},"content":" Deadline deadline \u003d new Deadline(parts[0], parts[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"licongshen12"},"content":" taskList.add(deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"licongshen12"},"content":" ui.printTaskAdded(deadline, taskList.getSize());","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"licongshen12"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"licongshen12"},"content":" case EVENT:","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"licongshen12"},"content":" String[] eventParts \u003d input.substring(6).split(\" /from \");","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"licongshen12"},"content":" String[] timeParts \u003d eventParts[1].split(\" /to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"licongshen12"},"content":" if (timeParts.length \u003c 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"duke.task.Event format is incorrect.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"licongshen12"},"content":" Event event \u003d new Event(eventParts[0], timeParts[0], timeParts[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"licongshen12"},"content":" taskList.add(event);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"licongshen12"},"content":" ui.printTaskAdded(event, taskList.getSize());","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"licongshen12"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"licongshen12"},"content":" case MARK:","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"licongshen12"},"content":" int taskNumberMark \u003d Integer.parseInt(input.split(\" \")[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"licongshen12"},"content":" taskList.get(taskNumberMark - 1).markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"licongshen12"},"content":" ui.printMarkedAsDone(taskList.get(taskNumberMark - 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"licongshen12"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"licongshen12"},"content":" case UNMARK:","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"licongshen12"},"content":" int taskNumberUnmark \u003d Integer.parseInt(input.split(\" \")[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"licongshen12"},"content":" taskList.get(taskNumberUnmark - 1).unmark();","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"licongshen12"},"content":" ui.printMarkedAsNotDone(taskList.get(taskNumberUnmark - 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"licongshen12"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"licongshen12"},"content":" case DELETE:","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"licongshen12"},"content":" int taskNumberDelete \u003d Integer.parseInt(input.split(\" \")[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"licongshen12"},"content":" Task removedTask \u003d taskList.remove(taskNumberDelete - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"licongshen12"},"content":" ui.printTaskDeleted(removedTask, taskList.getSize());","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"licongshen12"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"licongshen12"},"content":" case TASKS_ON_DATE:","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"licongshen12"},"content":" LocalDate givenDate \u003d Parser.getLocalDate(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"licongshen12"},"content":" List\u003cTask\u003e tasksOnGivenDate \u003d taskList.getTasks().stream()","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"licongshen12"},"content":" .filter(task -\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"licongshen12"},"content":" (task instanceof Deadline \u0026\u0026 ((Deadline) task).getBy().toLocalDate().isEqual(givenDate)) ||","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"licongshen12"},"content":" (task instanceof Event \u0026\u0026 Parser.isWithinEventDate((Event) task, givenDate)))","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"licongshen12"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"licongshen12"},"content":" ui.printTasksOnDate(tasksOnGivenDate, givenDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"licongshen12"},"content":" case FIND:","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"licongshen12"},"content":" String keyword \u003d input.substring(5);","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"licongshen12"},"content":" TaskList resultList \u003d taskList.findTasks(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"licongshen12"},"content":" ui.printFindResults(resultList.getTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"licongshen12"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":132,"author":{"gitId":"licongshen12"},"content":" ui.showError(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"licongshen12"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"licongshen12"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":138,"author":{"gitId":"licongshen12"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":140,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"licongshen12"},"content":" * The entry point for the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"licongshen12"},"content":" * @param args Command line arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":148,"author":{"gitId":"licongshen12"},"content":" echoMessages();","lastModifiedDate":"2023-08-24"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":150,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"licongshen12":146,"-":4}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":" * Represents exceptions specific to the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":" * This class extends the standard {@code Exception} class and is used to handle","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":" * errors and exceptional scenarios that are specific to the Duke application\u0027s","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":" * operations.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":" * Constructs a new DukeException with the specified detail message.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" * @param message The detail message, saved for later retrieval by the {@link #getMessage()} method.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"licongshen12":20}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":" * Represents a utility class to parse and interpret user input and task data.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" * This class provides static methods for parsing user input into specific command types,","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" * reading task data, and converting date strings into {@link LocalDate} objects.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" * Parses the user input and returns its corresponding command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" * @param input The user input to be parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" * @return The corresponding {@link CommandType} based on the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" public static CommandType parseCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" if (input.equalsIgnoreCase(\"bye\")) return CommandType.BYE;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":" if (input.equalsIgnoreCase(\"list\")) return CommandType.LIST;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" if (input.startsWith(\"todo\")) return CommandType.TODO;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" if (input.startsWith(\"deadline\")) return CommandType.DEADLINE;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":" if (input.startsWith(\"event\")) return CommandType.EVENT;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" if (input.startsWith(\"mark\")) return CommandType.MARK;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" if (input.startsWith(\"unmark\")) return CommandType.UNMARK;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":" if (input.startsWith(\"delete\")) return CommandType.DELETE;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":" if (input.startsWith(\"tasks on\")) return CommandType.TASKS_ON_DATE;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" if (input.startsWith(\"find\")) return CommandType.FIND;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":" return CommandType.UNKNOWN;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":" * Parses a task represented as a string from the storage file.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"licongshen12"},"content":" * @param taskData The task data as a string.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"licongshen12"},"content":" * @return A {@link Task} object based on the provided task data.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"licongshen12"},"content":" * @throws DukeException If the task type is unknown or there\u0027s an error in parsing.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"licongshen12"},"content":" private static Task parseFileTask(String taskData) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"licongshen12"},"content":" String[] parts \u003d taskData.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"licongshen12"},"content":" switch (parts[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"licongshen12"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"licongshen12"},"content":" ToDo todo \u003d new ToDo(parts[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"licongshen12"},"content":" if (parts[1].equals(\"1\")) todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"licongshen12"},"content":" return todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"licongshen12"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"licongshen12"},"content":" Deadline deadline \u003d new Deadline(parts[2], parts[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"licongshen12"},"content":" if (parts[1].equals(\"1\")) deadline.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"licongshen12"},"content":" return deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"licongshen12"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"licongshen12"},"content":" Event event \u003d new Event(parts[2], parts[3], parts[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"licongshen12"},"content":" if (parts[1].equals(\"1\")) event.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"licongshen12"},"content":" return event;","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"licongshen12"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"Unknown task type: \" + parts[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"licongshen12"},"content":" * Converts a date string from the user input into a {@link LocalDate} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"licongshen12"},"content":" * @param input The user input containing the date string.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"licongshen12"},"content":" * @return The {@link LocalDate} representation of the provided date string.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"licongshen12"},"content":" * @throws DukeException If the date format is invalid or there\u0027s an error in parsing.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"licongshen12"},"content":" public static LocalDate getLocalDate(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"licongshen12"},"content":" String[] dateParts \u003d input.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"licongshen12"},"content":" if (dateParts.length \u003c 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"Please provide a valid date in the format d/M/yyyy.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"licongshen12"},"content":" LocalDate givenDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"licongshen12"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"licongshen12"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"licongshen12"},"content":" givenDate \u003d LocalDate.parse(dateParts[2], formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"licongshen12"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"Invalid date format. Please use d/M/yyyy.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"licongshen12"},"content":" return givenDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"licongshen12"},"content":" * Determines if a specific date falls within the start and end dates of an event.","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"licongshen12"},"content":" * @param event The event to check against.","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"licongshen12"},"content":" * @param date The date to verify.","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"licongshen12"},"content":" * @return {@code true} if the date is within the event\u0027s date range, otherwise {@code false}.","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"licongshen12"},"content":" public static boolean isWithinEventDate(Event event, LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"licongshen12"},"content":" LocalDate startDate \u003d event.getFrom().toLocalDate();","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"licongshen12"},"content":" LocalDate endDate \u003d event.getTo().toLocalDate();","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"licongshen12"},"content":" return (date.isEqual(startDate) || date.isEqual(endDate) || (date.isAfter(startDate) \u0026\u0026 date.isBefore(endDate)));","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"licongshen12":101}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" * Handles storage operations including loading tasks from a file and saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" * This class provides methods to interact with the storage file where tasks are saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" * It ensures that the necessary directory and file exist and provides utility functions","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" * to read and write tasks from and to the storage file.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" private static final String FILE_PATH \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":" * Constructs a new {@code Storage} object with a reference to the UI.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" * @param ui The UI instance for displaying storage-related messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" public Storage(Ui ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":" * Ensures the storage directory exists.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" * If the directory does not exist, it is created.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"licongshen12"},"content":" private void ensureDirectoryExists() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"licongshen12"},"content":" File directory \u003d new File(\"./data/\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"licongshen12"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"licongshen12"},"content":" directory.mkdirs();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"licongshen12"},"content":" * Saves the provided list of tasks to the storage file.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"licongshen12"},"content":" * @param tasks The list of tasks to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"licongshen12"},"content":" public void saveTasks(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"licongshen12"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"licongshen12"},"content":" ensureDirectoryExists();","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"licongshen12"},"content":" FileWriter fw \u003d new FileWriter(FILE_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"licongshen12"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"licongshen12"},"content":" fw.write(task.toFileString() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"licongshen12"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"licongshen12"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"licongshen12"},"content":" ui.printIndented(\"Error saving tasks to file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"licongshen12"},"content":" * Loads tasks from the storage file into a list.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"licongshen12"},"content":" * @return A list of tasks loaded from the storage file.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"licongshen12"},"content":" public List\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"licongshen12"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"licongshen12"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"licongshen12"},"content":" ensureDirectoryExists();","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"licongshen12"},"content":" File f \u003d new File(FILE_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"licongshen12"},"content":" if (!f.exists()) return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"licongshen12"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"licongshen12"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"licongshen12"},"content":" String taskData \u003d s.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"licongshen12"},"content":" Task task \u003d parseFileTask(taskData);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"licongshen12"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"licongshen12"},"content":" s.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"licongshen12"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"licongshen12"},"content":" ui.printIndented(\"Error loading tasks from file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"licongshen12"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"licongshen12"},"content":" ui.printIndented(\"Data file is corrupted: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"licongshen12"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"licongshen12"},"content":" * Parses a task represented as a string from the storage file.","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"licongshen12"},"content":" * @param taskData The task data as a string.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"licongshen12"},"content":" * @return A {@link Task} object based on the provided task data.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"licongshen12"},"content":" * @throws DukeException If the task type is unknown or there\u0027s an error in parsing.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"licongshen12"},"content":" private Task parseFileTask(String taskData) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"licongshen12"},"content":" String[] parts \u003d taskData.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"licongshen12"},"content":" switch (parts[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"licongshen12"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"licongshen12"},"content":" ToDo todo \u003d new ToDo(parts[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"licongshen12"},"content":" if (parts[1].equals(\"1\")) todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"licongshen12"},"content":" return todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"licongshen12"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"licongshen12"},"content":" Deadline deadline \u003d new Deadline(parts[2], parts[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"licongshen12"},"content":" if (parts[1].equals(\"1\")) deadline.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"licongshen12"},"content":" return deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"licongshen12"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"licongshen12"},"content":" Event event \u003d new Event(parts[2], parts[3], parts[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"licongshen12"},"content":" if (parts[1].equals(\"1\")) event.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"licongshen12"},"content":" return event;","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"licongshen12"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"Unknown task type: \" + parts[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"licongshen12":121}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":" * Represents the user interface for the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":" * This class handles printing of user-facing messages, including greetings, errors,","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" * and task-related information. Messages are consistently formatted with indentation and horizontal lines.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" private static final String INDENT \u003d \" \";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" * Prints the greeting message.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" public void printGreeting() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Hello! I\u0027m Davidson\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" printIndented(\"What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" * Prints the exit message.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":" public void printExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" * Prints a horizontal line for UI formatting.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":" public void printHorizontalLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":" System.out.print(INDENT);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":" for (int i \u003d 0; i \u003c 60; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"licongshen12"},"content":" System.out.print(\"-\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"licongshen12"},"content":" System.out.println();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"licongshen12"},"content":" * Prints the given message with consistent indentation.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"licongshen12"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"licongshen12"},"content":" public void printIndented(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"licongshen12"},"content":" System.out.println(INDENT + message);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"licongshen12"},"content":" * Prints the tasks in the user\u0027s list.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"licongshen12"},"content":" * @param tasks The list of tasks to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"licongshen12"},"content":" public void printList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"licongshen12"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"licongshen12"},"content":" printIndented((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"licongshen12"},"content":" * Prints the information about a task that has been added.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"licongshen12"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"licongshen12"},"content":" * @param size The current number of tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"licongshen12"},"content":" public void printTaskAdded(Task task, int size) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"licongshen12"},"content":" printIndented(\" \" + task.toFileString());","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Now you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"licongshen12"},"content":" * Displays an error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"licongshen12"},"content":" * @param message The error message to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"licongshen12"},"content":" public void showError(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"licongshen12"},"content":" printIndented(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"licongshen12"},"content":" * Prints the tasks that fall on a specific date.","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"licongshen12"},"content":" * @param tasksOnDate The list of tasks on the given date.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"licongshen12"},"content":" * @param date The date for which tasks are to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"licongshen12"},"content":" public void printTasksOnDate(List\u003cTask\u003e tasksOnDate, LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"licongshen12"},"content":" if (tasksOnDate.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"licongshen12"},"content":" printIndented(\"No tasks on \" + date);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"licongshen12"},"content":" return;","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Here are the tasks on \" + date + \":\");","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"licongshen12"},"content":" for (Task task : tasksOnDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"licongshen12"},"content":" printIndented(task.toFileString());","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"licongshen12"},"content":" * Prints the information about a task that has been marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"licongshen12"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"licongshen12"},"content":" public void printMarkedAsDone(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"licongshen12"},"content":" printIndented(\" \" + task);","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"licongshen12"},"content":" * Prints the information about a task that has been marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"licongshen12"},"content":" * @param task The task that was marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"licongshen12"},"content":" public void printMarkedAsNotDone(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Okay! I\u0027ve marked this task as not done:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"licongshen12"},"content":" printIndented(\" \" + task);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"licongshen12"},"content":" * Prints the information about a task that has been deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"licongshen12"},"content":" * @param removedTask The task that was removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"licongshen12"},"content":" * @param size The current number of tasks in the list after removal.","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"licongshen12"},"content":" public void printTaskDeleted(Task removedTask, int size) {","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"licongshen12"},"content":" printIndented(\" \" + removedTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Now you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"licongshen12"},"content":" public void printFindResults(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"licongshen12"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"licongshen12"},"content":" printIndented((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"licongshen12":159}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":" * Represents a Deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":" * A Deadline task is a task that needs to be done before a specific date and time.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" private LocalDateTime by;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" * Constructs a Deadline task with the specified description and deadline date.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" * @param by The deadline of the task in the format \"d/M/yyyy HHmm\".","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" * @throws DukeException If the provided date format is incorrect.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" public Deadline(String description, String by) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"Invalid date format provided. Please use the format d/M/yyyy HHmm.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" * Retrieves the deadline of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":" * @return The deadline as a LocalDateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":" public LocalDateTime getBy() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" return by;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":" * Converts the Deadline task to a string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"licongshen12"},"content":" * @return String representation of the Deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"licongshen12"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"licongshen12"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"licongshen12"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy, h:mm a\");","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"licongshen12"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(formatter) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"licongshen12"},"content":" * Converts the Deadline task to a string representation suitable for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"licongshen12"},"content":" * @return String representation of the Deadline task for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"licongshen12"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"licongshen12"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"licongshen12"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"licongshen12"},"content":" return \"D | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + by.format(formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"licongshen12":62}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":" * Represents an Event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":" * An Event task is a task that occurs between a specific start and end date and time.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" * Constructs an Event task with the specified description, start, and end dates.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" * @param from The start date and time of the event in the format \"d/M/yyyy HHmm\".","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" * @param to The end date and time of the event in the format \"d/M/yyyy HHmm\".","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" * @throws DukeException If the provided date format is incorrect.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" public Event(String description, String from, String to) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":" this.from \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" this.to \u003d LocalDateTime.parse(to, DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"Invalid date format provided. Please use the format d/M/yyyy HHmm.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" * Retrieves the start date and time of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" * @return The start date and time as a LocalDateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":" return this.from;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"licongshen12"},"content":" * Retrieves the end date and time of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"licongshen12"},"content":" * @return The end date and time as a LocalDateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"licongshen12"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"licongshen12"},"content":" return this.to;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"licongshen12"},"content":" * Converts the Event task to a string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"licongshen12"},"content":" * @return String representation of the Event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"licongshen12"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"licongshen12"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"licongshen12"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"licongshen12"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from.format(formatter) + \" to: \" + to.format(formatter) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"licongshen12"},"content":" * Converts the Event task to a string representation suitable for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"licongshen12"},"content":" * @return String representation of the Event task for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"licongshen12"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"licongshen12"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"licongshen12"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"licongshen12"},"content":" return \"E | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + from.format(formatter) + \" | \" + to.format(formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"licongshen12":74}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":" * Represents a general task.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":" * This class provides the basic structure and common functionalities of a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":" * Subclasses should define how to convert the task to a string for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":" protected String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":" * Constructs a new Task with the given description.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" * Retrieves the description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" * @return The description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":" return description;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" * Marks the task as completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" * Marks the task as not completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"licongshen12"},"content":" * Converts the task to a string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"licongshen12"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"licongshen12"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"licongshen12"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"licongshen12"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"] \" + description;","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"licongshen12"},"content":" * Converts the task to a string representation suitable for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"licongshen12"},"content":" * @return String representation of the task for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"licongshen12"},"content":" public abstract String toFileString();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"licongshen12":61}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":" * This class provides a container to store tasks and common functionalities","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" * such as adding, getting, and removing tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" private final List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" * Initializes an empty task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" * Initializes a task list with the given list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" * @param tasks The list of tasks to initialize with.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"licongshen12"},"content":" * Retrieves a task from the task list based on the given index.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"licongshen12"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"licongshen12"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"licongshen12"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"licongshen12"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"licongshen12"},"content":" * Removes and returns a task from the task list based on the given index.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"licongshen12"},"content":" * @param index The index of the task to remove.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"licongshen12"},"content":" * @return The task that was removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"licongshen12"},"content":" public Task remove(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"licongshen12"},"content":" return tasks.remove(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"licongshen12"},"content":" * Retrieves the number of tasks in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"licongshen12"},"content":" * @return The number of tasks in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"licongshen12"},"content":" public int getSize() {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"licongshen12"},"content":" return tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"licongshen12"},"content":" * Retrieves the tasks in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"licongshen12"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"licongshen12"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"licongshen12"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"licongshen12"},"content":" public TaskList findTasks(String description) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"licongshen12"},"content":" if (description.isBlank()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"!!!: Please provide a description to search for\");","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"licongshen12"},"content":" return new TaskList(tasks.stream()","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"licongshen12"},"content":" .filter(task -\u003e task.description.contains(description))","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"licongshen12"},"content":" .collect(Collectors.toCollection(ArrayList::new)));","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"licongshen12":88}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":" * This class inherits from {@link Task} and provides a representation","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":" * of a simple task without any date/time attached to it.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":" * Initializes a new ToDo task with the given description.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" * Returns a string representation of the ToDo task,","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" * with its type and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" * @return A string describing the ToDo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" * Returns a string representation suitable for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":" * The returned string is in a special format to distinguish","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" * the task type, its completion status, and its description.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":" * @return A formatted string for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" return \"T | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"licongshen12":40}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":" public void toFileStringTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" Event event \u003d new Event(\"test\", \"16/10/2001 1200\", \"20/02/2003 1200\");","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":" assertEquals(event.toFileString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" \"E | 0 | test | 16/10/2001 1200 | 20/2/2003 1200\",","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" \"\u0027toFileString()\u0027 should return a simplified string to be saved to file\");","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" // do nothing","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" public void toStringTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" Event event \u003d new Event(\"test\", \"16/10/2001 1200\", \"20/02/2003 1200\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" assertEquals(event.toString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" \"[E][ ] test (from: Oct 16 2001 12:00 to: Feb 20 2003 12:00)\",","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" \"\u0027toString()\u0027 should return a string to be printed\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" // do nothing","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"licongshen12":32}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"class TodoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":" void testToFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":" ToDo test1 \u003d new ToDo(\"test1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":" ToDo test2 \u003d new ToDo(\"test2\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" test2.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":" assertEquals(\"T | 0 | test1\", test1.toFileString(), \"toFileString an uncompleted task.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" assertEquals(\"T | 1 | test2\", test2.toFileString(), \"toFileString a completed task.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" ToDo test1 \u003d new ToDo(\"test1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" ToDo test2 \u003d new ToDo(\"test2\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" test2.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" assertEquals(\"[T][ ] test1\", test1.toString(), \"String of an uncompleted task.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" assertEquals(\"[T][X] test2\", test2.toString(), \"String of a completed task.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"licongshen12":25}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"licongshen12":5}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"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":{"licongshen12":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"licongshen12":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":"licongshen12"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" testImplementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"licongshen12"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"licongshen12"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"licongshen12":8,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"D | 0 | return book | 2/12/2019 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"D | 0 | get her back | 31/8/2023 2359","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"D | 0 | move on | 31/8/2023 2359","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"T | 0 | text her","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"D | 0 | finish 2103 | 31/8/2023 2359","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"T | 0 | ball","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"T | 0 | ball","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"E | 0 | test | 16/10/2001 1200 | 20/2/2003 1200","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"licongshen12":8}},{"path":"src/main/java/duke/CommandType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":" * Enumerates the various command types that the Duke application can recognize and process.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":" * Each enumeration value corresponds to a specific command that the user can issue to interact with","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":" * the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":"public enum CommandType {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":" /** Command to exit the application. */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" BYE,","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" /** Command to list all tasks. */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" LIST,","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" /** Command to add a new \u0027ToDo\u0027 task. */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" TODO,","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" /** Command to add a new \u0027Deadline\u0027 task. */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" DEADLINE,","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" /** Command to add a new \u0027Event\u0027 task. */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" EVENT,","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" /** Command to mark a task as done. */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" MARK,","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" /** Command to unmark a previously marked task. */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" UNMARK,","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" /** Command to delete a task. */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" DELETE,","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":" /** Command to list all tasks on a specified date. */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" TASKS_ON_DATE,","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" FIND,","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":" /** Command type when the input command is not recognized. */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":" UNKNOWN","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"licongshen12":42}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"import java.util.List;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" * Main class for the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" * The Duke application is a task management application that allows users to manage and track","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" * tasks such as todos, deadlines, and events. It provides a command-line interface for users","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" * to interact with.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" /** Task list to store and manage all tasks. */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" private static final TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" /** User interface object for interacting with the user. */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" private static final Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" /** Storage object for saving and loading tasks to/from a file. */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" private static final Storage storage \u003d new Storage(ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" * Processes user input commands and interacts with the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":" * This method listens for user inputs, parses the commands, processes them,","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" * and provides appropriate responses. It handles task creation, modification,","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":" * deletion, listing, and other related operations.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":" public static void echoMessages() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":" String input;","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"licongshen12"},"content":" taskList.getTasks().addAll(storage.loadTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"licongshen12"},"content":" ui.printGreeting();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"licongshen12"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"licongshen12"},"content":" input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"licongshen12"},"content":" CommandType command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"licongshen12"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"licongshen12"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"licongshen12"},"content":" switch (command) {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"licongshen12"},"content":" case BYE:","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"licongshen12"},"content":" ui.printExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"licongshen12"},"content":" scanner.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"licongshen12"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"licongshen12"},"content":" case LIST:","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"licongshen12"},"content":" ui.printList(taskList.getTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"licongshen12"},"content":" case TODO:","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"licongshen12"},"content":" ToDo todo \u003d new ToDo(input.substring(5));","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"licongshen12"},"content":" taskList.add(todo);","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"licongshen12"},"content":" ui.printTaskAdded(todo, taskList.getSize());","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"licongshen12"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"licongshen12"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"licongshen12"},"content":" String[] parts \u003d input.substring(9).split(\" /by \");","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"licongshen12"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"duke.task.Deadline format is incorrect.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"licongshen12"},"content":" Deadline deadline \u003d new Deadline(parts[0], parts[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"licongshen12"},"content":" taskList.add(deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"licongshen12"},"content":" ui.printTaskAdded(deadline, taskList.getSize());","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"licongshen12"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"licongshen12"},"content":" case EVENT:","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"licongshen12"},"content":" String[] eventParts \u003d input.substring(6).split(\" /from \");","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"licongshen12"},"content":" String[] timeParts \u003d eventParts[1].split(\" /to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"licongshen12"},"content":" if (timeParts.length \u003c 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"duke.task.Event format is incorrect.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"licongshen12"},"content":" Event event \u003d new Event(eventParts[0], timeParts[0], timeParts[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"licongshen12"},"content":" taskList.add(event);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"licongshen12"},"content":" ui.printTaskAdded(event, taskList.getSize());","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"licongshen12"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"licongshen12"},"content":" case MARK:","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"licongshen12"},"content":" int taskNumberMark \u003d Integer.parseInt(input.split(\" \")[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"licongshen12"},"content":" taskList.get(taskNumberMark - 1).markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"licongshen12"},"content":" ui.printMarkedAsDone(taskList.get(taskNumberMark - 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"licongshen12"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"licongshen12"},"content":" case UNMARK:","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"licongshen12"},"content":" int taskNumberUnmark \u003d Integer.parseInt(input.split(\" \")[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"licongshen12"},"content":" taskList.get(taskNumberUnmark - 1).unmark();","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"licongshen12"},"content":" ui.printMarkedAsNotDone(taskList.get(taskNumberUnmark - 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"licongshen12"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"licongshen12"},"content":" case DELETE:","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"licongshen12"},"content":" int taskNumberDelete \u003d Integer.parseInt(input.split(\" \")[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"licongshen12"},"content":" Task removedTask \u003d taskList.remove(taskNumberDelete - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"licongshen12"},"content":" ui.printTaskDeleted(removedTask, taskList.getSize());","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"licongshen12"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"licongshen12"},"content":" case TASKS_ON_DATE:","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"licongshen12"},"content":" LocalDate givenDate \u003d Parser.getLocalDate(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"licongshen12"},"content":" List\u003cTask\u003e tasksOnGivenDate \u003d taskList.getTasks().stream()","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"licongshen12"},"content":" .filter(task -\u003e (task instanceof Deadline \u0026\u0026 ((Deadline) task).getBy()","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"licongshen12"},"content":" .toLocalDate().isEqual(givenDate)) || (task","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"licongshen12"},"content":" instanceof Event \u0026\u0026 Parser.isWithinEventDate((Event) task, givenDate)))","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"licongshen12"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"licongshen12"},"content":" ui.printTasksOnDate(tasksOnGivenDate, givenDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"licongshen12"},"content":" case FIND:","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"licongshen12"},"content":" String keyword \u003d input.substring(5);","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"licongshen12"},"content":" TaskList resultList \u003d taskList.findTasks(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"licongshen12"},"content":" ui.printFindResults(resultList.getTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"licongshen12"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"licongshen12"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":132,"author":{"gitId":"licongshen12"},"content":" ui.showError(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"licongshen12"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"licongshen12"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":138,"author":{"gitId":"licongshen12"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":140,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"licongshen12"},"content":" * The entry point for the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"licongshen12"},"content":" * @param args Command line arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":148,"author":{"gitId":"licongshen12"},"content":" echoMessages();","lastModifiedDate":"2023-08-24"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":150,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"licongshen12":146,"-":4}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":" * Represents exceptions specific to the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":" * This class extends the standard {@code Exception} class and is used to handle","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":" * errors and exceptional scenarios that are specific to the Duke application\u0027s","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":" * operations.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":" * Constructs a new DukeException with the specified detail message.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" * @param message The detail message, saved for later retrieval by the {@link #getMessage()} method.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"licongshen12":20}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":" * Represents a utility class to parse and interpret user input and task data.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" * This class provides static methods for parsing user input into specific command types,","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" * reading task data, and converting date strings into {@link LocalDate} objects.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" * Parses the user input and returns its corresponding command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" * @param input The user input to be parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" * @return The corresponding {@link CommandType} based on the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" public static CommandType parseCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" if (input.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":" return CommandType.BYE;","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" if (input.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":" return CommandType.LIST;","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":" return CommandType.TODO;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":" return CommandType.DEADLINE;","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":" return CommandType.EVENT;","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":" if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"licongshen12"},"content":" return CommandType.MARK;","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"licongshen12"},"content":" if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"licongshen12"},"content":" return CommandType.UNMARK;","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"licongshen12"},"content":" if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"licongshen12"},"content":" return CommandType.DELETE;","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"licongshen12"},"content":" if (input.startsWith(\"tasks on\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"licongshen12"},"content":" return CommandType.TASKS_ON_DATE;","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"licongshen12"},"content":" if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"licongshen12"},"content":" return CommandType.FIND;","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"licongshen12"},"content":" return CommandType.UNKNOWN;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"licongshen12"},"content":" * Parses a task represented as a string from the storage file.","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"licongshen12"},"content":" * @param taskData The task data as a string.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"licongshen12"},"content":" * @return A {@link Task} object based on the provided task data.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"licongshen12"},"content":" * @throws DukeException If the task type is unknown or there\u0027s an error in parsing.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"licongshen12"},"content":" private static Task parseFileTask(String taskData) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"licongshen12"},"content":" String[] parts \u003d taskData.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"licongshen12"},"content":" switch (parts[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"licongshen12"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"licongshen12"},"content":" ToDo todo \u003d new ToDo(parts[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"licongshen12"},"content":" if (parts[1].equals(\"1\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"licongshen12"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"licongshen12"},"content":" return todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"licongshen12"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"licongshen12"},"content":" Deadline deadline \u003d new Deadline(parts[2], parts[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"licongshen12"},"content":" if (parts[1].equals(\"1\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"licongshen12"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"licongshen12"},"content":" return deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"licongshen12"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"licongshen12"},"content":" Event event \u003d new Event(parts[2], parts[3], parts[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"licongshen12"},"content":" if (parts[1].equals(\"1\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"licongshen12"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"licongshen12"},"content":" return event;","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"licongshen12"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"Unknown task type: \" + parts[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"licongshen12"},"content":" * Converts a date string from the user input into a {@link LocalDate} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"licongshen12"},"content":" * @param input The user input containing the date string.","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"licongshen12"},"content":" * @return The {@link LocalDate} representation of the provided date string.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"licongshen12"},"content":" * @throws DukeException If the date format is invalid or there\u0027s an error in parsing.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"licongshen12"},"content":" public static LocalDate getLocalDate(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"licongshen12"},"content":" String[] dateParts \u003d input.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"licongshen12"},"content":" if (dateParts.length \u003c 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"Please provide a valid date in the format d/M/yyyy.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"licongshen12"},"content":" LocalDate givenDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"licongshen12"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"licongshen12"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"licongshen12"},"content":" givenDate \u003d LocalDate.parse(dateParts[2], formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"licongshen12"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"Invalid date format. Please use d/M/yyyy.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"licongshen12"},"content":" return givenDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"licongshen12"},"content":" * Determines if a specific date falls within the start and end dates of an event.","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"licongshen12"},"content":" * @param event The event to check against.","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"licongshen12"},"content":" * @param date The date to verify.","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"licongshen12"},"content":" * @return {@code true} if the date is within the event\u0027s date range, otherwise {@code false}.","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"licongshen12"},"content":" public static boolean isWithinEventDate(Event event, LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"licongshen12"},"content":" LocalDate startDate \u003d event.getFrom().toLocalDate();","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"licongshen12"},"content":" LocalDate endDate \u003d event.getTo().toLocalDate();","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"licongshen12"},"content":" return (date.isEqual(startDate) || date.isEqual(endDate) || (","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"licongshen12"},"content":" date.isAfter(startDate) \u0026\u0026 date.isBefore(endDate)));","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"licongshen12":128}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" * Handles storage operations including loading tasks from a file and saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" * This class provides methods to interact with the storage file where tasks are saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" * It ensures that the necessary directory and file exist and provides utility functions","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" * to read and write tasks from and to the storage file.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" private static final String FILE_PATH \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":" * Constructs a new {@code Storage} object with a reference to the UI.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" * @param ui The UI instance for displaying storage-related messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" public Storage(Ui ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":" * Ensures the storage directory exists.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" * If the directory does not exist, it is created.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"licongshen12"},"content":" private void ensureDirectoryExists() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"licongshen12"},"content":" File directory \u003d new File(\"./data/\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"licongshen12"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"licongshen12"},"content":" directory.mkdirs();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"licongshen12"},"content":" * Saves the provided list of tasks to the storage file.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"licongshen12"},"content":" * @param tasks The list of tasks to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"licongshen12"},"content":" public void saveTasks(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"licongshen12"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"licongshen12"},"content":" ensureDirectoryExists();","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"licongshen12"},"content":" FileWriter fw \u003d new FileWriter(FILE_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"licongshen12"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"licongshen12"},"content":" fw.write(task.toFileString() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"licongshen12"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"licongshen12"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"licongshen12"},"content":" ui.printIndented(\"Error saving tasks to file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"licongshen12"},"content":" * Loads tasks from the storage file into a list.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"licongshen12"},"content":" * @return A list of tasks loaded from the storage file.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"licongshen12"},"content":" public List\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"licongshen12"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"licongshen12"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"licongshen12"},"content":" ensureDirectoryExists();","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"licongshen12"},"content":" File f \u003d new File(FILE_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"licongshen12"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"licongshen12"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"licongshen12"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"licongshen12"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"licongshen12"},"content":" String taskData \u003d s.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"licongshen12"},"content":" Task task \u003d parseFileTask(taskData);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"licongshen12"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"licongshen12"},"content":" s.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"licongshen12"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"licongshen12"},"content":" ui.printIndented(\"Error loading tasks from file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"licongshen12"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"licongshen12"},"content":" ui.printIndented(\"Data file is corrupted: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"licongshen12"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"licongshen12"},"content":" * Parses a task represented as a string from the storage file.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"licongshen12"},"content":" * @param taskData The task data as a string.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"licongshen12"},"content":" * @return A {@link Task} object based on the provided task data.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"licongshen12"},"content":" * @throws DukeException If the task type is unknown or there\u0027s an error in parsing.","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"licongshen12"},"content":" private Task parseFileTask(String taskData) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"licongshen12"},"content":" String[] parts \u003d taskData.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"licongshen12"},"content":" switch (parts[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"licongshen12"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"licongshen12"},"content":" ToDo todo \u003d new ToDo(parts[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"licongshen12"},"content":" if (parts[1].equals(\"1\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"licongshen12"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"licongshen12"},"content":" return todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"licongshen12"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"licongshen12"},"content":" Deadline deadline \u003d new Deadline(parts[2], parts[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"licongshen12"},"content":" if (parts[1].equals(\"1\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"licongshen12"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"licongshen12"},"content":" return deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"licongshen12"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"licongshen12"},"content":" Event event \u003d new Event(parts[2], parts[3], parts[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"licongshen12"},"content":" if (parts[1].equals(\"1\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"licongshen12"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"licongshen12"},"content":" return event;","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"licongshen12"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"Unknown task type: \" + parts[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"licongshen12":129}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":" * Represents the user interface for the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":" * This class handles printing of user-facing messages, including greetings, errors,","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" * and task-related information. Messages are consistently formatted with indentation and horizontal lines.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" private static final String INDENT \u003d \" \";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" * Prints the greeting message.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" public void printGreeting() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Hello! I\u0027m Davidson\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" printIndented(\"What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" * Prints the exit message.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":" public void printExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" * Prints a horizontal line for UI formatting.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":" public void printHorizontalLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":" System.out.print(INDENT);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":" for (int i \u003d 0; i \u003c 60; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"licongshen12"},"content":" System.out.print(\"-\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"licongshen12"},"content":" System.out.println();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"licongshen12"},"content":" * Prints the given message with consistent indentation.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"licongshen12"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"licongshen12"},"content":" public void printIndented(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"licongshen12"},"content":" System.out.println(INDENT + message);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"licongshen12"},"content":" * Prints the tasks in the user\u0027s list.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"licongshen12"},"content":" * @param tasks The list of tasks to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"licongshen12"},"content":" public void printList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"licongshen12"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"licongshen12"},"content":" printIndented((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"licongshen12"},"content":" * Prints the information about a task that has been added.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"licongshen12"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"licongshen12"},"content":" * @param size The current number of tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"licongshen12"},"content":" public void printTaskAdded(Task task, int size) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"licongshen12"},"content":" printIndented(\" \" + task.toFileString());","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Now you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"licongshen12"},"content":" * Displays an error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"licongshen12"},"content":" * @param message The error message to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"licongshen12"},"content":" public void showError(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"licongshen12"},"content":" printIndented(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"licongshen12"},"content":" * Prints the tasks that fall on a specific date.","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"licongshen12"},"content":" * @param tasksOnDate The list of tasks on the given date.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"licongshen12"},"content":" * @param date The date for which tasks are to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"licongshen12"},"content":" public void printTasksOnDate(List\u003cTask\u003e tasksOnDate, LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"licongshen12"},"content":" if (tasksOnDate.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"licongshen12"},"content":" printIndented(\"No tasks on \" + date);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"licongshen12"},"content":" return;","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Here are the tasks on \" + date + \":\");","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"licongshen12"},"content":" for (Task task : tasksOnDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"licongshen12"},"content":" printIndented(task.toFileString());","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"licongshen12"},"content":" * Prints the information about a task that has been marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"licongshen12"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"licongshen12"},"content":" public void printMarkedAsDone(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"licongshen12"},"content":" printIndented(\" \" + task);","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"licongshen12"},"content":" * Prints the information about a task that has been marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"licongshen12"},"content":" * @param task The task that was marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"licongshen12"},"content":" public void printMarkedAsNotDone(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Okay! I\u0027ve marked this task as not done:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"licongshen12"},"content":" printIndented(\" \" + task);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"licongshen12"},"content":" * Prints the information about a task that has been deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"licongshen12"},"content":" * @param removedTask The task that was removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"licongshen12"},"content":" * @param size The current number of tasks in the list after removal.","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"licongshen12"},"content":" public void printTaskDeleted(Task removedTask, int size) {","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"licongshen12"},"content":" printIndented(\" \" + removedTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Now you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"licongshen12"},"content":" * Prints the tasks from the given list that match a certain criteria.","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"licongshen12"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"licongshen12"},"content":" * This function first prints a horizontal line, followed by a header indicating the list of","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"licongshen12"},"content":" * matching tasks. Each task is printed on a separate line with its corresponding index.","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"licongshen12"},"content":" * Finally, a horizontal line is printed at the end to demarcate the end of the list.","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"licongshen12"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"licongshen12"},"content":" * @param tasks A list of tasks that match a certain criteria.","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"licongshen12"},"content":" public void printFindResults(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"licongshen12"},"content":" printIndented(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"licongshen12"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"licongshen12"},"content":" printIndented((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"licongshen12"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"licongshen12":168}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":" * Represents a Deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":" * A Deadline task is a task that needs to be done before a specific date and time.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" private LocalDateTime by;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" * Constructs a Deadline task with the specified description and deadline date.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" * @param by The deadline of the task in the format \"d/M/yyyy HHmm\".","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" * @throws DukeException If the provided date format is incorrect.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" public Deadline(String description, String by) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"Invalid date format provided. Please use the format d/M/yyyy HHmm.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" * Retrieves the deadline of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":" * @return The deadline as a LocalDateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":" public LocalDateTime getBy() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" return by;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":" * Converts the Deadline task to a string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"licongshen12"},"content":" * @return String representation of the Deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"licongshen12"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"licongshen12"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"licongshen12"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy, h:mm a\");","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"licongshen12"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(formatter) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"licongshen12"},"content":" * Converts the Deadline task to a string representation suitable for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"licongshen12"},"content":" * @return String representation of the Deadline task for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"licongshen12"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"licongshen12"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"licongshen12"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"licongshen12"},"content":" return \"D | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + by.format(formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"licongshen12":62}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":" * Represents an Event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" * An Event task is a task that occurs between a specific start and end date and time.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" * Constructs an Event task with the specified description, start, and end dates.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" * @param from The start date and time of the event in the format \"d/M/yyyy HHmm\".","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" * @param to The end date and time of the event in the format \"d/M/yyyy HHmm\".","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" * @throws DukeException If the provided date format is incorrect.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" public Event(String description, String from, String to) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" this.from \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" this.to \u003d LocalDateTime.parse(to, DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"Invalid date format provided. Please use the format d/M/yyyy HHmm.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":" * Retrieves the start date and time of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" * @return The start date and time as a LocalDateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":" return this.from;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"licongshen12"},"content":" * Retrieves the end date and time of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"licongshen12"},"content":" * @return The end date and time as a LocalDateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"licongshen12"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"licongshen12"},"content":" return this.to;","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"licongshen12"},"content":" * Converts the Event task to a string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"licongshen12"},"content":" * @return String representation of the Event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"licongshen12"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"licongshen12"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"licongshen12"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"licongshen12"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from.format(formatter) + \" to: \" + to.format(formatter) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"licongshen12"},"content":" * Converts the Event task to a string representation suitable for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"licongshen12"},"content":" * @return String representation of the Event task for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"licongshen12"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"licongshen12"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"licongshen12"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"licongshen12"},"content":" return \"E | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \"","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"licongshen12"},"content":" + from.format(formatter) + \" | \" + to.format(formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"licongshen12":76}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":" * Represents a general task.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":" * This class provides the basic structure and common functionalities of a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":" * Subclasses should define how to convert the task to a string for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":" protected String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":" * Constructs a new Task with the given description.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" * Retrieves the description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" * @return The description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":" return description;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" * Marks the task as completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" * Marks the task as not completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"licongshen12"},"content":" * Converts the task to a string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"licongshen12"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"licongshen12"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"licongshen12"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"licongshen12"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"] \" + description;","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"licongshen12"},"content":" * Converts the task to a string representation suitable for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"licongshen12"},"content":" * @return String representation of the task for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"licongshen12"},"content":" public abstract String toFileString();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"licongshen12":61}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" * This class provides a container to store tasks and common functionalities","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":" * such as adding, getting, and removing tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" private final List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" * Initializes an empty task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" * Initializes a task list with the given list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":" * @param tasks The list of tasks to initialize with.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"licongshen12"},"content":" * Retrieves a task from the task list based on the given index.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"licongshen12"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"licongshen12"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"licongshen12"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"licongshen12"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"licongshen12"},"content":" * Removes and returns a task from the task list based on the given index.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"licongshen12"},"content":" * @param index The index of the task to remove.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"licongshen12"},"content":" * @return The task that was removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"licongshen12"},"content":" public Task remove(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"licongshen12"},"content":" return tasks.remove(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"licongshen12"},"content":" * Retrieves the number of tasks in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"licongshen12"},"content":" * @return The number of tasks in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"licongshen12"},"content":" public int getSize() {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"licongshen12"},"content":" return tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"licongshen12"},"content":" * Retrieves the tasks in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"licongshen12"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"licongshen12"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"licongshen12"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"licongshen12"},"content":" * Searches for tasks containing the specified description and returns them as a new TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"licongshen12"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"licongshen12"},"content":" * This method takes a description string as input and filters out tasks from the current","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"licongshen12"},"content":" * list that contain the given description. The result is returned as a new TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"licongshen12"},"content":" * If the provided description is blank, a DukeException is thrown.","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"licongshen12"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"licongshen12"},"content":" * @param description The description to search for in tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"licongshen12"},"content":" * @return A new TaskList containing tasks that match the given description.","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"licongshen12"},"content":" * @throws DukeException If the provided description is blank.","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"licongshen12"},"content":" public TaskList findTasks(String description) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"licongshen12"},"content":" if (description.isBlank()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"licongshen12"},"content":" throw new DukeException(\"!!!: Please provide a description to search for\");","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"licongshen12"},"content":" return new TaskList(tasks.stream()","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"licongshen12"},"content":" .filter(task -\u003e task.description.contains(description))","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"licongshen12"},"content":" .collect(Collectors.toCollection(ArrayList::new)));","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"licongshen12":101}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":" * This class inherits from {@link Task} and provides a representation","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":" * of a simple task without any date/time attached to it.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":" * Initializes a new ToDo task with the given description.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" * Returns a string representation of the ToDo task,","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" * with its type and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" * @return A string describing the ToDo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" * Returns a string representation suitable for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":" * The returned string is in a special format to distinguish","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":" * the task type, its completion status, and its description.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"licongshen12"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"licongshen12"},"content":" * @return A formatted string for file storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"licongshen12"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"licongshen12"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"licongshen12"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"licongshen12"},"content":" return \"T | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"licongshen12":40}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":" public void toFileStringTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" Event event \u003d new Event(\"test\", \"16/10/2001 1200\", \"20/02/2003 1200\");","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":" assertEquals(event.toFileString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" \"E | 0 | test | 16/10/2001 1200 | 20/2/2003 1200\",","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" \"\u0027toFileString()\u0027 should return a simplified string to be saved to file\");","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" // do nothing","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" public void toStringTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" Event event \u003d new Event(\"test\", \"16/10/2001 1200\", \"20/02/2003 1200\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":" assertEquals(event.toString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"licongshen12"},"content":" \"[E][ ] test (from: Oct 16 2001 12:00 to: Feb 20 2003 12:00)\",","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"licongshen12"},"content":" \"\u0027toString()\u0027 should return a string to be printed\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"licongshen12"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"licongshen12"},"content":" // do nothing","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"licongshen12":32}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"licongshen12"},"content":"class TodoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"licongshen12"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"licongshen12"},"content":" void testToFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"licongshen12"},"content":" ToDo test1 \u003d new ToDo(\"test1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"licongshen12"},"content":" ToDo test2 \u003d new ToDo(\"test2\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"licongshen12"},"content":" test2.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"licongshen12"},"content":" assertEquals(\"T | 0 | test1\", test1.toFileString(), \"toFileString an uncompleted task.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"licongshen12"},"content":" assertEquals(\"T | 1 | test2\", test2.toFileString(), \"toFileString a completed task.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"licongshen12"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"licongshen12"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"content":" void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"licongshen12"},"content":" ToDo test1 \u003d new ToDo(\"test1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"licongshen12"},"content":" ToDo test2 \u003d new ToDo(\"test2\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"licongshen12"},"content":" test2.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"licongshen12"},"content":" assertEquals(\"[T][ ] test1\", test1.toString(), \"String of an uncompleted task.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"licongshen12"},"content":" assertEquals(\"[T][X] test2\", test2.toString(), \"String of a completed task.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"licongshen12"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"licongshen12"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"licongshen12":25}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"licongshen12"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"licongshen12"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"licongshen12"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"licongshen12"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"licongshen12"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"licongshen12":5}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"licongshen12"},"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":{"licongshen12":1,"-":20}}] diff --git a/licongshen12_ip_master/commits.json b/licongshen12_ip_master/commits.json index f4b6da14..12e209a2 100644 --- a/licongshen12_ip_master/commits.json +++ b/licongshen12_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"licongshen12":[{"date":"2023-08-24","commitResults":[{"hash":"fb08da359a421a5247d5e91f2de5220b277b3f2b","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":6}}},{"hash":"e4621c31d7b2aeec26cdd6e5c3b892c1d3a194f7","isMergeCommit":false,"messageTitle":"Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":9}}},{"hash":"833701ce1ec64cf27acb62e236660c6028a473e8","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":5}}},{"hash":"545c2535154ccb0387b6486c52521759a648631a","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":3}}},{"hash":"763fbcd0311d8cdf4b5cb6881f562f0838ade95a","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":9}}},{"hash":"c1039b76489f0d0ebbf2ba82f8d3b2e63c54a20e","isMergeCommit":false,"messageTitle":"Automated Text Ui Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"sh":{"insertions":0,"deletions":0}}},{"hash":"7a12aa3d21f5240aae98f9906a0e213c870bd562","isMergeCommit":false,"messageTitle":"Level 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":40}}},{"hash":"ae4ae1ee248d36dd143d57a09e8c8f580c8da3a3","isMergeCommit":false,"messageTitle":"Level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"4ad37cb40dc9200353c17901f939131632e06a5d","isMergeCommit":false,"messageTitle":"added enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":48}}}]},{"date":"2023-08-29","commitResults":[{"hash":"fedc58d65a3e020fbfca8ff456276ebf97853f34","isMergeCommit":false,"messageTitle":"Add save functionaliy","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":111,"deletions":20}}},{"hash":"2db967d7e57d8c4f395a4b32aa6844b264e66a56","isMergeCommit":false,"messageTitle":"add date and time functionality","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":98,"deletions":19}}}]},{"date":"2023-08-31","commitResults":[{"hash":"160460127caaaa32a1f7bdeae31dffc0245255ea","isMergeCommit":false,"messageTitle":"Abstract Ui class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":109,"deletions":81}}},{"hash":"2638d36d65271d97e77c9be63e9894ab14efc27b","isMergeCommit":false,"messageTitle":"Extract Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":49}}},{"hash":"c9c406ee6605ea9519ad731c8c80abeb245ef75f","isMergeCommit":false,"messageTitle":"Extract Parser class and CommandType enum","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"9fd4474a2cdc7db27233afca822d64e8e54320e4","isMergeCommit":false,"messageTitle":"Extract Parser class and CommandType enum","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":66,"deletions":66}}},{"hash":"a4d9f5428ab9f65c252c8a48ce66ae66652bfffc","isMergeCommit":false,"messageTitle":"Extract TaskList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":22}}},{"hash":"577e6d59f453a5ac3b4c7ed79507049d67a816d1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"41ea3644dd29287acb6065f84a9f2495aba0d10b","isMergeCommit":false,"messageTitle":"Add packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":6},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"b160025f631f25f79207093542e54b8f74ffcde4","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"6ab3a16d2848ab153fc170b6fe169a4020ee57b3","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"txt":{"insertions":2,"deletions":0},"java":{"insertions":62,"deletions":5}}}]},{"date":"2023-09-01","commitResults":[{"hash":"57226744a17cdc1a7ee651ac2510b217780ee829","isMergeCommit":false,"messageTitle":"Add Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"a99eda0a71ad1ac0a38e3030da1a1a81d8d949ff","isMergeCommit":false,"messageTitle":"Add Javadoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":368,"deletions":13}}},{"hash":"ea3ade3bef370f879b654ba01f278e03493aa1bf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"0fed55dc8a263b4d8824f6630835f668a907c9d4","isMergeCommit":false,"messageTitle":"Add Level 9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}},{"hash":"a6edbd4d19ffd359296af2ae7e7965e85cd09992","isMergeCommit":true,"messageTitle":"Merge Level 9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"licongshen12":{"java":971,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":3,"txt":13}},"authorContributionVariance":{"licongshen12":45277.125},"authorDisplayNameMap":{"licongshen12":"CS2103T-T08-4 SHEN..CONG"}} +{"authorDailyContributionsMap":{"licongshen12":[{"date":"2023-08-24","commitResults":[{"hash":"fb08da359a421a5247d5e91f2de5220b277b3f2b","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":6}}},{"hash":"e4621c31d7b2aeec26cdd6e5c3b892c1d3a194f7","isMergeCommit":false,"messageTitle":"Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":9}}},{"hash":"833701ce1ec64cf27acb62e236660c6028a473e8","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":5}}},{"hash":"545c2535154ccb0387b6486c52521759a648631a","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":3}}},{"hash":"763fbcd0311d8cdf4b5cb6881f562f0838ade95a","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":9}}},{"hash":"c1039b76489f0d0ebbf2ba82f8d3b2e63c54a20e","isMergeCommit":false,"messageTitle":"Automated Text Ui Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"sh":{"insertions":0,"deletions":0}}},{"hash":"7a12aa3d21f5240aae98f9906a0e213c870bd562","isMergeCommit":false,"messageTitle":"Level 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":40}}},{"hash":"ae4ae1ee248d36dd143d57a09e8c8f580c8da3a3","isMergeCommit":false,"messageTitle":"Level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"4ad37cb40dc9200353c17901f939131632e06a5d","isMergeCommit":false,"messageTitle":"added enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":48}}}]},{"date":"2023-08-29","commitResults":[{"hash":"fedc58d65a3e020fbfca8ff456276ebf97853f34","isMergeCommit":false,"messageTitle":"Add save functionaliy","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":111,"deletions":20}}},{"hash":"2db967d7e57d8c4f395a4b32aa6844b264e66a56","isMergeCommit":false,"messageTitle":"add date and time functionality","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":98,"deletions":19}}}]},{"date":"2023-08-31","commitResults":[{"hash":"160460127caaaa32a1f7bdeae31dffc0245255ea","isMergeCommit":false,"messageTitle":"Abstract Ui class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":109,"deletions":81}}},{"hash":"2638d36d65271d97e77c9be63e9894ab14efc27b","isMergeCommit":false,"messageTitle":"Extract Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":49}}},{"hash":"c9c406ee6605ea9519ad731c8c80abeb245ef75f","isMergeCommit":false,"messageTitle":"Extract Parser class and CommandType enum","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"9fd4474a2cdc7db27233afca822d64e8e54320e4","isMergeCommit":false,"messageTitle":"Extract Parser class and CommandType enum","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":66,"deletions":66}}},{"hash":"a4d9f5428ab9f65c252c8a48ce66ae66652bfffc","isMergeCommit":false,"messageTitle":"Extract TaskList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":22}}},{"hash":"577e6d59f453a5ac3b4c7ed79507049d67a816d1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"41ea3644dd29287acb6065f84a9f2495aba0d10b","isMergeCommit":false,"messageTitle":"Add packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":6},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"b160025f631f25f79207093542e54b8f74ffcde4","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"6ab3a16d2848ab153fc170b6fe169a4020ee57b3","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"txt":{"insertions":2,"deletions":0},"java":{"insertions":62,"deletions":5}}}]},{"date":"2023-09-01","commitResults":[{"hash":"57226744a17cdc1a7ee651ac2510b217780ee829","isMergeCommit":false,"messageTitle":"Add Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"a99eda0a71ad1ac0a38e3030da1a1a81d8d949ff","isMergeCommit":false,"messageTitle":"Add Javadoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":368,"deletions":13}}},{"hash":"ea3ade3bef370f879b654ba01f278e03493aa1bf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"0fed55dc8a263b4d8824f6630835f668a907c9d4","isMergeCommit":false,"messageTitle":"Add Level 9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}},{"hash":"a6edbd4d19ffd359296af2ae7e7965e85cd09992","isMergeCommit":true,"messageTitle":"Merge Level 9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"a36a7c6f38a13a5f6b5067b7e0ec6add105061cd","isMergeCommit":false,"messageTitle":"Fix CheckStyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":201,"deletions":142}}},{"hash":"4e78a9d9de1c25ccf1b6a0c6d5f6baa7d638d385","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"licongshen12":{"java":1030,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":8,"txt":13}},"authorContributionVariance":{"licongshen12":40703.6},"authorDisplayNameMap":{"licongshen12":"CS2103T-T08-4 SHEN..CONG"}} diff --git a/lshaoqin_ip_master/authorship.json b/lshaoqin_ip_master/authorship.json index c1864c4c..c02c51f4 100644 --- a/lshaoqin_ip_master/authorship.json +++ b/lshaoqin_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"# Juke project template","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Juke_. Given below are instructions on how to use it.","lastModifiedDate":"2023-09-05"},{"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":"lshaoqin"},"content":"3. After that, locate the `src/main/java/Juke.java` file, right-click it, and choose `Run Juke.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-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" Hello! I\u0027m Juke!","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" What can I do for you?","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"lshaoqin":5,"-":15}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"lshaoqin"},"content":" mainClass.set(\"juke.Juke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"lshaoqin"},"content":" archiveBaseName \u003d \"juke\"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"lshaoqin":7,"-":40}},{"path":"src/main/java/juke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" super(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" public Deadline(String description, boolean isDone, LocalDate by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" return \"[D]\" + super.toString() + \" (by: \" +","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" public String toData() { return \"D\" + super.toData() + \"|\" + this.by; }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lshaoqin":27}},{"path":"src/main/java/juke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":" protected LocalDate start;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":" protected LocalDate end;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" public Event(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" super(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" public Event(String description, boolean isDone, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" return \"[E]\" + super.toString() + \" (\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" \"from: \" + start.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) +","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" \" to: \" + end.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" public String toData() { return \"E\" + super.toData() + \"|\" + start + \"|\" + end; }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lshaoqin":30}},{"path":"src/main/java/juke/Juke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"public class Juke {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" private final Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" private boolean isEnded;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" public Juke(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" parser \u003d new Parser(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" } catch (JukeError e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" ui.printError(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" tasks \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":" public void closeBot() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" ui.printBye();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" isEnded \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" public void printList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":" ui.printList(tasks.tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"lshaoqin"},"content":" public void unmark(int index) throws JukeError {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"lshaoqin"},"content":" Task currTask \u003d tasks.markAsUndone(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"lshaoqin"},"content":" ui.unmark(currTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"lshaoqin"},"content":" storage.updateAll(tasks.tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"lshaoqin"},"content":" public void mark(int index) throws JukeError {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"lshaoqin"},"content":" Task currTask \u003d tasks.markAsDone(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"lshaoqin"},"content":" ui.mark(currTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"lshaoqin"},"content":" storage.updateAll(tasks.tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"lshaoqin"},"content":" public void delete(int index) throws JukeError {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"lshaoqin"},"content":" Task currTask \u003d tasks.delete(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"lshaoqin"},"content":" ui.delete(currTask, tasks.getSize());","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"lshaoqin"},"content":" storage.updateAll(tasks.tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"lshaoqin"},"content":" public void find(String searchTerm) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"lshaoqin"},"content":" ArrayList\u003cTask\u003e results \u003d tasks.find(searchTerm);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"lshaoqin"},"content":" ui.find(results);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"lshaoqin"},"content":" public void createTodo(String desc) throws JukeError {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"lshaoqin"},"content":" Task newTask \u003d new Todo(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"lshaoqin"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"lshaoqin"},"content":" storage.write(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"lshaoqin"},"content":" ui.createTask(newTask, tasks.getSize());","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"lshaoqin"},"content":" public void createDeadline(String desc, LocalDate by) throws JukeError {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"lshaoqin"},"content":" Task newTask \u003d new Deadline(desc, by);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"lshaoqin"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"lshaoqin"},"content":" storage.write(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"lshaoqin"},"content":" ui.createTask(newTask, tasks.getSize());","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"lshaoqin"},"content":" public void createEvent(String desc, LocalDate start, LocalDate end) throws JukeError {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"lshaoqin"},"content":" Task newTask \u003d new Event(desc, start, end);","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"lshaoqin"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"lshaoqin"},"content":" storage.write(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"lshaoqin"},"content":" ui.createTask(newTask, tasks.getSize());","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"lshaoqin"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"lshaoqin"},"content":" ui.printStart();","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"lshaoqin"},"content":" while (!isEnded) {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"lshaoqin"},"content":" parser.parse(ui.readInput());","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"lshaoqin"},"content":" } catch (JukeError error) {","lastModifiedDate":"2023-08-21"},{"lineNumber":86,"author":{"gitId":"lshaoqin"},"content":" ui.printError(error);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":88,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":89,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":90,"author":{"gitId":"lshaoqin"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"lshaoqin"},"content":" new Juke(\"./savefile.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"lshaoqin":93}},{"path":"src/main/java/juke/JukeError.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"public class JukeError extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":" public JukeError(String errorMessage) {","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"lshaoqin":7}},{"path":"src/main/java/juke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" protected Juke juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" public Parser(Juke juke) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" this.juke \u003d juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" * Parses input and calls the appropriate Juke function.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" * @param input Input from the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" * @throws JukeError If there was a problem parsing the input.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" void parse(String input) throws JukeError {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" if (input.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" juke.closeBot();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" else if (input.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" juke.printList();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":" else if (input.contains(\"unmark \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" int index \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" juke.unmark(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":" else if (input.contains(\"mark \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" int index \u003d Integer.parseInt(input.substring(5));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":" juke.mark(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":" else if (input.startsWith(\"delete \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"lshaoqin"},"content":" int index \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"lshaoqin"},"content":" juke.delete(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"lshaoqin"},"content":" else if (input.startsWith(\"find \")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"lshaoqin"},"content":" if (input.length() \u003c 6) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"Please specify a search term.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"lshaoqin"},"content":" String searchTerm \u003d input.substring(5);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"lshaoqin"},"content":" juke.find(searchTerm);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"lshaoqin"},"content":" else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"lshaoqin"},"content":" if (input.length() \u003c 5 || input.substring(5).length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"lshaoqin"},"content":" juke.createTodo(input.substring(5));","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"lshaoqin"},"content":" else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"lshaoqin"},"content":" final Pattern deadlinePattern \u003d Pattern.compile(","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"lshaoqin"},"content":" \"^deadline\\\\s+(.*)\\\\s+/by\\\\s+(.*)$\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"lshaoqin"},"content":" Matcher matcher \u003d deadlinePattern.matcher(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"lshaoqin"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"lshaoqin"},"content":" juke.createDeadline(matcher.group(1), LocalDate.parse(matcher.group(2)));","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"lshaoqin"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"Failed to parse date.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"lshaoqin"},"content":" else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"lshaoqin"},"content":" final Pattern eventPattern \u003d Pattern.compile(","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"lshaoqin"},"content":" \"^event\\\\s+(.*)\\\\s+/from\\\\s+(.*)\\\\s+/to\\\\s+(.*)$\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"lshaoqin"},"content":" Matcher matcher \u003d eventPattern.matcher(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"lshaoqin"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"lshaoqin"},"content":" juke.createEvent(matcher.group(1),","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"lshaoqin"},"content":" LocalDate.parse(matcher.group(2)),","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"lshaoqin"},"content":" LocalDate.parse(matcher.group(3)));","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"lshaoqin"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"Failed to parse date.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"lshaoqin"},"content":" else {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lshaoqin":82}},{"path":"src/main/java/juke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import java.io.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" File savefile;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" this.savefile \u003d new File(filepath);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" if (!savefile.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" savefile.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" * Checks if task in data has been completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" * @param isDone isDone portion of the task in data.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" * @return Whether the task has been completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" private boolean parseIsDone(String isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":" return isDone.equals(\"true\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":" * Parses one task which was stored in the savefile.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" * @param data The data string representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":" * @return The parsed Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":" private Task parseOne(String data) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"lshaoqin"},"content":" String[] parts \u003d data.split(\"\\\\|\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"lshaoqin"},"content":" if (Objects.equals(parts[0], \"T\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"lshaoqin"},"content":" return new Todo(parts[2], parseIsDone(parts[1]));","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"lshaoqin"},"content":" if (Objects.equals(parts[0], \"D\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"lshaoqin"},"content":" return new Deadline(parts[2], parseIsDone(parts[1]), LocalDate.parse(parts[3]));","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"lshaoqin"},"content":" if (Objects.equals(parts[0], \"E\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"lshaoqin"},"content":" return new Event(parts[2], parseIsDone(parts[1]),","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"lshaoqin"},"content":" LocalDate.parse(parts[3]), LocalDate.parse(parts[4]));","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"lshaoqin"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"lshaoqin"},"content":" * Loads all tasks from the savefile.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"lshaoqin"},"content":" * @return An ArrayList of Tasks which was loaded from the savefile.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"lshaoqin"},"content":" * @throws JukeError If there was an error parsing any of the data.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"lshaoqin"},"content":" public ArrayList\u003cTask\u003e load() throws JukeError {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"lshaoqin"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"lshaoqin"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(savefile));","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"lshaoqin"},"content":" // Read the lines from the file one by one.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"lshaoqin"},"content":" String line;","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"lshaoqin"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"lshaoqin"},"content":" tasks.add(parseOne(line));","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"lshaoqin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"Failed to load data.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"lshaoqin"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"lshaoqin"},"content":" * Writes a task to the savefile.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"lshaoqin"},"content":" * @param task The task to be written.","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"lshaoqin"},"content":" * @throws JukeError If the writing operation failed.","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"lshaoqin"},"content":" public void write(Task task) throws JukeError {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"lshaoqin"},"content":" FileWriter writer \u003d new FileWriter(savefile, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"lshaoqin"},"content":" writer.write(task.toData() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"lshaoqin"},"content":" writer.flush();","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"lshaoqin"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"lshaoqin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"Failed to write to storage.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"lshaoqin"},"content":" * Updates all tasks in the savefile, useful when a task is deleted or modified.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"lshaoqin"},"content":" * @param tasks An ArrayList of all tasks to be written.","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"lshaoqin"},"content":" public void updateAll(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"lshaoqin"},"content":" FileWriter deleter \u003d new FileWriter(savefile, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"lshaoqin"},"content":" deleter.write(\"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"lshaoqin"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"lshaoqin"},"content":" FileWriter writer \u003d new FileWriter(savefile, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"lshaoqin"},"content":" writer.write(task.toData() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"lshaoqin"},"content":" writer.flush();","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"lshaoqin"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"lshaoqin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"lshaoqin"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lshaoqin":105}},{"path":"src/main/java/juke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"public class Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":" protected final String desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":" public Task(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" public Task(String desc, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" * Gets the appropriate icon based on whether the task is done.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" * @return [X] if task is done, [ ] if task is not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" return (isDone ? \"[X] \" : \"[ ] \"); // mark done task with X","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" * Marks task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":" * Marks task as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"lshaoqin"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"lshaoqin"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"lshaoqin"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"lshaoqin"},"content":" return this.getStatusIcon() + desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"lshaoqin"},"content":" * Generates string to be stored as data in Storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"lshaoqin"},"content":" * @return String which stores all necessary attributes in the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"lshaoqin"},"content":" public String toData() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"lshaoqin"},"content":" return \"|\" + isDone + \"|\" + desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lshaoqin":51}},{"path":"src/main/java/juke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":" public ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" public int getSize() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" return tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" public Task markAsUndone(int index) throws JukeError {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" if (index \u003e tasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"That task does not exist!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" Task currTask \u003d tasks.get(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" currTask.markAsUndone();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" return currTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" public Task markAsDone(int index) throws JukeError {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" if (index \u003e tasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"That task does not exist!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":" Task currTask \u003d tasks.get(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" currTask.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":" return currTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"lshaoqin"},"content":" public Task delete(int index) throws JukeError {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"lshaoqin"},"content":" if (index \u003e tasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"That task does not exist!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"lshaoqin"},"content":" Task currTask \u003d tasks.get(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"lshaoqin"},"content":" tasks.remove(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"lshaoqin"},"content":" return currTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"lshaoqin"},"content":" public ArrayList\u003cTask\u003e find(String searchTerm) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"lshaoqin"},"content":" ArrayList\u003cTask\u003e results \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"lshaoqin"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"lshaoqin"},"content":" if (task.desc.contains(searchTerm)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"lshaoqin"},"content":" results.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"lshaoqin"},"content":" return results;","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lshaoqin":57}},{"path":"src/main/java/juke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":" public Todo(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":" super(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":" public Todo(String desc, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" super(desc, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" public String toData() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" return \"T\" + super.toData();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lshaoqin":21}},{"path":"src/main/java/juke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":" Scanner scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" public Ui() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" * Prints a line to separate different sections.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" static void printLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" System.out.println(\"_______________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" * Reads the input from the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" * @return The input from the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" public String readInput() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" * Prints the message to welcome the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":" public void printStart() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" //Introduce itself to the user","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":" System.out.println(\"Hello! I\u0027m Juke!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":" printLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"lshaoqin"},"content":" * Prints the error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"lshaoqin"},"content":" * @param error The JukeError which was encountered.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"lshaoqin"},"content":" public void printError(JukeError error) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"lshaoqin"},"content":" System.out.println(error.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"lshaoqin"},"content":" printLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"lshaoqin"},"content":" * Prints bye to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"lshaoqin"},"content":" public void printBye() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"lshaoqin"},"content":" //Say goodbye","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"lshaoqin"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"lshaoqin"},"content":" printLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"lshaoqin"},"content":" scanner.close(); // Close the scanner before exiting","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"lshaoqin"},"content":" * Prints the lists of tasks that the user has saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"lshaoqin"},"content":" * @param tasks The list of tasks to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"lshaoqin"},"content":" public void printList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"lshaoqin"},"content":" int count \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"lshaoqin"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"lshaoqin"},"content":" System.out.println(count + \": \" + task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"lshaoqin"},"content":" count++;","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"lshaoqin"},"content":" printLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"lshaoqin"},"content":" * Prints message after a task is marked as uncompleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"lshaoqin"},"content":" * @param task The task which was unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"lshaoqin"},"content":" public void unmark(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"lshaoqin"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet: \\n\" + task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"lshaoqin"},"content":" * Prints message after a task is marked as completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"lshaoqin"},"content":" * @param task The task which was marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"lshaoqin"},"content":" public void mark(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"lshaoqin"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done: \\n\" + task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"lshaoqin"},"content":" * Prints message after a task is deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"lshaoqin"},"content":" * @param task The task which was deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"lshaoqin"},"content":" * @param size The number of tasks in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"lshaoqin"},"content":" public void delete(Task task, int size) {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"lshaoqin"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"lshaoqin"},"content":" System.out.println(\"\\t\" + task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"lshaoqin"},"content":" System.out.println(\"Now you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"lshaoqin"},"content":" * Prints message after a task is created.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"lshaoqin"},"content":" * @param task The task which was created.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"lshaoqin"},"content":" * @param size The number of tasks in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"lshaoqin"},"content":" public void createTask(Task task, int size) {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"lshaoqin"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"lshaoqin"},"content":" System.out.println(\"\\t\" + task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"lshaoqin"},"content":" System.out.println(\"Now you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"lshaoqin"},"content":" * Prints out corresponding tasks based on search term.","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"lshaoqin"},"content":" * @param results The results of the search.","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"lshaoqin"},"content":" public void find(ArrayList\u003cTask\u003e results) {","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"lshaoqin"},"content":" if (results.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"lshaoqin"},"content":" System.out.println(\"No results found.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"lshaoqin"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"lshaoqin"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"lshaoqin"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"lshaoqin"},"content":" for (Task task : results) {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"lshaoqin"},"content":" System.out.println(count + \". \" + task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"lshaoqin"},"content":" count++;","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"lshaoqin"},"content":" printLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lshaoqin":126}},{"path":"src/test/java/juke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" public void deleteTask_indexOutOfBounds_errorThrown() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" TaskList tasks \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" tasks.delete(1);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" } catch (JukeError e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" assertEquals(\"That task does not exist!\", e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" public void markTask_indexOutOfBounds_errorThrown() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" TaskList tasks \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" tasks.markAsDone(1);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" } catch (JukeError e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" assertEquals(\"That task does not exist!\", e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" public void add_getSize_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" TaskList tasks \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":" tasks.add(new Task(\"testing\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" tasks.add(new Task(\"testing\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":" assertEquals(tasks.getSize(), 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"lshaoqin":35}},{"path":"src/test/java/juke/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" public void toString_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" Todo todo \u003d new Todo(\"testing\");","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" assertEquals(todo.toString(), \"[T][ ] testing\");","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" public void toData_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" Todo todo \u003d new Todo(\"testing\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" assertEquals(todo.toData(), \"T|false|testing\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" public void mark_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" Todo todo \u003d new Todo(\"testing\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" assertTrue(todo.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" public void unmark_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" Todo todo \u003d new Todo(\"testing\");","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" todo.markAsUndone();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":" assertFalse(todo.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"lshaoqin":33}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"unmark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"lshaoqin":9}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\juke.Juke.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":"lshaoqin"},"content":"java -classpath ..\\bin juke.Juke \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":{"lshaoqin":2,"-":19}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"# Juke project template","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Juke_. Given below are instructions on how to use it.","lastModifiedDate":"2023-09-05"},{"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":"lshaoqin"},"content":"3. After that, locate the `src/main/java/Juke.java` file, right-click it, and choose `Run Juke.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-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" Hello! I\u0027m Juke!","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" What can I do for you?","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"lshaoqin":5,"-":15}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":"javafx {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" version \u003d \"17.0.7\"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" modules \u003d [ \u0027javafx.controls\u0027,\u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lshaoqin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"lshaoqin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"lshaoqin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"lshaoqin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"lshaoqin"},"content":" mainClass.set(\"juke.Juke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"lshaoqin"},"content":" archiveBaseName \u003d \"juke\"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"lshaoqin":28,"-":40}},{"path":"src/main/java/juke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" super(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" public Deadline(String description, boolean isDone, LocalDate by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" return \"[D]\" + super.toString() + \" (by: \" +","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" public String toData() { return \"D\" + super.toData() + \"|\" + this.by; }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lshaoqin":27}},{"path":"src/main/java/juke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":"import javafx.geometry.Insets;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lshaoqin"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"lshaoqin"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"lshaoqin"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"lshaoqin"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"lshaoqin"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"lshaoqin"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"lshaoqin"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"lshaoqin"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"lshaoqin"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"lshaoqin"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"lshaoqin"},"content":" DialogBox userDialog \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"lshaoqin"},"content":" userDialog.setPadding(new Insets(10, 10, 10, 10));","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"lshaoqin"},"content":" return userDialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"lshaoqin"},"content":" public static DialogBox getJukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"lshaoqin"},"content":" var jukeDialog \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"lshaoqin"},"content":" jukeDialog.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"lshaoqin"},"content":" jukeDialog.setPadding(new Insets(10, 10, 10, 10));","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"lshaoqin"},"content":" return jukeDialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lshaoqin":65}},{"path":"src/main/java/juke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":" protected LocalDate start;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":" protected LocalDate end;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" public Event(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" super(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" public Event(String description, boolean isDone, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" return \"[E]\" + super.toString() + \" (\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" \"from: \" + start.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) +","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" \" to: \" + end.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" public String toData() { return \"E\" + super.toData() + \"|\" + start + \"|\" + end; }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lshaoqin":30}},{"path":"src/main/java/juke/Juke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":"import java.util.concurrent.Executors;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":"import java.util.concurrent.ScheduledExecutorService;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":"import java.util.concurrent.TimeUnit;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":"public class Juke {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" private final Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" private Application main;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" private boolean isEnded;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" public Juke(String filePath, Application main) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" parser \u003d new Parser(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":" this.main \u003d main;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" } catch (JukeError e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":" System.out.println(ui.printError(e));","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" tasks \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lshaoqin"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"lshaoqin"},"content":" return parser.parse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"lshaoqin"},"content":" } catch (JukeError error) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"lshaoqin"},"content":" return ui.printError(error);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"lshaoqin"},"content":" } catch (Exception error) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"lshaoqin"},"content":" System.out.println(\"Something went wrong.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"lshaoqin"},"content":" return \"Something went wrong. Please try again!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"lshaoqin"},"content":" public String closeBot() throws Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"lshaoqin"},"content":" // Create a ScheduledExecutorService with a single-thread pool","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"lshaoqin"},"content":" ScheduledExecutorService executorService \u003d Executors.newSingleThreadScheduledExecutor();","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"lshaoqin"},"content":" // Schedule the main.stop() to run after 2 seconds","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"lshaoqin"},"content":" executorService.schedule(() -\u003e {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"lshaoqin"},"content":" Platform.runLater(() -\u003e {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"lshaoqin"},"content":" main.stop();","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"lshaoqin"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"lshaoqin"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"lshaoqin"},"content":" });","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"lshaoqin"},"content":" }, 2, TimeUnit.SECONDS);","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"lshaoqin"},"content":" // Shutdown the executor service after scheduling the task","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"lshaoqin"},"content":" executorService.shutdown();","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"lshaoqin"},"content":" // Return ui.printBye() immediately","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"lshaoqin"},"content":" return ui.printBye();","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"lshaoqin"},"content":" public String printList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"lshaoqin"},"content":" return ui.printList(tasks.tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"lshaoqin"},"content":" public String unmark(int index) throws JukeError {","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"lshaoqin"},"content":" Task currTask \u003d tasks.markAsUndone(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"lshaoqin"},"content":" storage.updateAll(tasks.tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"lshaoqin"},"content":" return ui.unmark(currTask);","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":78,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"lshaoqin"},"content":" public String mark(int index) throws JukeError {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"lshaoqin"},"content":" Task currTask \u003d tasks.markAsDone(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"lshaoqin"},"content":" storage.updateAll(tasks.tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"lshaoqin"},"content":" return ui.mark(currTask);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"lshaoqin"},"content":" public String delete(int index) throws JukeError {","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"lshaoqin"},"content":" Task currTask \u003d tasks.delete(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"lshaoqin"},"content":" storage.updateAll(tasks.tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"lshaoqin"},"content":" return ui.delete(currTask, tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":90,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"lshaoqin"},"content":" public String find(String searchTerm) {","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"lshaoqin"},"content":" ArrayList\u003cTask\u003e results \u003d tasks.find(searchTerm);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"lshaoqin"},"content":" return ui.find(results);","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"lshaoqin"},"content":" public String createTodo(String desc) throws JukeError {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"lshaoqin"},"content":" Task newTask \u003d new Todo(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"lshaoqin"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"lshaoqin"},"content":" storage.write(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"lshaoqin"},"content":" return ui.createTask(newTask, tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":103,"author":{"gitId":"lshaoqin"},"content":" public String createDeadline(String desc, LocalDate by) throws JukeError {","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"lshaoqin"},"content":" Task newTask \u003d new Deadline(desc, by);","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"lshaoqin"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"lshaoqin"},"content":" storage.write(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"lshaoqin"},"content":" return ui.createTask(newTask, tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"lshaoqin"},"content":" public String createEvent(String desc, LocalDate start, LocalDate end) throws JukeError {","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"lshaoqin"},"content":" Task newTask \u003d new Event(desc, start, end);","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"lshaoqin"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"lshaoqin"},"content":" storage.write(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"lshaoqin"},"content":" return ui.createTask(newTask, tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"lshaoqin":116}},{"path":"src/main/java/juke/JukeError.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"public class JukeError extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":" public JukeError(String errorMessage) {","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"lshaoqin":7}},{"path":"src/main/java/juke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lshaoqin":12}},{"path":"src/main/java/juke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" * A GUI for Juke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" private Juke juke \u003d new Juke(\"./savefile.txt\", this);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" private Stage stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" this.stage \u003d stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setJuke(juke);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":" public void stop() {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lshaoqin"},"content":" stage.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lshaoqin":38}},{"path":"src/main/java/juke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" private Juke juke;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" private Image userImage \u003d new Image(Objects.requireNonNull","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" (this.getClass().getResourceAsStream(\"/images/Music.jfif\")));","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" private Image jukeImage \u003d new Image(Objects.requireNonNull","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":" (this.getClass().getResourceAsStream(\"/images/Jukebox.jpg\")));","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lshaoqin"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"lshaoqin"},"content":" DialogBox.getJukeDialog(Ui.printStart(), jukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"lshaoqin"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"lshaoqin"},"content":" public void setJuke(Juke j) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"lshaoqin"},"content":" juke \u003d j;","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"lshaoqin"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"lshaoqin"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"lshaoqin"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"lshaoqin"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"lshaoqin"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"lshaoqin"},"content":" String response \u003d juke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"lshaoqin"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"lshaoqin"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"lshaoqin"},"content":" DialogBox.getJukeDialog(response, jukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"lshaoqin"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"lshaoqin"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lshaoqin":59}},{"path":"src/main/java/juke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" protected Juke juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" public Parser(Juke juke) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" this.juke \u003d juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" * Parses input and calls the appropriate Juke function.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" * @param input Input from the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" * @throws JukeError If there was a problem parsing the input.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" String parse(String input) throws Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" if (input.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" return juke.closeBot();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" else if (input.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" return juke.printList();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":" else if (input.contains(\"unmark \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" int index \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" return juke.unmark(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":" else if (input.contains(\"mark \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" int index \u003d Integer.parseInt(input.substring(5));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":" return juke.mark(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":" else if (input.startsWith(\"delete \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"lshaoqin"},"content":" int index \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"lshaoqin"},"content":" return juke.delete(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"lshaoqin"},"content":" else if (input.startsWith(\"find \")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"lshaoqin"},"content":" if (input.length() \u003c 6) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"Please specify a search term.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"lshaoqin"},"content":" String searchTerm \u003d input.substring(5);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"lshaoqin"},"content":" return juke.find(searchTerm);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"lshaoqin"},"content":" else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"lshaoqin"},"content":" if (input.length() \u003c 5 || input.substring(5).length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"lshaoqin"},"content":" return juke.createTodo(input.substring(5));","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"lshaoqin"},"content":" else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"lshaoqin"},"content":" final Pattern deadlinePattern \u003d Pattern.compile(","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"lshaoqin"},"content":" \"^deadline\\\\s+(.*)\\\\s+/by\\\\s+(.*)$\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"lshaoqin"},"content":" Matcher matcher \u003d deadlinePattern.matcher(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"lshaoqin"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"lshaoqin"},"content":" return juke.createDeadline(matcher.group(1), LocalDate.parse(matcher.group(2)));","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"lshaoqin"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"Failed to parse date.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"lshaoqin"},"content":" else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"lshaoqin"},"content":" final Pattern eventPattern \u003d Pattern.compile(","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"lshaoqin"},"content":" \"^event\\\\s+(.*)\\\\s+/from\\\\s+(.*)\\\\s+/to\\\\s+(.*)$\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"lshaoqin"},"content":" Matcher matcher \u003d eventPattern.matcher(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"lshaoqin"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"lshaoqin"},"content":" return juke.createEvent(matcher.group(1),","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"lshaoqin"},"content":" LocalDate.parse(matcher.group(2)),","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"lshaoqin"},"content":" LocalDate.parse(matcher.group(3)));","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"lshaoqin"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"Failed to parse date.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"lshaoqin"},"content":" else {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"lshaoqin"},"content":" return \"Juke may have encountered a problem - please try that again!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lshaoqin":83}},{"path":"src/main/java/juke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import java.io.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" File savefile;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" this.savefile \u003d new File(filepath);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" if (!savefile.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" savefile.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" * Checks if task in data has been completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" * @param isDone isDone portion of the task in data.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" * @return Whether the task has been completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" private boolean parseIsDone(String isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":" return isDone.equals(\"true\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":" * Parses one task which was stored in the savefile.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" * @param data The data string representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":" * @return The parsed Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":" private Task parseOne(String data) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"lshaoqin"},"content":" String[] parts \u003d data.split(\"\\\\|\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"lshaoqin"},"content":" if (Objects.equals(parts[0], \"T\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"lshaoqin"},"content":" return new Todo(parts[2], parseIsDone(parts[1]));","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"lshaoqin"},"content":" if (Objects.equals(parts[0], \"D\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"lshaoqin"},"content":" return new Deadline(parts[2], parseIsDone(parts[1]), LocalDate.parse(parts[3]));","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"lshaoqin"},"content":" if (Objects.equals(parts[0], \"E\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"lshaoqin"},"content":" return new Event(parts[2], parseIsDone(parts[1]),","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"lshaoqin"},"content":" LocalDate.parse(parts[3]), LocalDate.parse(parts[4]));","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"lshaoqin"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"lshaoqin"},"content":" * Loads all tasks from the savefile.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"lshaoqin"},"content":" * @return An ArrayList of Tasks which was loaded from the savefile.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"lshaoqin"},"content":" * @throws JukeError If there was an error parsing any of the data.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"lshaoqin"},"content":" public ArrayList\u003cTask\u003e load() throws JukeError {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"lshaoqin"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"lshaoqin"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(savefile));","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"lshaoqin"},"content":" // Read the lines from the file one by one.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"lshaoqin"},"content":" String line;","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"lshaoqin"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"lshaoqin"},"content":" tasks.add(parseOne(line));","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"lshaoqin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"Failed to load data.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"lshaoqin"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"lshaoqin"},"content":" * Writes a task to the savefile.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"lshaoqin"},"content":" * @param task The task to be written.","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"lshaoqin"},"content":" * @throws JukeError If the writing operation failed.","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"lshaoqin"},"content":" public void write(Task task) throws JukeError {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"lshaoqin"},"content":" FileWriter writer \u003d new FileWriter(savefile, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"lshaoqin"},"content":" writer.write(task.toData() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"lshaoqin"},"content":" writer.flush();","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"lshaoqin"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"lshaoqin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"Failed to write to storage.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"lshaoqin"},"content":" * Updates all tasks in the savefile, useful when a task is deleted or modified.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"lshaoqin"},"content":" * @param tasks An ArrayList of all tasks to be written.","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"lshaoqin"},"content":" public void updateAll(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"lshaoqin"},"content":" FileWriter deleter \u003d new FileWriter(savefile, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"lshaoqin"},"content":" deleter.write(\"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"lshaoqin"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"lshaoqin"},"content":" FileWriter writer \u003d new FileWriter(savefile, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"lshaoqin"},"content":" writer.write(task.toData() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"lshaoqin"},"content":" writer.flush();","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"lshaoqin"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"lshaoqin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"lshaoqin"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lshaoqin":105}},{"path":"src/main/java/juke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"public class Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":" protected final String desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":" public Task(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" public Task(String desc, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" * Gets the appropriate icon based on whether the task is done.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" * @return [X] if task is done, [ ] if task is not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" return (isDone ? \"[X] \" : \"[ ] \"); // mark done task with X","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" * Marks task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":" * Marks task as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"lshaoqin"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"lshaoqin"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"lshaoqin"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"lshaoqin"},"content":" return this.getStatusIcon() + desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"lshaoqin"},"content":" * Generates string to be stored as data in Storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"lshaoqin"},"content":" * @return String which stores all necessary attributes in the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"lshaoqin"},"content":" public String toData() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"lshaoqin"},"content":" return \"|\" + isDone + \"|\" + desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lshaoqin":51}},{"path":"src/main/java/juke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":" public ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" public int getSize() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" return tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" public Task markAsUndone(int index) throws JukeError {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" if (index \u003e tasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"That task does not exist!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" Task currTask \u003d tasks.get(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" currTask.markAsUndone();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" return currTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" public Task markAsDone(int index) throws JukeError {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" if (index \u003e tasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"That task does not exist!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":" Task currTask \u003d tasks.get(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" currTask.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":" return currTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"lshaoqin"},"content":" public Task delete(int index) throws JukeError {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"lshaoqin"},"content":" if (index \u003e tasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"lshaoqin"},"content":" throw new JukeError(\"That task does not exist!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"lshaoqin"},"content":" Task currTask \u003d tasks.get(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"lshaoqin"},"content":" tasks.remove(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"lshaoqin"},"content":" return currTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"lshaoqin"},"content":" public ArrayList\u003cTask\u003e find(String searchTerm) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"lshaoqin"},"content":" ArrayList\u003cTask\u003e results \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"lshaoqin"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"lshaoqin"},"content":" if (task.desc.contains(searchTerm)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"lshaoqin"},"content":" results.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"lshaoqin"},"content":" return results;","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lshaoqin":57}},{"path":"src/main/java/juke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":" public Todo(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":" super(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":" public Todo(String desc, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" super(desc, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" public String toData() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" return \"T\" + super.toData();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lshaoqin":21}},{"path":"src/main/java/juke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":" * Prints the message to welcome the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" public static String printStart() {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" //Introduce itself to the user","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" return \"Hello! I\u0027m Juke!\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" + \"What can I do for you?\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" * Prints the error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" * @param error The JukeError which was encountered.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" public String printError(JukeError error) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" return error.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" * Prints bye to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":" public String printBye() {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" //Say goodbye","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":" * Prints the lists of tasks that the user has saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" * @param tasks The list of tasks to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"lshaoqin"},"content":" public String printList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"lshaoqin"},"content":" int count \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"lshaoqin"},"content":" StringBuilder list \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"lshaoqin"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"lshaoqin"},"content":" list.append(count).append(\": \").append(task.toString()).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"lshaoqin"},"content":" count++;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"lshaoqin"},"content":" return list.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"lshaoqin"},"content":" * Prints message after a task is marked as uncompleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"lshaoqin"},"content":" * @param task The task which was unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"lshaoqin"},"content":" public String unmark(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"lshaoqin"},"content":" return \"OK, I\u0027ve marked this task as not done yet: \\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"lshaoqin"},"content":" * Prints message after a task is marked as completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"lshaoqin"},"content":" * @param task The task which was marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"lshaoqin"},"content":" public String mark(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"lshaoqin"},"content":" return \"Nice! I\u0027ve marked this task as done: \\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"lshaoqin"},"content":" * Prints message after a task is deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"lshaoqin"},"content":" * @param task The task which was deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"lshaoqin"},"content":" * @param size The number of tasks in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"lshaoqin"},"content":" public String delete(Task task, int size) {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"lshaoqin"},"content":" return \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"lshaoqin"},"content":" + \"\\t\" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"lshaoqin"},"content":" + \"Now you have \" + size + \" tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"lshaoqin"},"content":" * Prints message after a task is created.","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"lshaoqin"},"content":" * @param task The task which was created.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"lshaoqin"},"content":" * @param size The number of tasks in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"lshaoqin"},"content":" public String createTask(Task task, int size) {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"lshaoqin"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"lshaoqin"},"content":" + \"\\t\" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"lshaoqin"},"content":" + \"Now you have \" + size + \" tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"lshaoqin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"lshaoqin"},"content":" * Prints out corresponding tasks based on search term.","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"lshaoqin"},"content":" * @param results The results of the search.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"lshaoqin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"lshaoqin"},"content":" public String find(ArrayList\u003cTask\u003e results) {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"lshaoqin"},"content":" if (results.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"lshaoqin"},"content":" return \"No results found.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"lshaoqin"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"lshaoqin"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"lshaoqin"},"content":" StringBuilder tasks \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"lshaoqin"},"content":" for (Task task : results) {","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"lshaoqin"},"content":" tasks.append(count).append(\". \").append(task.toString()).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"lshaoqin"},"content":" count++;","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"lshaoqin"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lshaoqin":102}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lshaoqin":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"juke.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lshaoqin":19}},{"path":"src/test/java/juke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" public void deleteTask_indexOutOfBounds_errorThrown() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":" TaskList tasks \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" tasks.delete(1);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" } catch (JukeError e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" assertEquals(\"That task does not exist!\", e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" public void markTask_indexOutOfBounds_errorThrown() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" TaskList tasks \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" tasks.markAsDone(1);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" } catch (JukeError e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" assertEquals(\"That task does not exist!\", e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" public void add_getSize_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" TaskList tasks \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":" tasks.add(new Task(\"testing\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" tasks.add(new Task(\"testing\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":" assertEquals(tasks.getSize(), 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"lshaoqin":35}},{"path":"src/test/java/juke/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"package juke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":" public void toString_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":" Todo todo \u003d new Todo(\"testing\");","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lshaoqin"},"content":" assertEquals(todo.toString(), \"[T][ ] testing\");","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lshaoqin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lshaoqin"},"content":" public void toData_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lshaoqin"},"content":" Todo todo \u003d new Todo(\"testing\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lshaoqin"},"content":" assertEquals(todo.toData(), \"T|false|testing\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lshaoqin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lshaoqin"},"content":" public void mark_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lshaoqin"},"content":" Todo todo \u003d new Todo(\"testing\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lshaoqin"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lshaoqin"},"content":" assertTrue(todo.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lshaoqin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lshaoqin"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lshaoqin"},"content":" public void unmark_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"lshaoqin"},"content":" Todo todo \u003d new Todo(\"testing\");","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lshaoqin"},"content":" todo.markAsUndone();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lshaoqin"},"content":" assertFalse(todo.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"lshaoqin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lshaoqin"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"lshaoqin":33}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lshaoqin"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"lshaoqin"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"lshaoqin"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"lshaoqin"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"lshaoqin"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"lshaoqin"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"lshaoqin"},"content":"unmark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"lshaoqin"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"lshaoqin"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"lshaoqin":9}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"lshaoqin"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\juke.Juke.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":"lshaoqin"},"content":"java -classpath ..\\bin juke.Juke \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":{"lshaoqin":2,"-":19}}] diff --git a/lshaoqin_ip_master/commits.json b/lshaoqin_ip_master/commits.json index 543477d5..5001beed 100644 --- a/lshaoqin_ip_master/commits.json +++ b/lshaoqin_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"lshaoqin":[{"date":"2023-08-20","commitResults":[{"hash":"2e32fdf7390be56244313c9884728a5f227c2599","isMergeCommit":false,"messageTitle":"implement skeletal version","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":10}}},{"hash":"a419724898ec42fea351b0d506301e66b7bb2eb6","isMergeCommit":false,"messageTitle":"add welcome and goodbye messages","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"a0051ea78565ba1ae406a0678cf25352dd0a7eef","isMergeCommit":false,"messageTitle":"add ability to echo and exit","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":3}}},{"hash":"2e6addd9f44c1c1ca89b43641a213a3615287178","isMergeCommit":false,"messageTitle":"add and list functions","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":1}}},{"hash":"8ddad67a05fdc80b67367796ad421d2ca70c9985","isMergeCommit":false,"messageTitle":"mark as done and undone","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":3}}}]},{"date":"2023-08-21","commitResults":[{"hash":"ab6be4690c5214476f8a2980dc74caf2f6df4101","isMergeCommit":false,"messageTitle":"todos, events, deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":6}}},{"hash":"2473e5299ff20fa7b74a9dc00e599ce98475dbf0","isMergeCommit":false,"messageTitle":"add tests","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"bat":{"insertions":2,"deletions":2}}},{"hash":"f82a941f2ffa857d7ea77d7b26f657712ec18613","isMergeCommit":false,"messageTitle":"exception handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"6957161ad805292fd35fe80222b78ca6f6c1d507","isMergeCommit":false,"messageTitle":"exception handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":60}}},{"hash":"ddf135fc50b77d7e375b45b732a5bc7076ec4e1d","isMergeCommit":false,"messageTitle":"implement delete function","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}}]},{"date":"2023-08-31","commitResults":[{"hash":"98e9faa20fdae9c4c45a3d2953239cd13054bd9f","isMergeCommit":false,"messageTitle":"Implement saving feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":126,"deletions":1}}},{"hash":"7d81917e341a0c10c567a79a381859e2d5d0ed18","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"f5a1e2f69b962f63974fd01879f47437f0ebb4a6","isMergeCommit":false,"messageTitle":"Add datetime support","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":25}}},{"hash":"6991bb6113ee2c53a84e0f01c547fac8418b334b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"37cdadd2986ef6c9aa40f03d94baa1fca9eb600e","isMergeCommit":false,"messageTitle":"refactor based on OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":425,"deletions":309}}},{"hash":"408f44db1ac47bfa5c7df99dc89f597208d1a95b","isMergeCommit":false,"messageTitle":"organise into package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3},"bat":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-01","commitResults":[{"hash":"c76785be4092b4b271acf448682acdc2a86179d9","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"4e7d58e83d4474c596eed3e0e0205b28d256ce48","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":0}}},{"hash":"f447770f690491a66e47be85ae95f21128995ab2","isMergeCommit":false,"messageTitle":"Add JAR support","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"767841f60710314392ec258eba2e72b316dba4b8","isMergeCommit":false,"messageTitle":"Add Javadoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":3}}},{"hash":"aa15ffc511389ff82346d0e22589456fa6646a92","isMergeCommit":false,"messageTitle":"Style code based on coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"b514e9442df4ad72582e64a4dfa72f7486d99460","isMergeCommit":false,"messageTitle":"Implement find function","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":1}}},{"hash":"82cfbddf56864aab333d0ee6559d5f72874cca18","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0bef53cd5c72fd8b6cd249ac32d190adb9f57c45","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"409924cf6e82ce9ca8fc3527a87fc9427fdf16a1","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":6,"deletions":9}}},{"hash":"39965ca57e94975bd9c4ab09253276206f05ede0","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":2}}},{"hash":"d72f8a2172027de1f7cd3295aca7af3bde18427b","isMergeCommit":false,"messageTitle":"add checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":14,"deletions":14}}},{"hash":"ac6ffe74a086796e602a9c2d5242369b9eb2aa14","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/lshaoqin/ip","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"lshaoqin":{"java":667,"md":5,"fxml":0,"sh":0,"bat":2,"gradle":7,"txt":9}},"authorContributionVariance":{"lshaoqin":48063.39},"authorDisplayNameMap":{"lshaoqin":"CS2103T-T10-1 LU S..OQIN"}} +{"authorDailyContributionsMap":{"lshaoqin":[{"date":"2023-08-20","commitResults":[{"hash":"2e32fdf7390be56244313c9884728a5f227c2599","isMergeCommit":false,"messageTitle":"implement skeletal version","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":10}}},{"hash":"a419724898ec42fea351b0d506301e66b7bb2eb6","isMergeCommit":false,"messageTitle":"add welcome and goodbye messages","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"a0051ea78565ba1ae406a0678cf25352dd0a7eef","isMergeCommit":false,"messageTitle":"add ability to echo and exit","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":3}}},{"hash":"2e6addd9f44c1c1ca89b43641a213a3615287178","isMergeCommit":false,"messageTitle":"add and list functions","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":1}}},{"hash":"8ddad67a05fdc80b67367796ad421d2ca70c9985","isMergeCommit":false,"messageTitle":"mark as done and undone","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":3}}}]},{"date":"2023-08-21","commitResults":[{"hash":"ab6be4690c5214476f8a2980dc74caf2f6df4101","isMergeCommit":false,"messageTitle":"todos, events, deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":6}}},{"hash":"2473e5299ff20fa7b74a9dc00e599ce98475dbf0","isMergeCommit":false,"messageTitle":"add tests","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"bat":{"insertions":2,"deletions":2}}},{"hash":"f82a941f2ffa857d7ea77d7b26f657712ec18613","isMergeCommit":false,"messageTitle":"exception handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"6957161ad805292fd35fe80222b78ca6f6c1d507","isMergeCommit":false,"messageTitle":"exception handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":60}}},{"hash":"ddf135fc50b77d7e375b45b732a5bc7076ec4e1d","isMergeCommit":false,"messageTitle":"implement delete function","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}}]},{"date":"2023-08-31","commitResults":[{"hash":"98e9faa20fdae9c4c45a3d2953239cd13054bd9f","isMergeCommit":false,"messageTitle":"Implement saving feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":126,"deletions":1}}},{"hash":"7d81917e341a0c10c567a79a381859e2d5d0ed18","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"f5a1e2f69b962f63974fd01879f47437f0ebb4a6","isMergeCommit":false,"messageTitle":"Add datetime support","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":25}}},{"hash":"6991bb6113ee2c53a84e0f01c547fac8418b334b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"37cdadd2986ef6c9aa40f03d94baa1fca9eb600e","isMergeCommit":false,"messageTitle":"refactor based on OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":425,"deletions":309}}},{"hash":"408f44db1ac47bfa5c7df99dc89f597208d1a95b","isMergeCommit":false,"messageTitle":"organise into package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3},"bat":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-01","commitResults":[{"hash":"c76785be4092b4b271acf448682acdc2a86179d9","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"4e7d58e83d4474c596eed3e0e0205b28d256ce48","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":0}}},{"hash":"f447770f690491a66e47be85ae95f21128995ab2","isMergeCommit":false,"messageTitle":"Add JAR support","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"767841f60710314392ec258eba2e72b316dba4b8","isMergeCommit":false,"messageTitle":"Add Javadoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":3}}},{"hash":"aa15ffc511389ff82346d0e22589456fa6646a92","isMergeCommit":false,"messageTitle":"Style code based on coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"b514e9442df4ad72582e64a4dfa72f7486d99460","isMergeCommit":false,"messageTitle":"Implement find function","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":1}}},{"hash":"82cfbddf56864aab333d0ee6559d5f72874cca18","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0bef53cd5c72fd8b6cd249ac32d190adb9f57c45","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"409924cf6e82ce9ca8fc3527a87fc9427fdf16a1","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":6,"deletions":9}}},{"hash":"39965ca57e94975bd9c4ab09253276206f05ede0","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":2}}},{"hash":"d72f8a2172027de1f7cd3295aca7af3bde18427b","isMergeCommit":false,"messageTitle":"add checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":14,"deletions":14}}},{"hash":"ac6ffe74a086796e602a9c2d5242369b9eb2aa14","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/lshaoqin/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"21220d6fa31ad71d0e7a81d7fdf598a0493dd91d","isMergeCommit":false,"messageTitle":"implement GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":21,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":272,"deletions":98}}}]}]},"authorFileTypeContributionMap":{"lshaoqin":{"java":841,"md":5,"fxml":35,"sh":0,"bat":2,"gradle":28,"txt":9}},"authorContributionVariance":{"lshaoqin":55648.797},"authorDisplayNameMap":{"lshaoqin":"CS2103T-T10-1 LU S..OQIN"}} diff --git a/lunaroddity_ip_master/authorship.json b/lunaroddity_ip_master/authorship.json index 128c6c21..47fbd6d9 100644 --- a/lunaroddity_ip_master/authorship.json +++ b/lunaroddity_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":"lunaroddity"},"content":" mainClass.set(\"bareum.Bareum\")","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" archiveFileName \u003d \u0027bareum.jar\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" archiveBaseName \u003d \u0027bareum\u0027","lastModifiedDate":"2023-09-05"},{"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":{"lunaroddity":3,"-":40}},{"path":"src/main/java/bareum/Bareum.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.ByeCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"public class Bareum {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" public Bareum(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" public void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" storage.loadSavedTaskList(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" ui.showWelcomeMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" ui.showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" String input \u003d ui.getUserInput();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" cmd.execute(ui, storage, taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" if (cmd instanceof ByeCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" isExit \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":" new Bareum(\"./data/storedTasks.txt\").run();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lunaroddity":41}},{"path":"src/main/java/bareum/BareumException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"public class BareumException extends Exception {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":" public BareumException(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":" super(\"Bareum: \" + message);","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":7}},{"path":"src/main/java/bareum/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" LocalDate dueDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" private DeadlineTask(boolean isDone, String description, LocalDate dueDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" super(isDone, description);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" // add exceptions for time","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" public static DeadlineTask makeDeadline(String description, String dueDateStr) throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" LocalDate dueDate \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" dueDate \u003d LocalDate.parse(dueDateStr);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please enter the due date in YYYY-MM-DD :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" return new DeadlineTask(false, description, dueDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" public static DeadlineTask makeDeadline(String[] taskInputs) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" String description \u003d taskInputs[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" String dueDateStr \u003d taskInputs[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" LocalDate dueDate \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" dueDate \u003d LocalDate.parse(dueDateStr);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" boolean isDone \u003d taskInputs[1].equals(\"1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" return new DeadlineTask(isDone, description, dueDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" String dueDate \u003d this.dueDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":" return \"[D][\" + this.getStatusIcon() + \"] \" + this.description","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":" + \"(by: \" + dueDate + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"lunaroddity"},"content":" public String toSavedString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"lunaroddity"},"content":" String done \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"lunaroddity"},"content":" return \"D|\" + done + \"|\" + this.description + \"|\" + dueDate +\"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lunaroddity":50}},{"path":"src/main/java/bareum/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":" private String startDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":" private String endDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" private EventTask(boolean isDone, String description, String startDateTime,","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" String endDateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" super(isDone, description);","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" this.startDateTime \u003d startDateTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" this.endDateTime \u003d endDateTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" // add exceptions for time","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" public static EventTask makeEvent(String description, String startDateTime,","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" String endDateTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" return new EventTask(false, description, startDateTime, endDateTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" public static EventTask makeEvent(String[] taskInputs) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" boolean isDone \u003d taskInputs[1].equals(\"1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" String description \u003d taskInputs[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" String startDateTime \u003d taskInputs[3];","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" String endDateTime \u003d taskInputs[4];","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" return new EventTask(isDone, description, startDateTime, endDateTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" public String getStartDateTime() {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" return this.startDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" public String getEndDateTime() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" return this.endDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":" return \"[E][\" + this.getStatusIcon() + \"] \" + this.description","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" + \"(from:\" + startDateTime + \"to:\" + endDateTime + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"lunaroddity"},"content":" public String toSavedString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"lunaroddity"},"content":" String done \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"lunaroddity"},"content":" return \"E|\" + done + \"|\" + this.description + \"|\" + this.startDateTime + \"|\" + this.endDateTime +\"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lunaroddity":48}},{"path":"src/main/java/bareum/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.AddDeadlineCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.AddEventCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.AddTodoCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.ByeCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.IncorrectCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" public Parser() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" static Command parse(String input) throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" String[] commandInputs \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" if (commandInputs[0].equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" } else if (commandInputs[0].equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new ListCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" } else if (commandInputs[0].equals(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" if (commandInputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please give the index of the task you would like to mark.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: mark \u003cindex\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" int index \u003d Integer.parseInt(commandInputs[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new MarkCommand(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" } else if (commandInputs[0].equals(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" if (commandInputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please give the index of the task you would like to unmark.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: unmark \u003cindex\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":" int index \u003d Integer.parseInt(commandInputs[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new UnmarkCommand(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" } else if (commandInputs[0].equals(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":" if (commandInputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please give the index of the task you would like to delete.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: delete \u003cindex\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"lunaroddity"},"content":" int index \u003d Integer.parseInt(commandInputs[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new DeleteCommand(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"lunaroddity"},"content":" } else if (commandInputs[0].equals(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"lunaroddity"},"content":" if (commandInputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the description of your todo :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: todo \u003cdescription\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new AddTodoCommand(commandInputs[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"lunaroddity"},"content":" } else if (commandInputs[0].equals(\"deadline\")){","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"lunaroddity"},"content":" if (commandInputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! The details of your deadline are missing :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"lunaroddity"},"content":" \"\\nCorrect format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"lunaroddity"},"content":" String allDetails \u003d commandInputs[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"lunaroddity"},"content":" int indexOfKeywordBy \u003d allDetails.indexOf(\"/by\");","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"lunaroddity"},"content":" if (indexOfKeywordBy \u003d\u003d -1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the due date of your deadline :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"lunaroddity"},"content":" \"\\nCorrect format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"lunaroddity"},"content":" } else if (indexOfKeywordBy \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the description of your deadline :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"lunaroddity"},"content":" String[] descriptionDueTime \u003d allDetails.split(\"/by\");","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"lunaroddity"},"content":" String description \u003d descriptionDueTime[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"lunaroddity"},"content":" if (descriptionDueTime.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the due date of your deadline :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"lunaroddity"},"content":" String dueDate \u003d descriptionDueTime[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new AddDeadlineCommand(description, dueDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"lunaroddity"},"content":" } else if (commandInputs[0].equals(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"lunaroddity"},"content":" if (commandInputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"The details of your event are missing :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"lunaroddity"},"content":" \"\\nCorrect format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"lunaroddity"},"content":" String allDetails \u003d commandInputs[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"lunaroddity"},"content":" int indexOfKeywordFrom \u003d allDetails.indexOf(\"/from\");","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"lunaroddity"},"content":" if (indexOfKeywordFrom \u003d\u003d -1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the start time of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"lunaroddity"},"content":" } else if (indexOfKeywordFrom \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the description of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"lunaroddity"},"content":" String[] descriptionStartEndTime \u003d allDetails.split(\"/from\");","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"lunaroddity"},"content":" String description \u003d descriptionStartEndTime[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"lunaroddity"},"content":" int indexOfKeywordTo \u003d descriptionStartEndTime[1].indexOf(\"/to\");","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"lunaroddity"},"content":" if (indexOfKeywordTo \u003d\u003d -1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the end time of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"lunaroddity"},"content":" } else if (indexOfKeywordTo \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the start time of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"lunaroddity"},"content":" String[] startEndTime \u003d descriptionStartEndTime[1].split(\"/to\");","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"lunaroddity"},"content":" String startDateTime \u003d startEndTime[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"lunaroddity"},"content":" if (startEndTime.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the end time of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"lunaroddity"},"content":" String endDateTime \u003d startEndTime[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new AddEventCommand(description, startDateTime, endDateTime);","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"lunaroddity"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new IncorrectCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"lunaroddity"},"content":" return cmd;","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":119}},{"path":"src/main/java/bareum/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" private String filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" private File storedTasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" public void loadSavedTaskList(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" File storedTasks \u003d new File(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" if (!storedTasks.exists()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" storedTasks.getParentFile().mkdirs();","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" storedTasks.createNewFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" this.storedTasks \u003d storedTasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" StringBuilder savedTasks \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" int currChar;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" FileReader fr \u003d new FileReader(storedTasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" while ((currChar \u003d fr.read()) !\u003d -1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" savedTasks.append((char) currChar);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" String[] allTaskInputs \u003d savedTasks.toString(). split(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":" for (int i \u003d 0; i \u003c allTaskInputs.length; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":" String[] taskInputs \u003d allTaskInputs[i].split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":" if (taskInputs[0].equals(\"T\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" taskList.addTask(TodoTask.makeTodo(taskInputs));","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":" } else if (taskInputs[0].equals(\"D\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":" taskList.addTask(DeadlineTask.makeDeadline(taskInputs));","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"lunaroddity"},"content":" // enum: done not done to prevent invalid input","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"lunaroddity"},"content":" } else if (taskInputs[0].equals(\"E\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"lunaroddity"},"content":" taskList.addTask(EventTask.makeEvent(taskInputs));","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"lunaroddity"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"lunaroddity"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"lunaroddity"},"content":" public void saveNewTask(Task newTask) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"lunaroddity"},"content":" FileWriter fw \u003d new FileWriter(storedTasks, true);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"lunaroddity"},"content":" fw.write(newTask.toSavedString());","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"lunaroddity"},"content":" fw.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"lunaroddity"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"lunaroddity"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"lunaroddity"},"content":" public void saveAllTasks(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"lunaroddity"},"content":" FileWriter fw \u003d new FileWriter(storedTasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"lunaroddity"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"lunaroddity"},"content":" fw.write(taskList.get(i).toSavedString());","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"lunaroddity"},"content":" fw.flush();","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"lunaroddity"},"content":" fw.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"lunaroddity"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"lunaroddity"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":75}},{"path":"src/main/java/bareum/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":" String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":" boolean isDone;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":" public Task(boolean isDone, String description) {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" return isDone ? \"X\" : \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" return this.description;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" public String toSavedString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" return this.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lunaroddity":36}},{"path":"src/main/java/bareum/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"public class TaskList {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":" ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" public TaskList() {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" public int size() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" return this.taskList.get(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" public void markAsDone(int index) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" this.taskList.get(index).markAsDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" public void markAsUndone(int index) {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" this.taskList.get(index).markAsUndone();","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" this.taskList.remove(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lunaroddity":35}},{"path":"src/main/java/bareum/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"public class TodoTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":" private TodoTask(boolean isDone, String description) {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":" super(isDone, description);","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" static public TodoTask makeTodo(String description) throws BareumException {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" if (description.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Todo description cannot be empty.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" return new TodoTask(false, description);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" static public TodoTask makeTodo(String[] taskInputs) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" boolean isDone \u003d taskInputs[0].equals(\"1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" return new TodoTask(isDone, taskInputs[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" return \"[T][\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" public String toSavedString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" String done \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" return \"T|\" + done + \"|\" + this.description + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lunaroddity":31}},{"path":"src/main/java/bareum/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":" private static Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" String getUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" public static void reply(String reply) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" String botName \u003d \"Bareum: \";","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" String fullReply \u003d botName + reply;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" System.out.println(fullReply);","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" public void showWelcomeMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" reply(\"Hello! I\u0027m Bareum! What can I do for you? ^^\");","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" public void showGoodbyeMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" reply(\"Bye! Hope to see you again soon ^^\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" public void showLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" System.out.println(\"________________________\");","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":31}},{"path":"src/main/java/bareum/commands/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.BareumException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.DeadlineTask;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" private String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" private String dueDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" public AddDeadlineCommand(String description, String dueDate) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) throws BareumException {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" DeadlineTask task \u003d DeadlineTask.makeDeadline(this.description, this.dueDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" storage.saveNewTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" String added \u003d \"I have added this task:\\n\" + task + \"\\nYou now have \"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" + taskList.size() + \" task(s) in your list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(added);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":32}},{"path":"src/main/java/bareum/commands/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.EventTask;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" private String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" private String startDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" private String endDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" public AddEventCommand(String description, String startDateTime,","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" String endDateTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" this.startDateTime \u003d startDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" this.endDateTime \u003d endDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" EventTask task \u003d EventTask.makeEvent(this.description, this.startDateTime, this.endDateTime);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" storage.saveNewTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" String added \u003d \"I have added this task:\\n\" + task + \"\\nYou now have \"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" + taskList.size() + \" task(s) in your list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(added);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":29}},{"path":"src/main/java/bareum/commands/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.BareumException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.TodoTask;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":"public class AddTodoCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" String description;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" public AddTodoCommand(String description) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" TodoTask task \u003d TodoTask.makeTodo(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" storage.saveNewTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" String added \u003d \"I have added this task:\\n\" + task + \"\\nYou now have \"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" + taskList.size() + \" task(s) in your list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(added);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(\"Oops! The description of a todo cannot be empty.\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: todo \u003cdescription\u003e\");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":30}},{"path":"src/main/java/bareum/commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" public ByeCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" storage.saveAllTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" ui.showGoodbyeMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":17}},{"path":"src/main/java/bareum/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.BareumException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" public abstract void execute(Ui ui, Storage storage, TaskList taskList) throws BareumException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":10}},{"path":"src/main/java/bareum/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.BareumException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" private int index;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) throws BareumException {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" String deletedTask \u003d taskList.get(index).toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" taskList.delete(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" storage.saveAllTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" // exception for if index doesn\u0027t exist","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(\"Okay, I\u0027ve deleted this task from the list:\\n\" + deletedTask","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" + \"\\nYou now have \" + taskList.size() + \" tasks in your list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":23}},{"path":"src/main/java/bareum/commands/IncorrectCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.BareumException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"public class IncorrectCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" public IncorrectCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) throws BareumException {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(\"Oops! I\u0027m sorry but I don\u0027t know what that means :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":17}},{"path":"src/main/java/bareum/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(\"Here are your current tasks!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" System.out.println((i + 1) + \". \" + taskList.get(i).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":19}},{"path":"src/main/java/bareum/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" private int index;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" taskList.markAsDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" storage.saveAllTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(\"Well done! I\u0027ve marked this task as done:\\n\" + taskList.get(index).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":20}},{"path":"src/main/java/bareum/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" private int index;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" taskList.markAsUndone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" storage.saveAllTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(\"Okay, I\u0027ve marked this task as not done yet:\\n\" + taskList.get(index).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":20}},{"path":"src/test/java/bareum/EventTaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"public class EventTaskTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" public void makeEvent_stringCorrectDetails_success() {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" EventTask task \u003d EventTask.makeEvent(\"project meeting\", \"Mon 2pm\", \"4pm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" assertNotNull(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"project meeting\", task.getDescription());","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Mon 2pm\", task.getStartDateTime() );","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"4pm\", task.getEndDateTime());","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" public void makeEvent_stringArrayCorrectInputs_success() {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" String[] taskInputs \u003d {\"E\", \"1\", \"project meeting\", \"Mon 2pm\", \"4pm\"};","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" EventTask task \u003d EventTask.makeEvent(taskInputs);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" assertNotNull(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"project meeting\", task.getDescription());","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Mon 2pm\", task.getStartDateTime() );","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"4pm\", task.getEndDateTime());","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lunaroddity":27}},{"path":"src/test/java/bareum/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.AddDeadlineCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.AddEventCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.AddTodoCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.ByeCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.DeleteCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.IncorrectCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.ListCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.MarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.UnmarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" public void parse_bye_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" assertEquals(ByeCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" public void parse_list_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" assertEquals(ListCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" public void parse_markWithIndex_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"mark 1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" assertEquals(MarkCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":" public void parse_markWithoutIndex_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"mark\");","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":" fail();","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please give the index of the task you would like to mark.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: mark \u003cindex\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"lunaroddity"},"content":" public void parse_unmarkeithIndex_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"unmark 1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"lunaroddity"},"content":" assertEquals(UnmarkCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"lunaroddity"},"content":" public void parse_unmarkWithoutIndex_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"unmark\");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"lunaroddity"},"content":" fail();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please give the index of the task you would like to unmark.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: unmark \u003cindex\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"lunaroddity"},"content":" public void parse_deleteWithIndex_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"delete 1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"lunaroddity"},"content":" assertEquals(DeleteCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"lunaroddity"},"content":" public void parse_deleteWithoutIndex_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"delete\");","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"lunaroddity"},"content":" fail();","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please give the index of the task you would like to delete.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: delete \u003cindex\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"lunaroddity"},"content":" public void parse_todo_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"todo borrow book\");","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"lunaroddity"},"content":" assertEquals(AddTodoCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"lunaroddity"},"content":" public void parse_todoMissingDescription_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"todo\");","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"lunaroddity"},"content":" fail();","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the description of your todo :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: todo \u003cdescription\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"lunaroddity"},"content":" public void parse_deadline_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"deadline return book /by 2023-09-02\");","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"lunaroddity"},"content":" assertEquals(AddDeadlineCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"lunaroddity"},"content":" public void parse_deadlineMissingDetails_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"deadline\");","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! The details of your deadline are missing :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"lunaroddity"},"content":" \"\\nCorrect format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"lunaroddity"},"content":" public void parse_deadlineMissingDescription_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"deadline /by 2023-09-02\");","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the description of your deadline :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"lunaroddity"},"content":" public void parse_deadlineMissingByDueDate_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"deadline return book\");","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the due date of your deadline :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"lunaroddity"},"content":" \"\\nCorrect format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"lunaroddity"},"content":" public void parse_deadlineWithByMissingDueDate_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"deadline return book /by\");","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the due date of your deadline :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"lunaroddity"},"content":" public void parse_event_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"event project meeting /from Mon 2pm /to 4pm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"lunaroddity"},"content":" assertEquals(AddEventCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"lunaroddity"},"content":" public void parse_eventMissingDetails_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"event\");","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: The details of your event are missing :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"lunaroddity"},"content":" \"\\nCorrect format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"lunaroddity"},"content":" public void parse_eventMissingDescription_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"event /from Mon 2pm /to 4pm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the description of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"lunaroddity"},"content":" public void parse_eventMissingFromStartTime_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"event project meeting /to 4pm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the start time of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"lunaroddity"},"content":" public void parse_eventWithFromMissingStartTime_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":182,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":183,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"event project meeting /from /to 4pm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":184,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":185,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the start time of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":186,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":187,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":188,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":189,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":190,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":191,"author":{"gitId":"lunaroddity"},"content":" public void parse_eventMissingToEndTime_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":192,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":193,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"event project meeting /from Mon 2pm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":194,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":195,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the end time of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":196,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":197,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":198,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":199,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":200,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":201,"author":{"gitId":"lunaroddity"},"content":" public void parse_eventWithToMissingEndTime_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":202,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":203,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"event project meeting /from Mon 2pm /to\");","lastModifiedDate":"2023-09-05"},{"lineNumber":204,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":205,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the end time of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":206,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":207,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":208,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":209,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":210,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":211,"author":{"gitId":"lunaroddity"},"content":" public void parse_incorrectCommand_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":212,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"blah\");","lastModifiedDate":"2023-09-05"},{"lineNumber":213,"author":{"gitId":"lunaroddity"},"content":" assertEquals(IncorrectCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":214,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":215,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lunaroddity":215}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"todo borrow book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"deadline return book /by 2023-09-02","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"mark 3","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":"unmark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"delete 2","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":"todo","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":"deadline","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"event","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":"blah","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"lunaroddity":17}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\bareum\\*.java","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":"java -classpath ..\\bin bareum.Bareum \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"lunaroddity":2,"-":19}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"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":"lunaroddity"},"content":" mainClass.set(\"bareum.Bareum\")","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" archiveFileName \u003d \u0027bareum.jar\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" archiveBaseName \u003d \u0027bareum\u0027","lastModifiedDate":"2023-09-05"},{"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":{"lunaroddity":3,"-":40}},{"path":"src/main/java/bareum/Bareum.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.ByeCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":" * This class implements the Bareum chatbot which keeps track of tasks to do.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"public class Bareum {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" * The object that loads and saves tasks into the file","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" * The object that manipulates the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" * The object that manages interactions with the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" * Creates a new instance of Bareum.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" * @param filePath File path to the file that previously saved tasks will be retrieved from.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" public Bareum(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" * Run the instance of Bareum and get user input until the user uses the \u0027bye\u0027 command.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":" public void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" storage.loadSavedTaskList(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":" ui.showWelcomeMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"lunaroddity"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"lunaroddity"},"content":" ui.showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"lunaroddity"},"content":" String input \u003d ui.getUserInput();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"lunaroddity"},"content":" cmd.execute(ui, storage, taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"lunaroddity"},"content":" if (cmd instanceof ByeCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"lunaroddity"},"content":" isExit \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"lunaroddity"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"lunaroddity"},"content":" * Starts the program and creates an instance of Bareum to run.","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"lunaroddity"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"lunaroddity"},"content":" * @param args Command line arguments which are not currently used.","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"lunaroddity"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"lunaroddity"},"content":" new Bareum(\"./data/storedTasks.txt\").run();","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lunaroddity":67}},{"path":"src/main/java/bareum/BareumException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":" * A custom exception for encapsulating exceptions unique to the Bareum program.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"public class BareumException extends Exception {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" * Creates a new BareumException instance with the corresponding exception message.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" * @param message The details of the exception.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" public BareumException(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" super(\"Bareum: \" + message);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":14}},{"path":"src/main/java/bareum/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" * This class implements a deadline with a due date.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" * Due date of the deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" LocalDate dueDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" * Creates a new deadline using the input completion status, description and due date.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" * @param isDone Completion status of the deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" * @param description Description of the deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" * @param dueDate Due date of the deadline in ISO format.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" private DeadlineTask(boolean isDone, String description, LocalDate dueDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" super(isDone, description);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" // add exceptions for time","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" * Creates a new uncompleted deadline using the inputs from the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" * @param description Description of the deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" * @param dueDateStr Due date of the deadline in ISO format as a string read from the user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" * @return New uncompleted DeadlineTask with the corresponding description and dueDate.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" * @throws BareumException If date cannot be parsed.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" public static DeadlineTask makeDeadline(String description, String dueDateStr) throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":" LocalDate dueDate \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":" dueDate \u003d LocalDate.parse(dueDateStr);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please enter the due date in YYYY-MM-DD :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"lunaroddity"},"content":" return new DeadlineTask(false, description, dueDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"lunaroddity"},"content":" * Creates a new deadline using the inputs from a saved deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"lunaroddity"},"content":" * @param taskInputs Type, completion status, description and due date of the saved task.","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"lunaroddity"},"content":" * @return New deadline with the corresponding completion status, description and dueDate.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"lunaroddity"},"content":" public static DeadlineTask makeDeadline(String[] taskInputs) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"lunaroddity"},"content":" boolean isDone \u003d taskInputs[1].equals(\"1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"lunaroddity"},"content":" String description \u003d taskInputs[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"lunaroddity"},"content":" String dueDateStr \u003d taskInputs[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"lunaroddity"},"content":" LocalDate dueDate \u003d LocalDate.parse(dueDateStr);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"lunaroddity"},"content":" return new DeadlineTask(isDone, description, dueDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"lunaroddity"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"lunaroddity"},"content":" String dueDate \u003d this.dueDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"lunaroddity"},"content":" return \"[D][\" + this.getStatusIcon() + \"] \" + this.description","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"lunaroddity"},"content":" + \"(by: \" + dueDate + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"lunaroddity"},"content":" * Create a string representation of the details of the deadline for saving into the hard disk.","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"lunaroddity"},"content":" * @return String representation of the details of the deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"lunaroddity"},"content":" public String toSavedString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"lunaroddity"},"content":" String done \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"lunaroddity"},"content":" return \"D|\" + done + \"|\" + this.description + \"|\" + dueDate +\"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lunaroddity":79}},{"path":"src/main/java/bareum/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":" * This class implements an event with a start and end time.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" * The start time of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" private String startDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" * The end time of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" private String endDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" * Creates a new event using the input completion status, description, start date and time and, end date and Time.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" * @param isDone Completion status of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" * @param startDateTime Start time of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" * @param endDateTime End time of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" private EventTask(boolean isDone, String description, String startDateTime,","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" String endDateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" super(isDone, description);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" this.startDateTime \u003d startDateTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" this.endDateTime \u003d endDateTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" // add exceptions for time","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" * Creates a new uncompleted event using the description, start and end date and time inputs from the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" * @param startDateTime Start time of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" * @param endDateTime End time of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":" * @return New uncompleted event using the description, start and end date and time inputs from the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":" public static EventTask makeEvent(String description, String startDateTime,","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" String endDateTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":" return new EventTask(false, description, startDateTime, endDateTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"lunaroddity"},"content":" * Creates a new event using the inputs from a saved event.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"lunaroddity"},"content":" * @param taskInputs Type, completion status, description and start and end date and time of the saved task.","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"lunaroddity"},"content":" * @return New event with the corresponding completion status, description and start and end date and time.","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"lunaroddity"},"content":" public static EventTask makeEvent(String[] taskInputs) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"lunaroddity"},"content":" boolean isDone \u003d taskInputs[1].equals(\"1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"lunaroddity"},"content":" String description \u003d taskInputs[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"lunaroddity"},"content":" String startDateTime \u003d taskInputs[3];","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"lunaroddity"},"content":" String endDateTime \u003d taskInputs[4];","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"lunaroddity"},"content":" return new EventTask(isDone, description, startDateTime, endDateTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"lunaroddity"},"content":" public String getStartDateTime() {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"lunaroddity"},"content":" return this.startDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"lunaroddity"},"content":" public String getEndDateTime() {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"lunaroddity"},"content":" return this.endDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"lunaroddity"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"lunaroddity"},"content":" return \"[E][\" + this.getStatusIcon() + \"] \" + this.description","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"lunaroddity"},"content":" + \"(from:\" + startDateTime + \"to:\" + endDateTime + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"lunaroddity"},"content":" * Create a string representation of the details of the event for saving into the hard disk.","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"lunaroddity"},"content":" * @return String representation of the details of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"lunaroddity"},"content":" public String toSavedString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"lunaroddity"},"content":" String done \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"lunaroddity"},"content":" return \"E|\" + done + \"|\" + this.description + \"|\" + this.startDateTime + \"|\" + this.endDateTime +\"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lunaroddity":81}},{"path":"src/main/java/bareum/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.AddDeadlineCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.AddEventCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.AddTodoCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.ByeCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.FindCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.IncorrectCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" * This class implements the parser which deals with interpreting the user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" public Parser() {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" * Parse the user input and create the corresponding command to execute.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" * @param input Details of task user inputs","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" * @return An executable command with the details input by the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" * @throws BareumException If input is incorrect.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" static Command parse(String input) throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" String[] commandInputs \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" if (commandInputs[0].equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new ByeCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" } else if (commandInputs[0].equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new ListCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":" } else if (commandInputs[0].equals(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":" if (commandInputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please give the index of the task you would like to mark.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: mark \u003cindex\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"lunaroddity"},"content":" int inputIndex;","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"lunaroddity"},"content":" inputIndex \u003d Integer.parseInt(commandInputs[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"lunaroddity"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"lunaroddity"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please give an integer as the index of the task\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"lunaroddity"},"content":" \"you would like to delete.\\nCorrect format: delete \u003cindex\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"lunaroddity"},"content":" int index \u003d inputIndex - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new MarkCommand(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"lunaroddity"},"content":" } else if (commandInputs[0].equals(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"lunaroddity"},"content":" if (commandInputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please give the index of the task you would like to unmark.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: unmark \u003cindex\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"lunaroddity"},"content":" int inputIndex;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"lunaroddity"},"content":" inputIndex \u003d Integer.parseInt(commandInputs[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"lunaroddity"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"lunaroddity"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please give an integer as the index of the task\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"lunaroddity"},"content":" \"you would like to delete.\\nCorrect format: delete \u003cindex\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"lunaroddity"},"content":" int index \u003d inputIndex - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new UnmarkCommand(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"lunaroddity"},"content":" } else if (commandInputs[0].equals(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"lunaroddity"},"content":" if (commandInputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please give the index of the task you would like to delete.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: delete \u003cindex\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"lunaroddity"},"content":" int inputIndex;","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"lunaroddity"},"content":" inputIndex \u003d Integer.parseInt(commandInputs[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"lunaroddity"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"lunaroddity"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please give an integer as the index of the task\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"lunaroddity"},"content":" \"you would like to delete.\\nCorrect format: delete \u003cindex\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"lunaroddity"},"content":" int index \u003d inputIndex - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new DeleteCommand(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"lunaroddity"},"content":" } else if (commandInputs[0].equals(\"find\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"lunaroddity"},"content":" if (commandInputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please give the keyword you would like to search for.\\n\" +","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: find \u003ckeyword\u003e\");","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new FindCommand(commandInputs[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"lunaroddity"},"content":" } else if (commandInputs[0].equals(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"lunaroddity"},"content":" if (commandInputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the description of your todo :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: todo \u003cdescription\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new AddTodoCommand(commandInputs[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"lunaroddity"},"content":" } else if (commandInputs[0].equals(\"deadline\")){","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"lunaroddity"},"content":" if (commandInputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! The details of your deadline are missing :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"lunaroddity"},"content":" \"\\nCorrect format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"lunaroddity"},"content":" String allDetails \u003d commandInputs[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"lunaroddity"},"content":" int indexOfKeywordBy \u003d allDetails.indexOf(\"/by\");","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"lunaroddity"},"content":" if (indexOfKeywordBy \u003d\u003d -1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the due date of your deadline :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"lunaroddity"},"content":" \"\\nCorrect format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"lunaroddity"},"content":" } else if (indexOfKeywordBy \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the description of your deadline :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"lunaroddity"},"content":" String[] descriptionDueTime \u003d allDetails.split(\"/by\");","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"lunaroddity"},"content":" String description \u003d descriptionDueTime[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"lunaroddity"},"content":" if (descriptionDueTime.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the due date of your deadline :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"lunaroddity"},"content":" String dueDate \u003d descriptionDueTime[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new AddDeadlineCommand(description, dueDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"lunaroddity"},"content":" } else if (commandInputs[0].equals(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"lunaroddity"},"content":" if (commandInputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"The details of your event are missing :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"lunaroddity"},"content":" \"\\nCorrect format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"lunaroddity"},"content":" String allDetails \u003d commandInputs[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"lunaroddity"},"content":" int indexOfKeywordFrom \u003d allDetails.indexOf(\"/from\");","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"lunaroddity"},"content":" if (indexOfKeywordFrom \u003d\u003d -1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the start time of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"lunaroddity"},"content":" } else if (indexOfKeywordFrom \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the description of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"lunaroddity"},"content":" String[] descriptionStartEndTime \u003d allDetails.split(\"/from\");","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"lunaroddity"},"content":" String description \u003d descriptionStartEndTime[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"lunaroddity"},"content":" int indexOfKeywordTo \u003d descriptionStartEndTime[1].indexOf(\"/to\");","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"lunaroddity"},"content":" if (indexOfKeywordTo \u003d\u003d -1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the end time of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"lunaroddity"},"content":" } else if (indexOfKeywordTo \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the start time of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"lunaroddity"},"content":" String[] startEndTime \u003d descriptionStartEndTime[1].split(\"/to\");","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"lunaroddity"},"content":" String startDateTime \u003d startEndTime[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"lunaroddity"},"content":" if (startEndTime.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Oops! Please include the end time of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\");","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"lunaroddity"},"content":" String endDateTime \u003d startEndTime[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new AddEventCommand(description, startDateTime, endDateTime);","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"lunaroddity"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"lunaroddity"},"content":" cmd \u003d new IncorrectCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"lunaroddity"},"content":" return cmd;","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":171}},{"path":"src/main/java/bareum/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" * This class implements the thing that loads and saves tasks to the hard disk.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" * File path of the file to load tasks from and save tasks to.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" private String filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" * The file to load tasks from and save tasks to.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" private File storedTasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" * Creates an instance of the Storage class for loading and saving tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" * @param filePath File path of the file to load tasks from and save tasks to.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" * Loads tasks saved on the hard disk using the file path.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" * @param taskList Task list to load the tasks to.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" public void loadSavedTaskList(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" File storedTasks \u003d new File(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" if (!storedTasks.exists()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":" storedTasks.getParentFile().mkdirs();","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":" storedTasks.createNewFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"lunaroddity"},"content":" this.storedTasks \u003d storedTasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"lunaroddity"},"content":" StringBuilder savedTasks \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"lunaroddity"},"content":" int currChar;","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"lunaroddity"},"content":" FileReader fr \u003d new FileReader(storedTasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"lunaroddity"},"content":" while ((currChar \u003d fr.read()) !\u003d -1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"lunaroddity"},"content":" savedTasks.append((char) currChar);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"lunaroddity"},"content":" String[] allTaskInputs \u003d savedTasks.toString(). split(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"lunaroddity"},"content":" for (int i \u003d 0; i \u003c allTaskInputs.length; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"lunaroddity"},"content":" String[] taskInputs \u003d allTaskInputs[i].split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"lunaroddity"},"content":" if (taskInputs[0].equals(\"T\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"lunaroddity"},"content":" taskList.addTask(TodoTask.makeTodo(taskInputs));","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"lunaroddity"},"content":" } else if (taskInputs[0].equals(\"D\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"lunaroddity"},"content":" taskList.addTask(DeadlineTask.makeDeadline(taskInputs));","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"lunaroddity"},"content":" // enum: done not done to prevent invalid input","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"lunaroddity"},"content":" } else if (taskInputs[0].equals(\"E\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"lunaroddity"},"content":" taskList.addTask(EventTask.makeEvent(taskInputs));","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"lunaroddity"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"lunaroddity"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"lunaroddity"},"content":" * Save a single task to the hard disk.","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"lunaroddity"},"content":" * @param newTask Task to save to the hard disk.","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"lunaroddity"},"content":" public void saveNewTask(Task newTask) {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"lunaroddity"},"content":" FileWriter fw \u003d new FileWriter(storedTasks, true);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"lunaroddity"},"content":" fw.write(newTask.toSavedString());","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"lunaroddity"},"content":" fw.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"lunaroddity"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"lunaroddity"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"lunaroddity"},"content":" * Save all the tasks from the task list into the hard disk.","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"lunaroddity"},"content":" * @param taskList Task list to save the tasks from.","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"lunaroddity"},"content":" public void saveAllTasks(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"lunaroddity"},"content":" FileWriter fw \u003d new FileWriter(storedTasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"lunaroddity"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"lunaroddity"},"content":" fw.write(taskList.get(i).toSavedString());","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"lunaroddity"},"content":" fw.flush();","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"lunaroddity"},"content":" fw.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"lunaroddity"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"lunaroddity"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":101}},{"path":"src/main/java/bareum/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":" * This class implements a task that has a description and completion status.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" * Description of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" * Completion status of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" boolean isDone;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" * Create a new task with the corresponding completion status and description.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" * @param isDone Completion status of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" public Task(boolean isDone, String description) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" * Mark a task as completed.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" * Unmark a task as completed.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" public void unmarkAsDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":" * Gets an icon representation of the completion status of a task.","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":" * @return An icon representation of the completion status of a task.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"lunaroddity"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"lunaroddity"},"content":" return isDone ? \"X\" : \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"lunaroddity"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"lunaroddity"},"content":" return this.description;","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"lunaroddity"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"lunaroddity"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"lunaroddity"},"content":" * Create a string representation of the details of the task for saving into the hard disk.","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"lunaroddity"},"content":" * @return String representation of the details of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"lunaroddity"},"content":" public String toSavedString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"lunaroddity"},"content":" return this.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lunaroddity":64}},{"path":"src/main/java/bareum/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"public class TaskList {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":" ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" public TaskList() {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" public int size() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" return this.taskList.get(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" public void markAsDone(int index) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" this.taskList.get(index).markAsDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" public void unmarkAsDone(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" this.taskList.get(index).unmarkAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" this.taskList.remove(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lunaroddity":35}},{"path":"src/main/java/bareum/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":" * This class implements a todo with a description.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"public class TodoTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" * Creates a new todo using the input completion status and description.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" * @param isDone Completion status of todo.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" * @param description Description of todo.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" private TodoTask(boolean isDone, String description) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" super(isDone, description);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" * Creates a new todo using the input from the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" * @param description Description of the todo","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" * @return New uncompleted todo with the corresponding description.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" * @throws BareumException If description is empty.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" static public TodoTask makeTodo(String description) throws BareumException {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" if (description.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" throw new BareumException(\"Todo description cannot be empty.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" return new TodoTask(false, description);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" * Creates a new todo using the input from a saved todo.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" * @param taskInputs Type, completion status, description and due date of the saved task.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" * @return New todo with the corresponding description.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" static public TodoTask makeTodo(String[] taskInputs) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" boolean isDone \u003d taskInputs[0].equals(\"1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":" return new TodoTask(isDone, taskInputs[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"lunaroddity"},"content":" return \"[T][\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"lunaroddity"},"content":" * Create a string representation of the details of the todo for saving into the hard disk.","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"lunaroddity"},"content":" * @return String representation of the details of the todo.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"lunaroddity"},"content":" public String toSavedString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"lunaroddity"},"content":" String done \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"lunaroddity"},"content":" return \"T|\" + done + \"|\" + this.description + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lunaroddity":55}},{"path":"src/main/java/bareum/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":" * This class implements the thing that manages interactions with the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" * Scanner that reads in the user\u0027s input.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" private static Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" * Get the details of the task the user wants to create.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" * @return Details of the task the user wants to create.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" String getUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" * Print out Bareum\u0027s reply to the user\u0027s input.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" * @param reply Bareum\u0027s reply to the user\u0027s input.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" public static void reply(String reply) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" String botName \u003d \"Bareum: \";","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" String fullReply \u003d botName + reply;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" System.out.println(fullReply);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" * Prints out the message introducing Bareum to the user upon opening the chat.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":" public void showWelcomeMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":" reply(\"Hello! I\u0027m Bareum! What can I do for you? ^^\");","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"lunaroddity"},"content":" * Prints out the message bidding the user farewell upon closing the chat.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"lunaroddity"},"content":" public void showGoodbyeMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"lunaroddity"},"content":" reply(\"Bye! Hope to see you again soon ^^\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"lunaroddity"},"content":" * Prints out a line in the chat.","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"lunaroddity"},"content":" public void showLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"lunaroddity"},"content":" System.out.println(\"________________________\");","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":55}},{"path":"src/main/java/bareum/commands/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.BareumException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.DeadlineTask;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" * This class implements the command for creating a new deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" * Description of the deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" private String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" * Due date of the deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" private String dueDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" * Create a new instance of a command that creates a deadline with the corresponding details when executed.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" * @param description Description of the deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" * @param dueDate Due date of the deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" public AddDeadlineCommand(String description, String dueDate) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" * Create a new deadline with the corresponding description and due date.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" * @param ui Lets the user know if the creation of the deadline was successful.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" * @param storage Saves the deadline to the hard disk after creating it.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":" * @param taskList Task list to add the deadline to.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":" * @throws BareumException If due date is not in YYYY-MM-DD format.","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) throws BareumException {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"lunaroddity"},"content":" DeadlineTask task \u003d DeadlineTask.makeDeadline(this.description, this.dueDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"lunaroddity"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"lunaroddity"},"content":" storage.saveNewTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"lunaroddity"},"content":" String added \u003d \"I have added this task:\\n\" + task + \"\\nYou now have \"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"lunaroddity"},"content":" + taskList.size() + \" task(s) in your list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(added);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":54}},{"path":"src/main/java/bareum/commands/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.EventTask;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" * This class implements the command for creating a new event.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" * Description of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" private String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" * Start date and time of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" private String startDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" * End date and time of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" private String endDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" * Create a new instance of a command that creates an event with the corresponding details when executed.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" * @param startDateTime Start date and time of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" * @param endDateTime End date and time of the event.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" public AddEventCommand(String description, String startDateTime,","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" String endDateTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" this.startDateTime \u003d startDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" this.endDateTime \u003d endDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":" * Create a new event with the corresponding description and start and end date and time.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" * @param ui Lets the user know if the creation of the event was successful.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":" * @param storage Saves the event to the hard disk after creating it.","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":" * @param taskList Task list to add the event to.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"lunaroddity"},"content":" EventTask task \u003d EventTask.makeEvent(this.description, this.startDateTime, this.endDateTime);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"lunaroddity"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"lunaroddity"},"content":" storage.saveNewTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"lunaroddity"},"content":" String added \u003d \"I have added this task:\\n\" + task + \"\\nYou now have \"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"lunaroddity"},"content":" + taskList.size() + \" task(s) in your list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(added);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":54}},{"path":"src/main/java/bareum/commands/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.BareumException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.TodoTask;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" * This class implements the command for creating a new todo.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":"public class AddTodoCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" * Description of the todo.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" String description;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" * Create a new instance of a command that creates a todo with the corresponding description when executed.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" * @param description Description of the todo.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" public AddTodoCommand(String description) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" * Create a new todo with the corresponding description.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" * @param ui Lets the user know if the creation of the todo was successful.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" * @param storage Saves the event to the hard disk after creating it.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" * @param taskList Task list to add the event to.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" TodoTask task \u003d TodoTask.makeTodo(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":" storage.saveNewTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":" String added \u003d \"I have added this task:\\n\" + task + \"\\nYou now have \"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" + taskList.size() + \" task(s) in your list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(added);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(\"Oops! The description of a todo cannot be empty.\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: todo \u003cdescription\u003e\");","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":47}},{"path":"src/main/java/bareum/commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" * This class implements the command for exiting the program.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" public ByeCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" * Exit the program.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" * @param ui Lets the user know if the exit was successful.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" * @param storage Saves all the tasks in the task list to the hard disk.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" * @param taskList Task list to save the tasks from.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" storage.saveAllTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" ui.showGoodbyeMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":27}},{"path":"src/main/java/bareum/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.BareumException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" * A command related to tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" public abstract void execute(Ui ui, Storage storage, TaskList taskList) throws BareumException;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":14}},{"path":"src/main/java/bareum/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.BareumException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" * This class implements the command for deleting a task from the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" * Index of task to delete.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" private int index;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" * Create a new instance of a command that deletes the task at the corresponding index when executed.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" * @param index Index of task to delete.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" * Delete the task at the corresponding index.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" * @param ui Lets the user know if the deletion was successful.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" * @param storage Saves the remaining tasks to the hard disk.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" * @param taskList Task list to delete the task from.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" String deletedTask \u003d taskList.get(index).toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" taskList.delete(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" storage.saveAllTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":" // exception for if index doesn\u0027t exist","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(\"Okay, I\u0027ve deleted this task from the list:\\n\" + deletedTask","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" + \"\\nYou now have \" + taskList.size() + \" tasks in your list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":42}},{"path":"src/main/java/bareum/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" * This class implements the command for finding and listing all the tasks containing the keyword specified by the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" * Keyword user is searching for.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" private String keyword;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" * Create a new instance of a command that finds and lists all the tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" * containing the keyword specified by the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" * @param keyword Keyword user is searching for.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(\"Here are the matching tasks in your list!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" if (taskList.get(i).getDescription().contains(this.keyword)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" System.out.println((i + 1) + \". \" + taskList.get(i).toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"lunaroddity":33}},{"path":"src/main/java/bareum/commands/IncorrectCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.BareumException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" * This class implements the command for invalid inputs.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"public class IncorrectCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" public IncorrectCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" * Informs the user that their input was invalid","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" * @param ui Lets the user know that their input was invalid.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" * @param storage Storage is not used in this method.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" * @param taskList Task list is not used in this method.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" * @throws BareumException If user input was invalid.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) throws BareumException {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(\"Oops! I\u0027m sorry but I don\u0027t know what that means :(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":27}},{"path":"src/main/java/bareum/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" * This class implements the command for listing out all the tasks in the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" * List all the tasks in the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" * @param ui Lists all the tasks in the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" * @param storage Storage is not used in this method.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" * @param taskList Task list to list tasks from.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(\"Here are your current tasks!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" System.out.println((i + 1) + \". \" + taskList.get(i).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":27}},{"path":"src/main/java/bareum/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" * This class implements the command for marking a task from the task list as completed.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" * Index of task to mark as completed.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" private int index;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" * Create a new instance of a command that marks the task at the corresponding index as completed when executed.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" * @param index Index of task to mark as completed.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" * Marks the task at the corresponding index as completed.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" * @param ui Lets the user know if the marking as completed was successful.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" * @param storage Saves the updated task to the hard disk.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" * @param taskList Task list to retrieve the task from.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" taskList.markAsDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" storage.saveAllTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(\"Well done! I\u0027ve marked this task as done:\\n\" + taskList.get(index).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":38}},{"path":"src/main/java/bareum/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum.commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import bareum.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import bareum.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import bareum.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" * This class implements the command for marking a task from the task list as not completed.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" * Index of task to mark as uncompleted.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" private int index;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":" * Create a new instance of a command that marks the task at the corresponding index as uncompleted when executed.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" * @param index Index of task to mark as uncompleted.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" * Marks the task at the corresponding index as uncompleted.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" * @param ui Lets the user know if the marking as uncompleted was successful.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" * @param storage Saves the updated task to the hard disk.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" * @param taskList Task list to retrieve the task from.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" public void execute(Ui ui, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" taskList.unmarkAsDone(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" storage.saveAllTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" Ui.reply(\"Okay, I\u0027ve marked this task as not done yet:\\n\" + taskList.get(index).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lunaroddity":37}},{"path":"src/test/java/bareum/EventTaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"public class EventTaskTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":" public void makeEvent_stringCorrectDetails_success() {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":" EventTask task \u003d EventTask.makeEvent(\"project meeting\", \"Mon 2pm\", \"4pm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":" assertNotNull(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"project meeting\", task.getDescription());","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Mon 2pm\", task.getStartDateTime() );","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"4pm\", task.getEndDateTime());","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" public void makeEvent_stringArrayCorrectInputs_success() {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" String[] taskInputs \u003d {\"E\", \"1\", \"project meeting\", \"Mon 2pm\", \"4pm\"};","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" EventTask task \u003d EventTask.makeEvent(taskInputs);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" assertNotNull(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"project meeting\", task.getDescription());","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Mon 2pm\", task.getStartDateTime() );","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"4pm\", task.getEndDateTime());","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lunaroddity":27}},{"path":"src/test/java/bareum/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"package bareum;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.AddDeadlineCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.AddEventCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.AddTodoCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.ByeCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.DeleteCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.IncorrectCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.ListCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.MarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":"import bareum.commands.UnmarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lunaroddity"},"content":" public void parse_bye_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lunaroddity"},"content":" assertEquals(ByeCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lunaroddity"},"content":" public void parse_list_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lunaroddity"},"content":" assertEquals(ListCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"lunaroddity"},"content":" public void parse_markWithIndex_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"mark 1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lunaroddity"},"content":" assertEquals(MarkCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"lunaroddity"},"content":" public void parse_markWithoutIndex_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"mark\");","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"lunaroddity"},"content":" fail();","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please give the index of the task you would like to mark.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: mark \u003cindex\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"lunaroddity"},"content":" public void parse_unmarkeithIndex_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"unmark 1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"lunaroddity"},"content":" assertEquals(UnmarkCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"lunaroddity"},"content":" public void parse_unmarkWithoutIndex_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"unmark\");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"lunaroddity"},"content":" fail();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please give the index of the task you would like to unmark.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: unmark \u003cindex\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"lunaroddity"},"content":" public void parse_deleteWithIndex_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"delete 1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"lunaroddity"},"content":" assertEquals(DeleteCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"lunaroddity"},"content":" public void parse_deleteWithoutIndex_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"delete\");","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"lunaroddity"},"content":" fail();","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please give the index of the task you would like to delete.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: delete \u003cindex\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"lunaroddity"},"content":" public void parse_todo_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"todo borrow book\");","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"lunaroddity"},"content":" assertEquals(AddTodoCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"lunaroddity"},"content":" public void parse_todoMissingDescription_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"todo\");","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"lunaroddity"},"content":" fail();","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the description of your todo :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: todo \u003cdescription\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"lunaroddity"},"content":" public void parse_deadline_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"deadline return book /by 2023-09-02\");","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"lunaroddity"},"content":" assertEquals(AddDeadlineCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"lunaroddity"},"content":" public void parse_deadlineMissingDetails_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"deadline\");","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! The details of your deadline are missing :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"lunaroddity"},"content":" \"\\nCorrect format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"lunaroddity"},"content":" public void parse_deadlineMissingDescription_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"deadline /by 2023-09-02\");","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the description of your deadline :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"lunaroddity"},"content":" public void parse_deadlineMissingByDueDate_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"deadline return book\");","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the due date of your deadline :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"lunaroddity"},"content":" \"\\nCorrect format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"lunaroddity"},"content":" public void parse_deadlineWithByMissingDueDate_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"deadline return book /by\");","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the due date of your deadline :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: deadline \u003cdescription\u003e /by \u003cdue date in YYYY-MM-DD\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"lunaroddity"},"content":" public void parse_event_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"event project meeting /from Mon 2pm /to 4pm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"lunaroddity"},"content":" assertEquals(AddEventCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"lunaroddity"},"content":" public void parse_eventMissingDetails_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"event\");","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: The details of your event are missing :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"lunaroddity"},"content":" \"\\nCorrect format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"lunaroddity"},"content":" public void parse_eventMissingDescription_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"event /from Mon 2pm /to 4pm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the description of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"lunaroddity"},"content":" public void parse_eventMissingFromStartTime_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"event project meeting /to 4pm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the start time of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"lunaroddity"},"content":" public void parse_eventWithFromMissingStartTime_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":182,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":183,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"event project meeting /from /to 4pm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":184,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":185,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the start time of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":186,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":187,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":188,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":189,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":190,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":191,"author":{"gitId":"lunaroddity"},"content":" public void parse_eventMissingToEndTime_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":192,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":193,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"event project meeting /from Mon 2pm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":194,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":195,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the end time of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":196,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":197,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":198,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":199,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":200,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":201,"author":{"gitId":"lunaroddity"},"content":" public void parse_eventWithToMissingEndTime_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":202,"author":{"gitId":"lunaroddity"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":203,"author":{"gitId":"lunaroddity"},"content":" Parser.parse(\"event project meeting /from Mon 2pm /to\");","lastModifiedDate":"2023-09-05"},{"lineNumber":204,"author":{"gitId":"lunaroddity"},"content":" } catch (BareumException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":205,"author":{"gitId":"lunaroddity"},"content":" assertEquals(\"Bareum: Oops! Please include the end time of your event :(\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":206,"author":{"gitId":"lunaroddity"},"content":" \"Correct format: event \u003cdescription\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":207,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":208,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":209,"author":{"gitId":"lunaroddity"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":210,"author":{"gitId":"lunaroddity"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":211,"author":{"gitId":"lunaroddity"},"content":" public void parse_incorrectCommand_success() throws BareumException {","lastModifiedDate":"2023-09-05"},{"lineNumber":212,"author":{"gitId":"lunaroddity"},"content":" Command cmd \u003d Parser.parse(\"blah\");","lastModifiedDate":"2023-09-05"},{"lineNumber":213,"author":{"gitId":"lunaroddity"},"content":" assertEquals(IncorrectCommand.class, cmd.getClass());","lastModifiedDate":"2023-09-05"},{"lineNumber":214,"author":{"gitId":"lunaroddity"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":215,"author":{"gitId":"lunaroddity"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lunaroddity":215}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lunaroddity"},"content":"todo borrow book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"lunaroddity"},"content":"deadline return book /by 2023-09-02","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"lunaroddity"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"lunaroddity"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"lunaroddity"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"lunaroddity"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"lunaroddity"},"content":"mark 3","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"lunaroddity"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"lunaroddity"},"content":"unmark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"lunaroddity"},"content":"delete 2","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"lunaroddity"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"lunaroddity"},"content":"todo","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"lunaroddity"},"content":"deadline","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"lunaroddity"},"content":"event","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"lunaroddity"},"content":"blah","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"lunaroddity"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"lunaroddity":17}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"lunaroddity"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\bareum\\*.java","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"lunaroddity"},"content":"java -classpath ..\\bin bareum.Bareum \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"lunaroddity":2,"-":19}}] diff --git a/lunaroddity_ip_master/commits.json b/lunaroddity_ip_master/commits.json index 6b82a33f..04ef28c1 100644 --- a/lunaroddity_ip_master/commits.json +++ b/lunaroddity_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"lunaroddity":[{"date":"2023-08-24","commitResults":[{"hash":"cfb90cfbae124a326783fd04ff5f7be3fb5213fd","isMergeCommit":false,"messageTitle":"Rename chatbot to Bareum, add greetings","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}},{"hash":"69a98b60931b86299b55c90c78f376aac0e515ee","isMergeCommit":false,"messageTitle":"Add echo command, add exit when user types bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":17}}},{"hash":"531db0b15fb76b0e8e717f1493cd891d02ca0187","isMergeCommit":false,"messageTitle":"Add TaskList and Task classes, add add task and list tasks features","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":9}}},{"hash":"c0ba21279b6d8ca5284da358910eafb7223ed277","isMergeCommit":false,"messageTitle":"Add mark as done and mark as undone features","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":9}}},{"hash":"8c26f94db9585f45589eace485409cdfc4add425","isMergeCommit":false,"messageTitle":"Add ToDos, Events and Deadlines types","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":7}}}]},{"date":"2023-08-26","commitResults":[{"hash":"6a8837fc146ab45da9031109127cce28b891ee0c","isMergeCommit":false,"messageTitle":"Add Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"4cb6dc84a34233667c7b592a64219e02543a4fba","isMergeCommit":false,"messageTitle":"Add error handling for all task types","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":56,"deletions":60}}},{"hash":"b110f142e810b67c5a3acba9e1b38c8a280ccecd","isMergeCommit":false,"messageTitle":"Add delete task feature","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":11,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"964972ab8c0dcf238955b8823e749baa7ce04bb3","isMergeCommit":false,"messageTitle":"Add save feature","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":25}}}]},{"date":"2023-09-02","commitResults":[{"hash":"81f1350a9c12ab30bcb1742d42f66f66155af244","isMergeCommit":true,"messageTitle":"Merge pull request #1 from lunaroddity/branch-Level-7","messageBody":"Add save feature","fileTypesAndContributionMap":{}},{"hash":"78a845018e4de0b732a68541925d5ea588fb8b72","isMergeCommit":false,"messageTitle":"Change DeadlineTask dates to java.time.LocalDate","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":30,"deletions":11}}},{"hash":"7f8921a16e78bcbd7da1fb92f5bf90ed34d45e72","isMergeCommit":true,"messageTitle":"Merge pull request #2 from lunaroddity/branch-Level-8","messageBody":"Change DeadlineTask dates to java.time.LocalDate","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"026beb8207faf5d577eb420d0843a2942cdfad38","isMergeCommit":false,"messageTitle":"Issue reproduction","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":358,"deletions":197}}},{"hash":"8cd91aa1e4dedface2ef3ed572d227e283e476a8","isMergeCommit":false,"messageTitle":"Add Command, Ui, Parser and Storage classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":16}}},{"hash":"a1995b3698ab4552503cd020cbf38bcdd5c44ccd","isMergeCommit":true,"messageTitle":"Merge pull request #3 from lunaroddity/branch-More-OOP","messageBody":"More OOP","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"cdc211f03c99747ef50afb40022f871850c93443","isMergeCommit":false,"messageTitle":"Add bareum and bareum.commands package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":15},"bat":{"insertions":2,"deletions":2}}},{"hash":"f041011944ca656260897e09305a7a906a109e64","isMergeCommit":true,"messageTitle":"Merge pull request #4 from lunaroddity/branch-Packages","messageBody":"Add bareum and bareum.commands package","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"d3f982d4d005aaaecaf916236249e3b5781b5e72","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"70abca5fce44bc7c9aaf4cb34251248554b1ab56","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":385,"deletions":99}}},{"hash":"b1738df47d7024425ec47c3029d0696a345f8308","isMergeCommit":true,"messageTitle":"Merge pull request #5 from lunaroddity/branch-JUnit","messageBody":"Add JUnit tests","fileTypesAndContributionMap":{}},{"hash":"d5728c4683c6d67c68855ba83cf6532136f0f86e","isMergeCommit":false,"messageTitle":"Change shadowJar archiveBaseName and add archiveFileName","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"af9cb95831b90574e30aeb390aaeca226c67f526","isMergeCommit":true,"messageTitle":"Merge pull request #6 from lunaroddity/branch-Jar","messageBody":"Change shadowJar archiveBaseName and add archiveFileName","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"lunaroddity":{"java":932,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":3,"txt":17}},"authorContributionVariance":{"lunaroddity":37164.555},"authorDisplayNameMap":{"lunaroddity":"CS2103T-T10-4 LIM ..XUAN"}} +{"authorDailyContributionsMap":{"lunaroddity":[{"date":"2023-08-24","commitResults":[{"hash":"cfb90cfbae124a326783fd04ff5f7be3fb5213fd","isMergeCommit":false,"messageTitle":"Rename chatbot to Bareum, add greetings","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}},{"hash":"69a98b60931b86299b55c90c78f376aac0e515ee","isMergeCommit":false,"messageTitle":"Add echo command, add exit when user types bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":17}}},{"hash":"531db0b15fb76b0e8e717f1493cd891d02ca0187","isMergeCommit":false,"messageTitle":"Add TaskList and Task classes, add add task and list tasks features","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":9}}},{"hash":"c0ba21279b6d8ca5284da358910eafb7223ed277","isMergeCommit":false,"messageTitle":"Add mark as done and mark as undone features","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":9}}},{"hash":"8c26f94db9585f45589eace485409cdfc4add425","isMergeCommit":false,"messageTitle":"Add ToDos, Events and Deadlines types","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":7}}}]},{"date":"2023-08-26","commitResults":[{"hash":"6a8837fc146ab45da9031109127cce28b891ee0c","isMergeCommit":false,"messageTitle":"Add Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"4cb6dc84a34233667c7b592a64219e02543a4fba","isMergeCommit":false,"messageTitle":"Add error handling for all task types","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":56,"deletions":60}}},{"hash":"b110f142e810b67c5a3acba9e1b38c8a280ccecd","isMergeCommit":false,"messageTitle":"Add delete task feature","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":11,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"964972ab8c0dcf238955b8823e749baa7ce04bb3","isMergeCommit":false,"messageTitle":"Add save feature","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":25}}}]},{"date":"2023-09-02","commitResults":[{"hash":"81f1350a9c12ab30bcb1742d42f66f66155af244","isMergeCommit":true,"messageTitle":"Merge pull request #1 from lunaroddity/branch-Level-7","messageBody":"Add save feature","fileTypesAndContributionMap":{}},{"hash":"78a845018e4de0b732a68541925d5ea588fb8b72","isMergeCommit":false,"messageTitle":"Change DeadlineTask dates to java.time.LocalDate","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":30,"deletions":11}}},{"hash":"7f8921a16e78bcbd7da1fb92f5bf90ed34d45e72","isMergeCommit":true,"messageTitle":"Merge pull request #2 from lunaroddity/branch-Level-8","messageBody":"Change DeadlineTask dates to java.time.LocalDate","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"026beb8207faf5d577eb420d0843a2942cdfad38","isMergeCommit":false,"messageTitle":"Issue reproduction","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":358,"deletions":197}}},{"hash":"8cd91aa1e4dedface2ef3ed572d227e283e476a8","isMergeCommit":false,"messageTitle":"Add Command, Ui, Parser and Storage classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":16}}},{"hash":"a1995b3698ab4552503cd020cbf38bcdd5c44ccd","isMergeCommit":true,"messageTitle":"Merge pull request #3 from lunaroddity/branch-More-OOP","messageBody":"More OOP","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"cdc211f03c99747ef50afb40022f871850c93443","isMergeCommit":false,"messageTitle":"Add bareum and bareum.commands package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":15},"bat":{"insertions":2,"deletions":2}}},{"hash":"f041011944ca656260897e09305a7a906a109e64","isMergeCommit":true,"messageTitle":"Merge pull request #4 from lunaroddity/branch-Packages","messageBody":"Add bareum and bareum.commands package","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"d3f982d4d005aaaecaf916236249e3b5781b5e72","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"70abca5fce44bc7c9aaf4cb34251248554b1ab56","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":385,"deletions":99}}},{"hash":"b1738df47d7024425ec47c3029d0696a345f8308","isMergeCommit":true,"messageTitle":"Merge pull request #5 from lunaroddity/branch-JUnit","messageBody":"Add JUnit tests","fileTypesAndContributionMap":{}},{"hash":"d5728c4683c6d67c68855ba83cf6532136f0f86e","isMergeCommit":false,"messageTitle":"Change shadowJar archiveBaseName and add archiveFileName","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"af9cb95831b90574e30aeb390aaeca226c67f526","isMergeCommit":true,"messageTitle":"Merge pull request #6 from lunaroddity/branch-Jar","messageBody":"Change shadowJar archiveBaseName and add archiveFileName","fileTypesAndContributionMap":{}},{"hash":"daf70e089391ce921034c01bb2173b00e4024061","isMergeCommit":false,"messageTitle":"Add JavaDocs to all methods and classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":380,"deletions":12}}},{"hash":"6fcb0b096391267ca527ecc6e529a5b663f51ea0","isMergeCommit":false,"messageTitle":"Adhere to coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":7}}}]},{"date":"2023-09-06","commitResults":[{"hash":"136f28db449dc1271c896407d9f16af14a3f3d96","isMergeCommit":false,"messageTitle":"Add find feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":0}}},{"hash":"81b0d098a7784305127a16a25699657ddb4a1fd5","isMergeCommit":true,"messageTitle":"Merge pull request #7 from lunaroddity/branch-A-JavaDoc","messageBody":"Add JavaDocs to all methods and classes","fileTypesAndContributionMap":{}},{"hash":"e3768b40ce994857076f5efab3ebcc31246d24a8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ac7a78177b9c20f4a169baac6d5eb03de10d6a07","isMergeCommit":true,"messageTitle":"Merge pull request #8 from lunaroddity/branch-A-CodingStandard","messageBody":"Adhere to coding standard","fileTypesAndContributionMap":{}},{"hash":"1e747b88441aa265920940e86c348106863c34b8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fae179269c180aa4b0b6fb0d8ab02f97b569058c","isMergeCommit":true,"messageTitle":"Merge pull request #9 from lunaroddity/branch-Level-9","messageBody":"Add find feature","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"lunaroddity":{"java":1364,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":3,"txt":17}},"authorContributionVariance":{"lunaroddity":60898.04},"authorDisplayNameMap":{"lunaroddity":"CS2103T-T10-4 LIM ..XUAN"}} diff --git a/lyuanww_ip_master/authorship.json b/lyuanww_ip_master/authorship.json index 73c83cd4..80f7fc73 100644 --- a/lyuanww_ip_master/authorship.json +++ b/lyuanww_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":"lyuanww"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"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":"lyuanww"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":"checkstyle {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"lyuanww":6,"-":42}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" * Duke is a task management application that allows users to manage tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":" * by adding, marking as done, deleting, and listing tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" private final String name;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" * Constructs a Duke object.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" * @param name The name of the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" * @param filePath The path to the file used for storing tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" public Duke(String name, String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" storage.loadTasks(this.taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" * The main method that initializes and runs the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" * @param args Command-line arguments (not used in this context).","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" Duke duke \u003d new Duke(\"Duke\", \"src/main/java/resource/duke.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" duke.run();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"lyuanww"},"content":" * Handles the user input and performs corresponding actions.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":" * @param input The user\u0027s input command.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"lyuanww"},"content":" public void handleInput(String input) {","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"lyuanww"},"content":" String[] inputArr \u003d input.split(\" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"lyuanww"},"content":" String command \u003d inputArr[0];","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"lyuanww"},"content":" switch (command) {","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"lyuanww"},"content":" case \"list\":","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"lyuanww"},"content":" this.taskList.showAllTasks(this.ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"lyuanww"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"lyuanww"},"content":" case \"mark\":","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"lyuanww"},"content":" int markTaskNumber \u003d Parser.parseInt(inputArr[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"lyuanww"},"content":" this.taskList.markTaskAsDone(markTaskNumber, this.storage, this.ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"lyuanww"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"lyuanww"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"lyuanww"},"content":" int unmarkTaskNumber \u003d Parser.parseInt(inputArr[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"lyuanww"},"content":" this.taskList.unmarkTaskAsDone(unmarkTaskNumber, this.storage, this.ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"lyuanww"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"lyuanww"},"content":" case \"todo\":","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"lyuanww"},"content":" String todoDescription \u003d Parser.validateToDoCommand(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"lyuanww"},"content":" this.taskList.addTask(todoDescription, this.storage, this.ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"lyuanww"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"lyuanww"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"lyuanww"},"content":" String deadlineDescription \u003d Parser.validateDeadlineCommand(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"lyuanww"},"content":" this.taskList.addTask(deadlineDescription, this.storage, this.ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"lyuanww"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"lyuanww"},"content":" case \"event\":","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"lyuanww"},"content":" String eventDescription \u003d Parser.validateEventCommand(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"lyuanww"},"content":" this.taskList.addTask(eventDescription, this.storage, this.ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"lyuanww"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"lyuanww"},"content":" case \"delete\":","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"lyuanww"},"content":" int deleteTaskNumber \u003d Parser.parseInt(inputArr[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"lyuanww"},"content":" this.taskList.deleteTask(deleteTaskNumber, this.storage, this.ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"lyuanww"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"lyuanww"},"content":" case \"find\":","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"lyuanww"},"content":" String keyword \u003d input.replace(\"find\", \"\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"lyuanww"},"content":" this.taskList.findTasks(keyword, this.ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"lyuanww"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"lyuanww"},"content":" default:","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":88,"author":{"gitId":"lyuanww"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":93,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"lyuanww"},"content":" * Runs the Duke application, handling user input and commands.","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"lyuanww"},"content":" public void run() {","lastModifiedDate":"2023-08-22"},{"lineNumber":97,"author":{"gitId":"lyuanww"},"content":" ui.greet(this.name);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"lyuanww"},"content":" String command \u003d ui.readCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"lyuanww"},"content":" while (!command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"lyuanww"},"content":" handleInput(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"lyuanww"},"content":" command \u003d ui.readCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":103,"author":{"gitId":"lyuanww"},"content":" ui.exit();","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":105,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"lyuanww":103,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"lyuanww":7}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.utility.DateParser;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" private final LocalDateTime by;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" * Constructs a Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" * @param name The name or description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" public Deadline(String name, String by) {","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" this.by \u003d DateParser.convertStringToDateTime(by);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" * Converts the Deadline object to its string representation.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" * @return The string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" return \"[D]\" + super.toString() + \" (by: \" + DateParser.convertDateTimeToString(this.by) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" * Converts the Deadline object to a formatted string for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":" * @return The formatted string for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" public String convertTaskToString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" return \"D | \" + (super.isDone() ? \"1\" : \"0\") + \" | \" + super.getName() + \" | \"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":" + DateParser.convertDateTimeToString(this.by);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"lyuanww":43}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.utility.DateParser;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" * Represents an event task with a specified start and end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" * Constructs an Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" * @param name The name or description of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" public Event(String name, String from, String to) {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" this.from \u003d DateParser.convertStringToDateTime(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" this.to \u003d DateParser.convertStringToDateTime(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" * Converts the Event object to its string representation.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" * @return The string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" return \"[E]\" + super.toString() + \" (from: \" + DateParser.convertDateTimeToString(this.from) + \" to: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" + DateParser.convertDateTimeToString(this.to) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" * Converts the Event object to a formatted string for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":" * @return The formatted string for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":" public String convertTaskToString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"lyuanww"},"content":" return \"E | \" + (super.isDone() ? \"1\" : \"0\") + \" | \" + super.getName() + \" | \"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":" + DateParser.convertDateTimeToString(this.from) + \" | \" + DateParser.convertDateTimeToString(this.to);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"lyuanww":47}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":" * Represents a task that can be marked as done or undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" private final String name;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" private boolean done;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" * Constructs a Task object with a specified name.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" * @param name The name or description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" * Marks the task as done and optionally displays a message.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" * @param display Whether to display a message indicating the task was marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" public void markAsDone(boolean display) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" this.done \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" if (display) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"\\nNice! I\u0027ve marked this task as done:\\n \" + this + \"\\n\");","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" * Unmarks the task as done and optionally displays a message.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" * @param display Whether to display a message indicating the task was marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":" public void unmarkAsDone(boolean display) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" if (display) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"\\nNice! I\u0027ve unmarked this task as done:\\n \" + this + \"\\n\");","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":" char markDone \u003d this.done ? \u0027X\u0027 : \u0027 \u0027;","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"lyuanww"},"content":" return \"[\" + markDone + \"] \" + this.name;","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"lyuanww"},"content":" public String getName() {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"lyuanww"},"content":" return this.name;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"lyuanww"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"lyuanww"},"content":" return this.done;","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"lyuanww"},"content":" * Converts the task into a formatted string for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"lyuanww"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"lyuanww"},"content":" public abstract String convertTaskToString();","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"lyuanww":66}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" * Represents a list of tasks and provides methods to manage tasks within the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" * Adds a task to the list based on the task description.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" * @param storage The storage handler to save the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" public void addTask(String taskDescription, Storage storage, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" Task task;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" String[] taskInformation \u003d taskDescription.split(\" /\");","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" String taskName \u003d taskInformation[0].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" if (taskInformation.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" task \u003d new ToDo(taskName);","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" } else if (taskInformation.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" task \u003d new Deadline(taskName, taskInformation[1].replace(\"by \", \"\"));","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" } else if (taskInformation.length \u003d\u003d 3) {","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" task \u003d new Event(taskName, taskInformation[1].replace(\"from \", \"\"), taskInformation[2].replace(\"to \", \"\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(\"Invalid task format\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":" return;","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":" storage.saveTask(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(\"Got it. I\u0027ve added this task:\\n \" + task + \"\\nNow you have \" + this.tasks.size()","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":" + \" task(s) in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"lyuanww"},"content":" * Adds a task directly to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"lyuanww"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"lyuanww"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"lyuanww"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"lyuanww"},"content":" * Deletes a task from the list based on the task number.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"lyuanww"},"content":" * @param taskNumber The number of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"lyuanww"},"content":" * @param storage The storage handler to remove the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"lyuanww"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"lyuanww"},"content":" public void deleteTask(int taskNumber, Storage storage, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"lyuanww"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(\"Task number does not exist\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"lyuanww"},"content":" return;","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"lyuanww"},"content":" Task task \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"lyuanww"},"content":" this.tasks.remove(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"lyuanww"},"content":" storage.deleteTask(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(\"Noted. I\u0027ve removed this task:\\n \" + task + \"\\nNow you have \" + this.tasks.size()","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"lyuanww"},"content":" + \" task(s) in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"lyuanww"},"content":" * Displays all tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"lyuanww"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"lyuanww"},"content":" public void showAllTasks(Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"lyuanww"},"content":" if (this.tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-22"},{"lineNumber":83,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(\"You have no tasks in your list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"lyuanww"},"content":" return;","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":87,"author":{"gitId":"lyuanww"},"content":" System.out.println();","lastModifiedDate":"2023-08-22"},{"lineNumber":88,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":90,"author":{"gitId":"lyuanww"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-08-22"},{"lineNumber":91,"author":{"gitId":"lyuanww"},"content":" System.out.println(i + 1 + \".\" + this.tasks.get(i));","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":93,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":94,"author":{"gitId":"lyuanww"},"content":" System.out.println();","lastModifiedDate":"2023-08-22"},{"lineNumber":95,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":96,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"lyuanww"},"content":" * Marks a task as done based on the task number.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"lyuanww"},"content":" * @param taskNumber The number of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"lyuanww"},"content":" * @param storage The storage handler to update the task status.","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"lyuanww"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"lyuanww"},"content":" public void markTaskAsDone(int taskNumber, Storage storage, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"lyuanww"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(\"Task number does not exist\");","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"lyuanww"},"content":" return;","lastModifiedDate":"2023-08-23"},{"lineNumber":108,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":109,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":110,"author":{"gitId":"lyuanww"},"content":" Task task \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":111,"author":{"gitId":"lyuanww"},"content":" task.markAsDone(true);","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"lyuanww"},"content":" storage.modifyTask(taskNumber, task);","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":114,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":115,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"lyuanww"},"content":" * Marks a task as not done (undone) based on the task number.","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"lyuanww"},"content":" * @param taskNumber The number of the task to be marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"lyuanww"},"content":" * @param storage The storage handler to update the task status.","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"lyuanww"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"lyuanww"},"content":" public void unmarkTaskAsDone(int taskNumber, Storage storage, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"lyuanww"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(\"Task number does not exist\");","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"lyuanww"},"content":" return;","lastModifiedDate":"2023-08-23"},{"lineNumber":126,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":127,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":128,"author":{"gitId":"lyuanww"},"content":" Task task \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":129,"author":{"gitId":"lyuanww"},"content":" task.unmarkAsDone(true);","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"lyuanww"},"content":" storage.modifyTask(taskNumber, task);","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":132,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"lyuanww"},"content":" public void findTasks(String keyword, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"lyuanww"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"lyuanww"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"lyuanww"},"content":" if (task.toString().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"lyuanww"},"content":" foundTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"lyuanww"},"content":" if (foundTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"lyuanww"},"content":" System.out.println();","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(\"No matching tasks found.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"lyuanww"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"lyuanww"},"content":" System.out.println();","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"lyuanww"},"content":" for (int i \u003d 0; i \u003c foundTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"lyuanww"},"content":" System.out.println(i + 1 + \".\" + foundTasks.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"lyuanww"},"content":" System.out.println();","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"lyuanww"},"content":" public int getTaskListSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"lyuanww"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"lyuanww"},"content":" public Task getTask(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"lyuanww"},"content":" return this.tasks.get(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"lyuanww":161}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":" * Represents a task without any specific due date or time.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" * Constructs a ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":" * @param name The name or description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" * Converts the ToDo object to its string representation.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" * @return The string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" * Converts the ToDo object to a formatted string for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" * @return The formatted string for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" public String convertTaskToString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" return \"T | \" + (super.isDone() ? \"1\" : \"0\") + \" | \" + super.getName();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"lyuanww":34}},{"path":"src/main/java/duke/utility/DateParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.utility;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" * A utility class for parsing and formatting date and time strings.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"public class DateParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" * Converts a date and time string to a LocalDateTime object.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" * @param datetime The date and time string to be converted.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" * @return A LocalDateTime object representing the parsed date and time.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" public static LocalDateTime convertStringToDateTime(String datetime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" return LocalDateTime.parse(datetime, formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"Invalid date format. Please enter in the format 01-01-2001 01:01\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" * Converts a LocalDateTime object to a formatted date and time string.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" * @param datetime The LocalDateTime object to be converted.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" * @return A formatted date and time string.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" public static String convertDateTimeToString(LocalDateTime datetime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" return datetime.format(formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lyuanww":38}},{"path":"src/main/java/duke/utility/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.utility;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":" * A utility class for parsing and validating user commands in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" * Validates and extracts the description from a todo command.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" * @param input The user input containing the todo command.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" * @return The description of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" * @throws DukeException If the description is empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" public static String validateToDoCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" String[] inputArr \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" if (inputArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" return input.replace(\"todo\", \"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" * Validates and extracts the description and deadline from a deadline command.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" * @param input The user input containing the deadline command.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" * @return The description of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" * @throws DukeException If the format is invalid or the description is empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" public static String validateDeadlineCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" String[] inputArr \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" if (inputArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":" String[] description \u003d input.replace(\"deadline\", \"\").trim().split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" int index \u003d -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" if (description.length \u003e 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":" for (int i \u003d 0; i \u003c description.length; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":" if (description[i].equals(\"/by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":" index \u003d i;","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"lyuanww"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"lyuanww"},"content":" if (index \u003d\u003d -1 || index \u003d\u003d 0 || index \u003d\u003d description.length - 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"☹ OOPS!!! The format of a deadline is invalid. \"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"lyuanww"},"content":" + \"Format: deadline \u003ctask name\u003e /by \u003cdate\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"lyuanww"},"content":" return input.replace(\"deadline\", \"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"lyuanww"},"content":" * Validates and extracts the description and event timing from an event command.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"lyuanww"},"content":" * @param input The user input containing the event command.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"lyuanww"},"content":" * @return The description of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"lyuanww"},"content":" * @throws DukeException If the format is invalid or the description is empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"lyuanww"},"content":" public static String validateEventCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"lyuanww"},"content":" String[] inputArr \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"lyuanww"},"content":" if (inputArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"lyuanww"},"content":" String[] description \u003d input.replace(\"event\", \"\").trim().split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"lyuanww"},"content":" int fromIndex \u003d -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"lyuanww"},"content":" int toIndex \u003d -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"lyuanww"},"content":" if (description.length \u003e 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"lyuanww"},"content":" for (int i \u003d 0; i \u003c description.length; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"lyuanww"},"content":" if (description[i].equals(\"/from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"lyuanww"},"content":" fromIndex \u003d i;","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"lyuanww"},"content":" if (description[i].equals(\"/to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"lyuanww"},"content":" toIndex \u003d i;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"lyuanww"},"content":" if (fromIndex \u003d\u003d -1 || toIndex \u003d\u003d -1 || fromIndex \u003d\u003d 0 || toIndex \u003d\u003d 0 || fromIndex \u003e\u003d toIndex","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"lyuanww"},"content":" || fromIndex \u003d\u003d description.length - 1 || toIndex \u003d\u003d description.length - 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"☹ OOPS!!! The format of a event is invalid. Format: event \u003ctask name\u003e \"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"lyuanww"},"content":" + \"/from \u003cdate\u003e /to \u003cdate\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"lyuanww"},"content":" return input.replace(\"event\", \"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"lyuanww"},"content":" * Parses an integer from a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"lyuanww"},"content":" * @param input The string to be parsed.","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"lyuanww"},"content":" * @return The parsed integer, or -1 if parsing fails.","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"lyuanww"},"content":" public static int parseInt(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"lyuanww"},"content":" return Integer.parseInt(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"lyuanww"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"☹ OOPS!!! Please enter a valid number\");","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"lyuanww"},"content":" return -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lyuanww":107}},{"path":"src/main/java/duke/utility/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.utility;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" * A class responsible for loading and saving tasks from and to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" private final String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" * @param filePath The path to the file used for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" private static boolean isValidTaskType(String taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" return taskType.equals(\"T\") || taskType.equals(\"D\") || taskType.equals(\"E\");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":" private static boolean isValidDoneFlag(String doneFlag) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" return doneFlag.equals(\"0\") || doneFlag.equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":" private static boolean isValidTaskFormat(String taskType, int taskFormatLength) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":" return (taskType.equals(\"T\") \u0026\u0026 taskFormatLength \u003d\u003d 3) || (taskType.equals(\"D\") \u0026\u0026 taskFormatLength \u003d\u003d 4)","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"lyuanww"},"content":" || (taskType.equals(\"E\") \u0026\u0026 taskFormatLength \u003d\u003d 5);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"lyuanww"},"content":" * Loads tasks from the file and adds them to the provided TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"lyuanww"},"content":" * @param taskList The TaskList to which tasks should be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"lyuanww"},"content":" public void loadTasks(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"lyuanww"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"Loading tasks...\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"lyuanww"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"lyuanww"},"content":" String line;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"lyuanww"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"lyuanww"},"content":" validateString(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"lyuanww"},"content":" Task task \u003d convertStringIntoTask(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"lyuanww"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"lyuanww"},"content":" reader.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"lyuanww"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"File not found. Please create duke.txt in the resource folder\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"lyuanww"},"content":" System.exit(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"lyuanww"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"An error has occured during file loading. Plese check duke.txt in the data folder\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"lyuanww"},"content":" System.exit(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"lyuanww"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"lyuanww"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"lyuanww"},"content":" System.exit(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"Tasks loaded successfully!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"lyuanww"},"content":" * Converts a data string into a Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"lyuanww"},"content":" * @param dataString The string containing task data.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"lyuanww"},"content":" * @return The parsed Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"lyuanww"},"content":" * @throws DukeException If parsing encounters an error.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"lyuanww"},"content":" public Task convertStringIntoTask(String dataString) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"lyuanww"},"content":" String[] dataArr \u003d dataString.split(\" \\\\| \");","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"lyuanww"},"content":" String taskType \u003d dataArr[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"lyuanww"},"content":" boolean isDone \u003d dataArr[1].equals(\"1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"lyuanww"},"content":" String taskName \u003d dataArr[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"lyuanww"},"content":" Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"lyuanww"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"lyuanww"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"lyuanww"},"content":" task \u003d new ToDo(taskName);","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"lyuanww"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"lyuanww"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"lyuanww"},"content":" task \u003d new Deadline(taskName, dataArr[3]);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"lyuanww"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"lyuanww"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"lyuanww"},"content":" task \u003d new Event(taskName, dataArr[3], dataArr[4]);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"lyuanww"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"lyuanww"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"Unexpected error\");","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"lyuanww"},"content":" if (isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"lyuanww"},"content":" task.markAsDone(false);","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"lyuanww"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"lyuanww"},"content":" * Validates a data string to ensure its format is correct.","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"lyuanww"},"content":" * @param dataString The string to be validated.","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"lyuanww"},"content":" * @throws DukeException If the format is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"lyuanww"},"content":" public void validateString(String dataString) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"lyuanww"},"content":" String[] dataArr \u003d dataString.split(\" \\\\| \");","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"lyuanww"},"content":" int dataLength \u003d dataArr.length;","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"lyuanww"},"content":" String taskType \u003d dataArr[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"lyuanww"},"content":" String doneFlag \u003d dataArr[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"lyuanww"},"content":" if (!isValidTaskType(taskType)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"Invalid task type\");","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"lyuanww"},"content":" if (!isValidDoneFlag(doneFlag)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"Invalid done flag\");","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"lyuanww"},"content":" if (!isValidTaskFormat(taskType, dataLength)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"Invalid task format\");","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"lyuanww"},"content":" * Saves a task to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"lyuanww"},"content":" * @param task The task to be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"lyuanww"},"content":" public void saveTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"lyuanww"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"lyuanww"},"content":" java.io.FileWriter fileWriter \u003d new java.io.FileWriter(file, true);","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"lyuanww"},"content":" fileWriter.write(task.convertTaskToString() + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"lyuanww"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"lyuanww"},"content":" } catch (java.io.IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"lyuanww"},"content":" System.exit(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"lyuanww"},"content":" * Modifies an existing task in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"lyuanww"},"content":" * @param taskNumber The index of the task to be modified.","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"lyuanww"},"content":" * @param newTask The new task to replace the existing task.","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"lyuanww"},"content":" public void modifyTask(int taskNumber, Task newTask) {","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"lyuanww"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"lyuanww"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"lyuanww"},"content":" StringBuilder newContents \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"lyuanww"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"lyuanww"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"lyuanww"},"content":" String dataString \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"lyuanww"},"content":" if (count \u003d\u003d taskNumber - 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"lyuanww"},"content":" newContents.append(newTask.convertTaskToString() + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"lyuanww"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"lyuanww"},"content":" newContents.append(dataString + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"lyuanww"},"content":" count++;","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"lyuanww"},"content":" scanner.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"lyuanww"},"content":" FileWriter fileWriter \u003d new FileWriter(file, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"lyuanww"},"content":" fileWriter.write(newContents.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"lyuanww"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"lyuanww"},"content":" } catch (java.io.IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"lyuanww"},"content":" System.exit(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":186,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"lyuanww"},"content":" * Deletes a task from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"lyuanww"},"content":" * @param taskNumber The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"lyuanww"},"content":" public void deleteTask(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":195,"author":{"gitId":"lyuanww"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"lyuanww"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"lyuanww"},"content":" StringBuilder newContents \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"lyuanww"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":199,"author":{"gitId":"lyuanww"},"content":" String line;","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"lyuanww"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"lyuanww"},"content":" if (count !\u003d taskNumber - 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":202,"author":{"gitId":"lyuanww"},"content":" newContents.append(line + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":204,"author":{"gitId":"lyuanww"},"content":" count++;","lastModifiedDate":"2023-08-29"},{"lineNumber":205,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":206,"author":{"gitId":"lyuanww"},"content":" FileWriter fileWriter \u003d new FileWriter(file, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":207,"author":{"gitId":"lyuanww"},"content":" fileWriter.write(newContents.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":208,"author":{"gitId":"lyuanww"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":209,"author":{"gitId":"lyuanww"},"content":" } catch (java.io.IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":210,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":211,"author":{"gitId":"lyuanww"},"content":" System.exit(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":212,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":213,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":214,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":215,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":216,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"lyuanww":216}},{"path":"src/main/java/duke/utility/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.utility;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":" * Handles interaction with the user by providing input and displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" public void echo(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" formatPrintMessage(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" public void greet(String name) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" System.out.println();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" formatPrintMessage(\"Hello! I\u0027m \" + name + \"\\nWhat can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" public void exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" System.out.println();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" formatPrintMessage(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" public void formatPrintMessage(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" System.out.println();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lyuanww":37}},{"path":"src/main/java/resource/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"D | 1 | Buy groceries | 06-03-2007 13:44","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"T | 0 | yo","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lyuanww":2}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" public void testValidateToDoCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" String result \u003d Parser.validateToDoCommand(\"todo Buy groceries\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" assertEquals(\" Buy groceries\", result);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" fail(\"Unexpected DukeException thrown.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" Parser.validateToDoCommand(\"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" public void testValidateDeadlineCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" String result \u003d Parser.validateDeadlineCommand(\"deadline Submit report /by 2023-09-01\");","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" assertEquals(\" Submit report /by 2023-09-01\", result);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" fail(\"Unexpected DukeException thrown.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" Parser.validateDeadlineCommand(\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" Parser.validateDeadlineCommand(\"deadline Submit report /by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"lyuanww"},"content":" Parser.validateDeadlineCommand(\"deadline Submit report /by2023-09-01\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"lyuanww"},"content":" public void testValidateEventCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"lyuanww"},"content":" String result \u003d Parser.validateEventCommand(\"event Birthday party /from 2023-09-01 /to 2023-09-02\");","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"lyuanww"},"content":" assertEquals(\" Birthday party /from 2023-09-01 /to 2023-09-02\", result);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"lyuanww"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"lyuanww"},"content":" fail(\"Unexpected DukeException thrown.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"lyuanww"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"lyuanww"},"content":" Parser.validateEventCommand(\"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"lyuanww"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"lyuanww"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"lyuanww"},"content":" Parser.validateEventCommand(\"event Birthday party /from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"lyuanww"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"lyuanww"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"lyuanww"},"content":" Parser.validateEventCommand(\"event Birthday party /from 2023-09-01 /to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"lyuanww"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"lyuanww"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"lyuanww"},"content":" Parser.validateEventCommand(\"event Birthday party /from 2023-09-01 /to 2023-09-02 /from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"lyuanww"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"lyuanww"},"content":" public void testParseInt() {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"lyuanww"},"content":" assertEquals(42, Parser.parseInt(\"42\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"lyuanww"},"content":" assertEquals(-1, Parser.parseInt(\"not_a_number\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lyuanww":81}},{"path":"src/test/java/duke/StorageStub.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"public class StorageStub extends Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":" public StorageStub() {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" super(\"src/main/data/duke.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" public void saveTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" // do nothing","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lyuanww":15}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" @BeforeEach","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" public void setUp() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" public void testAddTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" taskList.addTask(\"Buy groceries /by 06-03-2007 13:44\", new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" assertEquals(1, taskList.getTaskListSize());","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" public void testDeleteTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" taskList.addTask(\"Buy groceries /by 06-03-2007 13:44\", new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" taskList.deleteTask(1, new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" assertEquals(0, taskList.getTaskListSize());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" public void testShowAllTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" taskList.addTask(\"Buy groceries /by 06-03-2007 13:44\", new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" taskList.addTask(\"Read book /from 02-09-2022 11:00 /to 02-09-2022 12:00\", new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":" taskList.addTask(\"Go for a walk\", new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":" assertEquals(3, taskList.getTaskListSize());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":" taskList.showAllTasks(new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":" String expectedOutput \u003d \"\\nHere are the tasks in your list:\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":" \"1.[D][ ] Buy groceries (by: 06-03-2007 13:44)\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"lyuanww"},"content":" \"2.[E][ ] Read book (from: 02-09-2022 11:00 to: 02-09-2022 12:00)\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":" \"3.[T][ ] Go for a walk\\n\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":" assertEquals(expectedOutput, outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"lyuanww"},"content":" public void testMarkTaskAsDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"lyuanww"},"content":" taskList.addTask(\"Buy groceries /by 06-03-2007 13:44\", new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"lyuanww"},"content":" taskList.markTaskAsDone(1, new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"lyuanww"},"content":" assertEquals(true, taskList.getTask(0).isDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"lyuanww"},"content":" public void testUnmarkTaskAsDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"lyuanww"},"content":" taskList.addTask(\"Buy groceries /by 06-03-2007 13:44\", new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"lyuanww"},"content":" taskList.markTaskAsDone(1, new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"lyuanww"},"content":" taskList.unmarkTaskAsDone(1, new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"lyuanww"},"content":" assertEquals(false, taskList.getTask(0).isDone());","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lyuanww":63}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"todo read book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"todo join sports club","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"mark 4","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"lyuanww":9}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"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":"lyuanww"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":"checkstyle {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"lyuanww":6,"-":42}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":" * Duke is a task management application that allows users to manage tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" * by adding, marking as done, deleting, and listing tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" private final String name;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" * Constructs a Duke object.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" * @param name The name of the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" * @param filePath The path to the file used for storing tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" public Duke(String name, String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" storage.loadTasks(this.taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" * The main method that initializes and runs the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":" * @param args Command-line arguments (not used in this context).","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" Duke duke \u003d new Duke(\"Duke\", \"src/main/java/resource/duke.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":" duke.run();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":" * Runs the Duke application, handling user input and commands.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":" public void run() {","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"lyuanww"},"content":" ui.greet(this.name);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"lyuanww"},"content":" String input \u003d ui.readCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"lyuanww"},"content":" while (!input.equals(\"bye\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"lyuanww"},"content":" Command command \u003d Parser.processInputIntoCommand(input, this.ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"lyuanww"},"content":" if (command !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"lyuanww"},"content":" command.execute(this.taskList, this.storage, this.ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"lyuanww"},"content":" input \u003d ui.readCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"lyuanww"},"content":" ui.exit();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"lyuanww":57,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"lyuanww":7}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" * Represents a command to add a new task to the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" private final String taskDescription;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" * Creates a new AddCommand with the specified task description.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" * @param taskDescription The description of the task to be added.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" public AddCommand(String taskDescription) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" public void execute(TaskList taskList, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" taskList.addTask(this.taskDescription, storage, ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lyuanww":27}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" * Represents a command that can be executed by the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" * Executes the command with the provided TaskList, Storage, and Ui objects.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" * @param taskList The TaskList containing the task data.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" * @param storage The Storage object responsible for saving and loading data.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" * @param ui The Ui object responsible for user interface interactions.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" public abstract void execute(TaskList taskList, Storage storage, Ui ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lyuanww":20}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" private final int taskNumber;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" * Creates a new DeleteCommand with the specified task number.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" * @param taskNumber The number of the task to be deleted.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" public DeleteCommand(int taskNumber) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" public void execute(TaskList taskList, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" taskList.deleteTask(this.taskNumber, storage, ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lyuanww":27}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" * Represents a command to find tasks that match a given keyword in the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" private final String keyword;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" * Creates a new FindCommand with the specified keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" * @param keyword The keyword to search for in tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" public void execute(TaskList taskList, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" taskList.findTasks(this.keyword, ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lyuanww":26}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" * Represents a command to list all tasks in the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" public void execute(TaskList taskList, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" taskList.showAllTasks(ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lyuanww":16}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" * Represents a command to mark a task as done in the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" private final int taskNumber;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" * Creates a new MarkCommand with the specified task number.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" * @param taskNumber The number of the task to be marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" public MarkCommand(int taskNumber) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" public void execute(TaskList taskList, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" taskList.markTaskAsDone(this.taskNumber, storage, ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lyuanww":26}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" * Represents a command to unmark a task as done in the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" private final int taskNumber;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" * Creates a new UnmarkCommand with the specified task number.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" * @param taskNumber The number of the task to be unmarked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" public UnmarkCommand(int taskNumber) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" public void execute(TaskList taskList, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" taskList.unmarkTaskAsDone(this.taskNumber, storage, ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lyuanww":26}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.utility.DateParser;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" private final LocalDateTime by;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" * Constructs a Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" * @param name The name or description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" public Deadline(String name, String by) {","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" this.by \u003d DateParser.convertStringToDateTime(by);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" * Converts the Deadline object to its string representation.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" * @return The string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" return \"[D]\" + super.toString() + \" (by: \" + DateParser.convertDateTimeToString(this.by) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" * Converts the Deadline object to a formatted string for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":" * @return The formatted string for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" public String convertTaskToStorageFormat() {","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" return \"D | \" + (super.getIsDone() ? \"1\" : \"0\") + \" | \" + super.getName() + \" | \"","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":" + DateParser.convertDateTimeToString(this.by);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"lyuanww":43}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.utility.DateParser;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" * Represents an event task with a specified start and end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" * Constructs an Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" * @param name The name or description of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" public Event(String name, String from, String to) {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" this.from \u003d DateParser.convertStringToDateTime(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" this.to \u003d DateParser.convertStringToDateTime(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" * Converts the Event object to its string representation.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" * @return The string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" return \"[E]\" + super.toString() + \" (from: \" + DateParser.convertDateTimeToString(this.from) + \" to: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" + DateParser.convertDateTimeToString(this.to) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" * Converts the Event object to a formatted string for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":" * @return The formatted string for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":" public String convertTaskToStorageFormat() {","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"lyuanww"},"content":" return \"E | \" + (super.getIsDone() ? \"1\" : \"0\") + \" | \" + super.getName() + \" | \"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":" + DateParser.convertDateTimeToString(this.from) + \" | \" + DateParser.convertDateTimeToString(this.to);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"lyuanww":47}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":" * Represents a task that can be marked as done or undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" private final String name;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" * Constructs a Task object with a specified name.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" * @param name The name or description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" * Marks the task as done and optionally displays a message.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" * @param willDisplayMessage Whether to display a message indicating the task was marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" public void markAsDone(boolean willDisplayMessage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" if (willDisplayMessage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"\\nNice! I\u0027ve marked this task as done:\\n \" + this + \"\\n\");","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" * Unmarks the task as done and optionally displays a message.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" * @param willDisplayMessage Whether to display a message indicating the task was marked as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":" public void unmarkAsDone(boolean willDisplayMessage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" if (willDisplayMessage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"\\nNice! I\u0027ve unmarked this task as done:\\n \" + this + \"\\n\");","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":" char markDone \u003d this.isDone ? \u0027X\u0027 : \u0027 \u0027;","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"lyuanww"},"content":" return \"[\" + markDone + \"] \" + this.name;","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"lyuanww"},"content":" public String getName() {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"lyuanww"},"content":" return this.name;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"lyuanww"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"lyuanww"},"content":" return this.isDone;","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"lyuanww"},"content":" * Converts the task into a formatted string for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"lyuanww"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"lyuanww"},"content":" public abstract String convertTaskToStorageFormat();","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"lyuanww":66}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" * Represents a list of tasks and provides methods to manage tasks within the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" * Adds a task to the list based on the task description.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" * @param storage The storage handler to save the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" public void addTask(String taskDescription, Storage storage, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" Task task;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" String[] taskInformation \u003d taskDescription.split(\" /\");","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" String taskName \u003d taskInformation[0].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" if (taskInformation.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" task \u003d new ToDo(taskName);","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" } else if (taskInformation.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" task \u003d new Deadline(taskName, taskInformation[1].replace(\"by \", \"\"));","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" } else if (taskInformation.length \u003d\u003d 3) {","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" task \u003d new Event(taskName, taskInformation[1].replace(\"from \", \"\"), taskInformation[2].replace(\"to \", \"\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(\"Invalid task format\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":" return;","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":" storage.saveTask(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(\"Got it. I\u0027ve added this task:\\n \" + task + \"\\nNow you have \" + this.tasks.size()","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":" + \" task(s) in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"lyuanww"},"content":" * Adds a task directly to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"lyuanww"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"lyuanww"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"lyuanww"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"lyuanww"},"content":" * Deletes a task from the list based on the task number.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"lyuanww"},"content":" * @param taskNumber The number of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"lyuanww"},"content":" * @param storage The storage handler to remove the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"lyuanww"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"lyuanww"},"content":" public void deleteTask(int taskNumber, Storage storage, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"lyuanww"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(\"Task number does not exist\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"lyuanww"},"content":" return;","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"lyuanww"},"content":" Task task \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"lyuanww"},"content":" this.tasks.remove(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"lyuanww"},"content":" storage.deleteTask(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(\"Noted. I\u0027ve removed this task:\\n \" + task + \"\\nNow you have \" + this.tasks.size() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"lyuanww"},"content":" * Displays all tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"lyuanww"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"lyuanww"},"content":" public void showAllTasks(Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"lyuanww"},"content":" if (this.tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-22"},{"lineNumber":82,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(\"You have no tasks in your list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"lyuanww"},"content":" return;","lastModifiedDate":"2023-08-22"},{"lineNumber":84,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"\\nHere are the tasks in your list:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":88,"author":{"gitId":"lyuanww"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-08-22"},{"lineNumber":89,"author":{"gitId":"lyuanww"},"content":" System.out.println(i + 1 + \".\" + this.tasks.get(i));","lastModifiedDate":"2023-08-22"},{"lineNumber":90,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":91,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"lyuanww"},"content":" System.out.println();","lastModifiedDate":"2023-08-22"},{"lineNumber":93,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":94,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"lyuanww"},"content":" * Marks a task as done based on the task number.","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"lyuanww"},"content":" * @param taskNumber The number of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"lyuanww"},"content":" * @param storage The storage handler to update the task status.","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"lyuanww"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"lyuanww"},"content":" public void markTaskAsDone(int taskNumber, Storage storage, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"lyuanww"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(\"Task number does not exist\");","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"lyuanww"},"content":" return;","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":108,"author":{"gitId":"lyuanww"},"content":" Task task \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":109,"author":{"gitId":"lyuanww"},"content":" task.markAsDone(true);","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"lyuanww"},"content":" storage.modifyTask(taskNumber, task);","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":112,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":113,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"lyuanww"},"content":" * Marks a task as not done (undone) based on the task number.","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"lyuanww"},"content":" * @param taskNumber The number of the task to be marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"lyuanww"},"content":" * @param storage The storage handler to update the task status.","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"lyuanww"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"lyuanww"},"content":" public void unmarkTaskAsDone(int taskNumber, Storage storage, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"lyuanww"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(\"Task number does not exist\");","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"lyuanww"},"content":" return;","lastModifiedDate":"2023-08-23"},{"lineNumber":124,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":125,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":126,"author":{"gitId":"lyuanww"},"content":" Task task \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":127,"author":{"gitId":"lyuanww"},"content":" task.unmarkAsDone(true);","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"lyuanww"},"content":" storage.modifyTask(taskNumber, task);","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":130,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"lyuanww"},"content":" public void findTasks(String keyword, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"lyuanww"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"lyuanww"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"lyuanww"},"content":" if (task.toString().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"lyuanww"},"content":" foundTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"lyuanww"},"content":" if (foundTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"lyuanww"},"content":" System.out.println();","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(\"No matching tasks found.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"lyuanww"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"\\nHere are the matching tasks in your list:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":144,"author":{"gitId":"lyuanww"},"content":" for (int i \u003d 0; i \u003c foundTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"lyuanww"},"content":" System.out.println(i + 1 + \".\" + foundTasks.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"lyuanww"},"content":" System.out.println();","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"lyuanww"},"content":" public int getTaskListSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"lyuanww"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"lyuanww"},"content":" public Task getTask(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"lyuanww"},"content":" return this.tasks.get(taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"lyuanww":158}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":" * Represents a task without any specific due date or time.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" * Constructs a ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":" * @param name The name or description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" super(name);","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" * Converts the ToDo object to its string representation.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" * @return The string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" * Converts the ToDo object to a formatted string for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" * @return The formatted string for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" public String convertTaskToStorageFormat() {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" return \"T | \" + (super.getIsDone() ? \"1\" : \"0\") + \" | \" + super.getName();","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"lyuanww":34}},{"path":"src/main/java/duke/utility/DateParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.utility;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" * A utility class for parsing and formatting date and time strings.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"public class DateParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" private static final DateTimeFormatter DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" * Converts a date and time string to a LocalDateTime object.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" * @param datetime The date and time string to be converted.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" * @return A LocalDateTime object representing the parsed date and time.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" public static LocalDateTime convertStringToDateTime(String datetime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" return LocalDateTime.parse(datetime, DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"Invalid date format. Please enter in the format 01-01-2001 01:01\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" * Converts a LocalDateTime object to a formatted date and time string.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" * @param datetime The LocalDateTime object to be converted.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" * @return A formatted date and time string.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" public static String convertDateTimeToString(LocalDateTime datetime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":" return datetime.format(DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lyuanww":39}},{"path":"src/main/java/duke/utility/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.utility;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" * A utility class for parsing and validating user commands in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" * Processes user input into a corresponding command object.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" * @param input The user\u0027s input as a string.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" * @return A command object based on the user\u0027s input, or null if input is invalid.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" public static Command processInputIntoCommand(String input, Ui ui) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" String[] inputArr \u003d input.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" String command \u003d inputArr[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" switch (command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" case \"list\":","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" case \"mark\":","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" int markTaskNumber \u003d Parser.parseInt(inputArr[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" return new MarkCommand(markTaskNumber);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" int unmarkTaskNumber \u003d Parser.parseInt(inputArr[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":" return new UnmarkCommand(unmarkTaskNumber);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":" case \"todo\":","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" String todoDescription \u003d Parser.validateToDoCommand(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" return new AddCommand(todoDescription);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":" String deadlineDescription \u003d Parser.validateDeadlineCommand(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":" return new AddCommand(deadlineDescription);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"lyuanww"},"content":" case \"event\":","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":" String eventDescription \u003d Parser.validateEventCommand(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":" return new AddCommand(eventDescription);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":" case \"delete\":","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"lyuanww"},"content":" int deleteTaskNumber \u003d Parser.parseInt(inputArr[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"lyuanww"},"content":" return new DeleteCommand(deleteTaskNumber);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"lyuanww"},"content":" case \"find\":","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"lyuanww"},"content":" String keyword \u003d input.replace(\"find\", \"\").trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"lyuanww"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"lyuanww"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"lyuanww"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"lyuanww"},"content":" ui.formatPrintMessage(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"lyuanww"},"content":" return null;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"lyuanww"},"content":" * Validates and extracts the description from a todo command.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"lyuanww"},"content":" * @param input The user input containing the todo command.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"lyuanww"},"content":" * @return The description of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"lyuanww"},"content":" * @throws DukeException If the description is empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"lyuanww"},"content":" public static String validateToDoCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"lyuanww"},"content":" String[] inputArr \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"lyuanww"},"content":" if (inputArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"lyuanww"},"content":" return input.replace(\"todo\", \"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"lyuanww"},"content":" * Validates and extracts the description and deadline from a deadline command.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"lyuanww"},"content":" * @param input The user input containing the deadline command.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"lyuanww"},"content":" * @return The description of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"lyuanww"},"content":" * @throws DukeException If the format is invalid or the description is empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"lyuanww"},"content":" public static String validateDeadlineCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"lyuanww"},"content":" String[] inputArr \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"lyuanww"},"content":" if (inputArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"lyuanww"},"content":" String[] description \u003d input.replace(\"deadline\", \"\").trim().split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"lyuanww"},"content":" int index \u003d -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"lyuanww"},"content":" if (description.length \u003e 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"lyuanww"},"content":" for (int i \u003d 0; i \u003c description.length; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"lyuanww"},"content":" if (description[i].equals(\"/by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"lyuanww"},"content":" index \u003d i;","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"lyuanww"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"lyuanww"},"content":" if (index \u003d\u003d -1 || index \u003d\u003d 0 || index \u003d\u003d description.length - 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"☹ OOPS!!! The format of a deadline is invalid. \"","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"lyuanww"},"content":" + \"Format: deadline \u003ctask name\u003e /by \u003cdate\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"lyuanww"},"content":" return input.replace(\"deadline\", \"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"lyuanww"},"content":" * Validates and extracts the description and event timing from an event command.","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"lyuanww"},"content":" * @param input The user input containing the event command.","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"lyuanww"},"content":" * @return The description of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"lyuanww"},"content":" * @throws DukeException If the format is invalid or the description is empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"lyuanww"},"content":" public static String validateEventCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"lyuanww"},"content":" String[] inputArr \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"lyuanww"},"content":" if (inputArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"lyuanww"},"content":" String[] description \u003d input.replace(\"event\", \"\").trim().split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"lyuanww"},"content":" int fromIndex \u003d -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"lyuanww"},"content":" int toIndex \u003d -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"lyuanww"},"content":" if (description.length \u003e 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"lyuanww"},"content":" for (int i \u003d 0; i \u003c description.length; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"lyuanww"},"content":" if (description[i].equals(\"/from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"lyuanww"},"content":" fromIndex \u003d i;","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"lyuanww"},"content":" if (description[i].equals(\"/to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"lyuanww"},"content":" toIndex \u003d i;","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"lyuanww"},"content":" boolean isFromIndexBeforeToIndex \u003d fromIndex \u003c toIndex;","lastModifiedDate":"2023-09-06"},{"lineNumber":137,"author":{"gitId":"lyuanww"},"content":" boolean isFromIndexValid \u003d fromIndex !\u003d -1 \u0026\u0026 fromIndex !\u003d 0 \u0026\u0026 fromIndex !\u003d description.length - 1;","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"lyuanww"},"content":" boolean isToIndexValid \u003d toIndex !\u003d -1 \u0026\u0026 toIndex !\u003d 0 \u0026\u0026 toIndex !\u003d description.length - 1;","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":140,"author":{"gitId":"lyuanww"},"content":" if (!isFromIndexBeforeToIndex || !isFromIndexValid || !isToIndexValid) {","lastModifiedDate":"2023-09-06"},{"lineNumber":141,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"☹ OOPS!!! The format of a event is invalid. Format: event \u003ctask name\u003e \"","lastModifiedDate":"2023-09-06"},{"lineNumber":142,"author":{"gitId":"lyuanww"},"content":" + \"/from \u003cdate\u003e /to \u003cdate\u003e\");","lastModifiedDate":"2023-09-06"},{"lineNumber":143,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"lyuanww"},"content":" return input.replace(\"event\", \"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"lyuanww"},"content":" * Parses an integer from a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"lyuanww"},"content":" * @param input The string to be parsed.","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"lyuanww"},"content":" * @return The parsed integer, or -1 if parsing fails.","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"lyuanww"},"content":" public static int parseInt(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"lyuanww"},"content":" return Integer.parseInt(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"lyuanww"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"☹ OOPS!!! Please enter a valid number\");","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"lyuanww"},"content":" return -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lyuanww":162}},{"path":"src/main/java/duke/utility/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.utility;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" * A class responsible for loading and saving tasks from and to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" private final String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" * @param filePath The path to the file used for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" private static boolean isValidTaskType(String taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" return taskType.equals(\"T\") || taskType.equals(\"D\") || taskType.equals(\"E\");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":" private static boolean isValidDoneFlag(String doneFlag) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" return doneFlag.equals(\"0\") || doneFlag.equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":" private static boolean isValidTaskFormat(String taskType, int taskFormatLength) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":" return (taskType.equals(\"T\") \u0026\u0026 taskFormatLength \u003d\u003d 3) || (taskType.equals(\"D\") \u0026\u0026 taskFormatLength \u003d\u003d 4)","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"lyuanww"},"content":" || (taskType.equals(\"E\") \u0026\u0026 taskFormatLength \u003d\u003d 5);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"lyuanww"},"content":" * Loads tasks from the file and adds them to the provided TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"lyuanww"},"content":" * @param taskList The TaskList to which tasks should be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"lyuanww"},"content":" public void loadTasks(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"lyuanww"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"Loading tasks...\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"lyuanww"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"lyuanww"},"content":" String line;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"lyuanww"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"lyuanww"},"content":" validateString(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"lyuanww"},"content":" Task task \u003d convertStringIntoTask(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"lyuanww"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"lyuanww"},"content":" reader.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"lyuanww"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"File not found. Please create duke.txt in the resource folder\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"lyuanww"},"content":" System.exit(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"lyuanww"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"An error has occured during file loading. Plese check duke.txt in the data folder\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"lyuanww"},"content":" System.exit(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"lyuanww"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"lyuanww"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"lyuanww"},"content":" System.exit(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"Tasks loaded successfully!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"lyuanww"},"content":" * Converts a data string into a Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"lyuanww"},"content":" * @param dataString The string containing task data.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"lyuanww"},"content":" * @return The parsed Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"lyuanww"},"content":" * @throws DukeException If parsing encounters an error.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"lyuanww"},"content":" public Task convertStringIntoTask(String dataString) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"lyuanww"},"content":" String[] dataArr \u003d dataString.split(\" \\\\| \");","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"lyuanww"},"content":" String taskType \u003d dataArr[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"lyuanww"},"content":" boolean isDone \u003d dataArr[1].equals(\"1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"lyuanww"},"content":" String taskName \u003d dataArr[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"lyuanww"},"content":" Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"lyuanww"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"lyuanww"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"lyuanww"},"content":" task \u003d new ToDo(taskName);","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"lyuanww"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"lyuanww"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"lyuanww"},"content":" task \u003d new Deadline(taskName, dataArr[3]);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"lyuanww"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"lyuanww"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"lyuanww"},"content":" task \u003d new Event(taskName, dataArr[3], dataArr[4]);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"lyuanww"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"lyuanww"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"Unexpected error\");","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"lyuanww"},"content":" if (isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"lyuanww"},"content":" task.markAsDone(false);","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"lyuanww"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"lyuanww"},"content":" * Validates a data string to ensure its format is correct.","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"lyuanww"},"content":" * @param dataString The string to be validated.","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"lyuanww"},"content":" * @throws DukeException If the format is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"lyuanww"},"content":" public void validateString(String dataString) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"lyuanww"},"content":" String[] dataArr \u003d dataString.split(\" \\\\| \");","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"lyuanww"},"content":" int dataLength \u003d dataArr.length;","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"lyuanww"},"content":" String taskType \u003d dataArr[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"lyuanww"},"content":" String doneFlag \u003d dataArr[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"lyuanww"},"content":" if (!isValidTaskType(taskType)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"Invalid task type\");","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"lyuanww"},"content":" if (!isValidDoneFlag(doneFlag)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"Invalid done flag\");","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"lyuanww"},"content":" if (!isValidTaskFormat(taskType, dataLength)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"lyuanww"},"content":" throw new DukeException(\"Invalid task format\");","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"lyuanww"},"content":" * Saves a task to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"lyuanww"},"content":" * @param task The task to be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"lyuanww"},"content":" public void saveTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"lyuanww"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"lyuanww"},"content":" java.io.FileWriter fileWriter \u003d new java.io.FileWriter(file, true);","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"lyuanww"},"content":" fileWriter.write(task.convertTaskToStorageFormat() + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":150,"author":{"gitId":"lyuanww"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"lyuanww"},"content":" } catch (java.io.IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"lyuanww"},"content":" System.exit(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"lyuanww"},"content":" * Modifies an existing task in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"lyuanww"},"content":" * @param taskNumber The index of the task to be modified.","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"lyuanww"},"content":" * @param newTask The new task to replace the existing task.","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"lyuanww"},"content":" public void modifyTask(int taskNumber, Task newTask) {","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"lyuanww"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"lyuanww"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"lyuanww"},"content":" StringBuilder newContents \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"lyuanww"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"lyuanww"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"lyuanww"},"content":" String dataString \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"lyuanww"},"content":" if (count \u003d\u003d taskNumber - 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"lyuanww"},"content":" newContents.append(newTask.convertTaskToStorageFormat() + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":173,"author":{"gitId":"lyuanww"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"lyuanww"},"content":" newContents.append(dataString + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"lyuanww"},"content":" count++;","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"lyuanww"},"content":" scanner.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"lyuanww"},"content":" FileWriter fileWriter \u003d new FileWriter(file, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"lyuanww"},"content":" fileWriter.write(newContents.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"lyuanww"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"lyuanww"},"content":" } catch (java.io.IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"lyuanww"},"content":" System.exit(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":186,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"lyuanww"},"content":" * Deletes a task from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"lyuanww"},"content":" * @param taskNumber The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"lyuanww"},"content":" public void deleteTask(int taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":195,"author":{"gitId":"lyuanww"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"lyuanww"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"lyuanww"},"content":" StringBuilder newContents \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"lyuanww"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":199,"author":{"gitId":"lyuanww"},"content":" String line;","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"lyuanww"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"lyuanww"},"content":" if (count !\u003d taskNumber - 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":202,"author":{"gitId":"lyuanww"},"content":" newContents.append(line + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":204,"author":{"gitId":"lyuanww"},"content":" count++;","lastModifiedDate":"2023-08-29"},{"lineNumber":205,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":206,"author":{"gitId":"lyuanww"},"content":" FileWriter fileWriter \u003d new FileWriter(file, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":207,"author":{"gitId":"lyuanww"},"content":" fileWriter.write(newContents.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":208,"author":{"gitId":"lyuanww"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":209,"author":{"gitId":"lyuanww"},"content":" } catch (java.io.IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":210,"author":{"gitId":"lyuanww"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":211,"author":{"gitId":"lyuanww"},"content":" System.exit(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":212,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":213,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":214,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":215,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":216,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"lyuanww":216}},{"path":"src/main/java/duke/utility/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke.utility;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":" * Handles interaction with the user by providing input and displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" public void echo(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" formatPrintMessage(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" public void greet(String name) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" formatPrintMessage(\"\\nHello! I\u0027m \" + name + \"\\nWhat can I do for you?\");","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" public void exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" formatPrintMessage(\"\\nBye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" public void formatPrintMessage(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" System.out.println(message + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lyuanww":34}},{"path":"src/main/java/resource/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"D | 1 | Buy groceries | 06-03-2007 13:44","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"T | 0 | hello","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"lyuanww":2}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" public void testValidateToDoCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" String result \u003d Parser.validateToDoCommand(\"todo Buy groceries\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" assertEquals(\" Buy groceries\", result);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" fail(\"Unexpected DukeException thrown.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" Parser.validateToDoCommand(\"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" public void testValidateDeadlineCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" String result \u003d Parser.validateDeadlineCommand(\"deadline Submit report /by 2023-09-01\");","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" assertEquals(\" Submit report /by 2023-09-01\", result);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":" fail(\"Unexpected DukeException thrown.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" Parser.validateDeadlineCommand(\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" Parser.validateDeadlineCommand(\"deadline Submit report /by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"lyuanww"},"content":" Parser.validateDeadlineCommand(\"deadline Submit report /by2023-09-01\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"lyuanww"},"content":" public void testValidateEventCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"lyuanww"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"lyuanww"},"content":" String result \u003d Parser.validateEventCommand(\"event Birthday party /from 2023-09-01 /to 2023-09-02\");","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"lyuanww"},"content":" assertEquals(\" Birthday party /from 2023-09-01 /to 2023-09-02\", result);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"lyuanww"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"lyuanww"},"content":" fail(\"Unexpected DukeException thrown.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"lyuanww"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"lyuanww"},"content":" Parser.validateEventCommand(\"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"lyuanww"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"lyuanww"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"lyuanww"},"content":" Parser.validateEventCommand(\"event Birthday party /from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"lyuanww"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"lyuanww"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"lyuanww"},"content":" Parser.validateEventCommand(\"event Birthday party /from 2023-09-01 /to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"lyuanww"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"lyuanww"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"lyuanww"},"content":" Parser.validateEventCommand(\"event Birthday party /from 2023-09-01 /to 2023-09-02 /from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"lyuanww"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"lyuanww"},"content":" public void testParseInt() {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"lyuanww"},"content":" assertEquals(42, Parser.parseInt(\"42\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"lyuanww"},"content":" assertEquals(-1, Parser.parseInt(\"not_a_number\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lyuanww":81}},{"path":"src/test/java/duke/StorageStub.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":" * A stub class extending Storage for testing purposes.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":" * This class overrides the saveTask method to do nothing.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"public class StorageStub extends Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":" * Creates a new StorageStub with a default file path.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" public StorageStub() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" super(\"src/main/data/duke.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" * Overrides the saveTask method to do nothing.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" * This method is used for testing and does not save tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" * @param task The task to be saved (not saved in this stub implementation).","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" public void saveTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" // do nothing","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lyuanww":29}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"import duke.utility.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lyuanww"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lyuanww"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lyuanww"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lyuanww"},"content":" @BeforeEach","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lyuanww"},"content":" public void setUp() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lyuanww"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lyuanww"},"content":" public void testAddTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lyuanww"},"content":" taskList.addTask(\"Buy groceries /by 06-03-2007 13:44\", new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lyuanww"},"content":" assertEquals(1, taskList.getTaskListSize());","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lyuanww"},"content":" public void testDeleteTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lyuanww"},"content":" taskList.addTask(\"Buy groceries /by 06-03-2007 13:44\", new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lyuanww"},"content":" taskList.deleteTask(1, new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lyuanww"},"content":" assertEquals(0, taskList.getTaskListSize());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"lyuanww"},"content":" public void testShowAllTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lyuanww"},"content":" taskList.addTask(\"Buy groceries /by 06-03-2007 13:44\", new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lyuanww"},"content":" taskList.addTask(\"Read book /from 02-09-2022 11:00 /to 02-09-2022 12:00\", new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lyuanww"},"content":" taskList.addTask(\"Go for a walk\", new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lyuanww"},"content":" assertEquals(3, taskList.getTaskListSize());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lyuanww"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lyuanww"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"lyuanww"},"content":" taskList.showAllTasks(new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lyuanww"},"content":" String expectedOutput \u003d \"\\nHere are the tasks in your list:\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"lyuanww"},"content":" \"1.[D][ ] Buy groceries (by: 06-03-2007 13:44)\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"lyuanww"},"content":" \"2.[E][ ] Read book (from: 02-09-2022 11:00 to: 02-09-2022 12:00)\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lyuanww"},"content":" \"3.[T][ ] Go for a walk\\n\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"lyuanww"},"content":" assertEquals(expectedOutput, outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"lyuanww"},"content":" public void testMarkTaskAsDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"lyuanww"},"content":" taskList.addTask(\"Buy groceries /by 06-03-2007 13:44\", new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"lyuanww"},"content":" taskList.markTaskAsDone(1, new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"lyuanww"},"content":" assertEquals(true, taskList.getTask(0).getIsDone());","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"lyuanww"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"lyuanww"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"lyuanww"},"content":" public void testUnmarkTaskAsDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"lyuanww"},"content":" taskList.addTask(\"Buy groceries /by 06-03-2007 13:44\", new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"lyuanww"},"content":" taskList.markTaskAsDone(1, new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"lyuanww"},"content":" taskList.unmarkTaskAsDone(1, new StorageStub(), new Ui());","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"lyuanww"},"content":" assertEquals(false, taskList.getTask(0).getIsDone());","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"lyuanww"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"lyuanww"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lyuanww":63}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lyuanww"},"content":"todo read book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"lyuanww"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"lyuanww"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"lyuanww"},"content":"todo join sports club","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"lyuanww"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"lyuanww"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"lyuanww"},"content":"mark 4","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"lyuanww"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"lyuanww"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"lyuanww":9}}] diff --git a/lyuanww_ip_master/commits.json b/lyuanww_ip_master/commits.json index d1c8d691..b8955935 100644 --- a/lyuanww_ip_master/commits.json +++ b/lyuanww_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"lyuanww":[{"date":"2023-08-22","commitResults":[{"hash":"c6e97e870b538a70e19a2b0fc52153d641c64e3a","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":6}}},{"hash":"0ccc33a6f9b70d7d6ef38c7cd429f46325838a16","isMergeCommit":false,"messageTitle":"Implement Level-1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"967afecd7fbedc17554a0cba5e4a8a8bffa630b9","isMergeCommit":false,"messageTitle":"Implement Level-2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":3}}}]},{"date":"2023-08-23","commitResults":[{"hash":"fb8e5c805cd2016f09ee94f39285bdd8d986a05d","isMergeCommit":false,"messageTitle":"Implement Level-3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":4}}},{"hash":"9dbce38982529d32d2691b6e9ac65819bcf124b8","isMergeCommit":false,"messageTitle":"Implement Level-4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":4}}},{"hash":"deaa6778e74a25e9b2a4e4bbbeb42bb4000eadf6","isMergeCommit":false,"messageTitle":"Implement A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":4,"deletions":3}}},{"hash":"c3f82d433065944648d3f66103db25bab3264b33","isMergeCommit":false,"messageTitle":"Implement Level-5: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":33}}},{"hash":"2bccea029cd9c8a08fdf30622ee9bb8ad3c87c76","isMergeCommit":false,"messageTitle":"Implement Level-6: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"b12162b9744032d51a415cd4bfc33f4a82f09bd3","isMergeCommit":false,"messageTitle":"Rename storage to tasklist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":11}}},{"hash":"06c1fba4667299563816b1ca1d2db5deacb0545e","isMergeCommit":false,"messageTitle":"Implement Level7.Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":238,"deletions":46}}},{"hash":"be67a7db839501d32cf9abe87e8cea02b27b10cc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"73b24673b73db15466a14611654b7f263d14cf17","isMergeCommit":false,"messageTitle":"Implement Level8.Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":39,"deletions":10}}},{"hash":"e600e9eedb4175a1ed6ae124518c8675c9dd28f4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"02d371e8eb1f959fda26241c403d9c9f55b7e5d6","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":164,"deletions":140}}},{"hash":"471c2a43aad01d3062e0f610ae2c360f863bd36b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-more-oop\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"8e13c21430432a522d027fcebe2f43c551d3be17","isMergeCommit":false,"messageTitle":"Implement A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":17,"deletions":0}}},{"hash":"e7ebe5c3a235a3d584fa5a015eace2608a93a062","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f248bcda1c04a5a95ecb1692a4202faa92361ee5","isMergeCommit":false,"messageTitle":"Implement A-Gradle: Use Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":41,"deletions":39}}},{"hash":"da8ecb0d3f25656b5165decfbfdac4abe7e73d2e","isMergeCommit":false,"messageTitle":"Implement A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":5},"java":{"insertions":182,"deletions":16}}},{"hash":"3ae338292cb812336dd39d01b4e6a4ba0c3a10db","isMergeCommit":false,"messageTitle":"Change file not found message","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"de149f3c4ca2507e3b852ca6529cc6900789946c","isMergeCommit":false,"messageTitle":"Implement JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":236,"deletions":23}}},{"hash":"4e3d25e3968531f28986a08102256f6664e770aa","isMergeCommit":false,"messageTitle":"Implement Follow the Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":10}}},{"hash":"4a01845e1034326925a46d959fe9a24aa0a50214","isMergeCommit":false,"messageTitle":"Implement Level-9: Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"70591a5dcce109ff9a73ffcda372489c3d950fcc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"26dcd4ccb89f7bc19cc70f6330fb4b2e4829de85","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"c914a1f25cc5e345032dd2ec14949cd23bf71f95","isMergeCommit":true,"messageTitle":"Resolve merge conflicts","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"01204e4a0e0b5e025bfc9c0fc3a8cbc85bd7ea91","isMergeCommit":false,"messageTitle":"Restructure files","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":37,"deletions":10}}}]}]},"authorFileTypeContributionMap":{"lyuanww":{"java":1018,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":6,"txt":11}},"authorContributionVariance":{"lyuanww":52844.51},"authorDisplayNameMap":{"lyuanww":"CS2103T-F08-1 WONG..YUAN"}} +{"authorDailyContributionsMap":{"lyuanww":[{"date":"2023-08-22","commitResults":[{"hash":"c6e97e870b538a70e19a2b0fc52153d641c64e3a","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":6}}},{"hash":"0ccc33a6f9b70d7d6ef38c7cd429f46325838a16","isMergeCommit":false,"messageTitle":"Implement Level-1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"967afecd7fbedc17554a0cba5e4a8a8bffa630b9","isMergeCommit":false,"messageTitle":"Implement Level-2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":3}}}]},{"date":"2023-08-23","commitResults":[{"hash":"fb8e5c805cd2016f09ee94f39285bdd8d986a05d","isMergeCommit":false,"messageTitle":"Implement Level-3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":4}}},{"hash":"9dbce38982529d32d2691b6e9ac65819bcf124b8","isMergeCommit":false,"messageTitle":"Implement Level-4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":4}}},{"hash":"deaa6778e74a25e9b2a4e4bbbeb42bb4000eadf6","isMergeCommit":false,"messageTitle":"Implement A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":4,"deletions":3}}},{"hash":"c3f82d433065944648d3f66103db25bab3264b33","isMergeCommit":false,"messageTitle":"Implement Level-5: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":33}}},{"hash":"2bccea029cd9c8a08fdf30622ee9bb8ad3c87c76","isMergeCommit":false,"messageTitle":"Implement Level-6: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"b12162b9744032d51a415cd4bfc33f4a82f09bd3","isMergeCommit":false,"messageTitle":"Rename storage to tasklist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":11}}},{"hash":"06c1fba4667299563816b1ca1d2db5deacb0545e","isMergeCommit":false,"messageTitle":"Implement Level7.Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":238,"deletions":46}}},{"hash":"be67a7db839501d32cf9abe87e8cea02b27b10cc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"73b24673b73db15466a14611654b7f263d14cf17","isMergeCommit":false,"messageTitle":"Implement Level8.Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":39,"deletions":10}}},{"hash":"e600e9eedb4175a1ed6ae124518c8675c9dd28f4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"02d371e8eb1f959fda26241c403d9c9f55b7e5d6","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":164,"deletions":140}}},{"hash":"471c2a43aad01d3062e0f610ae2c360f863bd36b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-more-oop\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"8e13c21430432a522d027fcebe2f43c551d3be17","isMergeCommit":false,"messageTitle":"Implement A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":17,"deletions":0}}},{"hash":"e7ebe5c3a235a3d584fa5a015eace2608a93a062","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f248bcda1c04a5a95ecb1692a4202faa92361ee5","isMergeCommit":false,"messageTitle":"Implement A-Gradle: Use Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":41,"deletions":39}}},{"hash":"da8ecb0d3f25656b5165decfbfdac4abe7e73d2e","isMergeCommit":false,"messageTitle":"Implement A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":5},"java":{"insertions":182,"deletions":16}}},{"hash":"3ae338292cb812336dd39d01b4e6a4ba0c3a10db","isMergeCommit":false,"messageTitle":"Change file not found message","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"de149f3c4ca2507e3b852ca6529cc6900789946c","isMergeCommit":false,"messageTitle":"Implement JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":236,"deletions":23}}},{"hash":"4e3d25e3968531f28986a08102256f6664e770aa","isMergeCommit":false,"messageTitle":"Implement Follow the Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":10}}},{"hash":"4a01845e1034326925a46d959fe9a24aa0a50214","isMergeCommit":false,"messageTitle":"Implement Level-9: Find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"70591a5dcce109ff9a73ffcda372489c3d950fcc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"26dcd4ccb89f7bc19cc70f6330fb4b2e4829de85","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"c914a1f25cc5e345032dd2ec14949cd23bf71f95","isMergeCommit":true,"messageTitle":"Resolve merge conflicts","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"01204e4a0e0b5e025bfc9c0fc3a8cbc85bd7ea91","isMergeCommit":false,"messageTitle":"Restructure files","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":37,"deletions":10}}},{"hash":"26595cef351f427be58f0503efd5f14346eae907","isMergeCommit":false,"messageTitle":"Refactor: add command classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":173,"deletions":54}}},{"hash":"3eae081ab49761ab47117d3e065a12702462a717","isMergeCommit":false,"messageTitle":"Add comments to Command classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":8}}},{"hash":"de82176a275c8c8918bf01f515b6b802f61f41d6","isMergeCommit":false,"messageTitle":"Modify comment for processInputIntoCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":4}}}]},{"date":"2023-09-06","commitResults":[{"hash":"1099a4432c70270be230a09d0f2c0fc4f5cf7b77","isMergeCommit":false,"messageTitle":"Resolve PR comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":44}}},{"hash":"7a2fb65897e59505edec26fb14840b8aedca9663","isMergeCommit":false,"messageTitle":"Resolve PR comments - part 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":8}}}]}]},"authorFileTypeContributionMap":{"lyuanww":{"java":1204,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":6,"txt":11}},"authorContributionVariance":{"lyuanww":53364.312},"authorDisplayNameMap":{"lyuanww":"CS2103T-F08-1 WONG..YUAN"}} diff --git a/mamayuan_ip_master/authorship.json b/mamayuan_ip_master/authorship.json index 88f3cd36..36251225 100644 --- a/mamayuan_ip_master/authorship.json +++ b/mamayuan_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"CONTRIBUTORS.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Contributors","lastModifiedDate":"2019-07-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Homepage","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---|:---:|:---:|:---:","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"![](https://avatars0.githubusercontent.com/u/22460123?s\u003d100) | Jeffry Lum | [Github](https://github.com/j-lum/) | [Homepage](https://se.kasugano.moe)","lastModifiedDate":"2019-08-06"},{"lineNumber":6,"author":{"gitId":"-"},"content":"![](https://avatars0.githubusercontent.com/u/1673303?s\u003d100) | Damith C. Rajapakse | [Github](https://github.com/damithc/) | [Homepage](https://www.comp.nus.edu.sg/~damithch/)","lastModifiedDate":"2019-08-06"},{"lineNumber":7,"author":{"gitId":"-"},"content":"# I would like to join this list. How can I help the project","lastModifiedDate":"2019-07-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"For more information, please refer to our [contributor\u0027s guide](https://oss-generic.github.duke.io/process/).","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"-":8,"mamayuan":1}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":1}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import duke.io.Loader;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"import duke.io.Saver;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.UnknownCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"public class Duke {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" private static final String LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" public Duke() {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" tasks \u003d new Loader().load();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Hello! I\u0027m DaDaYuan\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" while (true) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" new Saver().save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" System.out.println((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" String description \u003d input.length() \u003e 5 ? input.substring(5) : \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" throw new Exception(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" tasks.add(new Todo(description));","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":" String[] parts \u003d input.split(\" /by \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"mamayuan"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"mamayuan"},"content":" throw new Exception(\"OOPS!!! The deadline of a task cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"mamayuan"},"content":" String description \u003d parts[0].substring(9);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"mamayuan"},"content":" tasks.add(new Deadline(description, parts[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"mamayuan"},"content":" String[] parts \u003d input.split(\" /from | /to \", 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"mamayuan"},"content":" if (parts.length \u003c 3) {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"mamayuan"},"content":" throw new Exception(\"OOPS!!! The event timing details are incomplete.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"mamayuan"},"content":" tasks.add(new Event(parts[0].substring(6), parts[1], parts[2]));","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"mamayuan"},"content":" int index \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"mamayuan"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.get(index));","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"mamayuan"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"mamayuan"},"content":" throw new Exception(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"mamayuan"},"content":" new Saver().save(tasks); // saving to file after each operation","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"mamayuan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"mamayuan"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"mamayuan"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"OOPS!!! The index provided is not valid.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"mamayuan"},"content":" scanner.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"mamayuan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"mamayuan"},"content":" new Duke().run();","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":110}},{"path":"src/main/java/duke/exceptions/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" public EmptyDescriptionException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":8}},{"path":"src/main/java/duke/exceptions/ErrorMessages.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class ErrorMessages {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" public static final String EMPTY_DEADLINE_ERROR \u003d \"OOPS!!! The description of a deadline task cannot be empty.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" public static final String EMPTY_EVENT_ERROR \u003d \"OOPS!!! The description of an event task cannot be empty.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" public static final String EMPTY_TODO_ERROR \u003d \"OOPS!!! The description of a todo task cannot be empty.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_DESCRIPTION_ERROR \u003d \"OOPS!!! The description cannot be empty.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_INDEX_ERROR \u003d \"OOPS!!! The input index is not within the range of [1, %d]. \"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" + \"Please input a index that is within the given range\";","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_TASK_INDEX_ERROR \u003d \"OOPS!!! The input task index is not a number. \"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" + \"Please input a valid task index.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_DEADLINE_FORMAT_ERROR \u003d \"OOPS!!! Please input the deadline task in the \"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" + \"correct format. Example: deadline Quiz 1 /by 01/09/2023 2030\";","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_EVENT_FORMAT_ERROR \u003d \"OOPS!!! Please input the event task in the \"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" + \"correct format. Example: event Tp /from 01/09/2023 2030 /to 01/09/2023 2230\";","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_FROM_AND_TO_ERROR \u003d \"OOPS!!! Start date can not be after than the End date\";","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_TYPE_ERROR \u003d \"Type tag of event should be [T], [D], or [E]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_STATUS_ERROR \u003d \"IsDone tag of event should be [ ], or [X]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" public static final String EMPTY_ERROR \u003d \"OOPS!!! The instruction cannot be empty\";","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" public static final String STORAGE_ERROR \u003d \"OOPS!!! There\u0027s something wrong when reading the storage list\";","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" public static final String TASK_LIST_EMPTY_ERROR \u003d \"OOPS!!! Your task list is currently empty\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" public static final String UNRECOGNIZED_ERROR \u003d \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n \"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" + \"Please type in \\\"help\\\" to check all available commands.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":30}},{"path":"src/main/java/duke/exceptions/FileIoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class FileIoException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private static final String FILEIO_ERROR_MESSAGE \u003d \"OOPS!!! Errors in handling the file ...\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" public FileIoException(String error) {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" super(FILEIO_ERROR_MESSAGE + error);","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":9}},{"path":"src/main/java/duke/exceptions/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class UnknownCommandException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" public UnknownCommandException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":7}},{"path":"src/main/java/duke/io/Loader.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.io;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.UnknownCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.FileIoException;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.ErrorMessages;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"public class Loader {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" private static final String TODO_FLAG \u003d \"[T]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" private static final String DEADLINE_FLAG \u003d \"[D]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" private static final String EVENT_FLAG \u003d \"[E]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" private static final String IS_DONE_FLAG \u003d \"[X]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" private static final String NOT_DONE_FLAG \u003d \"[ ]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" private final String completeFilePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" private final Path parentDirectory;","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" private final File dataFile;","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" public Loader(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" String baseDirectoryPath \u003d Paths.get(\"\").toAbsolutePath().toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" this.completeFilePath \u003d Paths.get(baseDirectoryPath, filePath).toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" this.parentDirectory \u003d Paths.get(baseDirectoryPath, Paths.get(filePath).getParent().toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" this.dataFile \u003d new File(this.completeFilePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" public TaskList load() throws UnknownCommandException, FileIoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" List\u003cString\u003e fileContents \u003d extractFileContents(dataFile);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" for (String contentLine : fileContents) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" interpretAndAddTask(tasks, contentLine);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" throw new FileIoException(ErrorMessages.STORAGE_ERROR);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" private List\u003cString\u003e extractFileContents(File file) throws FileNotFoundException {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":" List\u003cString\u003e fileLines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"mamayuan"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"mamayuan"},"content":" String line \u003d scanner.nextLine().trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"mamayuan"},"content":" fileLines.add(line);","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"mamayuan"},"content":" return fileLines;","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"mamayuan"},"content":" private void interpretAndAddTask(TaskList tasks, String lineContent) throws UnknownCommandException {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"mamayuan"},"content":" String[] taskData \u003d lineContent.split(\"\\\\s\\\\|\\\\s\");","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"mamayuan"},"content":" String taskType \u003d taskData[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"mamayuan"},"content":" boolean isTaskCompleted \u003d taskData[1].equals(IS_DONE_FLAG);","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"mamayuan"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"mamayuan"},"content":" case TODO_FLAG:","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"mamayuan"},"content":" readTodo(tasks, taskData[2], isTaskCompleted);","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"mamayuan"},"content":" case DEADLINE_FLAG:","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"mamayuan"},"content":" readDeadline(tasks, taskData[2], isTaskCompleted, taskData[3]);","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"mamayuan"},"content":" case EVENT_FLAG:","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"mamayuan"},"content":" readEvent(tasks, taskData[2], isTaskCompleted, taskData[3], taskData[4]);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"mamayuan"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"mamayuan"},"content":" String errorMessage \u003d \"OOPS!!! Unrecognized task type: \";","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"mamayuan"},"content":" throw new UnknownCommandException( errorMessage + taskType);","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"mamayuan"},"content":" public static void readTodo(TaskList list, String description, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"mamayuan"},"content":" Todo todo \u003d new Todo(description.strip());","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"mamayuan"},"content":" if (isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"mamayuan"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"mamayuan"},"content":" list.addTask(todo);","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"mamayuan"},"content":" public static void readDeadline(TaskList list, String description, boolean isDone, String date) {","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"mamayuan"},"content":" Deadline deadline \u003d new Deadline(description.trim(), date);","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"mamayuan"},"content":" if (isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"mamayuan"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"mamayuan"},"content":" list.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"mamayuan"},"content":" public static void readEvent(TaskList list, String description, boolean isDone, String from, String to) {","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"mamayuan"},"content":" Event event \u003d new Event(description.strip(), from, to);","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"mamayuan"},"content":" if (isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"mamayuan"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"mamayuan"},"content":" list.addTask(event);","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":119}},{"path":"src/main/java/duke/io/Saver.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.io;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.FileIoException;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.FileIoException;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.ErrorMessages;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"public class Saver {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" private final Path completeFilePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" private final Path parentDirectory;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" public Saver(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" Path currentPath \u003d Paths.get(\"\").toAbsolutePath();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" this.completeFilePath \u003d currentPath.resolve(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" this.parentDirectory \u003d completeFilePath.getParent();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" public void save(TaskList taskList) throws FileIoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" createParentFolderIfNotExists();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" StringBuilder record \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" for (int i \u003d 0; i \u003c taskList.getNumberOfTasks(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":" record.append(task.saveString()).append(System.lineSeparator());","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" writeToFile(record.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" throw new FileIoException(ErrorMessages.STORAGE_ERROR);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" private void writeToFile(String textToAdd) throws IOException {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" Files.write(completeFilePath, textToAdd.getBytes());","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" private void createParentFolderIfNotExists() {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" if (Files.notExists(parentDirectory)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" Files.createDirectories(parentDirectory);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Error occurred in creating directory\");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":61}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private static final String DONE_FLAG \u003d \"[X] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" private static final String UNDONE_FLAG \u003d \"[ ] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" private static final String PRINT_FORMAT \u003d \"[D]%s %s (%s)\";","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" private String by;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" public Deadline(String info, String by) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" super(info, TaskType.DEADLINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" String status \u003d this.isDone() ? DONE_FLAG : UNDONE_FLAG;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" return String.format(PRINT_FORMAT, status, this.getDescription(), by);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":20}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private static final String DONE_FLAG \u003d \"[X] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" private static final String UNDONE_FLAG \u003d \"[ ] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" private static final String PRINT_FORMAT \u003d \"[E]%s %s (from: %s to: %s)\";","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" private String from;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" private String to;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" super(description, TaskType.EVENT);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" String status \u003d this.isDone() ? DONE_FLAG : UNDONE_FLAG;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" return String.format(PRINT_FORMAT, status, this.getDescription(), from, to);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":26}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private static final String DONE_FLAG \u003d \"[X] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" private static final String UNDONE_FLAG \u003d \"[ ] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" private final String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" private final TaskType type;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" public Task(String description, TaskType type) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" return description;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" public boolean isDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" return isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" public void unmark() {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" return (isDone() ? DONE_FLAG : UNDONE_FLAG) + getDescription();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":37}},{"path":"src/main/java/duke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"public class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" public TaskList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" public TaskList(TaskList list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(list.tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" public Task removeTask(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" Task taskToRemove \u003d tasks.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" return taskToRemove;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" public int getNumberOfTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" return this.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" public void clearTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" public void setTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" return this.tasks.isEmpty();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" StringBuilder listContent \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" for (int i \u003d 0; i \u003c this.getNumberOfTasks(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" listContent.append(i + 1).append(\". \").append(this.getTask(i)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" return listContent.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":60}},{"path":"src/main/java/duke/tasks/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" * An enum class that specify the type of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"public enum TaskType {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" TODO, EVENT, DEADLINE","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":8}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private static final String DONE_FLAG \u003d \"[X] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" private static final String UNDONE_FLAG \u003d \"[ ] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" private static final String PRINT_FORMAT \u003d \"[T]%s %s\";","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" super(description, TaskType.TODO);","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" String status \u003d this.isDone() ? DONE_FLAG : UNDONE_FLAG;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" return String.format(PRINT_FORMAT, status, this.getDescription());","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":17}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\Duke.java","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":20,"mamayuan":1}}] +[{"path":"CONTRIBUTORS.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Contributors","lastModifiedDate":"2019-07-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Homepage","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---|:---:|:---:|:---:","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"![](https://avatars0.githubusercontent.com/u/22460123?s\u003d100) | Jeffry Lum | [Github](https://github.com/j-lum/) | [Homepage](https://se.kasugano.moe)","lastModifiedDate":"2019-08-06"},{"lineNumber":6,"author":{"gitId":"-"},"content":"![](https://avatars0.githubusercontent.com/u/1673303?s\u003d100) | Damith C. Rajapakse | [Github](https://github.com/damithc/) | [Homepage](https://www.comp.nus.edu.sg/~damithch/)","lastModifiedDate":"2019-08-06"},{"lineNumber":7,"author":{"gitId":"-"},"content":"# I would like to join this list. How can I help the project","lastModifiedDate":"2019-07-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"For more information, please refer to our [contributor\u0027s guide](https://oss-generic.github.duke.io/process/).","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"-":8,"mamayuan":1}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":1}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.FileIoException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.io.Loader;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import duke.io.Saver;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.UnknownCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"public class Duke {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" private static final String LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" public Duke() {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" tasks \u003d new Loader(\"data/tasks.txt\").load();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" } catch (UnknownCommandException | FileIoException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"OOPS!!! Could not load data from file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Hello! I\u0027m DaDaYuan\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" while (true) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" new Saver(\"data/tasks.txt\").save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" for (int i \u003d 0; i \u003c tasks.getNumberOfTasks(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" System.out.println((i + 1) + \".\" + tasks.getTask(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" String description \u003d input.length() \u003e 5 ? input.substring(5) : \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" throw new Exception(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" tasks.addTask(new Todo(description));","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.getTask(tasks.getNumberOfTasks() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.getNumberOfTasks() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"mamayuan"},"content":" String[] parts \u003d input.split(\" /by \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"mamayuan"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"mamayuan"},"content":" throw new Exception(\"OOPS!!! The deadline of a task cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"mamayuan"},"content":" String description \u003d parts[0].substring(9);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"mamayuan"},"content":" tasks.addTask(new Deadline(description, parts[1]));","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.getTask(tasks.getNumberOfTasks() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.getNumberOfTasks() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"mamayuan"},"content":" String[] parts \u003d input.split(\" /from | /to \", 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"mamayuan"},"content":" if (parts.length \u003c 3) {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"mamayuan"},"content":" throw new Exception(\"OOPS!!! The event timing details are incomplete.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"mamayuan"},"content":" tasks.addTask(new Event(parts[0].substring(6), parts[1], parts[2]));","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.getTask(tasks.getNumberOfTasks() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.getNumberOfTasks() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"mamayuan"},"content":" int index \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"mamayuan"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.getNumberOfTasks()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.getTask(index));","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"mamayuan"},"content":" tasks.removeTask(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.getNumberOfTasks() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"mamayuan"},"content":" throw new Exception(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"mamayuan"},"content":" new Saver(\"data/tasks.txt\").save(tasks); // saving to file after each operation","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"mamayuan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"mamayuan"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"mamayuan"},"content":" scanner.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"mamayuan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"mamayuan"},"content":" new Duke().run();","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":110}},{"path":"src/main/java/duke/exceptions/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" public EmptyDescriptionException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":8}},{"path":"src/main/java/duke/exceptions/ErrorMessages.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class ErrorMessages {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" public static final String EMPTY_DEADLINE_ERROR \u003d \"OOPS!!! The description of a deadline task cannot be empty.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" public static final String EMPTY_EVENT_ERROR \u003d \"OOPS!!! The description of an event task cannot be empty.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" public static final String EMPTY_TODO_ERROR \u003d \"OOPS!!! The description of a todo task cannot be empty.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_DESCRIPTION_ERROR \u003d \"OOPS!!! The description cannot be empty.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_INDEX_ERROR \u003d \"OOPS!!! The input index is not within the range of [1, %d]. \"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" + \"Please input a index that is within the given range\";","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_TASK_INDEX_ERROR \u003d \"OOPS!!! The input task index is not a number. \"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" + \"Please input a valid task index.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_DATE_ERROR \u003d \"OOPS!!! The input date format is invalid. \";","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_DATETIME_ERROR \u003d \"OOPS!!! The input date time format is invalid. \";","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_DEADLINE_FORMAT_ERROR \u003d \"OOPS!!! Please input the deadline task in the \"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" + \"correct format. Example: deadline Quiz 1 /by 01/09/2023 2030\";","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_EVENT_FORMAT_ERROR \u003d \"OOPS!!! Please input the event task in the \"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" + \"correct format. Example: event Tp /from 01/09/2023 2030 /to 01/09/2023 2230\";","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_FROM_AND_TO_ERROR \u003d \"OOPS!!! Start date can not be after than the End date\";","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_TYPE_ERROR \u003d \"Type tag of event should be [T], [D], or [E]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_STATUS_ERROR \u003d \"IsDone tag of event should be [ ], or [X]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" public static final String EMPTY_ERROR \u003d \"OOPS!!! The instruction cannot be empty\";","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" public static final String STORAGE_ERROR \u003d \"OOPS!!! There\u0027s something wrong when reading the storage list\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" public static final String TASK_LIST_EMPTY_ERROR \u003d \"OOPS!!! Your task list is currently empty\";","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" public static final String UNRECOGNIZED_ERROR \u003d \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n \"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" + \"Please type in \\\"help\\\" to check all available commands.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":31}},{"path":"src/main/java/duke/exceptions/FileIoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class FileIoException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private static final String FILEIO_ERROR_MESSAGE \u003d \"OOPS!!! Errors in handling the file ...\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" public FileIoException(String error) {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" super(FILEIO_ERROR_MESSAGE + error);","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":9}},{"path":"src/main/java/duke/exceptions/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class UnknownCommandException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" public UnknownCommandException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":7}},{"path":"src/main/java/duke/io/Loader.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.io;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.UnknownCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.FileIoException;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.ErrorMessages;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"public class Loader {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" private static final String TODO_FLAG \u003d \"[T]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" private static final String DEADLINE_FLAG \u003d \"[D]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" private static final String EVENT_FLAG \u003d \"[E]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" private static final String IS_DONE_FLAG \u003d \"[X]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" private static final String NOT_DONE_FLAG \u003d \"[ ]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" private final String completeFilePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" private final Path parentDirectory;","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" private final File dataFile;","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" public Loader(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" String baseDirectoryPath \u003d Paths.get(\"\").toAbsolutePath().toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" this.completeFilePath \u003d Paths.get(baseDirectoryPath, filePath).toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" this.parentDirectory \u003d Paths.get(baseDirectoryPath, Paths.get(filePath).getParent().toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" this.dataFile \u003d new File(this.completeFilePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" public TaskList load() throws UnknownCommandException, FileIoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" List\u003cString\u003e fileContents \u003d extractFileContents(dataFile);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" for (String contentLine : fileContents) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" interpretAndAddTask(tasks, contentLine);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" throw new FileIoException(ErrorMessages.STORAGE_ERROR);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" private List\u003cString\u003e extractFileContents(File file) throws FileNotFoundException {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":" List\u003cString\u003e fileLines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"mamayuan"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"mamayuan"},"content":" String line \u003d scanner.nextLine().trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"mamayuan"},"content":" fileLines.add(line);","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"mamayuan"},"content":" return fileLines;","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"mamayuan"},"content":" private void interpretAndAddTask(TaskList tasks, String lineContent) throws UnknownCommandException {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"mamayuan"},"content":" String[] taskData \u003d lineContent.split(\"\\\\s\\\\|\\\\s\");","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"mamayuan"},"content":" boolean isTaskCompleted \u003d taskData[1].equals(IS_DONE_FLAG);","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"mamayuan"},"content":" switch (taskData[0]) {","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"mamayuan"},"content":" case TODO_FLAG:","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"mamayuan"},"content":" addTask(tasks, new Todo(taskData[2].strip()), isTaskCompleted);","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"mamayuan"},"content":" case DEADLINE_FLAG:","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"mamayuan"},"content":" addTask(tasks, new Deadline(taskData[2].trim(), taskData[3]), isTaskCompleted);","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"mamayuan"},"content":" case EVENT_FLAG:","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"mamayuan"},"content":" addTask(tasks, new Event(taskData[2].strip(), taskData[3], taskData[4]), isTaskCompleted);","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"mamayuan"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"mamayuan"},"content":" throw new UnknownCommandException(\"OOPS!!! Unrecognized task type: \" + taskData[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"mamayuan"},"content":" private static void addTask(TaskList list, Task task, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"mamayuan"},"content":" if (isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"mamayuan"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"mamayuan"},"content":" list.addTask(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":94}},{"path":"src/main/java/duke/io/Saver.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.io;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.FileIoException;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.FileIoException;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.ErrorMessages;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"public class Saver {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" private final Path completeFilePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" private final Path parentDirectory;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" public Saver(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" Path currentPath \u003d Paths.get(\"\").toAbsolutePath();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" this.completeFilePath \u003d currentPath.resolve(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" this.parentDirectory \u003d completeFilePath.getParent();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" public void save(TaskList taskList) throws FileIoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" createParentFolderIfNotExists();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" StringBuilder record \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" for (int i \u003d 0; i \u003c taskList.getNumberOfTasks(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":" record.append(task.saveString()).append(System.lineSeparator());","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" writeToFile(record.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" throw new FileIoException(ErrorMessages.STORAGE_ERROR);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" private void writeToFile(String textToAdd) throws IOException {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" Files.write(completeFilePath, textToAdd.getBytes());","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" private void createParentFolderIfNotExists() {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" if (Files.notExists(parentDirectory)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" Files.createDirectories(parentDirectory);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Error occurred in creating directory\");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":61}},{"path":"src/main/java/duke/parsers/TimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.parsers;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.UnknownCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.ErrorMessages;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"public class TimeParser {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" private static final String[] DATETIME_FORMATS \u003d {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" \"MMM dd yyyy HHmm\", \"MMM dd yyyy HH:mm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" \"yyyy-MM-dd\u0027T\u0027HH:mm\", \"dd/MM/yyyy HHmm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" \"dd/MM/yyyy HH:mm\", \"yyyy/MM/dd HHmm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" \"yyyy/MM/dd HH:mm\", \"yyyy/MM/dd\u0027T\u0027HHmm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" \"yyyy-MM-dd HHmm\", \"yyyy-MM-dd HH:mm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" \"dd MMM yyyy HHmm\", \"dd MMM yyyy HH:mm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" \"MMM dd, yyyy HHmm\", \"MMM dd, yyyy HH:mm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" \"dd-MM-yyyy HH:mm\", \"dd.MM.yyyy HH:mm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" \"dd/MM/yy HH:mm\", \"yyyy-MM-dd\u0027T\u0027HH:mmZ\",","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" \"MMM dd yyyy hh:mm a\", \"yyyy-MM-dd HH:mm:ss\"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" };","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" private static final String[] DATE_FORMATS \u003d {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" \"MMM dd yyyy\", \"yyyy-MM-dd\", \"dd/MM/yyyy\", \"yyyy/MM/dd\",","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" \"dd MMM yyyy\", \"MMM dd, yyyy\", \"dd-mm-yyyy\",","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" \"dd/MM/yy\", \"yy-MM-dd\", \"dd.MM.yyyy\"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" };","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" private static final List\u003cDateTimeFormatter\u003e ACCEPTABLE_DATE_FORMATTERS \u003d Arrays.stream(DATE_FORMATS)","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" .map(DateTimeFormatter::ofPattern)","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" private static final List\u003cDateTimeFormatter\u003e ACCEPTABLE_DATETIME_FORMATTERS \u003d Arrays.stream(DATETIME_FORMATS)","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" .map(DateTimeFormatter::ofPattern)","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" public static LocalDate parseToLocalDate(String date) throws UnknownCommandException {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" for (DateTimeFormatter formatter : ACCEPTABLE_DATE_FORMATTERS) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" return LocalDate.parse(date, formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" throw new UnknownCommandException(ErrorMessages.INVALID_DATE_ERROR);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" public static LocalDateTime parseToLocalDateTime(String date) throws UnknownCommandException {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" for (DateTimeFormatter formatter : ACCEPTABLE_DATETIME_FORMATTERS) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" return LocalDateTime.parse(date, formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" throw new UnknownCommandException(ErrorMessages.INVALID_DATETIME_ERROR);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":59}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private static final String PRINT_FORMAT \u003d \"[D]%s %s (%s)\";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" private static final String STORE_FORMAT \u003d \"[D] | %s | %s | %s\";","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" private String by;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" public Deadline(String info, String by) {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" super(info, TaskType.DEADLINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" public String saveString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" return String.format(STORE_FORMAT, getFlag(), this.getDescription().trim(), by);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" return String.format(PRINT_FORMAT, getFlag(), this.getDescription(), by);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":23}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private static final String PRINT_FORMAT \u003d \"[E]%s %s (from: %s to: %s)\";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" private static final String STORE_FORMAT \u003d \"[E] | %s %s | %s | %s\";","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" private String from;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" private String to;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" super(description, TaskType.EVENT);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" public String saveString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" return String.format(STORE_FORMAT, getFlag(), this.getDescription().trim(), from, to);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" return String.format(PRINT_FORMAT, getFlag(), this.getDescription(), from, to);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":28}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private static final String DONE_FLAG \u003d \"[X] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" private static final String UNDONE_FLAG \u003d \"[ ] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" private final String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" private final TaskType type;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" public Task(String description, TaskType type) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" return description;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" public boolean isDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" return isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" public void unmark() {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" public String getFlag() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" return this.isDone() ? DONE_FLAG : UNDONE_FLAG;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" public abstract String saveString();","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" return (isDone() ? DONE_FLAG : UNDONE_FLAG) + getDescription();","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":44}},{"path":"src/main/java/duke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"public class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" public TaskList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" public TaskList(TaskList list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(list.tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" public Task removeTask(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" Task taskToRemove \u003d tasks.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" return taskToRemove;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" public int getNumberOfTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" return this.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" public void clearTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" public void setTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" return this.tasks.isEmpty();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" StringBuilder listContent \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" for (int i \u003d 0; i \u003c this.getNumberOfTasks(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" listContent.append(i + 1).append(\". \").append(this.getTask(i)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" return listContent.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":60}},{"path":"src/main/java/duke/tasks/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" * An enum class that specify the type of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"public enum TaskType {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" TODO, EVENT, DEADLINE","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":8}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private static final String PRINT_FORMAT \u003d \"[T]%s %s\";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" private static final String STORE_FORMAT \u003d \"[T] | %s | %s\";","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" super(description, TaskType.TODO);","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" public String saveString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" return String.format(STORE_FORMAT, getFlag(), this.getDescription().trim());","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" return String.format(PRINT_FORMAT, getFlag(), this.getDescription());","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":19}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\Duke.java","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":20,"mamayuan":1}}] diff --git a/mamayuan_ip_master/commits.json b/mamayuan_ip_master/commits.json index eb7a3e8d..3d6db8df 100644 --- a/mamayuan_ip_master/commits.json +++ b/mamayuan_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"mamayuan":[{"date":"2023-09-03","commitResults":[{"hash":"5c08f4a7a7fb73816eb8cbefcd55526ae40190d3","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"a3d3ef334050fab3111d7755cb11a908cd1ef15c","isMergeCommit":false,"messageTitle":"Rename of file","messageBody":"","tags":["Level-0-new"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"c920eb5108cb9d57b7049fae43ba748c64ff0fb0","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e749d9b586f20808ffc6a4866af0986dd5756d4b","isMergeCommit":false,"messageTitle":"Correct missing colon","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"5313878f6616fa7485883eac96dff15dd494ef55","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":4}}},{"hash":"8fbe6a71be4295037d5cf78736f8e53b732ea6ce","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"190c265a2024e744ce5dbd874f899bebbb61e34c","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":4}}},{"hash":"c5b73f0b32121e8136b88e9114c9229343d9067f","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":21}}},{"hash":"54a8f4649dbaccdf2662ca120205b0b499845530","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":118},"bat":{"insertions":1,"deletions":1}}},{"hash":"0e1f88214fa05bd8bf70838c8cec12daf3526345","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"ffc3beae2ed9054728e98069122215260e6ab450","isMergeCommit":false,"messageTitle":"Packages inner classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":85}}},{"hash":"4254a9df1fad39d979d79379282921991964ef1c","isMergeCommit":false,"messageTitle":"Reorganise packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":26}}}]},{"date":"2023-09-05","commitResults":[{"hash":"293be328ce29520b8f1cae8a4e6f17d2f82e56a4","isMergeCommit":false,"messageTitle":"Reorganises packages again","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":12,"deletions":12}}},{"hash":"69d7ab7bd4f1e221bd15e9ad6781ffe96231b246","isMergeCommit":false,"messageTitle":"Fix bugs up to level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":14}}},{"hash":"e6dac5a50befda9d6de9219427da7ac43ff883ea","isMergeCommit":true,"messageTitle":"Merges branches","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8427364167cb345a7e998c9a1851ebc2af2f9c11","isMergeCommit":false,"messageTitle":"fixes bugs up to level-6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"1b7b3253349548e34831a1073086a7d7987ab6d3","isMergeCommit":false,"messageTitle":"Adds Store","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":281,"deletions":0},"md":{"insertions":1,"deletions":1}}},{"hash":"52cfcb3a60e624fc66f7cb3c89a6d7502b31e021","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/mamayuan/ip into branch-Level-7","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/io/Loader.java\n#\tsrc/main/java/duke/io/Saver.java\n","fileTypesAndContributionMap":{}},{"hash":"1d6bdf77f489f69d02d5379d8e010c2d508ed11a","isMergeCommit":false,"messageTitle":"Settles conflicts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":40}}},{"hash":"27bdd651a9b842bfe9b303a420fba45ed15d94e5","isMergeCommit":false,"messageTitle":"Settles conflicts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":118}}}]}]},"authorFileTypeContributionMap":{"mamayuan":{"java":512,"md":1,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":1}},"authorContributionVariance":{"mamayuan":28679.246},"authorDisplayNameMap":{"mamayuan":"CS2103-W14-3 MA Y..YUAN"}} +{"authorDailyContributionsMap":{"mamayuan":[{"date":"2023-09-03","commitResults":[{"hash":"5c08f4a7a7fb73816eb8cbefcd55526ae40190d3","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"a3d3ef334050fab3111d7755cb11a908cd1ef15c","isMergeCommit":false,"messageTitle":"Rename of file","messageBody":"","tags":["Level-0-new"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"c920eb5108cb9d57b7049fae43ba748c64ff0fb0","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e749d9b586f20808ffc6a4866af0986dd5756d4b","isMergeCommit":false,"messageTitle":"Correct missing colon","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"5313878f6616fa7485883eac96dff15dd494ef55","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":4}}},{"hash":"8fbe6a71be4295037d5cf78736f8e53b732ea6ce","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"190c265a2024e744ce5dbd874f899bebbb61e34c","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":4}}},{"hash":"c5b73f0b32121e8136b88e9114c9229343d9067f","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":21}}},{"hash":"54a8f4649dbaccdf2662ca120205b0b499845530","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":118},"bat":{"insertions":1,"deletions":1}}},{"hash":"0e1f88214fa05bd8bf70838c8cec12daf3526345","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"ffc3beae2ed9054728e98069122215260e6ab450","isMergeCommit":false,"messageTitle":"Packages inner classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":85}}},{"hash":"4254a9df1fad39d979d79379282921991964ef1c","isMergeCommit":false,"messageTitle":"Reorganise packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":26}}}]},{"date":"2023-09-05","commitResults":[{"hash":"293be328ce29520b8f1cae8a4e6f17d2f82e56a4","isMergeCommit":false,"messageTitle":"Reorganises packages again","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":12,"deletions":12}}},{"hash":"69d7ab7bd4f1e221bd15e9ad6781ffe96231b246","isMergeCommit":false,"messageTitle":"Fix bugs up to level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":14}}},{"hash":"e6dac5a50befda9d6de9219427da7ac43ff883ea","isMergeCommit":true,"messageTitle":"Merges branches","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8427364167cb345a7e998c9a1851ebc2af2f9c11","isMergeCommit":false,"messageTitle":"fixes bugs up to level-6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"1b7b3253349548e34831a1073086a7d7987ab6d3","isMergeCommit":false,"messageTitle":"Adds Store","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":281,"deletions":0},"md":{"insertions":1,"deletions":1}}},{"hash":"52cfcb3a60e624fc66f7cb3c89a6d7502b31e021","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/mamayuan/ip into branch-Level-7","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/io/Loader.java\n#\tsrc/main/java/duke/io/Saver.java\n","fileTypesAndContributionMap":{}},{"hash":"1d6bdf77f489f69d02d5379d8e010c2d508ed11a","isMergeCommit":false,"messageTitle":"Settles conflicts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":40}}},{"hash":"27bdd651a9b842bfe9b303a420fba45ed15d94e5","isMergeCommit":false,"messageTitle":"Settles conflicts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":118}}},{"hash":"b8c497f00819a15250e8c609568478d49d82d6fb","isMergeCommit":false,"messageTitle":"Finalises level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":38}}},{"hash":"c56540dcb775e6bb9320868e2eab532af866a0f3","isMergeCommit":false,"messageTitle":"Adds TimeParser.java","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":34}}}]}]},"authorFileTypeContributionMap":{"mamayuan":{"java":561,"md":1,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":1}},"authorContributionVariance":{"mamayuan":40546.88},"authorDisplayNameMap":{"mamayuan":"CS2103-W14-3 MA Y..YUAN"}} diff --git a/marcellaantania_ip_master/authorship.json b/marcellaantania_ip_master/authorship.json index 9c52fe7d..fb8ae032 100644 --- a/marcellaantania_ip_master/authorship.json +++ b/marcellaantania_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"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":"marcellaantania"},"content":" mainClass.set(\"thea.Thea\")","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" archiveBaseName \u003d \"thea\"","lastModifiedDate":"2023-09-05"},{"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":{"marcellaantania":2,"-":40}},{"path":"data/thea.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"T | 1 | buy gift for mom","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"D | 0 | cs2103 ip | 2023-09-03 23:59","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"E | 1 | career fair | 2023-08-29 13:00 | 2023-08-30 17:00","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"marcellaantania":3}},{"path":"src/main/java/thea/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":" String taskType;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" Task task;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" public AddCommand(String taskType, Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" ui.taskAdd(task, tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":18}},{"path":"src/main/java/thea/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":" boolean isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" public Command(boolean isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":9}},{"path":"src/main/java/thea/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime dueDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" public Deadline(String taskName, String dueDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDay \u003d dueDate.split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinute \u003d dueDate.split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" this.dueDate \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDay[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[1]),","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[2]),","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"D | %s | %s | %s\", (super.isDone ? \"1\" : \"0\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" super.taskName, this.dueDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[D][%s] %s (by: %s)\", (super.isDone ? \"X\" : \" \"), super.taskName,","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" this.dueDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":29}},{"path":"src/main/java/thea/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" int index;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" ui.taskDelete(tasks.get(this.index), tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" } catch (java.lang.IndexOutOfBoundsException e){","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" tasks.delete(this.index);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":24}},{"path":"src/main/java/thea/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class EmptyDescriptionException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" public EmptyDescriptionException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":7}},{"path":"src/main/java/thea/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime from;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime to;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" public Event(String taskName, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayFrom \u003d from.split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteFrom \u003d from.split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayTo \u003d to.split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteTo \u003d to.split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" this.from \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDayFrom[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[1]),","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[2]),","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" this.to \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDayTo[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[1]),","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[2]),","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"E | %s | %s | %s | %s\", (super.isDone ? \"1\" : \"0\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" super.taskName, this.from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")),","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" this.to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[E][%s] %s (from: %s to: %s)\",","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" (super.isDone ? \"X\" : \" \"), super.taskName,","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")),","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":41}},{"path":"src/main/java/thea/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" super(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" ui.exit();","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":14}},{"path":"src/main/java/thea/FileCorruptedException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class FileCorruptedException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" public FileCorruptedException(String errorMessage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"marcellaantania":7}},{"path":"src/main/java/thea/IndexOutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class IndexOutOfBoundsException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" public IndexOutOfBoundsException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":7}},{"path":"src/main/java/thea/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" int index;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" tasks.mark(this.index);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" ui.taskMark(tasks.get(this.index));","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":20}},{"path":"src/main/java/thea/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" public static Command parse(String fullCommand) throws EmptyDescriptionException, WrongCommandException, WrongDateTimeFormatException {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" String[] commandWords \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" ArrayList\u003cString\u003e commandWordsArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" Collections.addAll(commandWordsArray, commandWords);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" String command \u003d commandWords[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" switch (command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" case \"bye\":","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" case \"list\":","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" return new PrintListCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" int index \u003d Integer.parseInt(commandWords[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" int index \u003d Integer.parseInt(commandWords[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" int index \u003d Integer.parseInt(commandWords[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" case \"todo\":","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" if (commandWordsArray.size() !\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(commandWords[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" return new AddCommand(\"T\", todo);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of a todo cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" if (commandWordsArray.size() !\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" String relevantData \u003d commandWords[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" String[] nameAndTime \u003d relevantData.split(\" /by \");","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDay \u003d nameAndTime[1].split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinute \u003d nameAndTime[1].split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime dueDate \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDay[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[1]),","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[2]),","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[1]));","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" throw new WrongDateTimeFormatException(\"I cannot understand your due date \u0027^\u0027 \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" \"Please write your due date in format yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d new Deadline(nameAndTime[0], nameAndTime[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" return new AddCommand(\"D\", deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of a deadline cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" case \"event\":","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" if (commandWordsArray.size() !\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" String relevantData \u003d commandWords[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" String[] nameAndTime \u003d relevantData.split(\" /from | /to \");","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayFrom \u003d nameAndTime[1].split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteFrom \u003d nameAndTime[1].split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayTo \u003d nameAndTime[2].split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteTo \u003d nameAndTime[2].split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime from \u003d LocalDateTime.of(","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[1]),","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[2]),","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[1]));","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime to \u003d LocalDateTime.of(","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[1]),","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[2]),","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[1]));","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" throw new WrongDateTimeFormatException(\"I cannot understand your date and time \u0027^\u0027 \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" \"Please write your event date and time in format yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d new Event(nameAndTime[0], nameAndTime[1], nameAndTime[2]);","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"marcellaantania"},"content":" return new AddCommand(\"E\", event);","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of an event cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"marcellaantania"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"marcellaantania"},"content":" throw new WrongCommandException(\"Sorry, I don\u0027t understand what that means.. \u0027^\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":93}},{"path":"src/main/java/thea/PrintListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class PrintListCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" public PrintListCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" ui.printList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":13}},{"path":"src/main/java/thea/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" String fileName;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" public Storage(String fileName) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" this.fileName \u003d fileName;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws FileCorruptedException{","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" String currentDir \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" Path dataDirPath \u003d Paths.get(currentDir, \"data\");","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" Path path \u003d Paths.get(currentDir, \"data\", this.fileName);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" if (!Files.exists(dataDirPath)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" String line;","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" ArrayList\u003cTask\u003e retrievedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" Task task;","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" try (BufferedReader bufferReader \u003d Files.newBufferedReader(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" line \u003d bufferReader.readLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" String[] splitLine \u003d line.split(\" [|] \");","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" if (splitLine[0].equals(\"T\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" task \u003d new ToDo(splitLine[2]);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" } else if (splitLine[0].equals(\"D\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" task \u003d new Deadline(splitLine[2], splitLine[3]);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" } else if (splitLine[0].equals(\"E\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" task \u003d new Event(splitLine[2],splitLine[3], splitLine[4]);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" throw new FileCorruptedException(\"Unexpected File Format Found. File might be corrupted.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" if (splitLine[1].equals(\"1\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" retrievedTasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" line \u003d bufferReader.readLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" return retrievedTasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" public void saveTaskList(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" String currentDir \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" Path dataDirPath \u003dPaths.get(currentDir, \"data\");","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" Path path \u003d Paths.get(currentDir, \"data\", this.fileName);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" if(!Files.exists(dataDirPath)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" Files.createDirectories(dataDirPath);","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" Files.createFile(path);","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":" try (BufferedWriter bufferWriter \u003d Files.newBufferedWriter(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" bufferWriter.write(tasks.get(i).toMemoryFormat());","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" bufferWriter.newLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":84}},{"path":"src/main/java/thea/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" final String taskName;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" public void unmarkAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" public String getTaskName() {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" return this.taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" return this.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[%s] %s\", (this.isDone ? \"X\" : \" \"), this.taskName);","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"marcellaantania":32}},{"path":"src/main/java/thea/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"public class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" ArrayList\u003cTask\u003e taskArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" public TaskList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public TaskList(ArrayList\u003cTask\u003e taskArrayList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList \u003d taskArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" return this.taskArrayList.isEmpty();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" public Task get(int i) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" return this.taskArrayList.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" public int size() {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" return this.taskArrayList.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" public void delete(int index) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e (this.size() - 1)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" public void mark(int index) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e (this.size() - 1)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.get(index).markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" public void unmark(int index) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e (this.size() - 1)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.get(index).unmarkAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":55}},{"path":"src/main/java/thea/Thea.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"public class Thea {","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" public Thea(String fileName) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" this.storage \u003d new Storage(fileName);","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" this.tasks \u003d new TaskList(storage.retrieveTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" } catch (FileCorruptedException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" public void run() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" ui.greet();","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" String fullCommand \u003d ui.readNextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" isExit \u003d c.isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" } catch (EmptyDescriptionException | WrongCommandException","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" | WrongDateTimeFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" new Thea(\"thea.txt\").run();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"marcellaantania":37}},{"path":"src/main/java/thea/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" public ToDo(String taskName) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"T | %s | %s\", (super.isDone ? \"1\" : \"0\"), super.taskName);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[T][%s] %s\", (super.isDone ? \"X\" : \" \"), super.taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":17}},{"path":"src/main/java/thea/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" private final Scanner input;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" public Ui() {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" this.input \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" public void greet() {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"Hello! I\u0027m Thea •ᴗ•\\nHow can I help you?\");","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" public void exit() {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"I hope I made your day easier with my service. See you again! \u003eᴗ\u003c\");","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" public void taskMark(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" System.out.printf(\"Great job! ˊᗜˋ I\u0027ve marked this task as done:\\n %s\\n\", task);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" public void taskUnmark(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" System.out.printf(\"Okay, I\u0027ve marked this task as not done yet:\\n %s\\n\", task);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" public void printList(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" System.out.printf(\"%d. %s%n\", i + 1, tasks.get(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"Yay! You have no tasks in your list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" public void taskAdd(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"I have added the following task to your list:\\n \"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" + task.toString() + \"\\nNow you have \" + tasks.size()","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" + (tasks.size() \u003d\u003d 1 ? \" task\" : \" tasks\")","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" + \" in the list. You can do this!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" System.out.println(errorMessage);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" public String readNextLine() {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" return input.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" public void taskDelete(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"I have removed the following task to your list:\\n \"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" + task.toString() + \"\\nNow you have \" + (tasks.size() - 1)","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" + ((tasks.size() - 1) \u003d\u003d 1 ? \" task\" : \" tasks\")","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" + \" in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":58}},{"path":"src/main/java/thea/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" int index;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" tasks.unmark(this.index);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" ui.taskUnmark(tasks.get(this.index));","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":20}},{"path":"src/main/java/thea/WrongCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class WrongCommandException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" public WrongCommandException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":7}},{"path":"src/main/java/thea/WrongDateTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"public class WrongDateTimeFormatException extends Exception{","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" public WrongDateTimeFormatException(String errorMessage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":7}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"todo read a book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"todo sweep the floor","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"deadline CS2103 iP /by tonight","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"event workshop /from Monday 1pm /to 3pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"unmark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":11}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"if not exist C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin mkdir C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"javac -cp C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\src\\main\\java -Xlint:none -d C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\src\\main\\java\\*.java","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":"java -classpath C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin Thea \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":"pause","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":5,"-":18}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"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":"marcellaantania"},"content":" mainClass.set(\"thea.Thea\")","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" archiveBaseName \u003d \"thea\"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" archiveFileName \u003d \u0027thea.jar\u0027","lastModifiedDate":"2023-09-06"},{"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":{"marcellaantania":3,"-":40}},{"path":"data/thea.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"T | 1 | buy gift for mom","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"D | 0 | cs2103 ip | 2023-09-03 23:59","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"E | 1 | career fair | 2023-08-29 13:00 | 2023-08-30 17:00","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"T | 0 | career preparation","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"marcellaantania":4}},{"path":"src/main/java/thea/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable user command which adds a new task to a taskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class has data on the task type and the Task that needs to be added to a taskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" String taskType;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" Task task;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new AddCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" * @param taskType type of task to be added.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" * @param task task to be added.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" public AddCommand(String taskType, Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" * Add the new task to the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" ui.taskAdded(task, tasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":37}},{"path":"src/main/java/thea/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable user command.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * Subclasses of this abstract class are specific","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * commands with specified execute method behaviours.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" boolean isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Command object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" * If the Command type is ExitCommand, isExit is true.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" * @param isExit boolean representing if command is ExitCommand.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" public Command(boolean isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * Execute the user command to the data.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" * To be implemented by subclasses.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":30}},{"path":"src/main/java/thea/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" * Represents a Deadline task.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" * This class has dueDate which is the characteristic of a Deadline task.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime dueDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Deadline object.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" * Converts the dueDate from String to LocalDateTime.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" * @param taskName description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * @param dueDate dueDate in String.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" public Deadline(String taskName, String dueDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDay \u003d dueDate.split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinute \u003d dueDate.split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" this.dueDate \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDay[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[1]),","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[2]),","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in memory format, which means the format","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" * of which the task is saved to the hard disk.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" * @return task in memory format.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"D | %s | %s | %s\", (super.isDone ? \"1\" : \"0\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" super.taskName, this.dueDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in desired string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" * @return task in string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[D][%s] %s (by: %s)\", (super.isDone ? \"X\" : \" \"), super.taskName,","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" this.dueDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":54}},{"path":"src/main/java/thea/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable user command which deletes an existing task in the taskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class has data on the index of task to be deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" int index;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new DeleteCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" * @param index the index of task to be deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * Delete the task specified by index from the taskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" ui.taskDeleted(tasks.get(this.index), tasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" } catch (java.lang.IndexOutOfBoundsException e){","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" tasks.delete(this.index);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":42}},{"path":"src/main/java/thea/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an exception to use when users do not write description of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class EmptyDescriptionException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new EmptyDescriptionException object.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage errorMessage of the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public EmptyDescriptionException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":15}},{"path":"src/main/java/thea/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" * Represents an Event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" * This class has from and to which are the characteristics of an Event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime from;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime to;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Event object.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" * Converts the from and to from String to LocalDateTime.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * @param taskName description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * @param from date and time when the event starts.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" * @param to date and time when the event ends.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" public Event(String taskName, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayFrom \u003d from.split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteFrom \u003d from.split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayTo \u003d to.split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteTo \u003d to.split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" this.from \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDayFrom[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[1]),","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[2]),","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" this.to \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDayTo[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[1]),","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[2]),","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in memory format, which means the format","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" * of which the task is saved to the hard disk.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" * @return task in memory format.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"E | %s | %s | %s | %s\", (super.isDone ? \"1\" : \"0\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" super.taskName, this.from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")),","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" this.to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in desired string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" * @return task in string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[E][%s] %s (from: %s to: %s)\",","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" (super.isDone ? \"X\" : \" \"), super.taskName,","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")),","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":66}},{"path":"src/main/java/thea/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable user command which exits the program.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new ExitCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" * IsExit is true as this is an ExitCommand.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" super(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" * Print the exiting message and notify Main","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * to exit the program.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * Saves the taskList before exiting.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" ui.exit();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":31}},{"path":"src/main/java/thea/FileCorruptedException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an exception to use when data loaded is not in expected format.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class FileCorruptedException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new FileCorruptedException object.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage errorMessage of the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public FileCorruptedException(String errorMessage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"marcellaantania":15}},{"path":"src/main/java/thea/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable user command which finds tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * in the task list according to a keyword.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class has data on the keyword.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"public class FindCommand extends Command{","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" String keyword;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new FindCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" * @param keyword the keyword to be found in tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" * Finds the tasks containing the keyword from the taskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" ui.relevantTasksFound(tasks.find(keyword));","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"marcellaantania":33}},{"path":"src/main/java/thea/IndexOutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an exception to use when users try to change a task that does not exist.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class IndexOutOfBoundsException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new IndexOutOfBoundsException object.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage errorMessage of the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public IndexOutOfBoundsException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":15}},{"path":"src/main/java/thea/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable command that marks a task as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class has data on the index of task to be marked.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" int index;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new MarkCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" * @param index the index of task to be marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * Marks the task specified by index as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" tasks.mark(this.index);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" ui.taskMarked(tasks.get(this.index));","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":38}},{"path":"src/main/java/thea/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" * Represents a Parser that translates the user input from String to Command class.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * Returns the user input as subclasses of Command class.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" * Translates the user input as Command class.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" * @param fullCommand user input in String.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" * @return executable Command class.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * @throws EmptyDescriptionException if user tries","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * to add a new task with no description.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" * @throws WrongCommandException if user write the","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * wrong command (first word input).","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" * @throws WrongDateTimeFormatException if the inputted","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" * date time fails to follow the expected date time format.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" public static Command parse(String fullCommand) throws EmptyDescriptionException,","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" WrongCommandException, WrongDateTimeFormatException {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" String[] commandWords \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" ArrayList\u003cString\u003e commandWordsArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" Collections.addAll(commandWordsArray, commandWords);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" String command \u003d commandWords[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" switch (command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" case \"bye\":","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" case \"list\":","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" return new PrintListCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" int index \u003d Integer.parseInt(commandWords[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" int index \u003d Integer.parseInt(commandWords[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" int index \u003d Integer.parseInt(commandWords[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" case \"find\":","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" return new FindCommand(commandWords[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" case \"todo\":","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" if (commandWordsArray.size() !\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(commandWords[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" return new AddCommand(\"T\", todo);","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of a todo cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" if (commandWordsArray.size() !\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" String relevantData \u003d commandWords[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" String[] nameAndTime \u003d relevantData.split(\" /by \");","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDay \u003d nameAndTime[1].split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinute \u003d nameAndTime[1].split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime dueDate \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDay[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[1]),","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[2]),","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[1]));","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" throw new WrongDateTimeFormatException(\"I cannot understand your due date \u0027^\u0027 \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" \"Please write your due date in format yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d new Deadline(nameAndTime[0], nameAndTime[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":" return new AddCommand(\"D\", deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of a deadline cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":" case \"event\":","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" if (commandWordsArray.size() !\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" String relevantData \u003d commandWords[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" String[] nameAndTime \u003d relevantData.split(\" /from | /to \");","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayFrom \u003d nameAndTime[1].split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteFrom \u003d nameAndTime[1].split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayTo \u003d nameAndTime[2].split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteTo \u003d nameAndTime[2].split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime from \u003d LocalDateTime.of(","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[1]),","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[2]),","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[1]));","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime to \u003d LocalDateTime.of(","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[1]),","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[2]),","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[1]));","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"marcellaantania"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"marcellaantania"},"content":" throw new WrongDateTimeFormatException(\"I cannot understand your date and time \u0027^\u0027 \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"marcellaantania"},"content":" \"Please write your event date and time in format yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d new Event(nameAndTime[0], nameAndTime[1], nameAndTime[2]);","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"marcellaantania"},"content":" return new AddCommand(\"E\", event);","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of an event cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"marcellaantania"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"marcellaantania"},"content":" throw new WrongCommandException(\"Sorry, I don\u0027t understand what that means.. \u0027^\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":113}},{"path":"src/main/java/thea/PrintListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable command that prints the current task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class PrintListCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new MarkCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public PrintListCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" * Prints the current task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" ui.printList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":27}},{"path":"src/main/java/thea/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" * Represents a class that deals with saving and loading data.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" String fileName;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Storage object.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * @param fileName name of file containing past data.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" public Storage(String fileName) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" this.fileName \u003d fileName;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" * Loads data from file.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" * @return a past saved task list from last time use","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" * of program if present, an empty task list if no past data found.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" * @throws FileCorruptedException when the data is not in expected format.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws FileCorruptedException{","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" String currentDir \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" Path dataDirPath \u003d Paths.get(currentDir, \"data\");","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" Path path \u003d Paths.get(currentDir, \"data\", this.fileName);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" if (!Files.exists(dataDirPath)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" String line;","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" ArrayList\u003cTask\u003e retrievedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" Task task;","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" try (BufferedReader bufferReader \u003d Files.newBufferedReader(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" line \u003d bufferReader.readLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" String[] splitLine \u003d line.split(\" [|] \");","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" if (splitLine[0].equals(\"T\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" task \u003d new ToDo(splitLine[2]);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" } else if (splitLine[0].equals(\"D\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" task \u003d new Deadline(splitLine[2], splitLine[3]);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" } else if (splitLine[0].equals(\"E\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" task \u003d new Event(splitLine[2],splitLine[3], splitLine[4]);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" throw new FileCorruptedException(\"Unexpected File Format Found. File might be corrupted.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" if (splitLine[1].equals(\"1\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" retrievedTasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" line \u003d bufferReader.readLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" return retrievedTasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" * Saves the current task list to the file.","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":" * If the file does not exist, makes a new file with","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" * file name as specified during the creation of the Storage object.","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" public void saveTaskList(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" String currentDir \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" Path dataDirPath \u003dPaths.get(currentDir, \"data\");","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":" Path path \u003d Paths.get(currentDir, \"data\", this.fileName);","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":" if(!Files.exists(dataDirPath)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"marcellaantania"},"content":" Files.createDirectories(dataDirPath);","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"marcellaantania"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"marcellaantania"},"content":" Files.createFile(path);","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"marcellaantania"},"content":" try (BufferedWriter bufferWriter \u003d Files.newBufferedWriter(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"marcellaantania"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"marcellaantania"},"content":" bufferWriter.write(tasks.get(i).toMemoryFormat());","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"marcellaantania"},"content":" bufferWriter.newLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":108}},{"path":"src/main/java/thea/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents a task.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class has a description and an indicator of whether the task is done.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" final String taskName;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Task object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" * @param taskName description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * Marks itself as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" * Unmarks itself as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" public void unmarkAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" * Gets description of task.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" * @return description of task.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" public String getTaskName() {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" return this.taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in memory format, which means the format","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" * of which the task is saved to the hard disk.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" * @return task in memory format.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" return this.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in desired string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" * @return task in string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[%s] %s\", (this.isDone ? \"X\" : \" \"), this.taskName);","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"marcellaantania":63}},{"path":"src/main/java/thea/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * Represents a list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" ArrayList\u003cTask\u003e taskArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new empty TaskList object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" public TaskList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new TaskList object from an existing list.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" * @param taskArrayList ArrayList of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" public TaskList(ArrayList\u003cTask\u003e taskArrayList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList \u003d taskArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" * Indicates whether itself is empty.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" return this.taskArrayList.isEmpty();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" * Gets a task of a specified index.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" * @param index index.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" * @return task of the specified index.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" return this.taskArrayList.get(index);","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" * Returns the size of the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" * @return size of the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" public int size() {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" return this.taskArrayList.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" * Adds a task to itself.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" * @param task the task to be added.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" * Deletes a task of a specified index","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" * @param index index.","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":" * @throws IndexOutOfBoundsException if index does not exist.","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" public void delete(int index) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e (this.size() - 1)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" * Marks a task of a specified index","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":" * @param index index.","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" * @throws IndexOutOfBoundsException if index does not exist.","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" public void mark(int index) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e (this.size() - 1)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.get(index).markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"marcellaantania"},"content":" * Unmarks a task of a specified index","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"marcellaantania"},"content":" * @param index index.","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"marcellaantania"},"content":" * @throws IndexOutOfBoundsException if index does not exist.","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"marcellaantania"},"content":" public void unmark(int index) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e (this.size() - 1)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.get(index).unmarkAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"marcellaantania"},"content":" * Finds a task containing the specified keyword","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"marcellaantania"},"content":" * @param keyword keyword.","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"marcellaantania"},"content":" * @return a TaskList of the relevant tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"marcellaantania"},"content":" public TaskList find(String keyword) {","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"marcellaantania"},"content":" TaskList relevantTasks \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"marcellaantania"},"content":" for (int i \u003d 0; i \u003c this.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"marcellaantania"},"content":" if (this.get(i).getTaskName().contains(keyword)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"marcellaantania"},"content":" relevantTasks.add(this.get(i));","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"marcellaantania"},"content":" };","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"marcellaantania"},"content":" return relevantTasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":119}},{"path":"src/main/java/thea/Thea.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Thea is a chatbot that manages user tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * The name Thea comes from Alethea which means \"truth\".","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class Thea {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Thea object.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" * Initializes Ui, Storage and TaskList objects.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" * @param fileName the fileName in which the task data is/should be saved.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" public Thea(String fileName) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" this.storage \u003d new Storage(fileName);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" this.tasks \u003d new TaskList(storage.retrieveTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" } catch (FileCorruptedException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" * Contains logic the main logic of Thea that needs to be run.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" public void run() {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" ui.greet();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" String fullCommand \u003d ui.readNextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" isExit \u003d c.isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" } catch (EmptyDescriptionException | WrongCommandException","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" | WrongDateTimeFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" * Starts the program.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" new Thea(\"thea.txt\").run();","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"marcellaantania":54}},{"path":"src/main/java/thea/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class is the simplest task subclass with just a description.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new ToDo object.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" * @param taskName description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" public ToDo(String taskName) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in memory format, which means the format","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" * of which the task is saved to the hard disk.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" * @return task in memory format.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"T | %s | %s\", (super.isDone ? \"1\" : \"0\"), super.taskName);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in desired string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" * @return task in string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[T][%s] %s\", (super.isDone ? \"X\" : \" \"), super.taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":39}},{"path":"src/main/java/thea/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * Represents the UI which deals with all the interactions with user.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" private final Scanner input;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Ui object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" public Ui() {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" this.input \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * Greets the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" public void greet() {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"Hello! I\u0027m Thea •ᴗ•\\nHow can I help you?\");","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * Sends exiting message to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" public void exit() {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"I hope I made your day easier with my service. See you again! \u003eᴗ\u003c\");","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" * Notifies user of the task marked.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" * @param task marked task.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" public void taskMarked(Task task) {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" System.out.printf(\"Great job! ˊᗜˋ I\u0027ve marked this task as done:\\n %s\\n\", task);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" * Notifies user of the task unmarked.","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" * @param task unmarked task.","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" public void taskUnmarked(Task task) {","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" System.out.printf(\"Okay, I\u0027ve marked this task as not done yet:\\n %s\\n\", task);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" * Prints the current task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" * @param tasks current task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" public void printList(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" System.out.printf(\"%d. %s%n\", i + 1, tasks.get(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"Yay! You have no tasks in your list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":" * Notifies user of the task added.","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" * @param task added task.","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" * @param tasks new task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" public void taskAdded(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"I have added the following task to your list:\\n \"","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" + task.toString() + \"\\nNow you have \" + tasks.size()","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" + (tasks.size() \u003d\u003d 1 ? \" task\" : \" tasks\")","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":" + \" in the list. You can do this!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":" * Shows an error message to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage error message to be shown.","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":" System.out.println(errorMessage);","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"marcellaantania"},"content":" * Reads the next line of the user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"marcellaantania"},"content":" * @return the next line of input.","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"marcellaantania"},"content":" public String readNextLine() {","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"marcellaantania"},"content":" return input.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"marcellaantania"},"content":" * Notifies user of the task deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"marcellaantania"},"content":" * @param task deleted task.","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"marcellaantania"},"content":" * @param tasks old task list before deletion.","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"marcellaantania"},"content":" public void taskDeleted(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"I have removed the following task to your list:\\n \"","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"marcellaantania"},"content":" + task.toString() + \"\\nNow you have \" + (tasks.size() - 1)","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"marcellaantania"},"content":" + ((tasks.size() - 1) \u003d\u003d 1 ? \" task\" : \" tasks\")","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"marcellaantania"},"content":" + \" in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"marcellaantania"},"content":" * Shows user the relevant tasks found from a keyword.","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"marcellaantania"},"content":" * @param relevantTasks list of the relevant tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"marcellaantania"},"content":" public void relevantTasksFound(TaskList relevantTasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"marcellaantania"},"content":" if (relevantTasks.isEmpty()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"No matching task found. Maybe you have finished them?\");","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"marcellaantania"},"content":" System.out.println(\"Here are the matching tasks on your list:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"marcellaantania"},"content":" for (int i \u003d 0; i \u003c relevantTasks.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"marcellaantania"},"content":" System.out.println((i + 1) + \". \" + relevantTasks.get(i));","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":123,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":124,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":124}},{"path":"src/main/java/thea/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable command that unmarks a task as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class has data on the index of task to be unmarked.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" int index;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new UnmarkCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" * @param index the index of task to be unmarked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * Unmarks the task specified by index as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" tasks.unmark(this.index);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" ui.taskUnmarked(tasks.get(this.index));","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":38}},{"path":"src/main/java/thea/WrongCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an exception to use when users writes a wrong command (first word of input).","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class WrongCommandException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new WrongCommandException object.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage errorMessage of the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" public WrongCommandException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":17}},{"path":"src/main/java/thea/WrongDateTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an exception to use when users input date and time in wrong formats.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class WrongDateTimeFormatException extends Exception{","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new WrongDateTimeFormatException object.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage errorMessage of the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" public WrongDateTimeFormatException(String errorMessage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":16}},{"path":"src/test/java/thea/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import org.junit.jupiter.api.BeforeAll;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public void toMemoryFormatTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d new Deadline(\"CS2103 Week 4 ip\", \"2023-09-07 23:59\");","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"D | 0 | CS2103 Week 4 ip | 2023-09-07 23:59\",","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" deadline.toMemoryFormat());","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d new Deadline(\"CS2103 Week 4 ip\", \"2023-09-07 23:59\");","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[D][ ] CS2103 Week 4 ip (by: Sep 7 2023 23:59)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" deadline.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" public void markAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d new Deadline(\"CS2103 Week 4 ip\", \"2023-09-07 23:59\");","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[D][X] CS2103 Week 4 ip (by: Sep 7 2023 23:59)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" deadline.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" public void unmarkAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d new Deadline(\"CS2103 Week 4 ip\", \"2023-09-07 23:59\");","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" deadline.unmarkAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[D][ ] CS2103 Week 4 ip (by: Sep 7 2023 23:59)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" deadline.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"marcellaantania":41}},{"path":"src/test/java/thea/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import org.junit.jupiter.api.BeforeAll;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"public class EventTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public void toMemoryFormatTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d new Event(\"Career Fair\", \"2023-09-12 13:00\",","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" \"2023-09-13 17:00\");","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"E | 0 | Career Fair | 2023-09-12 13:00 | 2023-09-13 17:00\",","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" event.toMemoryFormat());","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d new Event(\"Career Fair\", \"2023-09-12 13:00\",","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" \"2023-09-13 17:00\");","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[E][ ] Career Fair (from: Sep 12 2023 13:00 to: Sep 13 2023 17:00)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" event.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" public void markAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d new Event(\"Career Fair\", \"2023-09-12 13:00\",","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" \"2023-09-13 17:00\");","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[E][X] Career Fair (from: Sep 12 2023 13:00 to: Sep 13 2023 17:00)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" event.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" public void unmarkAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d new Event(\"Career Fair\", \"2023-09-12 13:00\",","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" \"2023-09-13 17:00\");","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" event.unmarkAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[E][ ] Career Fair (from: Sep 12 2023 13:00 to: Sep 13 2023 17:00)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" event.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"marcellaantania":45}},{"path":"src/test/java/thea/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import org.junit.jupiter.api.BeforeAll;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public void toMemoryFormatTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(\"Buy Textbook\");","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"T | 0 | Buy Textbook\",","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" todo.toMemoryFormat());","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(\"Buy Textbook\");","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[T][ ] Buy Textbook\",","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" todo.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" public void markAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(\"Buy Textbook\");","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[T][X] Buy Textbook\",","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" todo.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" public void unmarkAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(\"Buy Textbook\");","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" todo.unmarkAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[T][ ] Buy Textbook\",","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" todo.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"marcellaantania":41}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"todo read a book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"todo sweep the floor","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"deadline CS2103 iP /by tonight","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"event workshop /from Monday 1pm /to 3pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"unmark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":11}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"if not exist C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin mkdir C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"javac -cp C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\src\\main\\java -Xlint:none -d C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\src\\main\\java\\*.java","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":"java -classpath C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin Thea \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":"pause","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":5,"-":18}}] diff --git a/marcellaantania_ip_master/commits.json b/marcellaantania_ip_master/commits.json index e04b940c..89d25640 100644 --- a/marcellaantania_ip_master/commits.json +++ b/marcellaantania_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"marcellaantania":[{"date":"2023-08-23","commitResults":[{"hash":"be790b0b5a8662742103ea027706491d22bdd0ae","isMergeCommit":false,"messageTitle":"Name change from Duke to Thea, changed greeting and exiting message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":10}}},{"hash":"dd21a96ab13978cc3a187a9de09ede3f4e024a72","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"620b910d4ea3368ecedc82168ff908694a434d46","isMergeCommit":false,"messageTitle":"echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"f14d6fe2740b5b39d0f1c53bb4ae341bff961774","isMergeCommit":false,"messageTitle":"add, list function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3}}},{"hash":"3063e4d93a1dcf3e3b2746f17be737647cfe7544","isMergeCommit":false,"messageTitle":"added Task class","messageBody":"","tags":["A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"235c93c60d1777bcb486c9ffd7c33575d14fe244","isMergeCommit":false,"messageTitle":"integrate Thea with Task class, add mark/unmark function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":8}}}]},{"date":"2023-08-24","commitResults":[{"hash":"5f22824c2452d21e98e4d2e0706f418e7edaa12c","isMergeCommit":false,"messageTitle":"Made three different subclasses of Task (ToDo, Deadline, Event)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"916a1b37f8b987ebf5d4fd20e4fe03414ae31ee4","isMergeCommit":false,"messageTitle":"Fix typo","messageBody":"","tags":["A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"e8c672585d45486a7de85221be114594eb7443d5","isMergeCommit":false,"messageTitle":"change access modifier","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"8424b3e2667c0f6f74557e2f0aaac5546c23586c","isMergeCommit":false,"messageTitle":"update Thea to support 3 types of tasks: ToDo, Deadline and Event","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"7ae0c237a99a3a323e7bb2c651af85a696af34fa","isMergeCommit":false,"messageTitle":"remove extra nextline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"66786787dd2182a50c0e2a56349edf88295713f9","isMergeCommit":false,"messageTitle":"remove emoji that cannot be run","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"1b45aa47f2bfa252dcb7f4c8e538451cc4a93b62","isMergeCommit":false,"messageTitle":"Automated Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"bat":{"insertions":5,"deletions":3}}},{"hash":"af87e8f9f002220a648d30a51db13cb628e30d64","isMergeCommit":false,"messageTitle":"Thea-specific exceptions","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"8f639b10622b36fa74bed2f5ba3b12dcf81f2a7f","isMergeCommit":false,"messageTitle":"Update code to throw three types of thea-specific exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":16}}},{"hash":"99c4e21e2f81aeed66f57c5e004d5444f126662d","isMergeCommit":false,"messageTitle":"Add delete function","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"3db93ac8e369ff5ec267ff426ef874dce707a5b3","isMergeCommit":false,"messageTitle":"Read file functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":24,"deletions":2}}},{"hash":"44f47829fb1f1c0e7a0eea3c69c6f934c5648d2d","isMergeCommit":false,"messageTitle":"Add an exception for unexpected file format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"dfa44623d9dca43361218c93e558563b7ed1f271","isMergeCommit":false,"messageTitle":"Update Thea to retrieve data as tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":20,"deletions":5}}},{"hash":"fa7d0c58dba6baca0a7b633e02ede75c72003427","isMergeCommit":false,"messageTitle":"Write tasks to hard disk, not fully functional yet","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":3}}},{"hash":"48aa2c9a928105f625a001a6e563c2b20a5bd697","isMergeCommit":false,"messageTitle":"Update Thea and subclasses of Task to support task saving","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":55,"deletions":30}}},{"hash":"3ad456a6cb5d422e9dd6de1e0ab399abd285a62d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"4a106d08fa46722fd26cfcb57da8165a69e9298b","isMergeCommit":false,"messageTitle":"Save deadline duedates and event timings as LocalDateTime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":48,"deletions":13}}},{"hash":"804274a848b68ce5f21568f4b12bf5513caf818c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"d0680275d3c9e53e73d38e37afc7ac1c5332fe9c","isMergeCommit":false,"messageTitle":"Add a new exception to handle wrong date and time format from the user input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"fca294fc934f44b33ccf602ea1e1df0e3c753c69","isMergeCommit":false,"messageTitle":"Extract classes from the main Thea class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":192,"deletions":0}}},{"hash":"698ef877c307836fa951fa29a089cd0dfcff2be9","isMergeCommit":false,"messageTitle":"Add parser and command class to understand user input and return them as commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":197,"deletions":0}}},{"hash":"aca6cabdcc9061b0443c0af1da0c6852f6c08fe1","isMergeCommit":false,"messageTitle":"Modify Thea class to use the extracted classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":175}}},{"hash":"c8c592023ebc640d743c7b73349ac4b6b031e835","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"09e640b30b0607e8511ec46025c596062cf8dc31","isMergeCommit":false,"messageTitle":"Package everything to the package \"thea\"","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":562,"deletions":524}}},{"hash":"0775ce5a30c17f4d8ce9b7ece9f941dcfadef4ba","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"6a748d4521cfdcc20af213d88da1e161dbab0b4e","isMergeCommit":false,"messageTitle":"Update gradle to work with Thea","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"37de31a3dc84d1c243e1ea6174300b667c59095d","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"marcellaantania":{"java":599,"md":0,"fxml":0,"sh":0,"bat":5,"gradle":2,"txt":14}},"authorContributionVariance":{"marcellaantania":139827.11},"authorDisplayNameMap":{"marcellaantania":"CS2103-F13-2 MARC.. TAN"}} +{"authorDailyContributionsMap":{"marcellaantania":[{"date":"2023-08-23","commitResults":[{"hash":"be790b0b5a8662742103ea027706491d22bdd0ae","isMergeCommit":false,"messageTitle":"Name change from Duke to Thea, changed greeting and exiting message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":10}}},{"hash":"dd21a96ab13978cc3a187a9de09ede3f4e024a72","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"620b910d4ea3368ecedc82168ff908694a434d46","isMergeCommit":false,"messageTitle":"echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"f14d6fe2740b5b39d0f1c53bb4ae341bff961774","isMergeCommit":false,"messageTitle":"add, list function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3}}},{"hash":"3063e4d93a1dcf3e3b2746f17be737647cfe7544","isMergeCommit":false,"messageTitle":"added Task class","messageBody":"","tags":["A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"235c93c60d1777bcb486c9ffd7c33575d14fe244","isMergeCommit":false,"messageTitle":"integrate Thea with Task class, add mark/unmark function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":8}}}]},{"date":"2023-08-24","commitResults":[{"hash":"5f22824c2452d21e98e4d2e0706f418e7edaa12c","isMergeCommit":false,"messageTitle":"Made three different subclasses of Task (ToDo, Deadline, Event)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"916a1b37f8b987ebf5d4fd20e4fe03414ae31ee4","isMergeCommit":false,"messageTitle":"Fix typo","messageBody":"","tags":["A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"e8c672585d45486a7de85221be114594eb7443d5","isMergeCommit":false,"messageTitle":"change access modifier","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"8424b3e2667c0f6f74557e2f0aaac5546c23586c","isMergeCommit":false,"messageTitle":"update Thea to support 3 types of tasks: ToDo, Deadline and Event","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"7ae0c237a99a3a323e7bb2c651af85a696af34fa","isMergeCommit":false,"messageTitle":"remove extra nextline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"66786787dd2182a50c0e2a56349edf88295713f9","isMergeCommit":false,"messageTitle":"remove emoji that cannot be run","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"1b45aa47f2bfa252dcb7f4c8e538451cc4a93b62","isMergeCommit":false,"messageTitle":"Automated Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"bat":{"insertions":5,"deletions":3}}},{"hash":"af87e8f9f002220a648d30a51db13cb628e30d64","isMergeCommit":false,"messageTitle":"Thea-specific exceptions","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"8f639b10622b36fa74bed2f5ba3b12dcf81f2a7f","isMergeCommit":false,"messageTitle":"Update code to throw three types of thea-specific exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":16}}},{"hash":"99c4e21e2f81aeed66f57c5e004d5444f126662d","isMergeCommit":false,"messageTitle":"Add delete function","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"3db93ac8e369ff5ec267ff426ef874dce707a5b3","isMergeCommit":false,"messageTitle":"Read file functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":24,"deletions":2}}},{"hash":"44f47829fb1f1c0e7a0eea3c69c6f934c5648d2d","isMergeCommit":false,"messageTitle":"Add an exception for unexpected file format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"dfa44623d9dca43361218c93e558563b7ed1f271","isMergeCommit":false,"messageTitle":"Update Thea to retrieve data as tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":20,"deletions":5}}},{"hash":"fa7d0c58dba6baca0a7b633e02ede75c72003427","isMergeCommit":false,"messageTitle":"Write tasks to hard disk, not fully functional yet","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":3}}},{"hash":"48aa2c9a928105f625a001a6e563c2b20a5bd697","isMergeCommit":false,"messageTitle":"Update Thea and subclasses of Task to support task saving","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":55,"deletions":30}}},{"hash":"3ad456a6cb5d422e9dd6de1e0ab399abd285a62d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"4a106d08fa46722fd26cfcb57da8165a69e9298b","isMergeCommit":false,"messageTitle":"Save deadline duedates and event timings as LocalDateTime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":48,"deletions":13}}},{"hash":"804274a848b68ce5f21568f4b12bf5513caf818c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"d0680275d3c9e53e73d38e37afc7ac1c5332fe9c","isMergeCommit":false,"messageTitle":"Add a new exception to handle wrong date and time format from the user input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"fca294fc934f44b33ccf602ea1e1df0e3c753c69","isMergeCommit":false,"messageTitle":"Extract classes from the main Thea class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":192,"deletions":0}}},{"hash":"698ef877c307836fa951fa29a089cd0dfcff2be9","isMergeCommit":false,"messageTitle":"Add parser and command class to understand user input and return them as commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":197,"deletions":0}}},{"hash":"aca6cabdcc9061b0443c0af1da0c6852f6c08fe1","isMergeCommit":false,"messageTitle":"Modify Thea class to use the extracted classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":175}}},{"hash":"c8c592023ebc640d743c7b73349ac4b6b031e835","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"09e640b30b0607e8511ec46025c596062cf8dc31","isMergeCommit":false,"messageTitle":"Package everything to the package \"thea\"","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":562,"deletions":524}}},{"hash":"0775ce5a30c17f4d8ce9b7ece9f941dcfadef4ba","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"6a748d4521cfdcc20af213d88da1e161dbab0b4e","isMergeCommit":false,"messageTitle":"Update gradle to work with Thea","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"37de31a3dc84d1c243e1ea6174300b667c59095d","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"898fac89261e2e9687ef2fd66479581f31d0320b","isMergeCommit":false,"messageTitle":"Add test class with dummy tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"52b39c67d13ec19707797210c4203f19cd7ec28e","isMergeCommit":false,"messageTitle":"Add unit tests for ToDo, Deadline and Event classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":0}}},{"hash":"a53162505a8499205dc8a2e80e3ca08ded3d647e","isMergeCommit":false,"messageTitle":"Remove the dummy TheaTest class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":17}}},{"hash":"107cf7a168c577c16ae4f000e2b03718fa13a235","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"3a04a9c1d703fb01f5e342210b1e0667819f9d66","isMergeCommit":false,"messageTitle":"Add jar filename","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"f3506902160c9cf98dc548e794ae1138e3abc559","isMergeCommit":false,"messageTitle":"Add JavaDoc to all classes.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":429,"deletions":4}}},{"hash":"14a115300e75dbcb7449342aaa1fb00e90a1177b","isMergeCommit":false,"messageTitle":"Edit to follow java coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":74}}},{"hash":"6154c6970fbb8fd4e576c3360370ab99b2d8012f","isMergeCommit":false,"messageTitle":"Add keyword find functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":111,"deletions":73}}},{"hash":"ea025e069ee661c7eb22c408232dd166d997aba4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a0ff72506f58eb642a75d550c6c47ad9e38d27db","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/thea/DeleteCommand.java\n","fileTypesAndContributionMap":{}},{"hash":"c1b1c0e4d6b601dd4994e5f954e0a16d838e9dd6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/thea/Parser.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"7090a972f7d93464979ff3bf514e33cabe7093e1","isMergeCommit":false,"messageTitle":"Add JavaDoc for the new Find functionality","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":0}}},{"hash":"4d15435579e966f0c92de8daf99b98921becfa7a","isMergeCommit":false,"messageTitle":"Change method name to adhere to standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":8}}}]}]},"authorFileTypeContributionMap":{"marcellaantania":{"java":1221,"md":0,"fxml":0,"sh":0,"bat":5,"gradle":3,"txt":15}},"authorContributionVariance":{"marcellaantania":169098.72},"authorDisplayNameMap":{"marcellaantania":"CS2103-F13-2 MARC.. TAN"}} diff --git a/migfoo02_ip_master/authorship.json b/migfoo02_ip_master/authorship.json index 14058cec..e371b95a 100644 --- a/migfoo02_ip_master/authorship.json +++ b/migfoo02_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"iris.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"T | 1 | one","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"T | 0 | two","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":"T | 0 | three","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":"T | 1 | one","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":"T | 0 | one","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":"T | 0 | two","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":"D | 0 | one | 2023-01-01","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"migfoo02":7}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":" private String deadlineString;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":" private LocalDate deadlineDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":" public Deadline (String name, String deadlineString) {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":" this.deadlineString \u003d deadlineString;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":" this.deadlineDate \u003d parseDateTime(deadlineString);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":" public String getDeadlineString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":" return this.deadlineString;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":" public String writeTaskToFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":" return String.format(\"%s | %s | %s | %s\", \"D\",","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":" this.isDone() ? 1 : 0,","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":" this.getName(),","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":" this.getDeadlineString());","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"migfoo02"},"content":" public static Deadline readTaskFromFile(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"migfoo02"},"content":" Deadline newDeadlineTask \u003d new Deadline(args[2], args[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"migfoo02"},"content":" if (args[1].equals(\"1\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"migfoo02"},"content":" newDeadlineTask.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"migfoo02"},"content":" return newDeadlineTask;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"migfoo02"},"content":" private LocalDate parseDateTime(String deadlineString) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"migfoo02"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"migfoo02"},"content":" return LocalDate.parse(deadlineString);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"migfoo02"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"migfoo02"},"content":" return null;","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"migfoo02"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"migfoo02"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"migfoo02"},"content":" String deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"migfoo02"},"content":" if (deadlineDate !\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"migfoo02"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"migfoo02"},"content":" deadline \u003d deadlineDate.format(formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"migfoo02"},"content":" else {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"migfoo02"},"content":" deadline \u003d deadlineString;","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"migfoo02"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), deadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"migfoo02"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"migfoo02":55}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":" private String startTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":" private String endTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":" public Event (String name, String startTime, String endTime) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":" public String getStartTime() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":" return this.startTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":" public String getEndTime() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":" return this.endTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":" public String writeTaskToFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":" return String.format(\"%s | %s | %s | %s-%s\", \"D\",","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":" this.isDone() ? 1 : 0,","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":" this.getName(),","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":" this.getStartTime(),","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":" this.getEndTime());","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"migfoo02"},"content":" public static Event readTaskFromFile(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"migfoo02"},"content":" String[] eventTime \u003d args[3].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"migfoo02"},"content":" Event newEventTask \u003d new Event(args[2], eventTime[0], eventTime[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"migfoo02"},"content":" if (args[1].equals(\"1\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"migfoo02"},"content":" newEventTask.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"migfoo02"},"content":" return newEventTask;","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"migfoo02"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"migfoo02"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"migfoo02"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(),","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"migfoo02"},"content":" this.startTime, this.endTime);","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"migfoo02"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"migfoo02":42}},{"path":"src/main/java/Iris.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":"public class Iris {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":" private final Storage taskStorage;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":" private final Parser commandParser;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":" private static ToDoList toDoList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":" public Iris(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":" commandParser \u003d new Parser();","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":" taskStorage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":" toDoList \u003d new ToDoList(taskStorage.loadTask());","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":" public void run() {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":" Ui.welcomeMsg();","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":" commandParser.parseCommand(taskStorage, toDoList, input);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Argument Error: \" + e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Out of Bounds Error: \" + e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"migfoo02"},"content":" scanner.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":30,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"migfoo02"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"migfoo02"},"content":" new Iris(\"iris.txt\").run();","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":2,"migfoo02":32}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":" public void parseCommand(Storage taskStorage, ToDoList toDoList, String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":" String[] sections \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":" String command \u003d sections[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":" String rest \u003d sections.length \u003e 1 ? sections[1] : \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":" switch (command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":" case \"bye\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":" Ui.exitMsg();","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":" System.exit(1);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":" case \"list\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":" Ui.printTasks(toDoList);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":" case \"todo\":","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":" case \"event\":","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":" ToDoList.addTask(toDoList, command, rest);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":" throw new IllegalArgumentException(\"Invalid format.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"migfoo02"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"migfoo02"},"content":" if (rest.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"migfoo02"},"content":" throw new IllegalArgumentException(\"Index is missing.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"migfoo02"},"content":" int index \u003d Integer.parseInt(rest);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"migfoo02"},"content":" toDoList.mark(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"migfoo02"},"content":" Task task \u003d toDoList.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"migfoo02"},"content":" Ui.markTaskMsg(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"migfoo02"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"migfoo02"},"content":" if (rest.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"migfoo02"},"content":" throw new IllegalArgumentException(\"Index is missing.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"migfoo02"},"content":" int index \u003d Integer.parseInt(rest);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"migfoo02"},"content":" toDoList.unmark(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"migfoo02"},"content":" Task task \u003d toDoList.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"migfoo02"},"content":" Ui.unmarkTaskMsg(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"migfoo02"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"migfoo02"},"content":" if (rest.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"migfoo02"},"content":" throw new IllegalArgumentException(\"Index is missing.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"migfoo02"},"content":" int index \u003d Integer.parseInt(rest);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"migfoo02"},"content":" ToDoList.deleteTask(toDoList, index);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"migfoo02"},"content":" default: {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"migfoo02"},"content":" throw new IllegalArgumentException(\"Unknown command.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"migfoo02"},"content":" taskStorage.writeTask(toDoList);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"migfoo02"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"migfoo02":60}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":"import java.util.List;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":" private final String filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":" public ArrayList\u003cTask\u003e loadTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":" ArrayList\u003cTask\u003e toDoList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":" if (file.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":" BufferedReader fileReader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":" String line \u003d fileReader.readLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"migfoo02"},"content":" Task task \u003d Task.readTaskFromFile(line);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"migfoo02"},"content":" toDoList.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"migfoo02"},"content":" line \u003d fileReader.readLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"migfoo02"},"content":" fileReader.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"migfoo02"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Looks like this is your first time here!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Iris will save your files in iris.txt.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"migfoo02"},"content":" boolean fileCreated \u003d file.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"migfoo02"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"migfoo02"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"migfoo02"},"content":" return toDoList;","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"migfoo02"},"content":" public void writeTask(ToDoList toDoList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"migfoo02"},"content":" try (FileWriter fileWriter \u003d new FileWriter(\"iris.txt\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"migfoo02"},"content":" for (int i \u003d 1; i \u003c\u003d toDoList.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"migfoo02"},"content":" Task task \u003d toDoList.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"migfoo02"},"content":" fileWriter.write(task.writeTaskToFile() + \"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"migfoo02"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"An error has occurred whilst writing to file. \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"migfoo02"},"content":" \"Error:\" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"migfoo02"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"migfoo02":54}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":" private String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":" public void markDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":" return this.isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":" public String getName() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":" return this.name;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"migfoo02"},"content":" public abstract String writeTaskToFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"migfoo02"},"content":" public static Task readTaskFromFile(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"migfoo02"},"content":" String[] args \u003d input.split(\" \\\\| \");","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"migfoo02"},"content":" Task task;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"migfoo02"},"content":" switch (args[0]) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"migfoo02"},"content":" case \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"migfoo02"},"content":" task \u003d Todo.readTaskFromFile(args);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"migfoo02"},"content":" case \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"migfoo02"},"content":" task \u003d Deadline.readTaskFromFile(args);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"migfoo02"},"content":" case \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"migfoo02"},"content":" task \u003d Event.readTaskFromFile(args);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"migfoo02"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"migfoo02"},"content":" task \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"migfoo02"},"content":" return task;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"migfoo02"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"migfoo02"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"migfoo02"},"content":" String status \u003d this.isDone ? \"X\" : \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"migfoo02"},"content":" return \"[\" + status + \"] \" + this.name;","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"migfoo02"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"migfoo02":53}},{"path":"src/main/java/ToDoList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":"public class ToDoList {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":" private final ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":" public ToDoList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":" list.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":" public void remove(int index) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":" list.remove(index - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"migfoo02"},"content":" return list.get(index - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"migfoo02"},"content":" public void mark(int index) {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"migfoo02"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"migfoo02"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"migfoo02"},"content":" list.get(index - 1).markDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"migfoo02"},"content":" public void unmark(int index) {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"migfoo02"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"migfoo02"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"migfoo02"},"content":" list.get(index - 1).markUndone();","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"migfoo02"},"content":" public int size() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"migfoo02"},"content":" return list.size();","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"migfoo02"},"content":" public static void addTask(ToDoList toDoList, String command, String description) {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"migfoo02"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"migfoo02"},"content":" throw new IllegalArgumentException(\"Description is missing.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"migfoo02"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"migfoo02"},"content":" if (command.equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"migfoo02"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"migfoo02"},"content":" } else if (command.equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"migfoo02"},"content":" String[] deadlineSections \u003d description.split(\" /by \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"migfoo02"},"content":" String name \u003d deadlineSections[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"migfoo02"},"content":" String deadlineString \u003d deadlineSections[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"migfoo02"},"content":" task \u003d new Deadline(name, deadlineString);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"migfoo02"},"content":" } else if (command.equalsIgnoreCase(\"event\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"migfoo02"},"content":" String[] eventSections \u003d description.split(\" /from \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"migfoo02"},"content":" String name \u003d eventSections[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"migfoo02"},"content":" String startAndEnd \u003d eventSections[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"migfoo02"},"content":" String[] startAndEndSections \u003d startAndEnd.split(\" /to \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"migfoo02"},"content":" String startTime \u003d startAndEndSections[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"migfoo02"},"content":" String endTime \u003d startAndEndSections[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"migfoo02"},"content":" task \u003d new Event(name, startTime, endTime);","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"migfoo02"},"content":" toDoList.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"migfoo02"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"migfoo02"},"content":" Ui.printLength(toDoList);","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"migfoo02"},"content":" public static void deleteTask(ToDoList toDoList, int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"migfoo02"},"content":" Task task \u003d toDoList.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"migfoo02"},"content":" toDoList.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"migfoo02"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"migfoo02"},"content":" Ui.printLength(toDoList);","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"migfoo02"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"migfoo02"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"migfoo02"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"migfoo02"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"migfoo02"},"content":" result.append((i + 1) + \". \" + list.get(i));","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"migfoo02"},"content":" if (i + 1 \u003c list.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"migfoo02"},"content":" result.append(\"\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"migfoo02"},"content":" return result.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"migfoo02"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"migfoo02":92}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":" public Todo (String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":" public String writeTaskToFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":" return String.format(\"%s | %s | %s\", \"T\",","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":" this.isDone() ? 1 : 0,","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":" this.getName());","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":" public static Todo readTaskFromFile(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":" Todo newTodoTask \u003d new Todo(args[2]);","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":" if (args[1].equals(\"1\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":" newTodoTask.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":" return newTodoTask;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"migfoo02":24}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":" private static final String HORIZONTAL_LINE \u003d \" \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":" \"_______________________________________________________________________________\";","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":" public static void welcomeMsg() {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":" String greetings \u003d \"Hello! I\u0027m Iris! \\n What can I do for you?\";","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":" System.out.println(greetings);","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":" public static void exitMsg() {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":" String byeMsg \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":" System.out.println(byeMsg);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":" public static void generalRespond(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"migfoo02"},"content":" public static void markTaskMsg(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done: \\n\" + task);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"migfoo02"},"content":" public static void unmarkTaskMsg(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Okay, I\u0027ve marked this task as not done yet: \\n\" + task);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"migfoo02"},"content":" public static void printTasks(ToDoList toDoList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"migfoo02"},"content":" System.out.println(toDoList);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"migfoo02"},"content":" public static void printLength(ToDoList toDoList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"migfoo02"},"content":" int listSize \u003d toDoList.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Now you have \" + listSize + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"migfoo02"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"migfoo02":47}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"todo first","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"second","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":"deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":"event third /from 4pm /to 6pm","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":"mark 2","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":"unmark 2","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":"deadline fourth /by 7pm","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":"mark 3","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":"delete 1","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":"delete 1","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":"bye","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"migfoo02":15}}] +[{"path":"iris.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"T | 0 | one","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"T | 0 | two","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":"T | 1 | one","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"migfoo02":3}},{"path":"src/main/java/Iris/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"package Iris;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":" private String deadlineString;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":" private LocalDate deadlineDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":" public Deadline (String name, String deadlineString) {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":" this.deadlineString \u003d deadlineString;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":" this.deadlineDate \u003d parseDateTime(deadlineString);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":" public String getDeadlineString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":" return this.deadlineString;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":" public String writeTaskToFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":" return String.format(\"%s | %s | %s | %s\", \"D\",","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":" this.isDone() ? 1 : 0,","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"migfoo02"},"content":" this.getName(),","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"migfoo02"},"content":" this.getDeadlineString());","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"migfoo02"},"content":" public static Deadline readTaskFromFile(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"migfoo02"},"content":" Deadline newDeadlineTask \u003d new Deadline(args[2], args[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"migfoo02"},"content":" if (args[1].equals(\"1\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"migfoo02"},"content":" newDeadlineTask.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"migfoo02"},"content":" return newDeadlineTask;","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"migfoo02"},"content":" private LocalDate parseDateTime(String deadlineString) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"migfoo02"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"migfoo02"},"content":" return LocalDate.parse(deadlineString);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"migfoo02"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"migfoo02"},"content":" return null;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"migfoo02"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"migfoo02"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"migfoo02"},"content":" String deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"migfoo02"},"content":" if (deadlineDate !\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"migfoo02"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"migfoo02"},"content":" deadline \u003d deadlineDate.format(formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"migfoo02"},"content":" else {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"migfoo02"},"content":" deadline \u003d deadlineString;","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"migfoo02"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), deadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"migfoo02"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"migfoo02":57}},{"path":"src/main/java/Iris/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"package Iris;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":" private String startTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":" private String endTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":" public Event (String name, String startTime, String endTime) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":" public String getStartTime() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":" return this.startTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":" public String getEndTime() {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":" return this.endTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":" public String writeTaskToFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":" return String.format(\"%s | %s | %s | %s-%s\", \"D\",","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":" this.isDone() ? 1 : 0,","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":" this.getName(),","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"migfoo02"},"content":" this.getStartTime(),","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"migfoo02"},"content":" this.getEndTime());","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"migfoo02"},"content":" public static Event readTaskFromFile(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"migfoo02"},"content":" String[] eventTime \u003d args[3].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"migfoo02"},"content":" Event newEventTask \u003d new Event(args[2], eventTime[0], eventTime[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"migfoo02"},"content":" if (args[1].equals(\"1\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"migfoo02"},"content":" newEventTask.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"migfoo02"},"content":" return newEventTask;","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"migfoo02"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"migfoo02"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"migfoo02"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(),","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"migfoo02"},"content":" this.startTime, this.endTime);","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"migfoo02"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"migfoo02":44}},{"path":"src/main/java/Iris/Iris.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"package Iris;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":"public class Iris {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":" private final Storage taskStorage;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":" private final Parser commandParser;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":" private static ToDoList toDoList;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":" public Iris(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":" commandParser \u003d new Parser();","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":" taskStorage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":" toDoList \u003d new ToDoList(taskStorage.loadTask());","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":" public void run() {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":" Ui.welcomeMsg();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":" commandParser.parseCommand(taskStorage, toDoList, input);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Argument Error: \" + e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"migfoo02"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Out of Bounds Error: \" + e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"migfoo02"},"content":" scanner.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":31,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"migfoo02"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"migfoo02"},"content":" new Iris(\"iris.txt\").run();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":2,"migfoo02":33}},{"path":"src/main/java/Iris/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"package Iris;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":" public void parseCommand(Storage taskStorage, ToDoList toDoList, String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":" String[] sections \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":" String command \u003d sections[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":" String rest \u003d sections.length \u003e 1 ? sections[1] : \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":" switch (command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":" case \"bye\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":" Ui.exitMsg();","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":" System.exit(1);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":" case \"list\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":" Ui.printTasks(toDoList);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":" case \"todo\":","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":" case \"event\":","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":" ToDoList.addTask(toDoList, command, rest);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"migfoo02"},"content":" throw new IllegalArgumentException(\"Invalid format.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"migfoo02"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"migfoo02"},"content":" if (rest.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"migfoo02"},"content":" throw new IllegalArgumentException(\"Index is missing.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"migfoo02"},"content":" int index \u003d Integer.parseInt(rest);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"migfoo02"},"content":" toDoList.mark(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"migfoo02"},"content":" Task task \u003d toDoList.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"migfoo02"},"content":" Ui.markTaskMsg(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"migfoo02"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"migfoo02"},"content":" if (rest.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"migfoo02"},"content":" throw new IllegalArgumentException(\"Index is missing.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"migfoo02"},"content":" int index \u003d Integer.parseInt(rest);","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"migfoo02"},"content":" toDoList.unmark(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"migfoo02"},"content":" Task task \u003d toDoList.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"migfoo02"},"content":" Ui.unmarkTaskMsg(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"migfoo02"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"migfoo02"},"content":" if (rest.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"migfoo02"},"content":" throw new IllegalArgumentException(\"Index is missing.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"migfoo02"},"content":" int index \u003d Integer.parseInt(rest);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"migfoo02"},"content":" ToDoList.deleteTask(toDoList, index);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"migfoo02"},"content":" default: {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"migfoo02"},"content":" throw new IllegalArgumentException(\"Unknown command.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"migfoo02"},"content":" taskStorage.writeTask(toDoList);","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"migfoo02"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"migfoo02":62}},{"path":"src/main/java/Iris/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"package Iris;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":"import java.util.List;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":" private final String filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":" public ArrayList\u003cTask\u003e loadTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":" ArrayList\u003cTask\u003e toDoList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":" if (file.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":" BufferedReader fileReader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":" String line \u003d fileReader.readLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"migfoo02"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"migfoo02"},"content":" Task task \u003d Task.readTaskFromFile(line);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"migfoo02"},"content":" toDoList.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"migfoo02"},"content":" line \u003d fileReader.readLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"migfoo02"},"content":" fileReader.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"migfoo02"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Looks like this is your first time here!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Iris will save your files in iris.txt.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"migfoo02"},"content":" boolean fileCreated \u003d file.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"migfoo02"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"migfoo02"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"migfoo02"},"content":" return toDoList;","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"migfoo02"},"content":" public void writeTask(ToDoList toDoList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"migfoo02"},"content":" try (FileWriter fileWriter \u003d new FileWriter(\"iris.txt\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"migfoo02"},"content":" for (int i \u003d 1; i \u003c\u003d toDoList.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"migfoo02"},"content":" Task task \u003d toDoList.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"migfoo02"},"content":" fileWriter.write(task.writeTaskToFile() + \"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"migfoo02"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"An error has occurred whilst writing to file. \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"migfoo02"},"content":" \"Error:\" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"migfoo02"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"migfoo02":56}},{"path":"src/main/java/Iris/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"package Iris;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":" private String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":" public void markDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":" return this.isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":" public String getName() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"migfoo02"},"content":" return this.name;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"migfoo02"},"content":" public abstract String writeTaskToFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"migfoo02"},"content":" public static Task readTaskFromFile(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"migfoo02"},"content":" String[] args \u003d input.split(\" \\\\| \");","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"migfoo02"},"content":" Task task;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"migfoo02"},"content":" switch (args[0]) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"migfoo02"},"content":" case \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"migfoo02"},"content":" task \u003d Todo.readTaskFromFile(args);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"migfoo02"},"content":" case \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"migfoo02"},"content":" task \u003d Deadline.readTaskFromFile(args);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"migfoo02"},"content":" case \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"migfoo02"},"content":" task \u003d Event.readTaskFromFile(args);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"migfoo02"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"migfoo02"},"content":" task \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"migfoo02"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"migfoo02"},"content":" return task;","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"migfoo02"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"migfoo02"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"migfoo02"},"content":" String status \u003d this.isDone ? \"X\" : \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"migfoo02"},"content":" return \"[\" + status + \"] \" + this.name;","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"migfoo02"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"migfoo02":55}},{"path":"src/main/java/Iris/ToDoList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"package Iris;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":"public class ToDoList {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":" private final ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":" public ToDoList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":" this.list \u003d list;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":" list.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":" public void remove(int index) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":" list.remove(index - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"migfoo02"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"migfoo02"},"content":" return list.get(index - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"migfoo02"},"content":" public void mark(int index) {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"migfoo02"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"migfoo02"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"migfoo02"},"content":" list.get(index - 1).markDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"migfoo02"},"content":" public void unmark(int index) {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"migfoo02"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"migfoo02"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"migfoo02"},"content":" list.get(index - 1).markUndone();","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"migfoo02"},"content":" public int size() {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"migfoo02"},"content":" return list.size();","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"migfoo02"},"content":" public static void addTask(ToDoList toDoList, String command, String description) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"migfoo02"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"migfoo02"},"content":" throw new IllegalArgumentException(\"Description is missing.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"migfoo02"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"migfoo02"},"content":" if (command.equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"migfoo02"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"migfoo02"},"content":" } else if (command.equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"migfoo02"},"content":" String[] deadlineSections \u003d description.split(\" /by \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"migfoo02"},"content":" String name \u003d deadlineSections[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"migfoo02"},"content":" String deadlineString \u003d deadlineSections[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"migfoo02"},"content":" task \u003d new Deadline(name, deadlineString);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"migfoo02"},"content":" } else if (command.equalsIgnoreCase(\"event\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"migfoo02"},"content":" String[] eventSections \u003d description.split(\" /from \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"migfoo02"},"content":" String name \u003d eventSections[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"migfoo02"},"content":" String startAndEnd \u003d eventSections[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"migfoo02"},"content":" String[] startAndEndSections \u003d startAndEnd.split(\" /to \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"migfoo02"},"content":" String startTime \u003d startAndEndSections[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"migfoo02"},"content":" String endTime \u003d startAndEndSections[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"migfoo02"},"content":" task \u003d new Event(name, startTime, endTime);","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"migfoo02"},"content":" toDoList.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"migfoo02"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"migfoo02"},"content":" Ui.printLength(toDoList);","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"migfoo02"},"content":" public static void deleteTask(ToDoList toDoList, int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"migfoo02"},"content":" Task task \u003d toDoList.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"migfoo02"},"content":" toDoList.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"migfoo02"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"migfoo02"},"content":" Ui.printLength(toDoList);","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"migfoo02"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"migfoo02"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"migfoo02"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"migfoo02"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"migfoo02"},"content":" result.append((i + 1) + \". \" + list.get(i));","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"migfoo02"},"content":" if (i + 1 \u003c list.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"migfoo02"},"content":" result.append(\"\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"migfoo02"},"content":" return result.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"migfoo02"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"migfoo02":94}},{"path":"src/main/java/Iris/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"package Iris;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":" public Todo (String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":" public String writeTaskToFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":" return String.format(\"%s | %s | %s\", \"T\",","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":" this.isDone() ? 1 : 0,","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":" this.getName());","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":" public static Todo readTaskFromFile(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":" Todo newTodoTask \u003d new Todo(args[2]);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":" if (args[1].equals(\"1\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":" newTodoTask.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":" return newTodoTask;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"migfoo02"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"migfoo02":26}},{"path":"src/main/java/Iris/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"package Iris;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":" private static final String HORIZONTAL_LINE \u003d \" \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":" \"_______________________________________________________________________________\";","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":" public static void welcomeMsg() {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":" String greetings \u003d \"Hello! I\u0027m Iris! \\n What can I do for you?\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":" System.out.println(greetings);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":" public static void exitMsg() {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":" String byeMsg \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"migfoo02"},"content":" System.out.println(byeMsg);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"migfoo02"},"content":" public static void generalRespond(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"migfoo02"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"migfoo02"},"content":" public static void markTaskMsg(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done: \\n\" + task);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"migfoo02"},"content":" public static void unmarkTaskMsg(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Okay, I\u0027ve marked this task as not done yet: \\n\" + task);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"migfoo02"},"content":" public static void printTasks(ToDoList toDoList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"migfoo02"},"content":" System.out.println(toDoList);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"migfoo02"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"migfoo02"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"migfoo02"},"content":" public static void printLength(ToDoList toDoList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"migfoo02"},"content":" int listSize \u003d toDoList.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"migfoo02"},"content":" System.out.println(\"Now you have \" + listSize + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"migfoo02"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"migfoo02"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"migfoo02":49}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"migfoo02"},"content":"todo first","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"migfoo02"},"content":"second","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"migfoo02"},"content":"deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"migfoo02"},"content":"event third /from 4pm /to 6pm","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"migfoo02"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"migfoo02"},"content":"mark 2","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"migfoo02"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"migfoo02"},"content":"unmark 2","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"migfoo02"},"content":"deadline fourth /by 7pm","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"migfoo02"},"content":"mark 3","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"migfoo02"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"migfoo02"},"content":"delete 1","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"migfoo02"},"content":"delete 1","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"migfoo02"},"content":"list","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"migfoo02"},"content":"bye","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"migfoo02":15}}] diff --git a/migfoo02_ip_master/commits.json b/migfoo02_ip_master/commits.json index 0bb01d4d..16ff355f 100644 --- a/migfoo02_ip_master/commits.json +++ b/migfoo02_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"migfoo02":[{"date":"2023-08-24","commitResults":[{"hash":"1923ef09b10e775fd67d65596ef86a2cdda2202b","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":6}}},{"hash":"d0d9f8ab08e9112524b6cc3aad51626aa4171f62","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":2}}},{"hash":"cd32d42ecca86edf7fe0c8adf40f75f4948102c5","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":5}}},{"hash":"1f3d96f6910ab8135daae71da595aa07342f2d34","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":5}}},{"hash":"f105a5338378fbdccc11633106ae0f40b8aa1fd1","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":58,"deletions":23}}},{"hash":"959502935cb17e47da77f1ea6f9a6537a9bec465","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"e6e2f451f62343ce6a621cca85b5aa640d53d97d","isMergeCommit":false,"messageTitle":"Change name to Iris","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":14}}},{"hash":"73c825216e973aac92789630d013dd6ebb689776","isMergeCommit":false,"messageTitle":"Add I/O test cases","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":15,"deletions":2},"java":{"insertions":0,"deletions":0}}},{"hash":"be81397a497786685669addf1a3e1d822c8e8b0f","isMergeCommit":false,"messageTitle":"Add read and write function","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":120,"deletions":0}}},{"hash":"ce15b5931318021f05d568700241eaf0c002d358","isMergeCommit":false,"messageTitle":"Revert \"Add read and write function\"","messageBody":"This reverts commit be81397a497786685669addf1a3e1d822c8e8b0f.\n","tags":["Level-0"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"java":{"insertions":0,"deletions":120}}}]},{"date":"2023-09-03","commitResults":[{"hash":"95d75e2557769702f5cb862453d43a24de3d3aa1","isMergeCommit":false,"messageTitle":"add line","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"f3cf2da93510ad66a0e2ec0e07febd04cd1cc3a8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-7","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"99757de96bff4619da18362e555cbddd582934ab","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Add read and write function\"\"","messageBody":"This reverts commit ce15b5931318021f05d568700241eaf0c002d358.\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":120,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"5e5da19f1f44bb745f3952825e0c21364a8a00e3","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":31,"deletions":9}}},{"hash":"94b9406bdc79651170671dc9e086887a7b44d221","isMergeCommit":false,"messageTitle":"Add line","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"c2ab29bcdb1cdf66074bfb941cad996301008c06","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/branch-Level-7\u0027 into branch-Level-7","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"2358da691d9454bb63c24bfd63eee3cdbd75c909","isMergeCommit":false,"messageTitle":"Make the code more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":208,"deletions":177}}},{"hash":"ddf43ab711663dbbc91fae71dcff2ba2abe0b0ea","isMergeCommit":false,"messageTitle":"Make the code more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":12}}}]}]},"authorFileTypeContributionMap":{"migfoo02":{"java":459,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":22}},"authorContributionVariance":{"migfoo02":16870.271},"authorDisplayNameMap":{"migfoo02":"CS2103T-W12-3 MIGU.. YEW"}} +{"authorDailyContributionsMap":{"migfoo02":[{"date":"2023-08-24","commitResults":[{"hash":"1923ef09b10e775fd67d65596ef86a2cdda2202b","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":6}}},{"hash":"d0d9f8ab08e9112524b6cc3aad51626aa4171f62","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":2}}},{"hash":"cd32d42ecca86edf7fe0c8adf40f75f4948102c5","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":5}}},{"hash":"1f3d96f6910ab8135daae71da595aa07342f2d34","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":5}}},{"hash":"f105a5338378fbdccc11633106ae0f40b8aa1fd1","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":58,"deletions":23}}},{"hash":"959502935cb17e47da77f1ea6f9a6537a9bec465","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"e6e2f451f62343ce6a621cca85b5aa640d53d97d","isMergeCommit":false,"messageTitle":"Change name to Iris","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":14}}},{"hash":"73c825216e973aac92789630d013dd6ebb689776","isMergeCommit":false,"messageTitle":"Add I/O test cases","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":15,"deletions":2},"java":{"insertions":0,"deletions":0}}},{"hash":"be81397a497786685669addf1a3e1d822c8e8b0f","isMergeCommit":false,"messageTitle":"Add read and write function","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":120,"deletions":0}}},{"hash":"ce15b5931318021f05d568700241eaf0c002d358","isMergeCommit":false,"messageTitle":"Revert \"Add read and write function\"","messageBody":"This reverts commit be81397a497786685669addf1a3e1d822c8e8b0f.\n","tags":["Level-0"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"java":{"insertions":0,"deletions":120}}}]},{"date":"2023-09-03","commitResults":[{"hash":"95d75e2557769702f5cb862453d43a24de3d3aa1","isMergeCommit":false,"messageTitle":"add line","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"f3cf2da93510ad66a0e2ec0e07febd04cd1cc3a8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-7","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"99757de96bff4619da18362e555cbddd582934ab","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Add read and write function\"\"","messageBody":"This reverts commit ce15b5931318021f05d568700241eaf0c002d358.\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":120,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"5e5da19f1f44bb745f3952825e0c21364a8a00e3","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":31,"deletions":9}}},{"hash":"94b9406bdc79651170671dc9e086887a7b44d221","isMergeCommit":false,"messageTitle":"Add line","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"c2ab29bcdb1cdf66074bfb941cad996301008c06","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/branch-Level-7\u0027 into branch-Level-7","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"2358da691d9454bb63c24bfd63eee3cdbd75c909","isMergeCommit":false,"messageTitle":"Make the code more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":208,"deletions":177}}},{"hash":"ddf43ab711663dbbc91fae71dcff2ba2abe0b0ea","isMergeCommit":false,"messageTitle":"Make the code more OOP","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":12}}},{"hash":"b352bfcde01e434fcc1a25470b55e22abfecaa65","isMergeCommit":false,"messageTitle":"Move classes to package","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":5},"java":{"insertions":17,"deletions":0}}},{"hash":"b039d0dbbdf94f3190555f7f7ce6c4ae7c4508da","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"migfoo02":{"java":476,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":18}},"authorContributionVariance":{"migfoo02":17730.0},"authorDisplayNameMap":{"migfoo02":"CS2103T-W12-3 MIGU.. YEW"}} diff --git a/ncmathan_ip_master/authorship.json b/ncmathan_ip_master/authorship.json index e454cbae..be13b6d9 100644 --- a/ncmathan_ip_master/authorship.json +++ b/ncmathan_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"# Duke.Duke project template","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":"3. After that, locate the `src/main/java/Duke.Duke.java` file, right-click it, and choose `Run Duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ncmathan":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":"ncmathan"},"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":"ncmathan"},"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,"ncmathan":2}},{"path":"file.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"T,1,clean","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"E,1,ceremony,11am,12pm","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ncmathan":2}},{"path":"src/main/java/Duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":" * Class to create and store deadlines.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":" * Extends Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" private LocalDate by;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" * public constructor for Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" * @param val","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" * @param by","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" public Deadline (String val, String by){","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" super(val);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" this.by\u003dLocalDate.parse(by,DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" public String toString(){","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" return \"[D]\"+super.toString() +\" (by: \"+by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))+\")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ncmathan":25}},{"path":"src/main/java/Duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":" * Main class from which Duke program is run.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" private Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" * Main method for Duke.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" * @param args","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" public static void main(String[] args) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" new Duke(\"file.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" * Public constructor for Duke","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" * @param filename for the txt file to be referenced.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":" public Duke (String filename){","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":" ui\u003dnew Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":" storage\u003dnew Storage(filename);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":" tasks\u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ncmathan"},"content":" parser\u003dnew Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"ncmathan"},"content":" * Contains the logic essential to the running of Duke.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"ncmathan"},"content":" public void run(){","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ncmathan"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ncmathan"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ncmathan"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ncmathan"},"content":" String cmd \u003d ui.readCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ncmathan"},"content":" parser.parse(cmd, tasks, storage, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ncmathan"},"content":" isExit \u003d parser.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ncmathan"},"content":" ui.showExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":46,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ncmathan":44,"-":3}},{"path":"src/main/java/Duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":" * Class to contain exceptions thrown from Duke","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"public class DukeException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":" * public constructor for Duke","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":" * @param msg","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" public DukeException(String msg){","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ncmathan":15}},{"path":"src/main/java/Duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":" * Class to generate Events.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":" * Extends task.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" * public constructor for Event.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" * @param val","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" * @param from","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" * @param to","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" public Event (String val, String from, String to){","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" super(val);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" this.from\u003dLocalDate.parse(from,DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" this.to \u003d LocalDate.parse(to,DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":" public String toString(){","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":" return \"[E]\"+super.toString() +\" (from: \"+from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))+\" to: \"+to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))+\")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ncmathan":29}},{"path":"src/main/java/Duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":" * Class to parse the input from user.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":" private boolean isExit;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":" * Default constructor.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" public Parser(){","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" isExit\u003dfalse;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" * static method which takes in instances of other essential classes.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" * @param str","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" * @param list","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" * @param storage","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" * @param ui","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" public void parse(String str, TaskList list, Storage storage,Ui ui){","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" if(str.equals(\"bye\")){","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" isExit\u003dtrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":" else if (str.equals(\"list\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":" list.list(ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":" } else if (str.contains(\"unmark\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ncmathan"},"content":" list.mark(false,str,ui,storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ncmathan"},"content":" } else if (str.contains(\"mark\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ncmathan"},"content":" list.mark(false,str,ui,storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ncmathan"},"content":" } else if (str.startsWith(\"todo \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ncmathan"},"content":" list.todo(str,ui,storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ncmathan"},"content":" } else if (str.startsWith(\"deadline \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ncmathan"},"content":" list.deadline(str,ui,storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ncmathan"},"content":" } else if (str.startsWith(\"event \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ncmathan"},"content":" list.event(str,ui,storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ncmathan"},"content":" } else if (str.startsWith(\"delete \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ncmathan"},"content":" list.delete(str,ui,storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ncmathan"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"ncmathan"},"content":" * Checks if program should still run.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"ncmathan"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"ncmathan"},"content":" public boolean isExit(){","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ncmathan"},"content":" return isExit;","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ncmathan":58}},{"path":"src/main/java/Duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" * Class to read and write to text file.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" private String file;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" * Constructor taking in file name.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" * @param file","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" public Storage(String file){","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" this.file\u003dfile;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" * Method to read from text file to load to ArrayList.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":" public ArrayList\u003cTask\u003e load(){","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":" ArrayList\u003cTask\u003e list \u003dnew ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ncmathan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ncmathan"},"content":" BufferedReader br \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ncmathan"},"content":" String st;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ncmathan"},"content":" while ((st \u003d br.readLine()) !\u003d null){","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ncmathan"},"content":" String[] out\u003dst.split(\",\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ncmathan"},"content":" switch (out[0]){","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ncmathan"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ncmathan"},"content":" Todo e \u003dnew Todo(out[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ncmathan"},"content":" if(out[1].equals(\"1\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ncmathan"},"content":" e.setDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ncmathan"},"content":" list.add(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ncmathan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ncmathan"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ncmathan"},"content":" Event f \u003dnew Event(out[2],out[3],out[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ncmathan"},"content":" if(out[1].equals(\"1\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ncmathan"},"content":" f.setDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ncmathan"},"content":" list.add(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ncmathan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ncmathan"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ncmathan"},"content":" Deadline g \u003dnew Deadline(out[2],out[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ncmathan"},"content":" if(out[1].equals(\"1\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ncmathan"},"content":" g.setDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ncmathan"},"content":" list.add(g);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ncmathan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ncmathan"},"content":" catch (Exception e){","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ncmathan"},"content":" return new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ncmathan"},"content":" return list;","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"ncmathan"},"content":" * Adds text to file.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"ncmathan"},"content":" * @param text","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"ncmathan"},"content":" public void addToFile(String text){","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ncmathan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ncmathan"},"content":" File f \u003d new File(file);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ncmathan"},"content":" FileWriter fw \u003d new FileWriter(f, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ncmathan"},"content":" fw.append(text);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ncmathan"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ncmathan"},"content":" catch (Exception e){","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ncmathan"},"content":" System.out.println(\"Error:\" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"ncmathan"},"content":" * Updates a particular line in the text file to store if that entry","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"ncmathan"},"content":" * should be marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"ncmathan"},"content":" * @param num line number","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"ncmathan"},"content":" * @param val whether the entry should be marked","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"ncmathan"},"content":" public void updateFile(int num,boolean val){","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ncmathan"},"content":" File file \u003d new File(this.file);","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ncmathan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ncmathan"},"content":" Scanner sc \u003d new Scanner(file);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ncmathan"},"content":" String line\u003d\"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ncmathan"},"content":" String out\u003d\"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ncmathan"},"content":" int count\u003d0;","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ncmathan"},"content":" while(sc.hasNextLine()){","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ncmathan"},"content":" line\u003dsc.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ncmathan"},"content":" count+\u003d1;","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ncmathan"},"content":" if(count!\u003dnum)","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ncmathan"},"content":" out+\u003dline+\"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ncmathan"},"content":" else{","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ncmathan"},"content":" if(val)","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ncmathan"},"content":" out+\u003dline.substring(0,2)+\"1\"+line.substring(3)+\"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ncmathan"},"content":" else","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ncmathan"},"content":" out+\u003dline.substring(0,2)+\"0\"+line.substring(3)+\"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ncmathan"},"content":" FileWriter fw\u003dnew FileWriter(file,false);","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"ncmathan"},"content":" fw.append(out);","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ncmathan"},"content":" fw.flush();","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ncmathan"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ncmathan"},"content":" sc.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"ncmathan"},"content":" }catch (Exception e){","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"ncmathan"},"content":" System.out.println(\"Error:\"+e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"ncmathan"},"content":" * Delete a particular line from the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"ncmathan"},"content":" * @param num","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"ncmathan"},"content":" public void deleteFromFile(int num) {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"ncmathan"},"content":" File f \u003d new File(file);","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ncmathan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ncmathan"},"content":" Scanner sc \u003d new Scanner(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ncmathan"},"content":" String line\u003d\"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ncmathan"},"content":" String out\u003d\"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ncmathan"},"content":" int count\u003d0;","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ncmathan"},"content":" while(sc.hasNextLine()){","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"ncmathan"},"content":" line\u003dsc.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"ncmathan"},"content":" count+\u003d1;","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"ncmathan"},"content":" if(count!\u003dnum)","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"ncmathan"},"content":" out+\u003dline+\"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ncmathan"},"content":" FileWriter fw\u003dnew FileWriter(file,false);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"ncmathan"},"content":" fw.append(out);","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"ncmathan"},"content":" fw.flush();","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ncmathan"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"ncmathan"},"content":" sc.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"ncmathan"},"content":" }catch (Exception e){","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"ncmathan"},"content":" System.out.println(\"Error:\"+e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ncmathan":145}},{"path":"src/main/java/Duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":" * Class to encapsulate the features of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"public class Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":" private String task;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" * public constructor for Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" * @param task","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" public Task(String task){","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" isDone\u003dfalse;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" public void setDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" isDone\u003dtrue;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" public void setUndone(){","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" isDone\u003dfalse;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" public boolean getDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":" return isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":" public boolean contains (String val) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ncmathan"},"content":" return task.contains(val);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ncmathan"},"content":" public String toString(){","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ncmathan"},"content":" if(isDone)","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ncmathan"},"content":" return \"[X] \"+ task;","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ncmathan"},"content":" return \"[ ] \"+ task;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ncmathan":40}},{"path":"src/main/java/Duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":" * Stores the list of tasks in ArrayList and carries out the functions.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" * Default constructor.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" public TaskList(){","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" list \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" * Constructor to load arraylist from another source.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" * @param list","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" public TaskList(ArrayList\u003cTask\u003e list){","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":" * prints the tasks stored in list.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ncmathan"},"content":" * @param ui","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ncmathan"},"content":" public void list(Ui ui){","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ncmathan"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ncmathan"},"content":" int j \u003d i + 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ncmathan"},"content":" ui.print(j + \".\" + list.get(i) + \"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ncmathan"},"content":" * Marks a particular task as done or undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"ncmathan"},"content":" * @param mark","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"ncmathan"},"content":" * @param str","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"ncmathan"},"content":" * @param ui","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"ncmathan"},"content":" * @param storage","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"ncmathan"},"content":" public void mark(boolean mark,String str, Ui ui, Storage storage){","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ncmathan"},"content":" String val \u003d str.replaceAll(\"[^0-9]\", \"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ncmathan"},"content":" int index \u003d Integer.parseInt(val);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ncmathan"},"content":" if(mark){","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ncmathan"},"content":" list.get(index-1).setDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ncmathan"},"content":" storage.updateFile(index,true);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ncmathan"},"content":" ui.print(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ncmathan"},"content":" else{","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ncmathan"},"content":" list.get(index-1).setUndone();","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ncmathan"},"content":" storage.updateFile(index,false);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ncmathan"},"content":" ui.print(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ncmathan"},"content":" ui.print(\"\\t\" + list.get(index-1) + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"ncmathan"},"content":" * Creates a todo instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"ncmathan"},"content":" * @param str","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"ncmathan"},"content":" * @param ui","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"ncmathan"},"content":" * @param storage","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"ncmathan"},"content":" public void todo(String str, Ui ui, Storage storage){","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ncmathan"},"content":" str \u003d str.substring(5);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ncmathan"},"content":" if (str.isEmpty())","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! The description of a todo cannot be empty.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ncmathan"},"content":" list.add(new Todo(str));","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ncmathan"},"content":" storage.addToFile(\"T,0,\"+str);","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ncmathan"},"content":" ui.print(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ncmathan"},"content":" \"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ncmathan"},"content":" ui.print(\"\\t\" + list.get(list.size() - 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ncmathan"},"content":" ui.print(\"Now you have \" + list.size() + \" tasks in your list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"ncmathan"},"content":" * Converts date from string to LocalDate object.","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"ncmathan"},"content":" * @param input","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"ncmathan"},"content":" * @param ui","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"ncmathan"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"ncmathan"},"content":" public LocalDate changeDateFormat(String input,Ui ui){","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ncmathan"},"content":" LocalDate date\u003dnull;","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ncmathan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ncmathan"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ncmathan"},"content":" date \u003d LocalDate.parse(input,format);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ncmathan"},"content":" }catch (Exception e){","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! Improper date format.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ncmathan"},"content":" return date;","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"ncmathan"},"content":" * Creates new deadline instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"ncmathan"},"content":" * @param str","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"ncmathan"},"content":" * @param ui","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"ncmathan"},"content":" * @param storage","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"ncmathan"},"content":" public void deadline(String str, Ui ui, Storage storage){","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ncmathan"},"content":" str \u003d str.substring(9);","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"ncmathan"},"content":" if (str.isEmpty())","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! The description of a deadline cannot be empty.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"ncmathan"},"content":" String[] arr \u003d str.split(\" /by \");","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"ncmathan"},"content":" if (arr.length\u003c2)","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! Insufficient parameters passed to deadline.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ncmathan"},"content":" LocalDate date\u003dchangeDateFormat(arr[1],ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ncmathan"},"content":" arr[1]\u003ddate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ncmathan"},"content":" list.add(new Deadline(arr[0], arr[1]));","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ncmathan"},"content":" storage.addToFile(\"D,0,\"+arr[0]+\",\"+arr[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ncmathan"},"content":" ui.print(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"ncmathan"},"content":" \"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"ncmathan"},"content":" ui.print(\"\\t\" + list.get(list.size() - 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"ncmathan"},"content":" ui.print(\"Now you have \" + list.size() + \" tasks in your list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"ncmathan"},"content":" * Creates new event instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"ncmathan"},"content":" * @param str","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"ncmathan"},"content":" * @param ui","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"ncmathan"},"content":" * @param storage","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"ncmathan"},"content":" public void event(String str, Ui ui, Storage storage){","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"ncmathan"},"content":" str \u003d str.substring(6);","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"ncmathan"},"content":" if (str.isEmpty())","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! The description of a event cannot be empty.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"ncmathan"},"content":" String[] arr \u003d str.split(\" /from \");","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"ncmathan"},"content":" if (arr.length\u003c2)","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! Insufficient parameters passed to event.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"ncmathan"},"content":" String[] time \u003d arr[1].split(\" /to \");","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"ncmathan"},"content":" if (time.length\u003c2)","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! Insufficient parameters passed to event.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"ncmathan"},"content":" LocalDate date\u003dchangeDateFormat(time[0],ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"ncmathan"},"content":" time[0]\u003ddate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"ncmathan"},"content":" date\u003dchangeDateFormat(time[1],ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"ncmathan"},"content":" time[1]\u003ddate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"ncmathan"},"content":" list.add(new Event(arr[0], time[0], time[1]));","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"ncmathan"},"content":" storage.addToFile(\"E,0,\"+arr[0]+\",\"+time[0]+\",\"+time[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"ncmathan"},"content":" ui.print( \"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"ncmathan"},"content":" ui.print(\"\\t\" + list.get(list.size() - 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"ncmathan"},"content":" ui.print(\"Now you have \" + list.size() + \" tasks in your list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"ncmathan"},"content":" * Deletes a particular task.","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"ncmathan"},"content":" * @param str","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"ncmathan"},"content":" * @param ui","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"ncmathan"},"content":" * @param storage","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"ncmathan"},"content":" public void delete(String str, Ui ui, Storage storage){","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"ncmathan"},"content":" str \u003d str.substring(7);","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"ncmathan"},"content":" String val \u003d str.replaceAll(\"[^0-9]\", \"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"ncmathan"},"content":" int index \u003d Integer.parseInt(val);","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"ncmathan"},"content":" if (str.isEmpty())","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! The description of a delete cannot be empty.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"ncmathan"},"content":" ui.print(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"ncmathan"},"content":" ui.print(\"\\t\" + list.get(index - 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"ncmathan"},"content":" list.remove(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"ncmathan"},"content":" storage.deleteFromFile(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"ncmathan"},"content":" ui.print(\"Now you have \" + list.size() + \" tasks in your list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"ncmathan"},"content":" public void find (String str, Ui ui) {","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"ncmathan"},"content":" str \u003d str.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"ncmathan"},"content":" ui.print(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"ncmathan"},"content":" int j \u003d 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"ncmathan"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"ncmathan"},"content":" if (list.get(i).contains(str)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"ncmathan"},"content":" ui.print(j + \".\" + list.get(i) + \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"ncmathan"},"content":" j +\u003d 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":203,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ncmathan":206}},{"path":"src/main/java/Duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":" * Class to create todo instances.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":" * Extends Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":"public class Todo extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":" * Constructor fof todo","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":" * @param val","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" public Todo (String val){","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" super(val);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" public String toString(){","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" return \"[T]\"+super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ncmathan":18}},{"path":"src/main/java/Duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":" * Class to handle interactions with user.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" * Default constructor.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" public Ui(){","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" scanner\u003dnew Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" * reads user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" public String readCommand(){","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":" * Prints welcome message.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":" public void showWelcome(){","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ncmathan"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ncmathan"},"content":" \" Hello! I\u0027m Mathan\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ncmathan"},"content":" \" What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"ncmathan"},"content":" * Prints exit message.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"ncmathan"},"content":" public void showExit(){","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ncmathan"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ncmathan"},"content":" \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"ncmathan"},"content":" * Prints line spacer.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"ncmathan"},"content":" public void showLine(){","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ncmathan"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"ncmathan"},"content":" * Prints text to user.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"ncmathan"},"content":" * @param str","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"ncmathan"},"content":" public void print(String str){","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ncmathan"},"content":" System.out.println(str);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"ncmathan"},"content":" * Prints DukeException errors.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"ncmathan"},"content":" * @param e","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"ncmathan"},"content":" public void handleError(DukeException e){","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ncmathan"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ncmathan":66}},{"path":"src/test/java/Duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" public void testAddToFile(){","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" File f \u003d new File(\"testfile.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" FileWriter fw \u003d new FileWriter(f, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" fw.append(\"hello\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" Storage storage \u003d new Storage(\"testfile.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" storage.addToFile(\"bye\");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" Scanner scanner \u003d new Scanner(f);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" assertEquals(\"hellobye\",scanner.nextLine());","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" }catch (Exception e){","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" System.out.println(\"Exception while testing: \"+e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ncmathan":27}},{"path":"src/test/java/Duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":"import java.util.Date;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" public void testChangeDateFormat(){","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" assertEquals(null,new TaskList().changeDateFormat(\"2019\",new Ui()));","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"yyyyMMdd\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" LocalDate date \u003d LocalDate.parse(\"20190404\",format);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" assertEquals(date,new TaskList().changeDateFormat(\"2019-04-04\",new Ui()));","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ncmathan":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ncmathan":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":"ncmathan"},"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":{"-":20,"ncmathan":1}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"# Duke.Duke project template","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":"3. After that, locate the `src/main/java/Duke.Duke.java` file, right-click it, and choose `Run Duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ncmathan":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":"ncmathan"},"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":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"ncmathan"},"content":" mainClass.set(\"Duke.Duke\")","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"ncmathan":17}},{"path":"file.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"T,1,clean","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"E,1,ceremony,11am,12pm","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"ncmathan":2}},{"path":"src/main/java/Duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":" * Class to create and store deadlines.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":" * Extends Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" private LocalDate by;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" * public constructor for Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" * @param val","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" * @param by","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" public Deadline (String val, String by){","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" super(val);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" this.by\u003dLocalDate.parse(by,DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" public String toString(){","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" return \"[D]\"+super.toString() +\" (by: \"+by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))+\")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ncmathan":25}},{"path":"src/main/java/Duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ncmathan"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ncmathan"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ncmathan"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ncmathan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ncmathan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ncmathan"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ncmathan"},"content":" dialog.setMinSize(Label.USE_PREF_SIZE,Label.USE_PREF_SIZE);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ncmathan"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"ncmathan"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"ncmathan"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"ncmathan"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"ncmathan"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"ncmathan"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"ncmathan"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ncmathan"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"ncmathan"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ncmathan"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"ncmathan"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"ncmathan"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"ncmathan"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ncmathan":62}},{"path":"src/main/java/Duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" * Main class from which Duke program is run.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":" private Scene scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ncmathan"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ncmathan"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ncmathan"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ncmathan"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ncmathan"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"ncmathan"},"content":" private Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"ncmathan"},"content":" * Main method for Duke.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ncmathan"},"content":" * @param args","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"ncmathan"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"ncmathan"},"content":" public static void main(String[] args) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ncmathan"},"content":" new Duke(\"file.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ncmathan"},"content":" public Duke(){","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ncmathan"},"content":" ui\u003dnew Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"ncmathan"},"content":" storage\u003dnew Storage(\"file.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ncmathan"},"content":" tasks\u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"ncmathan"},"content":" parser\u003dnew Parser();","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"ncmathan"},"content":" * Public constructor for Duke","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"ncmathan"},"content":" * @param filename for the txt file to be referenced.","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"ncmathan"},"content":" public Duke (String filename){","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ncmathan"},"content":" ui\u003dnew Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ncmathan"},"content":" storage\u003dnew Storage(filename);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ncmathan"},"content":" tasks\u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ncmathan"},"content":" parser\u003dnew Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"ncmathan"},"content":" * Contains the logic essential to the running of Duke.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"ncmathan"},"content":" public void run(){","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ncmathan"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ncmathan"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ncmathan"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ncmathan"},"content":" String cmd \u003d ui.readCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ncmathan"},"content":" parser.parse(cmd, tasks, storage, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ncmathan"},"content":" isExit \u003d parser.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"ncmathan"},"content":" ui.showExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":81,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"ncmathan"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"ncmathan"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"ncmathan"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"ncmathan"},"content":" parser.parse(input, tasks, storage, ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"ncmathan"},"content":" if (parser.isExit()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"ncmathan"},"content":" ui.showExit();","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"ncmathan"},"content":" return ui.emptyBuffer();","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"ncmathan"},"content":" public boolean hasEnded() {","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"ncmathan"},"content":" return parser.isExit();","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ncmathan":96,"-":3}},{"path":"src/main/java/Duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":" * Class to contain exceptions thrown from Duke","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"public class DukeException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":" * public constructor for Duke","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":" * @param msg","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" public DukeException(String msg){","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ncmathan":15}},{"path":"src/main/java/Duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":" * Class to generate Events.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":" * Extends task.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" * public constructor for Event.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" * @param val","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" * @param from","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" * @param to","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" public Event (String val, String from, String to){","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" super(val);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" this.from\u003dLocalDate.parse(from,DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" this.to \u003d LocalDate.parse(to,DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":" public String toString(){","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":" return \"[E]\"+super.toString() +\" (from: \"+from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))+\" to: \"+to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))+\")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ncmathan":29}},{"path":"src/main/java/Duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ncmathan":12}},{"path":"src/main/java/Duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" stage.setTitle(\"Duke ChatBot\");","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ncmathan":32}},{"path":"src/main/java/Duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":" private boolean hasEnded;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ncmathan"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ncmathan"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ncmathan"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ncmathan"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ncmathan"},"content":" ui\u003dnew Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ncmathan"},"content":" hasEnded \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ncmathan"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ncmathan"},"content":" DialogBox.getDukeDialog(ui.getWelcome(), dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ncmathan"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ncmathan"},"content":" dialogContainer.autosize();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"ncmathan"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"ncmathan"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"ncmathan"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"ncmathan"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"ncmathan"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ncmathan"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"ncmathan"},"content":" if (!hasEnded) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"ncmathan"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"ncmathan"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ncmathan"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"ncmathan"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"ncmathan"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"ncmathan"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"ncmathan"},"content":" hasEnded \u003d duke.hasEnded();","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"ncmathan"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ncmathan":64}},{"path":"src/main/java/Duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":" * Class to parse the input from user.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":" private boolean isExit;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":" * Default constructor.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" public Parser(){","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" isExit\u003dfalse;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" * static method which takes in instances of other essential classes.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" * @param str","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" * @param list","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" * @param storage","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" * @param ui","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" public void parse(String str, TaskList list, Storage storage,Ui ui){","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" if(str.equals(\"bye\")){","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" isExit\u003dtrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":" else if (str.equals(\"list\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":" list.list(ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":" } else if (str.contains(\"unmark\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ncmathan"},"content":" list.mark(false,str,ui,storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ncmathan"},"content":" } else if (str.contains(\"mark\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ncmathan"},"content":" list.mark(true,str,ui,storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"ncmathan"},"content":" } else if (str.startsWith(\"todo \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ncmathan"},"content":" list.todo(str,ui,storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ncmathan"},"content":" } else if (str.startsWith(\"deadline \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ncmathan"},"content":" list.deadline(str,ui,storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ncmathan"},"content":" } else if (str.startsWith(\"event \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ncmathan"},"content":" list.event(str,ui,storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ncmathan"},"content":" } else if (str.startsWith(\"delete \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ncmathan"},"content":" list.delete(str,ui,storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ncmathan"},"content":" } else if (str.startsWith(\"find \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"ncmathan"},"content":" list.find(str,ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"ncmathan"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"ncmathan"},"content":" * Checks if program should still run.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"ncmathan"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"ncmathan"},"content":" public boolean isExit(){","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ncmathan"},"content":" return isExit;","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ncmathan":58}},{"path":"src/main/java/Duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" * Class to read and write to text file.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" private String file;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" * Constructor taking in file name.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" * @param file","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" public Storage(String file){","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" this.file\u003dfile;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" * Method to read from text file to load to ArrayList.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":" public ArrayList\u003cTask\u003e load(){","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":" ArrayList\u003cTask\u003e list \u003dnew ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ncmathan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ncmathan"},"content":" BufferedReader br \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ncmathan"},"content":" String st;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ncmathan"},"content":" while ((st \u003d br.readLine()) !\u003d null){","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ncmathan"},"content":" String[] out\u003dst.split(\",\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ncmathan"},"content":" switch (out[0]){","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ncmathan"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ncmathan"},"content":" Todo e \u003dnew Todo(out[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ncmathan"},"content":" if(out[1].equals(\"1\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ncmathan"},"content":" e.setDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ncmathan"},"content":" list.add(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ncmathan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ncmathan"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ncmathan"},"content":" Event f \u003dnew Event(out[2],out[3],out[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ncmathan"},"content":" if(out[1].equals(\"1\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ncmathan"},"content":" f.setDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ncmathan"},"content":" list.add(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ncmathan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ncmathan"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ncmathan"},"content":" Deadline g \u003dnew Deadline(out[2],out[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ncmathan"},"content":" if(out[1].equals(\"1\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ncmathan"},"content":" g.setDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ncmathan"},"content":" list.add(g);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ncmathan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ncmathan"},"content":" catch (Exception e){","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ncmathan"},"content":" return new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ncmathan"},"content":" return list;","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"ncmathan"},"content":" * Adds text to file.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"ncmathan"},"content":" * @param text","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"ncmathan"},"content":" public void addToFile(String text){","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ncmathan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ncmathan"},"content":" File f \u003d new File(file);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ncmathan"},"content":" FileWriter fw \u003d new FileWriter(f, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ncmathan"},"content":" fw.append(text +\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"ncmathan"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ncmathan"},"content":" catch (Exception e){","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ncmathan"},"content":" System.out.println(\"Error:\" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"ncmathan"},"content":" * Updates a particular line in the text file to store if that entry","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"ncmathan"},"content":" * should be marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"ncmathan"},"content":" * @param num line number","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"ncmathan"},"content":" * @param val whether the entry should be marked","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"ncmathan"},"content":" public void updateFile(int num,boolean val){","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ncmathan"},"content":" File file \u003d new File(this.file);","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ncmathan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ncmathan"},"content":" Scanner sc \u003d new Scanner(file);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ncmathan"},"content":" String line\u003d\"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ncmathan"},"content":" String out\u003d\"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ncmathan"},"content":" int count\u003d0;","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ncmathan"},"content":" while(sc.hasNextLine()){","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ncmathan"},"content":" line\u003dsc.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ncmathan"},"content":" count+\u003d1;","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ncmathan"},"content":" if(count!\u003dnum)","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ncmathan"},"content":" out+\u003dline+\"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ncmathan"},"content":" else{","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ncmathan"},"content":" if(val)","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ncmathan"},"content":" out+\u003dline.substring(0,2)+\"1\"+line.substring(3)+\"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ncmathan"},"content":" else","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ncmathan"},"content":" out+\u003dline.substring(0,2)+\"0\"+line.substring(3)+\"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ncmathan"},"content":" FileWriter fw\u003dnew FileWriter(file,false);","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"ncmathan"},"content":" fw.append(out);","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ncmathan"},"content":" fw.flush();","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ncmathan"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ncmathan"},"content":" sc.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"ncmathan"},"content":" }catch (Exception e){","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"ncmathan"},"content":" System.out.println(\"Error:\"+e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"ncmathan"},"content":" * Delete a particular line from the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"ncmathan"},"content":" * @param num","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"ncmathan"},"content":" public void deleteFromFile(int num) {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"ncmathan"},"content":" File f \u003d new File(file);","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ncmathan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ncmathan"},"content":" Scanner sc \u003d new Scanner(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ncmathan"},"content":" String line\u003d\"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ncmathan"},"content":" String out\u003d\"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ncmathan"},"content":" int count\u003d0;","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ncmathan"},"content":" while(sc.hasNextLine()){","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"ncmathan"},"content":" line\u003dsc.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"ncmathan"},"content":" count+\u003d1;","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"ncmathan"},"content":" if(count!\u003dnum)","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"ncmathan"},"content":" out+\u003dline+\"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ncmathan"},"content":" FileWriter fw\u003dnew FileWriter(file,false);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"ncmathan"},"content":" fw.append(out);","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"ncmathan"},"content":" fw.flush();","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ncmathan"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"ncmathan"},"content":" sc.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"ncmathan"},"content":" }catch (Exception e){","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"ncmathan"},"content":" System.out.println(\"Error:\"+e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ncmathan":145}},{"path":"src/main/java/Duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":" * Class to encapsulate the features of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"public class Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":" private String task;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" * public constructor for Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" * @param task","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" public Task(String task){","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" isDone\u003dfalse;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" public void setDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" isDone\u003dtrue;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" public void setUndone(){","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" isDone\u003dfalse;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" public boolean getDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":" return isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":" public boolean contains (String val) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ncmathan"},"content":" return task.contains(val);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ncmathan"},"content":" public String toString(){","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ncmathan"},"content":" if(isDone)","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ncmathan"},"content":" return \"[X] \"+ task;","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ncmathan"},"content":" return \"[ ] \"+ task;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ncmathan":40}},{"path":"src/main/java/Duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":" * Stores the list of tasks in ArrayList and carries out the functions.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" * Default constructor.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" public TaskList(){","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" list \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" * Constructor to load arraylist from another source.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" * @param list","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" public TaskList(ArrayList\u003cTask\u003e list){","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":" * prints the tasks stored in list.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ncmathan"},"content":" * @param ui","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ncmathan"},"content":" public void list(Ui ui){","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ncmathan"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ncmathan"},"content":" int j \u003d i + 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ncmathan"},"content":" ui.print(j + \".\" + list.get(i) + \"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ncmathan"},"content":" * Marks a particular task as done or undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"ncmathan"},"content":" * @param mark","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"ncmathan"},"content":" * @param str","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"ncmathan"},"content":" * @param ui","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"ncmathan"},"content":" * @param storage","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"ncmathan"},"content":" public void mark(boolean mark,String str, Ui ui, Storage storage){","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ncmathan"},"content":" String val \u003d str.replaceAll(\"[^0-9]\", \"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ncmathan"},"content":" int index \u003d Integer.parseInt(val);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ncmathan"},"content":" if(mark){","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ncmathan"},"content":" list.get(index-1).setDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ncmathan"},"content":" storage.updateFile(index,true);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ncmathan"},"content":" ui.print(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ncmathan"},"content":" else{","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ncmathan"},"content":" list.get(index-1).setUndone();","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ncmathan"},"content":" storage.updateFile(index,false);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ncmathan"},"content":" ui.print(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ncmathan"},"content":" ui.print(\"\\t\" + list.get(index-1) + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"ncmathan"},"content":" * Creates a todo instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"ncmathan"},"content":" * @param str","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"ncmathan"},"content":" * @param ui","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"ncmathan"},"content":" * @param storage","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"ncmathan"},"content":" public void todo(String str, Ui ui, Storage storage){","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ncmathan"},"content":" str \u003d str.substring(5);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ncmathan"},"content":" if (str.isEmpty())","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! The description of a todo cannot be empty.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ncmathan"},"content":" list.add(new Todo(str));","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ncmathan"},"content":" storage.addToFile(\"T,0,\"+str);","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ncmathan"},"content":" ui.print(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ncmathan"},"content":" \"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ncmathan"},"content":" ui.print(\"\\t\" + list.get(list.size() - 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ncmathan"},"content":" ui.print(\"Now you have \" + list.size() + \" tasks in your list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"ncmathan"},"content":" * Converts date from string to LocalDate object.","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"ncmathan"},"content":" * @param input","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"ncmathan"},"content":" * @param ui","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"ncmathan"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"ncmathan"},"content":" public LocalDate changeDateFormat(String input,Ui ui){","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ncmathan"},"content":" LocalDate date\u003dnull;","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ncmathan"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ncmathan"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ncmathan"},"content":" date \u003d LocalDate.parse(input,format);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ncmathan"},"content":" }catch (Exception e){","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! Improper date format.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ncmathan"},"content":" return date;","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"ncmathan"},"content":" * Creates new deadline instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"ncmathan"},"content":" * @param str","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"ncmathan"},"content":" * @param ui","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"ncmathan"},"content":" * @param storage","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"ncmathan"},"content":" public void deadline(String str, Ui ui, Storage storage){","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ncmathan"},"content":" str \u003d str.substring(9);","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"ncmathan"},"content":" if (str.isEmpty())","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! The description of a deadline cannot be empty.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"ncmathan"},"content":" String[] arr \u003d str.split(\" /by \");","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"ncmathan"},"content":" if (arr.length\u003c2)","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! Insufficient parameters passed to deadline.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ncmathan"},"content":" LocalDate date\u003dchangeDateFormat(arr[1],ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ncmathan"},"content":" arr[1]\u003ddate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ncmathan"},"content":" list.add(new Deadline(arr[0], arr[1]));","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ncmathan"},"content":" storage.addToFile(\"D,0,\"+arr[0]+\",\"+arr[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ncmathan"},"content":" ui.print(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"ncmathan"},"content":" \"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"ncmathan"},"content":" ui.print(\"\\t\" + list.get(list.size() - 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"ncmathan"},"content":" ui.print(\"Now you have \" + list.size() + \" tasks in your list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"ncmathan"},"content":" * Creates new event instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"ncmathan"},"content":" * @param str","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"ncmathan"},"content":" * @param ui","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"ncmathan"},"content":" * @param storage","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"ncmathan"},"content":" public void event(String str, Ui ui, Storage storage){","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"ncmathan"},"content":" str \u003d str.substring(6);","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"ncmathan"},"content":" if (str.isEmpty())","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! The description of a event cannot be empty.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"ncmathan"},"content":" String[] arr \u003d str.split(\" /from \");","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"ncmathan"},"content":" if (arr.length\u003c2)","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! Insufficient parameters passed to event.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"ncmathan"},"content":" String[] time \u003d arr[1].split(\" /to \");","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"ncmathan"},"content":" if (time.length\u003c2)","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! Insufficient parameters passed to event.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"ncmathan"},"content":" LocalDate date\u003dchangeDateFormat(time[0],ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"ncmathan"},"content":" time[0]\u003ddate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"ncmathan"},"content":" date\u003dchangeDateFormat(time[1],ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"ncmathan"},"content":" time[1]\u003ddate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"ncmathan"},"content":" list.add(new Event(arr[0], time[0], time[1]));","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"ncmathan"},"content":" storage.addToFile(\"E,0,\"+arr[0]+\",\"+time[0]+\",\"+time[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"ncmathan"},"content":" ui.print( \"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"ncmathan"},"content":" ui.print(\"\\t\" + list.get(list.size() - 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"ncmathan"},"content":" ui.print(\"Now you have \" + list.size() + \" tasks in your list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"ncmathan"},"content":" * Deletes a particular task.","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"ncmathan"},"content":" * @param str","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"ncmathan"},"content":" * @param ui","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"ncmathan"},"content":" * @param storage","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"ncmathan"},"content":" public void delete(String str, Ui ui, Storage storage){","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"ncmathan"},"content":" str \u003d str.substring(7);","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"ncmathan"},"content":" String val \u003d str.replaceAll(\"[^0-9]\", \"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"ncmathan"},"content":" int index \u003d Integer.parseInt(val);","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"ncmathan"},"content":" if (str.isEmpty())","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"ncmathan"},"content":" ui.handleError(new DukeException(\"\\n____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"ncmathan"},"content":" \"☹ OOPS!!! The description of a delete cannot be empty.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"ncmathan"},"content":" ui.print(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"ncmathan"},"content":" ui.print(\"\\t\" + list.get(index - 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"ncmathan"},"content":" list.remove(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"ncmathan"},"content":" storage.deleteFromFile(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"ncmathan"},"content":" ui.print(\"Now you have \" + list.size() + \" tasks in your list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"ncmathan"},"content":" public void find (String str, Ui ui) {","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"ncmathan"},"content":" str \u003d str.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"ncmathan"},"content":" ui.print(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"ncmathan"},"content":" int j \u003d 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"ncmathan"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"ncmathan"},"content":" if (list.get(i).contains(str)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"ncmathan"},"content":" ui.print(j + \".\" + list.get(i) + \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"ncmathan"},"content":" j +\u003d 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":203,"author":{"gitId":"ncmathan"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ncmathan":206}},{"path":"src/main/java/Duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":" * Class to create todo instances.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":" * Extends Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":"public class Todo extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":" * Constructor fof todo","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":" * @param val","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" public Todo (String val){","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" super(val);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" public String toString(){","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" return \"[T]\"+super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ncmathan":18}},{"path":"src/main/java/Duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":" * Class to handle interactions with user.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":" private String buffer;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" * Default constructor.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" public Ui(){","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" buffer \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" scanner\u003dnew Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" * reads user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" public String readCommand(){","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"ncmathan"},"content":" * Prints welcome message.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ncmathan"},"content":" public void showWelcome(){","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ncmathan"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ncmathan"},"content":" \" Hello! I\u0027m Mathan\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ncmathan"},"content":" \" What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"ncmathan"},"content":" public String getWelcome(){","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ncmathan"},"content":" return \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ncmathan"},"content":" \" Hello! I\u0027m Mathan\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ncmathan"},"content":" \" What can I do for you?\";","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"ncmathan"},"content":" * Prints exit message.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"ncmathan"},"content":" public void showExit(){","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ncmathan"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ncmathan"},"content":" \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ncmathan"},"content":" buffer +\u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"ncmathan"},"content":" \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ncmathan"},"content":" \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"ncmathan"},"content":" * Prints line spacer.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"ncmathan"},"content":" public void showLine(){","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"ncmathan"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ncmathan"},"content":" buffer \u003d buffer + \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"ncmathan"},"content":" * Prints text to user.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"ncmathan"},"content":" * @param str","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"ncmathan"},"content":" public void print(String str){","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ncmathan"},"content":" System.out.println(str);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ncmathan"},"content":" buffer +\u003d str + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"ncmathan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"ncmathan"},"content":" * Prints DukeException errors.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"ncmathan"},"content":" * @param e","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"ncmathan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"ncmathan"},"content":" public void handleError(DukeException e){","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ncmathan"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ncmathan"},"content":" buffer +\u003d e.getMessage() + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"ncmathan"},"content":" public String emptyBuffer(){","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"ncmathan"},"content":" String tmp \u003d buffer;","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"ncmathan"},"content":" buffer \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"ncmathan"},"content":" return tmp;","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ncmathan":87}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" \u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ncmathan":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"500.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"Duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"400.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"400.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"500.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"488.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ncmathan":19}},{"path":"src/test/java/Duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" public void testAddToFile(){","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" File f \u003d new File(\"testfile.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" FileWriter fw \u003d new FileWriter(f, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" fw.append(\"hello\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" Storage storage \u003d new Storage(\"testfile.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":" storage.addToFile(\"bye\");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":" Scanner scanner \u003d new Scanner(f);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ncmathan"},"content":" assertEquals(\"hellobye\",scanner.nextLine());","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ncmathan"},"content":" }catch (Exception e){","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ncmathan"},"content":" System.out.println(\"Exception while testing: \"+e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ncmathan":27}},{"path":"src/test/java/Duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"package Duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ncmathan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ncmathan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ncmathan"},"content":"import java.util.Date;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ncmathan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ncmathan"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ncmathan"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ncmathan"},"content":" public void testChangeDateFormat(){","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ncmathan"},"content":" assertEquals(null,new TaskList().changeDateFormat(\"2019\",new Ui()));","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ncmathan"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"yyyyMMdd\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ncmathan"},"content":" LocalDate date \u003d LocalDate.parse(\"20190404\",format);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ncmathan"},"content":" assertEquals(date,new TaskList().changeDateFormat(\"2019-04-04\",new Ui()));","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ncmathan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ncmathan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ncmathan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ncmathan":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ncmathan"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"ncmathan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ncmathan"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ncmathan"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ncmathan":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":"ncmathan"},"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":{"-":20,"ncmathan":1}}] diff --git a/ncmathan_ip_master/commits.json b/ncmathan_ip_master/commits.json index b3dc093e..a74ec260 100644 --- a/ncmathan_ip_master/commits.json +++ b/ncmathan_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ncmathan":[{"date":"2023-08-24","commitResults":[{"hash":"600dbe3ba03c2d2af6a54992b05dac426d58d616","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"bce9c09e20a0129594b78738bd10a7e22d3ad55f","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"c175134a4bdb289b916e6f81dcadcec925fa5133","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"0cd22d2f2ff67fee20f47fba46b4a449284f3305","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":3}}},{"hash":"154cad37fe8f5fd2b043760794fe276ba649f485","isMergeCommit":false,"messageTitle":"ToDo, Event, Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":1}}},{"hash":"b78257b70856cda941776edb5467a9904feda475","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"ec06e85487d69c6fe14627de8a30ffb909a24d03","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":16}}},{"hash":"1af709c08ae24141b0391c2bcb59146494b867b0","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"3dceb0fe3acc718d542cee3e89f8d8091cef1a9e","isMergeCommit":false,"messageTitle":"Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":203,"deletions":89}}},{"hash":"1424bf707cba6489c6142199470368da194ad635","isMergeCommit":false,"messageTitle":"Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":203}}},{"hash":"d0b81b9d4ae5b901f1c6119619d35a2d05e70d52","isMergeCommit":false,"messageTitle":"Revert \"Save\"","messageBody":"This reverts commit 1424bf707cba6489c6142199470368da194ad635.\n","fileTypesAndContributionMap":{"java":{"insertions":203,"deletions":89}}},{"hash":"acba40f83e3b171412cc9e5146c17f224fc0d082","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"32d85e500887bd0ebe04c68b1257328d6ff6406c","isMergeCommit":false,"messageTitle":"Dates","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":8}}},{"hash":"6a4acc7302d0e0d262f5d3fa0c208e96e3eb41ec","isMergeCommit":false,"messageTitle":"Revert \"Dates\"","messageBody":"This reverts commit 32d85e500887bd0ebe04c68b1257328d6ff6406c.\n","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":34}}},{"hash":"d2500678b77999a6196b6f869751e17b9d4fe0c4","isMergeCommit":false,"messageTitle":"Dates","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":8}}},{"hash":"1c5988614668acae7da6b6d35fed2bf785e16ecf","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"7b722f530c7f748f269f3e56202b83a1c2ec2f0e","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":8}}}]},{"date":"2023-08-31","commitResults":[{"hash":"9ead1fc93c411fc07d3115565c4a6039854e6591","isMergeCommit":false,"messageTitle":"extra OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":340,"deletions":237}}},{"hash":"9dcb0010487735b135e52c9105aeed766b350531","isMergeCommit":false,"messageTitle":"package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":18,"deletions":8},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"8709479cb4db8eb2d14a76e96529c2885cebcea5","isMergeCommit":false,"messageTitle":"gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"21cce451f9daf58828c5c075d947d2dd7309e51d","isMergeCommit":false,"messageTitle":"Add StorageTest.java and TaskListTest.java","messageBody":"Testing one method from each of the 2 classes.\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":0}}},{"hash":"edad8a2fb5c6b8be7e8a3effae38abdcc09986b9","isMergeCommit":false,"messageTitle":"Add javadocs to all Java files","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":196,"deletions":2}}},{"hash":"a6376e1516b2313b17eec6ac686eece2c8b64d4d","isMergeCommit":false,"messageTitle":"Edit 7 files to follow coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":94}}},{"hash":"fb8589d7892bd178176b00391bb6af549139a185","isMergeCommit":false,"messageTitle":"Implement find method","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":2}}},{"hash":"50a18c9b88f150fddcd4472ccd9cf67b73034f7b","isMergeCommit":false,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke/Deadline.java\n#\tsrc/main/java/Duke/Duke.java\n#\tsrc/main/java/Duke/DukeException.java\n#\tsrc/main/java/Duke/Event.java\n#\tsrc/main/java/Duke/Parser.java\n#\tsrc/main/java/Duke/Storage.java\n#\tsrc/main/java/Duke/Task.java\n","fileTypesAndContributionMap":{"java":{"insertions":277,"deletions":70}}},{"hash":"7c1c750e8b6616f3e46a0f84343dffa30ef3dce7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke/Deadline.java\n#\tsrc/main/java/Duke/Duke.java\n#\tsrc/main/java/Duke/DukeException.java\n#\tsrc/main/java/Duke/Event.java\n#\tsrc/main/java/Duke/Parser.java\n#\tsrc/main/java/Duke/Storage.java\n#\tsrc/main/java/Duke/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"eaf89b88b1c6462b17826fe5e878df946a6abab7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ncmathan":{"java":693,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":2,"txt":6}},"authorContributionVariance":{"ncmathan":89631.25},"authorDisplayNameMap":{"ncmathan":"CS2103T-T09-2 MATH..THAN"}} +{"authorDailyContributionsMap":{"ncmathan":[{"date":"2023-08-24","commitResults":[{"hash":"600dbe3ba03c2d2af6a54992b05dac426d58d616","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"bce9c09e20a0129594b78738bd10a7e22d3ad55f","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"c175134a4bdb289b916e6f81dcadcec925fa5133","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"0cd22d2f2ff67fee20f47fba46b4a449284f3305","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":3}}},{"hash":"154cad37fe8f5fd2b043760794fe276ba649f485","isMergeCommit":false,"messageTitle":"ToDo, Event, Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":1}}},{"hash":"b78257b70856cda941776edb5467a9904feda475","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"ec06e85487d69c6fe14627de8a30ffb909a24d03","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":16}}},{"hash":"1af709c08ae24141b0391c2bcb59146494b867b0","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"3dceb0fe3acc718d542cee3e89f8d8091cef1a9e","isMergeCommit":false,"messageTitle":"Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":203,"deletions":89}}},{"hash":"1424bf707cba6489c6142199470368da194ad635","isMergeCommit":false,"messageTitle":"Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":203}}},{"hash":"d0b81b9d4ae5b901f1c6119619d35a2d05e70d52","isMergeCommit":false,"messageTitle":"Revert \"Save\"","messageBody":"This reverts commit 1424bf707cba6489c6142199470368da194ad635.\n","fileTypesAndContributionMap":{"java":{"insertions":203,"deletions":89}}},{"hash":"acba40f83e3b171412cc9e5146c17f224fc0d082","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"32d85e500887bd0ebe04c68b1257328d6ff6406c","isMergeCommit":false,"messageTitle":"Dates","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":8}}},{"hash":"6a4acc7302d0e0d262f5d3fa0c208e96e3eb41ec","isMergeCommit":false,"messageTitle":"Revert \"Dates\"","messageBody":"This reverts commit 32d85e500887bd0ebe04c68b1257328d6ff6406c.\n","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":34}}},{"hash":"d2500678b77999a6196b6f869751e17b9d4fe0c4","isMergeCommit":false,"messageTitle":"Dates","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":8}}},{"hash":"1c5988614668acae7da6b6d35fed2bf785e16ecf","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"7b722f530c7f748f269f3e56202b83a1c2ec2f0e","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":8}}}]},{"date":"2023-08-31","commitResults":[{"hash":"9ead1fc93c411fc07d3115565c4a6039854e6591","isMergeCommit":false,"messageTitle":"extra OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":340,"deletions":237}}},{"hash":"9dcb0010487735b135e52c9105aeed766b350531","isMergeCommit":false,"messageTitle":"package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":18,"deletions":8},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"8709479cb4db8eb2d14a76e96529c2885cebcea5","isMergeCommit":false,"messageTitle":"gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"21cce451f9daf58828c5c075d947d2dd7309e51d","isMergeCommit":false,"messageTitle":"Add StorageTest.java and TaskListTest.java","messageBody":"Testing one method from each of the 2 classes.\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":0}}},{"hash":"edad8a2fb5c6b8be7e8a3effae38abdcc09986b9","isMergeCommit":false,"messageTitle":"Add javadocs to all Java files","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":196,"deletions":2}}},{"hash":"a6376e1516b2313b17eec6ac686eece2c8b64d4d","isMergeCommit":false,"messageTitle":"Edit 7 files to follow coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":94}}},{"hash":"fb8589d7892bd178176b00391bb6af549139a185","isMergeCommit":false,"messageTitle":"Implement find method","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":2}}},{"hash":"50a18c9b88f150fddcd4472ccd9cf67b73034f7b","isMergeCommit":false,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke/Deadline.java\n#\tsrc/main/java/Duke/Duke.java\n#\tsrc/main/java/Duke/DukeException.java\n#\tsrc/main/java/Duke/Event.java\n#\tsrc/main/java/Duke/Parser.java\n#\tsrc/main/java/Duke/Storage.java\n#\tsrc/main/java/Duke/Task.java\n","fileTypesAndContributionMap":{"java":{"insertions":277,"deletions":70}}},{"hash":"7c1c750e8b6616f3e46a0f84343dffa30ef3dce7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke/Deadline.java\n#\tsrc/main/java/Duke/Duke.java\n#\tsrc/main/java/Duke/DukeException.java\n#\tsrc/main/java/Duke/Event.java\n#\tsrc/main/java/Duke/Parser.java\n#\tsrc/main/java/Duke/Storage.java\n#\tsrc/main/java/Duke/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"eaf89b88b1c6462b17826fe5e878df946a6abab7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"6722802448d7788d768ee0a25ce31019b574eb3e","isMergeCommit":false,"messageTitle":"Fix minor bugs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}}]},{"date":"2023-09-05","commitResults":[{"hash":"83a3cb3a93a01bee04b4b5a36e088aa0c9e4b0f4","isMergeCommit":false,"messageTitle":"implement GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":243,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"ncmathan":{"java":936,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":17,"txt":6}},"authorContributionVariance":{"ncmathan":79046.15},"authorDisplayNameMap":{"ncmathan":"CS2103T-T09-2 MATH..THAN"}} diff --git a/neyapraveen_ip_master/authorship.json b/neyapraveen_ip_master/authorship.json index 32582a1f..a9b6e81b 100644 --- a/neyapraveen_ip_master/authorship.json +++ b/neyapraveen_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"neyapraveen"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"neyapraveen"},"content":" private String by;","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"neyapraveen"},"content":" public Deadline(String task, String by) {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"neyapraveen"},"content":" super(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"neyapraveen"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"neyapraveen"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"neyapraveen"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"neyapraveen"},"content":" return \"[D]\" + super.toString() + \"(by:\" + by + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"neyapraveen"},"content":" public void print() {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"neyapraveen"},"content":" System.out.println(Duke.horizontalLine + \"Got it. I\u0027ve added this task:\\n \" + this.toString()+ \"\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"neyapraveen"},"content":" + \"Now you have \" + Task.getCounter() + \" tasks in the list\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"neyapraveen"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"neyapraveen":17}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"neyapraveen"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"neyapraveen"},"content":" public static String horizontalLine \u003d \"_\".repeat(60) + \"\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"neyapraveen"},"content":" public static void main(String[] args) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"neyapraveen"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"neyapraveen"},"content":" String task \u003d \"\";","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"neyapraveen"},"content":" System.out.println(\"Hello! I\u0027m Bot\\n\" + \"What can I do for you?\\n\" + horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"neyapraveen"},"content":" while (true) {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"neyapraveen"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"neyapraveen"},"content":" task \u003d sc.nextLine();","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"neyapraveen"},"content":" if (task.equals(\"bye\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"neyapraveen"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"neyapraveen"},"content":" if (task.equals(\"list\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"neyapraveen"},"content":" Task taskInstance \u003d new Task(\"\");","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"neyapraveen"},"content":" taskInstance.printList();","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"neyapraveen"},"content":" continue;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"neyapraveen"},"content":" String[] elements \u003d task.split((\" \"));","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"neyapraveen"},"content":" if (elements.length \u003e\u003d 2) {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"neyapraveen"},"content":" String instruction \u003d elements[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"neyapraveen"},"content":" if (instruction.equals(\"mark\") || instruction.equals(\"unmark\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"neyapraveen"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"neyapraveen"},"content":" int no \u003d Integer.parseInt(elements[1]);","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"neyapraveen"},"content":" Task taskInstance \u003d new Task(\"\");","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"neyapraveen"},"content":" if (instruction.equals(\"mark\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"neyapraveen"},"content":" taskInstance.mark(no);","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"neyapraveen"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"neyapraveen"},"content":" taskInstance.unmark(no);","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"neyapraveen"},"content":" continue;","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"neyapraveen"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"neyapraveen"},"content":" System.err.println(Duke.horizontalLine + \"You did not enter a valid integer :(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"neyapraveen"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"neyapraveen"},"content":" if (instruction.equals(\"delete\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"neyapraveen"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"neyapraveen"},"content":" int no \u003d Integer.parseInt(elements[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"neyapraveen"},"content":" Task taskInstance \u003d new Task(\"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"neyapraveen"},"content":" taskInstance.delete(no);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"neyapraveen"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"neyapraveen"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"neyapraveen"},"content":" System.err.println(Duke.horizontalLine + \"You did not enter a valid integer :(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"neyapraveen"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"neyapraveen"},"content":" int firstSpaceIndex \u003d task.indexOf(\u0027 \u0027);","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"neyapraveen"},"content":" String actualTask \u003d task.substring(firstSpaceIndex + 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"neyapraveen"},"content":" if (instruction.equals(\"todo\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"neyapraveen"},"content":" Todo todo \u003d new Todo(actualTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"neyapraveen"},"content":" todo.print();","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"neyapraveen"},"content":" else if (instruction.equals(\"deadline\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"neyapraveen"},"content":" String[] taskAndDeadline \u003d actualTask.split((\"/by\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"neyapraveen"},"content":" if (taskAndDeadline.length \u003d\u003d 1 || taskAndDeadline.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine + \"OOPS!!! Invalid format for deadline :-(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"neyapraveen"},"content":" String onlyTask \u003d taskAndDeadline[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"neyapraveen"},"content":" String by \u003d taskAndDeadline[1];","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"neyapraveen"},"content":" Deadline deadline \u003d new Deadline(onlyTask, by);","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"neyapraveen"},"content":" deadline.print();","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"neyapraveen"},"content":" else if (instruction.equals(\"event\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"neyapraveen"},"content":" String[] taskAndToFrom \u003d actualTask.split((\"/from\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"neyapraveen"},"content":" if (taskAndToFrom.length \u003d\u003d 1 || taskAndToFrom.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine + \"OOPS!!! Invalid format for event :-(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"neyapraveen"},"content":" String onlyTask \u003d taskAndToFrom[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"neyapraveen"},"content":" if (onlyTask.trim().isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine + \"OOPS!!! Invalid format for event :-(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"neyapraveen"},"content":" String[] ToFrom \u003d taskAndToFrom[1].split(\"/to\");","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"neyapraveen"},"content":" if (ToFrom.length \u003d\u003d 1 || ToFrom.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine + \"OOPS!!! Invalid format for event :-(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"neyapraveen"},"content":" String from \u003d ToFrom[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"neyapraveen"},"content":" String to \u003d ToFrom[1];","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"neyapraveen"},"content":" Event event \u003d new Event(onlyTask, from, to);","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"neyapraveen"},"content":" event.print();","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"neyapraveen"},"content":" else {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine + \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"neyapraveen"},"content":" } else if (elements[0].equals(\"todo\") || elements[0].equals(\"deadline\") || elements[0].equals(\"event\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine + \"OOPS!!! The description of a \" + elements[0] + \" cannot be empty.\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"neyapraveen"},"content":" else {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine + \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"neyapraveen"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"neyapraveen"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"neyapraveen"},"content":" System.out.println(horizontalLine+ \"Bye. Hope to see you again soon!\\n\" + horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"neyapraveen":96,"-":3}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"neyapraveen"},"content":"public class DukeException extends Exception{","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"neyapraveen"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"neyapraveen"},"content":" super(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"neyapraveen"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"neyapraveen":5}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"neyapraveen"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"neyapraveen"},"content":" String from;","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"neyapraveen"},"content":" String to;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"neyapraveen"},"content":" public Event(String task, String from, String to) {","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"neyapraveen"},"content":" super(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"neyapraveen"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"neyapraveen"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"neyapraveen"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"neyapraveen"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"neyapraveen"},"content":" return \"[E]\" + super.toString() + \"(from:\" + from + \"to:\" + to + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"neyapraveen"},"content":" public void print() {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"neyapraveen"},"content":" System.out.println(Duke.horizontalLine + \"Got it. I\u0027ve added this task:\\n \" + this.toString()+ \"\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"neyapraveen"},"content":" + \"Now you have \" + Task.getCounter() + \" tasks in the list\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"neyapraveen"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"neyapraveen":20}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"neyapraveen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"neyapraveen"},"content":"public class Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"neyapraveen"},"content":" private String task;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"neyapraveen"},"content":" private TaskStatus status;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"neyapraveen"},"content":" private static ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"neyapraveen"},"content":" private static int counter \u003d 0;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"neyapraveen"},"content":" public Task(String task) {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"neyapraveen"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"neyapraveen"},"content":" this.status \u003d TaskStatus.NOT_DONE;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"neyapraveen"},"content":" addTask(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"neyapraveen"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"neyapraveen"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"neyapraveen"},"content":" return status.toString() + \" \" + this.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"neyapraveen"},"content":" public void addTask(String task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"neyapraveen"},"content":" if (!task.equals(\"\")){","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"neyapraveen"},"content":" arr.add(this);","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"neyapraveen"},"content":" counter \u003d counter + 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"neyapraveen"},"content":" public static int getCounter() {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"neyapraveen"},"content":" return counter;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"neyapraveen"},"content":" public void printList() {","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"neyapraveen"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"neyapraveen"},"content":" System.out.println(Duke.horizontalLine + \"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"neyapraveen"},"content":" for (Task task : arr) {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"neyapraveen"},"content":" count++;","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"neyapraveen"},"content":" System.out.println( count+\". \" + task.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"neyapraveen"},"content":" System.out.println(Duke.horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"neyapraveen"},"content":" public void mark(int i) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"neyapraveen"},"content":" if (i \u003e arr.size() || i \u003c\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine+ \"OOPS!!! Invalid number :(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"neyapraveen"},"content":" Task markTask \u003d arr.get(i - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"neyapraveen"},"content":" markTask.status \u003d TaskStatus.DONE;","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"neyapraveen"},"content":" System.out.println(Duke.horizontalLine + \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"neyapraveen"},"content":" + markTask.toString() + \"\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"neyapraveen"},"content":" public void unmark(int i) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"neyapraveen"},"content":" if (i \u003e arr.size() || i \u003c\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine+ \"OOPS!!! Invalid number :(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"neyapraveen"},"content":" Task unmarkTask \u003d arr.get(i - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"neyapraveen"},"content":" unmarkTask.status \u003d TaskStatus.NOT_DONE;","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"neyapraveen"},"content":" System.out.println(Duke.horizontalLine + \"Ok, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"neyapraveen"},"content":" + unmarkTask.toString() + \"\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"neyapraveen"},"content":" public void delete(int i) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"neyapraveen"},"content":" if (i \u003e arr.size() || i \u003c\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine+ \"OOPS!!! Invalid number :(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"neyapraveen"},"content":" Task deleteTask \u003d arr.get(i - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"neyapraveen"},"content":" counter \u003d counter - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"neyapraveen"},"content":" arr.remove(i - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"neyapraveen"},"content":" System.out.println(Duke.horizontalLine + \"Noted. I\u0027ve removed this task:\\n\" + deleteTask.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"neyapraveen"},"content":" + \"\\n\" + String.format(\"Now you have %d tasks in the list\\n\", counter) + Duke.horizontalLine );","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"neyapraveen"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"neyapraveen":70}},{"path":"src/main/java/TaskStatus.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"neyapraveen"},"content":"enum TaskStatus {","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"neyapraveen"},"content":" DONE(\"[X]\"), NOT_DONE(\"[ ]\");","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"neyapraveen"},"content":" private final String symbol;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"neyapraveen"},"content":" TaskStatus(String symbol) {","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"neyapraveen"},"content":" this.symbol \u003d symbol;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"neyapraveen"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"neyapraveen"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"neyapraveen"},"content":" return symbol;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"neyapraveen"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"neyapraveen":12}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"neyapraveen"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"neyapraveen"},"content":" String task;","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"neyapraveen"},"content":" Boolean done;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"neyapraveen"},"content":" public Todo(String task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"neyapraveen"},"content":" super(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"neyapraveen"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"neyapraveen"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"neyapraveen"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"neyapraveen"},"content":" public void print() {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"neyapraveen"},"content":" System.out.println(Duke.horizontalLine + \"Got it. I\u0027ve added this task:\\n \" + this.toString()+ \"\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"neyapraveen"},"content":" + \"Now you have \" + Task.getCounter() + \" tasks in the list\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"neyapraveen"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"neyapraveen":18}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"neyapraveen"},"content":"todo borrow book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"neyapraveen"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"neyapraveen"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"neyapraveen"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"neyapraveen"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"neyapraveen":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":"neyapraveen"},"content":"if ! javac -cp ../src/main/java/Duke -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"neyapraveen":1,"-":37}}] +[{"path":"src/main/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"neyapraveen":1}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"neyapraveen"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"neyapraveen"},"content":" private String by;","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"neyapraveen"},"content":" public Deadline(String task, Boolean isNotSaved, String by) {","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"neyapraveen"},"content":" super(task, isNotSaved);","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"neyapraveen"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"neyapraveen"},"content":" if (isNotSaved) {","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"neyapraveen"},"content":" saveToFile();","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"neyapraveen"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"neyapraveen"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"neyapraveen"},"content":" return \"[D]\" + super.toString() + \"(by:\" + by + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"neyapraveen"},"content":" public void print() {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"neyapraveen"},"content":" System.out.println(Duke.horizontalLine + \"Got it. I\u0027ve added this task:\\n \" + this.toString()+ \"\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"neyapraveen"},"content":" + \"Now you have \" + Task.getCounter() + \" tasks in the list\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"neyapraveen"},"content":" public String generateStr() {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"neyapraveen"},"content":" return \"D | \" + (this.getStatus() \u003d\u003d TaskStatus.DONE ? 1 : 0)","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"neyapraveen"},"content":" + \" | \" + this.getTask() + \" | \" + by;","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"neyapraveen"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"neyapraveen"},"content":" public void saveToFile() {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"neyapraveen"},"content":" Duke.saveTaskToFile(generateStr());","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"neyapraveen"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"neyapraveen":31}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"neyapraveen"},"content":"import java.io.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"neyapraveen"},"content":"import java.util.List;","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"neyapraveen"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"neyapraveen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"neyapraveen"},"content":" public static String horizontalLine \u003d \"_\".repeat(60) + \"\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"neyapraveen"},"content":" public static final String FILE_PATH \u003d \"src/main/data/duke.txt\";","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"neyapraveen"},"content":" public static List\u003cTask\u003e allTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"neyapraveen"},"content":" public static int run;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"neyapraveen"},"content":" public static void saveTaskToFile(String task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"neyapraveen"},"content":" try (FileWriter fw \u003d new FileWriter(FILE_PATH, true);","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"neyapraveen"},"content":" BufferedWriter bw \u003d new BufferedWriter(fw);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"neyapraveen"},"content":" PrintWriter out \u003d new PrintWriter(bw)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"neyapraveen"},"content":" out.println(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"neyapraveen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"neyapraveen"},"content":" System.err.println(\"Error saving task to file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"neyapraveen"},"content":" public static void createDataLocation() {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"neyapraveen"},"content":" File dir \u003d new File(\"src/main/data\");","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"neyapraveen"},"content":" // Check if the directory exists; if not, create it","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"neyapraveen"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"neyapraveen"},"content":" if (dir.mkdirs()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"neyapraveen"},"content":" System.out.println(\"Directory created: \" + dir.getAbsolutePath());","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"neyapraveen"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"neyapraveen"},"content":" System.err.println(\"Failed to create directory: \" + dir.getAbsolutePath());","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"neyapraveen"},"content":" return;","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"neyapraveen"},"content":" File db \u003d new File(Duke.FILE_PATH);","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"neyapraveen"},"content":" // Check if the file exists; if not, create it","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"neyapraveen"},"content":" if (!db.exists()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"neyapraveen"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"neyapraveen"},"content":" if (db.createNewFile()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"neyapraveen"},"content":" System.out.println(\"File created: \" + db.getAbsolutePath());","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"neyapraveen"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"neyapraveen"},"content":" System.err.println(\"Failed to create file: \" + db.getAbsolutePath());","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"neyapraveen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"neyapraveen"},"content":" System.out.println(\"Error when creating the data storage!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"neyapraveen"},"content":" public static void loadTasksFromFile() {","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"neyapraveen"},"content":" List\u003cTask\u003e loadedTasks \u003d new ArrayList\u003c\u003e(); // Create a temporary list","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"neyapraveen"},"content":" try (Scanner scanner \u003d new Scanner(new File(FILE_PATH))) {","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"neyapraveen"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"neyapraveen"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"neyapraveen"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"neyapraveen"},"content":" if (parts.length \u003c 3) {","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"neyapraveen"},"content":" continue;","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"neyapraveen"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"neyapraveen"},"content":" boolean isDone \u003d Integer.parseInt(parts[1]) \u003d\u003d 1;","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"neyapraveen"},"content":" String taskDescription \u003d parts[2];","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"neyapraveen"},"content":" // Check if the task is already in Duke.allTasks","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"neyapraveen"},"content":" if (!isTaskInAllTasks(taskType, taskDescription)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"neyapraveen"},"content":" Task task;","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"neyapraveen"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"neyapraveen"},"content":" task \u003d new Todo(taskDescription, false);","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"neyapraveen"},"content":" } else if (taskType.equals(\"D\") \u0026\u0026 parts.length \u003e\u003d 4) {","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"neyapraveen"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"neyapraveen"},"content":" task \u003d new Deadline(taskDescription, false, by);","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"neyapraveen"},"content":" } else if (taskType.equals(\"E\") \u0026\u0026 parts.length \u003e\u003d 4) {","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"neyapraveen"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"neyapraveen"},"content":" String to \u003d (parts.length \u003e 4) ? parts[4] : \"\";","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"neyapraveen"},"content":" task \u003d new Event(taskDescription, false, from, to);","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"neyapraveen"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"neyapraveen"},"content":" continue;","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"neyapraveen"},"content":" if (isDone) {","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"neyapraveen"},"content":" task.setStatus(TaskStatus.DONE);","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"neyapraveen"},"content":" loadedTasks.add(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"neyapraveen"},"content":" allTasks.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"neyapraveen"},"content":" allTasks.addAll(loadedTasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"neyapraveen"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"neyapraveen"},"content":" System.err.println(\"File not found: \" + e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"neyapraveen"},"content":" private static boolean isTaskInAllTasks(String taskType, String taskDescription) {","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"neyapraveen"},"content":" for (Task task : Duke.allTasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"neyapraveen"},"content":" if (task.getTask().equals(taskDescription) \u0026\u0026 task.getTaskType().equals(taskType)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"neyapraveen"},"content":" return true;","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"neyapraveen"},"content":" return false;","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"neyapraveen"},"content":" public static void deleteLineFromFile(int lineNumber) {","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"neyapraveen"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"neyapraveen"},"content":" File inputFile \u003d new File(FILE_PATH);","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"neyapraveen"},"content":" File tempFile \u003d new File(FILE_PATH + \".tmp\");","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"neyapraveen"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(inputFile));","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"neyapraveen"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(tempFile));","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"neyapraveen"},"content":" String currentLine;","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"neyapraveen"},"content":" int lineCounter \u003d 0;","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"neyapraveen"},"content":" while ((currentLine \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"neyapraveen"},"content":" lineCounter++;","lastModifiedDate":"2023-09-06"},{"lineNumber":123,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":124,"author":{"gitId":"neyapraveen"},"content":" if (lineCounter \u003d\u003d lineNumber) {","lastModifiedDate":"2023-09-06"},{"lineNumber":125,"author":{"gitId":"neyapraveen"},"content":" continue;","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":128,"author":{"gitId":"neyapraveen"},"content":" writer.write(currentLine);","lastModifiedDate":"2023-09-06"},{"lineNumber":129,"author":{"gitId":"neyapraveen"},"content":" writer.newLine();","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":131,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":132,"author":{"gitId":"neyapraveen"},"content":" writer.close();","lastModifiedDate":"2023-09-06"},{"lineNumber":133,"author":{"gitId":"neyapraveen"},"content":" reader.close();","lastModifiedDate":"2023-09-06"},{"lineNumber":134,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":135,"author":{"gitId":"neyapraveen"},"content":" boolean successfulRename \u003d tempFile.renameTo(inputFile);","lastModifiedDate":"2023-09-06"},{"lineNumber":136,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":137,"author":{"gitId":"neyapraveen"},"content":" if (!successfulRename) {","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"neyapraveen"},"content":" throw new IOException(\"Failed to rename temporary file\");","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":140,"author":{"gitId":"neyapraveen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":141,"author":{"gitId":"neyapraveen"},"content":" System.err.println(\"Error deleting line from file: \" + e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":142,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":143,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":144,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":145,"author":{"gitId":"neyapraveen"},"content":" public static void updateLineInFile(int lineNumber, String updatedContent) {","lastModifiedDate":"2023-09-06"},{"lineNumber":146,"author":{"gitId":"neyapraveen"},"content":" try (RandomAccessFile file \u003d new RandomAccessFile(FILE_PATH, \"rw\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":147,"author":{"gitId":"neyapraveen"},"content":" long position \u003d 0;","lastModifiedDate":"2023-09-06"},{"lineNumber":148,"author":{"gitId":"neyapraveen"},"content":" int currentLine \u003d 1;","lastModifiedDate":"2023-09-06"},{"lineNumber":149,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":150,"author":{"gitId":"neyapraveen"},"content":" while (currentLine \u003c lineNumber) {","lastModifiedDate":"2023-09-06"},{"lineNumber":151,"author":{"gitId":"neyapraveen"},"content":" String line \u003d file.readLine();","lastModifiedDate":"2023-09-06"},{"lineNumber":152,"author":{"gitId":"neyapraveen"},"content":" if (line \u003d\u003d null) {","lastModifiedDate":"2023-09-06"},{"lineNumber":153,"author":{"gitId":"neyapraveen"},"content":" System.err.println(\"Invalid line number: \" + lineNumber);","lastModifiedDate":"2023-09-06"},{"lineNumber":154,"author":{"gitId":"neyapraveen"},"content":" return;","lastModifiedDate":"2023-09-06"},{"lineNumber":155,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":156,"author":{"gitId":"neyapraveen"},"content":" position +\u003d line.length() + System.lineSeparator().length();","lastModifiedDate":"2023-09-06"},{"lineNumber":157,"author":{"gitId":"neyapraveen"},"content":" currentLine++;","lastModifiedDate":"2023-09-06"},{"lineNumber":158,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":159,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":160,"author":{"gitId":"neyapraveen"},"content":" file.seek(position);","lastModifiedDate":"2023-09-06"},{"lineNumber":161,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":162,"author":{"gitId":"neyapraveen"},"content":" file.writeBytes(updatedContent);","lastModifiedDate":"2023-09-06"},{"lineNumber":163,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":164,"author":{"gitId":"neyapraveen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":165,"author":{"gitId":"neyapraveen"},"content":" System.err.println(\"Error updating line in file: \" + e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":166,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":167,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":168,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":169,"author":{"gitId":"neyapraveen"},"content":" public static void main(String[] args) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":170,"author":{"gitId":"neyapraveen"},"content":" createDataLocation();","lastModifiedDate":"2023-09-06"},{"lineNumber":171,"author":{"gitId":"neyapraveen"},"content":" loadTasksFromFile();","lastModifiedDate":"2023-09-06"},{"lineNumber":172,"author":{"gitId":"neyapraveen"},"content":" if (allTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-06"},{"lineNumber":173,"author":{"gitId":"neyapraveen"},"content":" run \u003d 1;","lastModifiedDate":"2023-09-06"},{"lineNumber":174,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":175,"author":{"gitId":"neyapraveen"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-25"},{"lineNumber":176,"author":{"gitId":"neyapraveen"},"content":" String task \u003d \"\";","lastModifiedDate":"2023-08-25"},{"lineNumber":177,"author":{"gitId":"neyapraveen"},"content":" System.out.println(\"Hello! I\u0027m Bot\\n\" + \"What can I do for you?\\n\" + horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":178,"author":{"gitId":"neyapraveen"},"content":" System.out.flush();","lastModifiedDate":"2023-09-06"},{"lineNumber":179,"author":{"gitId":"neyapraveen"},"content":" while (true) {","lastModifiedDate":"2023-08-25"},{"lineNumber":180,"author":{"gitId":"neyapraveen"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":181,"author":{"gitId":"neyapraveen"},"content":" task \u003d sc.nextLine();","lastModifiedDate":"2023-08-25"},{"lineNumber":182,"author":{"gitId":"neyapraveen"},"content":" if (task.equals(\"bye\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":183,"author":{"gitId":"neyapraveen"},"content":" run \u003d 0;","lastModifiedDate":"2023-09-06"},{"lineNumber":184,"author":{"gitId":"neyapraveen"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":185,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":186,"author":{"gitId":"neyapraveen"},"content":" if (task.equals(\"list\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":187,"author":{"gitId":"neyapraveen"},"content":" Task taskInstance \u003d new Task();","lastModifiedDate":"2023-09-06"},{"lineNumber":188,"author":{"gitId":"neyapraveen"},"content":" taskInstance.printList();","lastModifiedDate":"2023-08-25"},{"lineNumber":189,"author":{"gitId":"neyapraveen"},"content":" continue;","lastModifiedDate":"2023-08-25"},{"lineNumber":190,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":191,"author":{"gitId":"neyapraveen"},"content":" String[] elements \u003d task.split((\" \"));","lastModifiedDate":"2023-08-25"},{"lineNumber":192,"author":{"gitId":"neyapraveen"},"content":" if (elements.length \u003e\u003d 2) {","lastModifiedDate":"2023-08-25"},{"lineNumber":193,"author":{"gitId":"neyapraveen"},"content":" String instruction \u003d elements[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":194,"author":{"gitId":"neyapraveen"},"content":" if (instruction.equals(\"mark\") || instruction.equals(\"unmark\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":195,"author":{"gitId":"neyapraveen"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":196,"author":{"gitId":"neyapraveen"},"content":" int no \u003d Integer.parseInt(elements[1]);","lastModifiedDate":"2023-08-25"},{"lineNumber":197,"author":{"gitId":"neyapraveen"},"content":" Task taskInstance \u003d new Task();","lastModifiedDate":"2023-09-06"},{"lineNumber":198,"author":{"gitId":"neyapraveen"},"content":" if (instruction.equals(\"mark\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":199,"author":{"gitId":"neyapraveen"},"content":" taskInstance.mark(no);","lastModifiedDate":"2023-08-25"},{"lineNumber":200,"author":{"gitId":"neyapraveen"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":201,"author":{"gitId":"neyapraveen"},"content":" taskInstance.unmark(no);","lastModifiedDate":"2023-08-25"},{"lineNumber":202,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":203,"author":{"gitId":"neyapraveen"},"content":" continue;","lastModifiedDate":"2023-08-26"},{"lineNumber":204,"author":{"gitId":"neyapraveen"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":205,"author":{"gitId":"neyapraveen"},"content":" System.err.println(Duke.horizontalLine + \"You did not enter a valid integer :(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-26"},{"lineNumber":206,"author":{"gitId":"neyapraveen"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":207,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":208,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":209,"author":{"gitId":"neyapraveen"},"content":" if (instruction.equals(\"delete\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":210,"author":{"gitId":"neyapraveen"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":211,"author":{"gitId":"neyapraveen"},"content":" int no \u003d Integer.parseInt(elements[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":212,"author":{"gitId":"neyapraveen"},"content":" Task taskInstance \u003d new Task();","lastModifiedDate":"2023-09-06"},{"lineNumber":213,"author":{"gitId":"neyapraveen"},"content":" taskInstance.delete(no);","lastModifiedDate":"2023-08-27"},{"lineNumber":214,"author":{"gitId":"neyapraveen"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":215,"author":{"gitId":"neyapraveen"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":216,"author":{"gitId":"neyapraveen"},"content":" System.err.println(Duke.horizontalLine + \"You did not enter a valid integer :(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":217,"author":{"gitId":"neyapraveen"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":218,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":219,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":220,"author":{"gitId":"neyapraveen"},"content":" int firstSpaceIndex \u003d task.indexOf(\u0027 \u0027);","lastModifiedDate":"2023-08-26"},{"lineNumber":221,"author":{"gitId":"neyapraveen"},"content":" String actualTask \u003d task.substring(firstSpaceIndex + 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":222,"author":{"gitId":"neyapraveen"},"content":" if (instruction.equals(\"todo\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":223,"author":{"gitId":"neyapraveen"},"content":" Todo todo \u003d new Todo(actualTask, true);","lastModifiedDate":"2023-09-06"},{"lineNumber":224,"author":{"gitId":"neyapraveen"},"content":" todo.print();","lastModifiedDate":"2023-08-26"},{"lineNumber":225,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":226,"author":{"gitId":"neyapraveen"},"content":" else if (instruction.equals(\"deadline\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":227,"author":{"gitId":"neyapraveen"},"content":" String[] taskAndDeadline \u003d actualTask.split((\"/by\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":228,"author":{"gitId":"neyapraveen"},"content":" if (taskAndDeadline.length \u003d\u003d 1 || taskAndDeadline.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":229,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine + \"OOPS!!! Invalid format for deadline :-(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":230,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":231,"author":{"gitId":"neyapraveen"},"content":" String onlyTask \u003d taskAndDeadline[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":232,"author":{"gitId":"neyapraveen"},"content":" String by \u003d taskAndDeadline[1];","lastModifiedDate":"2023-08-26"},{"lineNumber":233,"author":{"gitId":"neyapraveen"},"content":" Deadline deadline \u003d new Deadline(onlyTask, true, by);","lastModifiedDate":"2023-09-06"},{"lineNumber":234,"author":{"gitId":"neyapraveen"},"content":" deadline.print();","lastModifiedDate":"2023-08-26"},{"lineNumber":235,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":236,"author":{"gitId":"neyapraveen"},"content":" else if (instruction.equals(\"event\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":237,"author":{"gitId":"neyapraveen"},"content":" String[] taskAndToFrom \u003d actualTask.split((\"/from\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":238,"author":{"gitId":"neyapraveen"},"content":" if (taskAndToFrom.length \u003d\u003d 1 || taskAndToFrom.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":239,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine + \"OOPS!!! Invalid format for event :-(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":240,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":241,"author":{"gitId":"neyapraveen"},"content":" String onlyTask \u003d taskAndToFrom[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":242,"author":{"gitId":"neyapraveen"},"content":" if (onlyTask.trim().isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":243,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine + \"OOPS!!! Invalid format for event :-(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":244,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":245,"author":{"gitId":"neyapraveen"},"content":" String[] ToFrom \u003d taskAndToFrom[1].split(\"/to\");","lastModifiedDate":"2023-08-26"},{"lineNumber":246,"author":{"gitId":"neyapraveen"},"content":" if (ToFrom.length \u003d\u003d 1 || ToFrom.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":247,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine + \"OOPS!!! Invalid format for event :-(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":248,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":249,"author":{"gitId":"neyapraveen"},"content":" String from \u003d ToFrom[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":250,"author":{"gitId":"neyapraveen"},"content":" String to \u003d ToFrom[1];","lastModifiedDate":"2023-08-26"},{"lineNumber":251,"author":{"gitId":"neyapraveen"},"content":" Event event \u003d new Event(onlyTask, true, from, to);","lastModifiedDate":"2023-09-06"},{"lineNumber":252,"author":{"gitId":"neyapraveen"},"content":" event.print();","lastModifiedDate":"2023-08-26"},{"lineNumber":253,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":254,"author":{"gitId":"neyapraveen"},"content":" else {","lastModifiedDate":"2023-08-27"},{"lineNumber":255,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine + \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":256,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":257,"author":{"gitId":"neyapraveen"},"content":" } else if (elements[0].equals(\"todo\") || elements[0].equals(\"deadline\") || elements[0].equals(\"event\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":258,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine + \"OOPS!!! The description of a \" + elements[0] + \" cannot be empty.\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":259,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":260,"author":{"gitId":"neyapraveen"},"content":" else {","lastModifiedDate":"2023-08-27"},{"lineNumber":261,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine + \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":262,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":263,"author":{"gitId":"neyapraveen"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":264,"author":{"gitId":"neyapraveen"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":265,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":266,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":267,"author":{"gitId":"neyapraveen"},"content":" System.out.println(horizontalLine+ \"Bye. Hope to see you again soon!\\n\" + horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":268,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":269,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":270,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":271,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"neyapraveen":267,"-":4}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"neyapraveen"},"content":"public class DukeException extends Exception{","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"neyapraveen"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"neyapraveen"},"content":" super(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"neyapraveen"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"neyapraveen":5}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"neyapraveen"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"neyapraveen"},"content":" String from;","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"neyapraveen"},"content":" String to;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"neyapraveen"},"content":" public Event(String task, Boolean isNotSaved, String from, String to) {","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"neyapraveen"},"content":" super(task, isNotSaved);","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"neyapraveen"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"neyapraveen"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"neyapraveen"},"content":" if (isNotSaved) {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"neyapraveen"},"content":" saveToFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"neyapraveen"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"neyapraveen"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"neyapraveen"},"content":" return \"[E]\" + super.toString() + \"(from:\" + from + \"to:\" + to + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"neyapraveen"},"content":" public void print() {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"neyapraveen"},"content":" System.out.println(Duke.horizontalLine + \"Got it. I\u0027ve added this task:\\n \" + this.toString()+ \"\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"neyapraveen"},"content":" + \"Now you have \" + Task.getCounter() + \" tasks in the list\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"neyapraveen"},"content":" public String generateStr() {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"neyapraveen"},"content":" return \"E | \" + (this.getStatus() \u003d\u003d TaskStatus.DONE ? 1 : 0)","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"neyapraveen"},"content":" + \" | \" + this.getTask() + \" | \" + from + \" | \"+to;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"neyapraveen"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"neyapraveen"},"content":" public void saveToFile() {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"neyapraveen"},"content":" Duke.saveTaskToFile(generateStr());","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"neyapraveen"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"neyapraveen":34}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"neyapraveen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"neyapraveen"},"content":"public class Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"neyapraveen"},"content":" private String task;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"neyapraveen"},"content":" private TaskStatus status;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"neyapraveen"},"content":" Boolean isNotSaved;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"neyapraveen"},"content":" private static ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"neyapraveen"},"content":" private static int counter \u003d 0;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"neyapraveen"},"content":" public Task(String task, Boolean isNotSaved) {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"neyapraveen"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"neyapraveen"},"content":" this.status \u003d TaskStatus.NOT_DONE;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"neyapraveen"},"content":" this.isNotSaved \u003d isNotSaved;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"neyapraveen"},"content":" if (!task.isEmpty()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"neyapraveen"},"content":" addTask(this.task);","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"neyapraveen"},"content":" public Task() {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"neyapraveen"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"neyapraveen"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"neyapraveen"},"content":" return status.toString() + \" \" + this.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"neyapraveen"},"content":" public void addTask(String task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"neyapraveen"},"content":" if (!task.equals(\"\")){","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"neyapraveen"},"content":" if (!task.isEmpty()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"neyapraveen"},"content":" Duke.allTasks.add(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"neyapraveen"},"content":" counter++;","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"neyapraveen"},"content":" public static int getCounter() {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"neyapraveen"},"content":" return counter;","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"neyapraveen"},"content":" public TaskStatus getStatus() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"neyapraveen"},"content":" return this.status;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"neyapraveen"},"content":" public void setStatus(TaskStatus taskStatus) {","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"neyapraveen"},"content":" this.status \u003d taskStatus;","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"neyapraveen"},"content":" public String getTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"neyapraveen"},"content":" return this.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"neyapraveen"},"content":" public void printList() {","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"neyapraveen"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"neyapraveen"},"content":" System.out.println(Duke.horizontalLine + \"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"neyapraveen"},"content":" for (Task task : Duke.allTasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"neyapraveen"},"content":" count++;","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"neyapraveen"},"content":" System.out.println( count+\". \" + task.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"neyapraveen"},"content":" System.out.println(Duke.horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"neyapraveen"},"content":" public String getTaskType() {","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"neyapraveen"},"content":" // Your logic to determine the task type based on the instance\u0027s actual class","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"neyapraveen"},"content":" if (this instanceof Todo) {","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"neyapraveen"},"content":" return \"T\";","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"neyapraveen"},"content":" } else if (this instanceof Deadline) {","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"neyapraveen"},"content":" return \"D\";","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"neyapraveen"},"content":" } else if (this instanceof Event) {","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"neyapraveen"},"content":" return \"E\";","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"neyapraveen"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"neyapraveen"},"content":" return \"\"; // Handle unknown task types or add appropriate logic","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"neyapraveen"},"content":" public void mark(int i) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"neyapraveen"},"content":" if (i \u003e Duke.allTasks.size() || i \u003c\u003d 0) {","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine + \"OOPS!!! Invalid number :(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"neyapraveen"},"content":" Task markTask \u003d Duke.allTasks.get(i - 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"neyapraveen"},"content":" markTask.status \u003d TaskStatus.DONE;","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"neyapraveen"},"content":" // Update the task description in the file","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"neyapraveen"},"content":" Duke.updateLineInFile(i, markTask.generateStr());","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"neyapraveen"},"content":" System.out.println(Duke.horizontalLine + \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"neyapraveen"},"content":" + markTask.toString() + \"\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":92,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":93,"author":{"gitId":"neyapraveen"},"content":" public void mark() {","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"neyapraveen"},"content":" this.status \u003d TaskStatus.DONE;","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"neyapraveen"},"content":" public void unmark() {","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"neyapraveen"},"content":" this.status \u003d TaskStatus.NOT_DONE;","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"neyapraveen"},"content":" public void delete() {","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"neyapraveen"},"content":" Duke.allTasks.remove(this); // Remove the task from the list","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"neyapraveen"},"content":" public void unmark(int i) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"neyapraveen"},"content":" if (i \u003e Duke.allTasks.size() || i \u003c\u003d 0) {","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine+ \"OOPS!!! Invalid number :(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"neyapraveen"},"content":" Task unmarkTask \u003d Duke.allTasks.get(i - 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"neyapraveen"},"content":" unmarkTask.status \u003d TaskStatus.NOT_DONE;","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"neyapraveen"},"content":" Duke.updateLineInFile(i, unmarkTask.generateStr());","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"neyapraveen"},"content":" System.out.println(Duke.horizontalLine + \"Ok, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":115,"author":{"gitId":"neyapraveen"},"content":" + unmarkTask.toString() + \"\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"neyapraveen"},"content":" public void delete(int i) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"neyapraveen"},"content":" if (i \u003e Duke.allTasks.size() || i \u003c\u003d 0) {","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"neyapraveen"},"content":" throw new DukeException(Duke.horizontalLine+ \"OOPS!!! Invalid number :(\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"neyapraveen"},"content":" Task deleteTask \u003d Duke.allTasks.get(i - 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":123,"author":{"gitId":"neyapraveen"},"content":" counter \u003d counter - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"neyapraveen"},"content":" Duke.allTasks.remove(i - 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":125,"author":{"gitId":"neyapraveen"},"content":" Duke.deleteLineFromFile(i);","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"neyapraveen"},"content":" System.out.println(Duke.horizontalLine + \"Noted. I\u0027ve removed this task:\\n\" + deleteTask.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"neyapraveen"},"content":" + \"\\n\" + String.format(\"Now you have %d tasks in the list\\n\", counter) + Duke.horizontalLine );","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"neyapraveen"},"content":" public String generateStr() {","lastModifiedDate":"2023-09-06"},{"lineNumber":131,"author":{"gitId":"neyapraveen"},"content":" return task;","lastModifiedDate":"2023-09-06"},{"lineNumber":132,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":133,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":134,"author":{"gitId":"neyapraveen"},"content":" public void saveToFile() {","lastModifiedDate":"2023-09-06"},{"lineNumber":135,"author":{"gitId":"neyapraveen"},"content":" return;","lastModifiedDate":"2023-09-06"},{"lineNumber":136,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":137,"author":{"gitId":"neyapraveen"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"neyapraveen":137}},{"path":"src/main/java/TaskStatus.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"neyapraveen"},"content":"enum TaskStatus {","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"neyapraveen"},"content":" DONE(\"[X]\"), NOT_DONE(\"[ ]\");","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"neyapraveen"},"content":" private final String symbol;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"neyapraveen"},"content":" TaskStatus(String symbol) {","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"neyapraveen"},"content":" this.symbol \u003d symbol;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"neyapraveen"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"neyapraveen"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"neyapraveen"},"content":" return symbol;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"neyapraveen"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"neyapraveen":12}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"neyapraveen"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"neyapraveen"},"content":" public Todo(String task, Boolean isNotSaved) {","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"neyapraveen"},"content":" super(task, isNotSaved);","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"neyapraveen"},"content":" if (isNotSaved) {","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"neyapraveen"},"content":" saveToFile();","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"neyapraveen"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"neyapraveen"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"neyapraveen"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"neyapraveen"},"content":" public void print() {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"neyapraveen"},"content":" System.out.println(Duke.horizontalLine + \"Got it. I\u0027ve added this task:\\n \" + this.toString()+ \"\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"neyapraveen"},"content":" + \"Now you have \" + Task.getCounter() + \" tasks in the list\\n\" + Duke.horizontalLine);","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"neyapraveen"},"content":" public String generateStr() {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"neyapraveen"},"content":" return \"T | \" + (this.getStatus() \u003d\u003d TaskStatus.DONE ? 1 : 0)","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"neyapraveen"},"content":" + \" | \" + this.getTask();","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"neyapraveen"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"neyapraveen"},"content":" public void saveToFile() {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"neyapraveen"},"content":" Duke.saveTaskToFile(generateStr());","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"neyapraveen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"neyapraveen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"neyapraveen"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"neyapraveen":30}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"neyapraveen"},"content":"todo borrow book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"neyapraveen"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"neyapraveen"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"neyapraveen"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"neyapraveen"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"neyapraveen":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":"neyapraveen"},"content":"if ! javac -cp ../src/main/java/Duke -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"neyapraveen":1,"-":37}}] diff --git a/neyapraveen_ip_master/commits.json b/neyapraveen_ip_master/commits.json index 366d289e..987fbb9f 100644 --- a/neyapraveen_ip_master/commits.json +++ b/neyapraveen_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"neyapraveen":[{"date":"2023-08-24","commitResults":[{"hash":"6539f8a2853a56820143863b5c77d623dc1f3bc9","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}}]},{"date":"2023-08-25","commitResults":[{"hash":"6ae63d88d058d01a766c2332067df9112d995e8b","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":8}}},{"hash":"2329ed91975ee76c48e59b8988e24792e99f3e09","isMergeCommit":false,"messageTitle":"Adds input to array list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"0a3c0644f026660472f9fd9aeb2c84aa4f8f0da5","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":4}}},{"hash":"99a686bda2d9bac33f07f52e6a8c34dc287c8e54","isMergeCommit":false,"messageTitle":"Created Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":16}}},{"hash":"bad0c0434f19d7f97c8aca055cd28d40ee9b6c09","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":8}}}]},{"date":"2023-08-26","commitResults":[{"hash":"38e05084610229cd44e5760bf089e99569df7784","isMergeCommit":false,"messageTitle":"Create Todo class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":8}}},{"hash":"4d17ae482110ebe1f02f70427ac8f8b0a8d9cc6a","isMergeCommit":false,"messageTitle":"Create Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":3}}},{"hash":"940800d1b67420820c733029669fcd6405bf9d2e","isMergeCommit":false,"messageTitle":"Create Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":3}}},{"hash":"cf201999174ae8a23ea721248bbcb3a480e78309","isMergeCommit":false,"messageTitle":"Create ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":20}}},{"hash":"cb158b9556c5e27111ffb9804108bc4afb1ebe8f","isMergeCommit":false,"messageTitle":"Create Test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":0,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"2e5dae22af32bcc8007f683775d8d7551f9e1b90","isMergeCommit":false,"messageTitle":"Create DukeException class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":50}}}]},{"date":"2023-08-27","commitResults":[{"hash":"3a1f20ca8d972da766e788433b5e89bef3e2effc","isMergeCommit":false,"messageTitle":"Handle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}},{"hash":"11a15c2b8ea7d8ab35c72b75da6ac5fcd3f60ef3","isMergeCommit":false,"messageTitle":"Handle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":5}}},{"hash":"137d6d9665c511ba34706f982cb0bf57c2bd9277","isMergeCommit":false,"messageTitle":"Handle errors final","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"f011f87414336ed77692cbd55b82220c307a8bdd","isMergeCommit":false,"messageTitle":"Delete Tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"fff5e0f657cdc5c8625800df8a4ae2cf26a6ec20","isMergeCommit":false,"messageTitle":"Create enum for TaskStatus","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":26}}}]}]},"authorFileTypeContributionMap":{"neyapraveen":{"java":238,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":0,"txt":5}},"authorContributionVariance":{"neyapraveen":8323.64},"authorDisplayNameMap":{"neyapraveen":"CS2103T-F12-2 DEWA..VEEN"}} +{"authorDailyContributionsMap":{"neyapraveen":[{"date":"2023-08-24","commitResults":[{"hash":"6539f8a2853a56820143863b5c77d623dc1f3bc9","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}}]},{"date":"2023-08-25","commitResults":[{"hash":"6ae63d88d058d01a766c2332067df9112d995e8b","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":8}}},{"hash":"2329ed91975ee76c48e59b8988e24792e99f3e09","isMergeCommit":false,"messageTitle":"Adds input to array list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"0a3c0644f026660472f9fd9aeb2c84aa4f8f0da5","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":4}}},{"hash":"99a686bda2d9bac33f07f52e6a8c34dc287c8e54","isMergeCommit":false,"messageTitle":"Created Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":16}}},{"hash":"bad0c0434f19d7f97c8aca055cd28d40ee9b6c09","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":8}}}]},{"date":"2023-08-26","commitResults":[{"hash":"38e05084610229cd44e5760bf089e99569df7784","isMergeCommit":false,"messageTitle":"Create Todo class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":8}}},{"hash":"4d17ae482110ebe1f02f70427ac8f8b0a8d9cc6a","isMergeCommit":false,"messageTitle":"Create Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":3}}},{"hash":"940800d1b67420820c733029669fcd6405bf9d2e","isMergeCommit":false,"messageTitle":"Create Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":3}}},{"hash":"cf201999174ae8a23ea721248bbcb3a480e78309","isMergeCommit":false,"messageTitle":"Create ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":20}}},{"hash":"cb158b9556c5e27111ffb9804108bc4afb1ebe8f","isMergeCommit":false,"messageTitle":"Create Test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":0,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"2e5dae22af32bcc8007f683775d8d7551f9e1b90","isMergeCommit":false,"messageTitle":"Create DukeException class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":50}}}]},{"date":"2023-08-27","commitResults":[{"hash":"3a1f20ca8d972da766e788433b5e89bef3e2effc","isMergeCommit":false,"messageTitle":"Handle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}},{"hash":"11a15c2b8ea7d8ab35c72b75da6ac5fcd3f60ef3","isMergeCommit":false,"messageTitle":"Handle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":5}}},{"hash":"137d6d9665c511ba34706f982cb0bf57c2bd9277","isMergeCommit":false,"messageTitle":"Handle errors final","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"f011f87414336ed77692cbd55b82220c307a8bdd","isMergeCommit":false,"messageTitle":"Delete Tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"fff5e0f657cdc5c8625800df8a4ae2cf26a6ec20","isMergeCommit":false,"messageTitle":"Create enum for TaskStatus","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":26}}}]},{"date":"2023-08-30","commitResults":[{"hash":"c2d30538ed19d3f281d5323c688a370b1a7298e1","isMergeCommit":false,"messageTitle":"Save event to text file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":40,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"593b7216ca58efe2e86ffd4f48fa6bed2091d198","isMergeCommit":false,"messageTitle":"Save all tasks to text file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":357,"deletions":118}}},{"hash":"f8ee3e60b0c0a635893cdace51eb23c2342fa4ed","isMergeCommit":false,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"neyapraveen":{"java":516,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":0,"txt":6}},"authorContributionVariance":{"neyapraveen":14240.808},"authorDisplayNameMap":{"neyapraveen":"CS2103T-F12-2 DEWA..VEEN"}} diff --git a/ngeeyonglim_ip_master/authorship.json b/ngeeyonglim_ip_master/authorship.json index 1385c3c3..b221b50e 100644 --- a/ngeeyonglim_ip_master/authorship.json +++ b/ngeeyonglim_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"# duke.Yong project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"3. After that, locate the `src/main/java/duke.Yong.java` file, right-click it, and choose `Run duke.Yong.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ngeeyonglim":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":"ngeeyonglim"},"content":"mainClassName \u003d \u0027duke.Yong\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" mainClass.set(\"duke.Yong\")","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" archiveBaseName \u003d \"Yong\"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" archiveVersion \u003d \"1.0.0\"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ngeeyonglim":6,"-":41}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"import duke.command.StartCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"import duke.command.ToDoCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" * Parser class to decipher the input of the chatbot and call the correct command.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the parser class.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" public Parser(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" * Method to parse the string input of the chatbot and call the correct command.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" * @param inp Line of input from the CLI.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" * @return Command object that will be executed.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" public Command parse(String inp) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":" inp \u003d inp.toUpperCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":" String [] parts \u003d inp.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" String check \u003d parts[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":" String numberString \u003d parts.length \u003e 1 ? parts[1] : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" switch (check) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" case \"BYE\":","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" Command byeCommand \u003d new ExitCommand(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" return byeCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":" case \"HI\":","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":" Command startCommand \u003d new StartCommand(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":" return startCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ngeeyonglim"},"content":" case \"LIST\":","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ngeeyonglim"},"content":" Command listCommand \u003d new ListCommand(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ngeeyonglim"},"content":" return listCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ngeeyonglim"},"content":" case \"MARK\":","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ngeeyonglim"},"content":" Command markCommand \u003d new MarkCommand(taskList, numberString);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ngeeyonglim"},"content":" return markCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ngeeyonglim"},"content":" case \"UNMARK\":","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ngeeyonglim"},"content":" Command unmarkCommand \u003d new UnmarkCommand(taskList, numberString);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ngeeyonglim"},"content":" return unmarkCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ngeeyonglim"},"content":" case \"DELETE\":","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ngeeyonglim"},"content":" Command deleteCommand \u003d new DeleteCommand(taskList, numberString);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ngeeyonglim"},"content":" return deleteCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ngeeyonglim"},"content":" case \"TODO\":","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ngeeyonglim"},"content":" Command toDoCommand \u003d new ToDoCommand(taskList, inp);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ngeeyonglim"},"content":" return toDoCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ngeeyonglim"},"content":" case \"EVENT\":","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ngeeyonglim"},"content":" Command eventCommand \u003d new EventCommand(taskList, inp);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ngeeyonglim"},"content":" return eventCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ngeeyonglim"},"content":" case \"DEADLINE\":","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ngeeyonglim"},"content":" Command deadLineCommand \u003d new DeadlineCommand(taskList, inp);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ngeeyonglim"},"content":" return deadLineCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ngeeyonglim"},"content":" case \"FIND\":","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ngeeyonglim"},"content":" Command findCommand \u003d new FindCommand(taskList, inp);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ngeeyonglim"},"content":" return findCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ngeeyonglim"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ngeeyonglim"},"content":" throw new DukeException(\"I do not know what you are saying.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":84}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" * Storage class to handle file storage, creation and reading of saved file.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" static final String FILE_PATH \u003d \"./data/dataFile\";","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor of the duke.Storage class.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" public Storage(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" * Saves the current history array to the file","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" public void saveFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" FileOutputStream dataFileStream \u003d new FileOutputStream(FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":" ObjectOutputStream objectStream \u003d new ObjectOutputStream(dataFileStream);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":" objectStream.writeObject(taskList.get());","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" objectStream.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"File is not found! But this shouldn\u0027t happen LOL\");","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ngeeyonglim"},"content":" * Reads the file to populate the history array","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ngeeyonglim"},"content":" public void readFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ngeeyonglim"},"content":" File dataFile \u003d new File(FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ngeeyonglim"},"content":" if (dataFile.exists() \u0026\u0026 (!dataFile.isDirectory())){","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"ngeeyonglim"},"content":" FileInputStream dataFileStream \u003d new FileInputStream(dataFile);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ngeeyonglim"},"content":" ObjectInputStream objectStream \u003d new ObjectInputStream(dataFileStream);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ngeeyonglim"},"content":" this.taskList.set((ArrayList\u003cTask\u003e) objectStream.readObject());","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ngeeyonglim"},"content":" objectStream.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ngeeyonglim"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"ngeeyonglim"},"content":" Path parentDir \u003d Paths.get(FILE_PATH).getParent();","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"ngeeyonglim"},"content":" Files.createDirectories(parentDir);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ngeeyonglim"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"File is not found! But this shouldn\u0027t happen LOL\");","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ngeeyonglim"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"There is an error occurring, \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":77}},{"path":"src/main/java/duke/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":" * UI class to handle UI methods.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"public class UI {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":" static Scanner reader;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the UI class.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" * Initializes a scanner to read user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" public UI() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" this.reader \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" * Reads the next line of user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" * @return User input in a string format.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" String action \u003d reader.nextLine().toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" return action;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" * Prints out the welcome statement.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" String logo \u003d \"YONG\";","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"Hello I\u0027m \" + logo + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" \"What can I do for you? \\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" * Prints out a line to delineate actions.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" public void showLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"_________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" * Prints out the error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" * @param errorMessage Error message to be printed.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":54}},{"path":"src/main/java/duke/Yong.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" * Chatbot named YONG that responds to user input using CLI","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"public class Yong {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" Yong.run();","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" public static void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" UI ui \u003d new UI();","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" Storage storage \u003d new Storage(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" storage.readFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" ui.showLine(); // show the divider line (\"_______\")","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" Parser parser \u003d new Parser(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" Command c \u003d parser.parse(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" c.execute();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" } finally {","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" ui.showLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" storage.saveFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ngeeyonglim":40,"-":3}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":" * Represents a command given by the user. Parent class with abstract execute() method.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" protected boolean isExitCommand \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for command objects.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" public Command(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" * Abstract method to be implemented for all commands.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" * To be run when the command is entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" public abstract void execute();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" * Returns whether the command entered by the user is an Exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" * @return true if it is an exit command, false otherwise","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" return isExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":41}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed if the user inputs a deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" String inp;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the deadline command.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" * @param inp Line of input from the CLI","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" public DeadlineCommand(TaskList taskList, String inp) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" this.inp \u003d inp;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" * Initializes a new Deadline object and adds it to the taskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" public void execute() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" String[] parts \u003d inp.split(\"/\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" String[] typeDescription \u003d parts[0].split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" String type \u003d typeDescription[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" String description \u003d typeDescription[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" Task newTask \u003d new Deadline(description, parts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" taskList.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"Okay! Task added \\n\" + newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" throw new DukeException(\"Please give a valid description for a Deadline task!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":52}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" * Class representing actions run when the delete command is called by user.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" String numberString;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for DeleteCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" * @param numberString Parsed string input from the CLI, represents task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" public DeleteCommand(TaskList taskList, String numberString) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" this.numberString \u003d numberString;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" * Deletes the specified task by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" public void execute() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" Integer number \u003d Integer.parseInt(numberString);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d taskList.delete(number);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"YONG has deleted this task for you! \\n\" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":46}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed if the user inputs an event task","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" String inp;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the event command.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" * @param inp Line of input from the CLI","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" public EventCommand(TaskList taskList, String inp) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" this.inp \u003d inp;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" * Initializes an Event object and adds it to the taskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" public void execute() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" String[] parts \u003d inp.split(\"/\", 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" String[] typeDescription \u003d parts[0].split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" String type \u003d typeDescription[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" String description \u003d typeDescription[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":" String from \u003d parts[1].trim().split(\" \", 2)[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" String to \u003d parts[2].trim().split(\" \", 2)[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" Task newTask \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":" taskList.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"Okay! Task added \\n\" + newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":" throw new DukeException(\"Please give a valid description for an Event task!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":55}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed if the user inputs an Exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" * User input is \"bye\"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the deadline command.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" public ExitCommand(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" isExitCommand \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" * Prints out the end statement of the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" public void execute() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"Thank you and have a good day!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":35}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed if the user inputs a deadline task","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" String inp;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the Find command.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" * @param inp Line of input from the CLI","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" public FindCommand(TaskList taskList, String inp) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" this.inp \u003d inp;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" * Prints out the tasks that contain the keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" public void execute() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" String[] parts \u003d inp.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" String lookupString \u003d parts[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" taskList.find(lookupString);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":" throw new DukeException(\"Please give a valid description for the find command\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ngeeyonglim":46}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed if the user inputs a list command.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the list command.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" public ListCommand(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" * Prints out all tasks in the tasklist in the specified format.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" public void execute() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" taskList.list();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":34}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed if the user inputs a mark command.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" String numberString;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the mark command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" * @param numberString Line of input from the CLI.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" public MarkCommand(TaskList taskList, String numberString) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" this.numberString \u003d numberString;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" * Marks the specified task as being completed.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" public void execute() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" Integer number \u003d Integer.parseInt(this.numberString);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d taskList.mark(number);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"YONG has marked this task as completed! \\n\" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":42}},{"path":"src/main/java/duke/command/StartCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed when the user says Hi.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"public class StartCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the start command.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" public StartCommand(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" * Prints out the chatbot name and introduces itself.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" public void execute() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" String logo \u003d \"YONG\";","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"Hello I\u0027m \" + logo + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" \"What can I do for you? \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" \"-------------------------------------\"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":38}},{"path":"src/main/java/duke/command/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed if the user inputs a todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" String inp;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the todo command.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" * @param inp Line of input from the CLI","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" public ToDoCommand(TaskList taskList, String inp) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" this.inp \u003d inp;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" * Initializes a new ToDo object and adds it to the taskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" public void execute() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" String[] typeDescription \u003d inp.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" String type \u003d typeDescription[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" String description \u003d typeDescription[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" Task newTask \u003d new ToDo(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" taskList.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"Okay! Task added \\n\" + newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" throw new DukeException(\"Please give a valid description for a ToDo task!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":52}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed if the user inputs an unmark command.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" String numberString;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the unmark command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" * @param numberString Parsed number input from the CLI.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" public UnmarkCommand(TaskList taskList, String numberString) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" this.numberString \u003d numberString;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" * Initializes a new Deadline object and adds it to the tasklist.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" public void execute() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" Integer number \u003d Integer.parseInt(this.numberString);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d taskList.unmark(number);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"YONG has unmarked this task successfully! \\n\" + task.toString() + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":42}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":" * Class to handle exceptions due to incorrect user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"public class DukeException extends RuntimeException {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ngeeyonglim":10}},{"path":"src/main/java/duke/tasklist/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.tasklist;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the taskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" this.taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" * Marks the specified task as being done.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" * @param number Number of the task, starting from index 1.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" * @return The task being marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" public Task mark(Integer number) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" if (number \u003e taskList.size() || number \u003c 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" throw new DukeException(\"Wrong Param\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d taskList.get(number-1);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" * Unmarks the specified task as being done.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" * @param number Number of the task, starting from index 1.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":" * @return The task being unmarked.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":" public Task unmark(Integer number) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ngeeyonglim"},"content":" if (number \u003e taskList.size() || number \u003c 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ngeeyonglim"},"content":" throw new DukeException(\"Wrong Param\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d taskList.get(number-1);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ngeeyonglim"},"content":" task.unmarkAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ngeeyonglim"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ngeeyonglim"},"content":" * Deleted the specified task.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ngeeyonglim"},"content":" * @param number Number of the task, starting from index 1.","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ngeeyonglim"},"content":" * @return The task being deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ngeeyonglim"},"content":" public Task delete(Integer number) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ngeeyonglim"},"content":" if (number \u003e taskList.size() || number \u003c 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ngeeyonglim"},"content":" throw new DukeException(\"Wrong Param\");","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d taskList.remove(number-1);","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ngeeyonglim"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ngeeyonglim"},"content":" * Adds a specific task to the tasklist.","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ngeeyonglim"},"content":" * @param task Task object to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ngeeyonglim"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ngeeyonglim"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ngeeyonglim"},"content":" * Prints out all the task in the tasklist.","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"ngeeyonglim"},"content":" public void list() {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ngeeyonglim"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(i+1 + \": \" + taskList.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ngeeyonglim"},"content":" * Returns the task list as an ArrayList object to be stored.","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ngeeyonglim"},"content":" * @return task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ngeeyonglim"},"content":" public ArrayList\u003cTask\u003e get() {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ngeeyonglim"},"content":" return this.taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"ngeeyonglim"},"content":" * Allows the task list to be set after reading the saved file.","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList Stored tasklist.","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"ngeeyonglim"},"content":" public void set(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"ngeeyonglim"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"ngeeyonglim"},"content":" public void find(String lookupString) {","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ngeeyonglim"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"ngeeyonglim"},"content":" Task currentTask \u003d taskList.get(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"ngeeyonglim"},"content":" if (currentTask.getDescription().contains(lookupString)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(i+1 + \": \" + currentTask);","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":126}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":" * duke.tasks.Deadline class representing a task and description","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":" protected LocalDateTime dueBy;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the deadline class","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" * @param description Description of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" * @param dueBy deadline of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" public Deadline(String description, String dueBy) {","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" this.dueBy \u003d parseDateTime(dueBy.split(\" \", 2)[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" * String representation of the deadline task","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" * @return Information of deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" String ret \u003d \"[D] \" + super.toString() + \" (by: \" + printDateTime(this.dueBy) + \")\" ;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" return ret;","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ngeeyonglim":31}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":" * duke.tasks.Event class representing a task and description.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the duke.tasks.Event class.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" * @param from start time of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" * @param to end time of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" this.from \u003d parseDateTime(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" this.to \u003d parseDateTime(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" * String representation of the duke.tasks.Event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" * @return Information of event.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" String ret \u003d \"[E] \" + super.toString() + \" (from: \" + printDateTime(this.from) + \" to: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" + printDateTime(this.to) + \")\" ;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" return ret;","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ngeeyonglim":39}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import java.security.InvalidParameterException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" * Superclass that supports task methods","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"public class Task implements Serializable {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for task invoked by superclass","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" * If tasks is done indicates \"X\" else shows a blank","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" * @return returns a string of either X or blank","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" * Marks the task as done","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" * Marks the task as undone","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" public void unmarkAsDone() { this.isDone \u003d false; }","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" * String representation of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" * @return details of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":" String ret \u003d \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ngeeyonglim"},"content":" return ret;","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ngeeyonglim"},"content":" * Parses date string into LocalDate objects, with dateString in the format yyyy-mm-dd HHmm","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ngeeyonglim"},"content":" * @param datetimeString String format of the date and or time parsed in yyyy-mm-dd HHmm","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ngeeyonglim"},"content":" protected LocalDateTime parseDateTime(String datetimeString) throws InvalidParameterException {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ngeeyonglim"},"content":" String pattern \u003d \"yyyy-MM-dd HHmm\";","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ngeeyonglim"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(pattern);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ngeeyonglim"},"content":" LocalDateTime datetime \u003d LocalDateTime.parse(datetimeString, formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ngeeyonglim"},"content":" return datetime;","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ngeeyonglim"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"Wrong date format provided\");","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"ngeeyonglim"},"content":" throw new InvalidParameterException();","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"ngeeyonglim"},"content":" * Returns the string format of datetime objects","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ngeeyonglim"},"content":" * @param date Date to be converted to a string","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ngeeyonglim"},"content":" * @return String format of the date in MMM dd yyyy HHmm format","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"ngeeyonglim"},"content":" protected String printDateTime(LocalDateTime date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ngeeyonglim"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"ngeeyonglim"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ngeeyonglim"},"content":" return this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ngeeyonglim"},"content":" * Returns the description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ngeeyonglim"},"content":" * @return description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ngeeyonglim"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ngeeyonglim"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ngeeyonglim":96}},{"path":"src/main/java/duke/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":" * duke.tasks.ToDo class representing a task and description","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the duke.tasks.ToDo class","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" * @param description Description of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" * String representation of the duke.tasks.ToDo task","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" * @return Information of event","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" String ret \u003d \"[T] \" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" return ret;","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ngeeyonglim":28}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"import duke.command.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" private Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" @BeforeEach","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" public void init() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" this.parser \u003d new Parser(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" public void parseTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" Command command \u003d parser.parse(\"Hi\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(command instanceof StartCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" command \u003d parser.parse(\"list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(command instanceof ListCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" command \u003d parser.parse(\"todo read book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(command instanceof ToDoCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" command \u003d parser.parse(\"deadline borrow book /by 2022-02-02 1900\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(command instanceof DeadlineCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" command \u003d parser.parse(\"event return book /from 2022-02-02 1800 /to 2023-01-02 1722\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(command instanceof EventCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" command \u003d parser.parse(\"bye\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(command instanceof ExitCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" fail(\"Unexpected DukeException: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" public void invalidCommandTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" // Test invalid command","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" Command command \u003d parser.parse(\"INVALID\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":" fail(\"Expected DukeException, but got \" + command.getClass().getSimpleName());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":" assertEquals(\"I do not know what you are saying.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ngeeyonglim":58}},{"path":"src/test/java/duke/tasklist/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package duke.tasklist;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" @BeforeEach","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" public void init() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" public void addTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d new ToDo(\"Read book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskList.get();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" assertEquals(1, tasks.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" assertEquals(task, tasks.get(0));","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" public void markAsDoneTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d new ToDo(\"Read book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" taskList.mark(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" public void unmarkTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d new ToDo(\"Read book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":" taskList.unmark(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(!task.isDone());","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":" public void deleteTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d new ToDo(\"Read book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ngeeyonglim"},"content":" Task deletedTask \u003d taskList.delete(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ngeeyonglim"},"content":" assertEquals(task, deletedTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(taskList.get().isEmpty());","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ngeeyonglim":62}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"todo read book","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"todo join cca","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"list","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ngeeyonglim":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":"java -classpath ..\\bin duke.Yong \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":{"ngeeyonglim":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"# yong.Yong project template","lastModifiedDate":"2023-09-05"},{"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":"ngeeyonglim"},"content":"3. After that, locate the `src/main/java/yong.Yong.java` file, right-click it, and choose `Run yong.Yong.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-05"},{"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":{"ngeeyonglim":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":"ngeeyonglim"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"javafx {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":" version \u003d \"20\"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":" modules \u003d [ \u0027javafx.controls\u0027 ]","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"mainClassName \u003d \u0027duke.Yong\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":" mainClass.set(\"duke.Yong\")","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"ngeeyonglim"},"content":" archiveBaseName \u003d \"Yong\"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"ngeeyonglim"},"content":" archiveVersion \u003d \"1.0.0\"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ngeeyonglim":27,"-":41}},{"path":"src/main/java/yong/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"import yong.ui.Bridge;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" Application.launch(Bridge.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ngeeyonglim":14}},{"path":"src/main/java/yong/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import yong.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"import yong.command.DeadlineCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import yong.command.DeleteCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import yong.command.EventCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import yong.command.ExitCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import yong.command.ListCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"import yong.command.MarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"import yong.command.StartCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"import yong.command.ToDoCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"import yong.command.UnmarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"import yong.command.FindCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"import yong.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasklist.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" * Parser class to decipher the input of the chatbot and call the correct command.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the parser class.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" public Parser(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" * Method to parse the string input of the chatbot and call the correct command.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" * @param inp Line of input from the CLI.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" * @return Command object that will be executed.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" public Command parse(String inp) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":" inp \u003d inp.toUpperCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":" String [] parts \u003d inp.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" String check \u003d parts[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":" String numberString \u003d parts.length \u003e 1 ? parts[1] : \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" switch (check) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" case \"BYE\":","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" Command byeCommand \u003d new ExitCommand(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" return byeCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":" case \"HI\":","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":" Command startCommand \u003d new StartCommand(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":" return startCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ngeeyonglim"},"content":" case \"LIST\":","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ngeeyonglim"},"content":" Command listCommand \u003d new ListCommand(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ngeeyonglim"},"content":" return listCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ngeeyonglim"},"content":" case \"MARK\":","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ngeeyonglim"},"content":" Command markCommand \u003d new MarkCommand(taskList, numberString);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ngeeyonglim"},"content":" return markCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ngeeyonglim"},"content":" case \"UNMARK\":","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ngeeyonglim"},"content":" Command unmarkCommand \u003d new UnmarkCommand(taskList, numberString);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ngeeyonglim"},"content":" return unmarkCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ngeeyonglim"},"content":" case \"DELETE\":","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ngeeyonglim"},"content":" Command deleteCommand \u003d new DeleteCommand(taskList, numberString);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ngeeyonglim"},"content":" return deleteCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ngeeyonglim"},"content":" case \"TODO\":","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ngeeyonglim"},"content":" Command toDoCommand \u003d new ToDoCommand(taskList, inp);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ngeeyonglim"},"content":" return toDoCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ngeeyonglim"},"content":" case \"EVENT\":","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ngeeyonglim"},"content":" Command eventCommand \u003d new EventCommand(taskList, inp);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ngeeyonglim"},"content":" return eventCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ngeeyonglim"},"content":" case \"DEADLINE\":","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ngeeyonglim"},"content":" Command deadLineCommand \u003d new DeadlineCommand(taskList, inp);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ngeeyonglim"},"content":" return deadLineCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ngeeyonglim"},"content":" case \"FIND\":","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ngeeyonglim"},"content":" Command findCommand \u003d new FindCommand(taskList, inp);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ngeeyonglim"},"content":" return findCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ngeeyonglim"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ngeeyonglim"},"content":" throw new DukeException(\"I do not know what you are saying.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":84}},{"path":"src/main/java/yong/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasklist.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" * Storage class to handle file storage, creation and reading of saved file.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" static final String FILE_PATH \u003d \"./data/dataFile\";","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor of the duke.Storage class.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" public Storage(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" * Saves the current history array to the file","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" public void saveFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" FileOutputStream dataFileStream \u003d new FileOutputStream(FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":" ObjectOutputStream objectStream \u003d new ObjectOutputStream(dataFileStream);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":" objectStream.writeObject(taskList.get());","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" objectStream.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"File is not found! But this shouldn\u0027t happen LOL\");","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ngeeyonglim"},"content":" * Reads the file to populate the history array","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ngeeyonglim"},"content":" public void readFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ngeeyonglim"},"content":" File dataFile \u003d new File(FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ngeeyonglim"},"content":" if (dataFile.exists() \u0026\u0026 (!dataFile.isDirectory())){","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"ngeeyonglim"},"content":" FileInputStream dataFileStream \u003d new FileInputStream(dataFile);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ngeeyonglim"},"content":" ObjectInputStream objectStream \u003d new ObjectInputStream(dataFileStream);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ngeeyonglim"},"content":" this.taskList.set((ArrayList\u003cTask\u003e) objectStream.readObject());","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ngeeyonglim"},"content":" objectStream.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ngeeyonglim"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"ngeeyonglim"},"content":" Path parentDir \u003d Paths.get(FILE_PATH).getParent();","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"ngeeyonglim"},"content":" Files.createDirectories(parentDir);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ngeeyonglim"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"File is not found! But this shouldn\u0027t happen LOL\");","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ngeeyonglim"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"There is an error occurring, \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":77}},{"path":"src/main/java/yong/Yong.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"import yong.ui.UI;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import yong.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import yong.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasklist.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" * Chatbot named YONG that responds to user input using CLI","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"public class Yong {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" * Class for running all the chatbot logic.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" public Yong() {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" this.storage \u003d new Storage(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" storage.readFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":"// public static void run() {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":"// UI ui \u003d new UI();","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":"// ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":"// TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":"// Storage storage \u003d new Storage(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":"// storage.readFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":"// boolean isExit \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":"// while (!isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":"// try {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":"// String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":"// ui.showLine(); // show the divider line (\"_______\")","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":"// Parser parser \u003d new Parser(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":"// Command c \u003d parser.parse(fullCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":"// c.execute();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":"// storage.saveFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":"// isExit \u003d c.isExit();","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":"// } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":"// ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":"// } finally {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":"// ui.showLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":"// }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":"// }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":"//","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":"// }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"ngeeyonglim"},"content":" * Returns String response of chatbot","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"ngeeyonglim"},"content":" * @param userInput user String input","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"ngeeyonglim"},"content":" * @return Yong chatbot string response","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"ngeeyonglim"},"content":" public String getResponse(String userInput) {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"ngeeyonglim"},"content":" Parser parser \u003d new Parser(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"ngeeyonglim"},"content":" Command c \u003d parser.parse(userInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"ngeeyonglim"},"content":" String outputString \u003d c.execute();","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"ngeeyonglim"},"content":" storage.saveFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"ngeeyonglim"},"content":" return outputString;","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"ngeeyonglim"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"ngeeyonglim"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ngeeyonglim":73}},{"path":"src/main/java/yong/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasklist.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":" * Represents a command given by the user. Parent class with abstract execute() method.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":" TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":" String outputString;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" protected boolean isExitCommand \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for command objects.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" public Command(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" * Abstract method to be implemented for all commands.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" * To be run when the command is entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" public abstract String execute();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" * Returns whether the command entered by the user is an Exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" * @return true if it is an exit command, false otherwise","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" return isExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":39}},{"path":"src/main/java/yong/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasklist.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasks.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import yong.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed if the user inputs a deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" String inp;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the deadline command.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" * @param inp Line of input from the CLI","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" public DeadlineCommand(TaskList taskList, String inp) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" this.inp \u003d inp;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" * Initializes a new Deadline object and adds it to the taskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" public String execute() {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" String[] parts \u003d inp.split(\"/\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" String[] typeDescription \u003d parts[0].split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" String type \u003d typeDescription[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" String description \u003d typeDescription[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" Task newTask \u003d new Deadline(description, parts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" taskList.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" outputString \u003d \"Okay! Task added \\n\" + newTask;","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":" return outputString;","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" throw new DukeException(\"Please give a valid description for a Deadline task!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":52}},{"path":"src/main/java/yong/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasklist.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":" * Class representing actions run when the delete command is called by user.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" String numberString;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for DeleteCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" * @param numberString Parsed string input from the CLI, represents task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" public DeleteCommand(TaskList taskList, String numberString) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" this.numberString \u003d numberString;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" * Deletes the specified task by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" public String execute() {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" Integer number \u003d Integer.parseInt(numberString);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d taskList.delete(number);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" outputString \u003d \"YONG has deleted this task for you! \\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" return outputString;","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":41}},{"path":"src/main/java/yong/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasklist.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasks.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import yong.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed if the user inputs an event task","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" String inp;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the event command.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" * @param inp Line of input from the CLI","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" public EventCommand(TaskList taskList, String inp) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" this.inp \u003d inp;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" * Initializes an Event object and adds it to the taskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" public String execute() {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" String[] parts \u003d inp.split(\"/\", 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" String[] typeDescription \u003d parts[0].split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" String type \u003d typeDescription[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" String description \u003d typeDescription[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" String from \u003d parts[1].trim().split(\" \", 2)[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" String to \u003d parts[2].trim().split(\" \", 2)[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" Task newTask \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" taskList.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":" outputString \u003d \"Okay! Task added \\n\" + newTask;","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" return outputString;","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":" throw new DukeException(\"Please give a valid description for an Event task!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":55}},{"path":"src/main/java/yong/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasklist.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed if the user inputs an Exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":" * User input is \"bye\"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the deadline command.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" public ExitCommand(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" isExitCommand \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" * Prints out the end statement of the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" public String execute() {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" outputString \u003d \"Thank you and have a good day!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" return outputString;","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":30}},{"path":"src/main/java/yong/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import yong.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasklist.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed if the user inputs a deadline task","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":" String inp;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the Find command.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" * @param inp Line of input from the CLI","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" public FindCommand(TaskList taskList, String inp) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" this.inp \u003d inp;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" * Prints out the tasks that contain the keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" public String execute() {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" String[] parts \u003d inp.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" String lookupString \u003d parts[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" outputString \u003d taskList.find(lookupString);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" return outputString;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" throw new DukeException(\"Please give a valid description for the find command\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ngeeyonglim":42}},{"path":"src/main/java/yong/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasklist.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed if the user inputs a list command.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the list command.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" public ListCommand(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" * Prints out all tasks in the tasklist in the specified format.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" public String execute() {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" outputString \u003d taskList.list();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" if (outputString.length() \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" return \"There are no current tasks!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" return outputString;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":32}},{"path":"src/main/java/yong/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasklist.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed if the user inputs a mark command.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" String numberString;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the mark command.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" * @param numberString Line of input from the CLI.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" public MarkCommand(TaskList taskList, String numberString) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" this.numberString \u003d numberString;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" * Marks the specified task as being completed.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" public String execute() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" Integer number \u003d Integer.parseInt(this.numberString);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d taskList.mark(number);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" outputString \u003d \"YONG has marked this task as completed! \\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" return outputString;","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":39}},{"path":"src/main/java/yong/command/StartCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasklist.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed when the user says Hi.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"public class StartCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the start command.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" public StartCommand(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" * Prints out the chatbot name and introduces itself.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" public String execute() {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" String logo \u003d \"YONG\";","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" outputString \u003d \"Hello I\u0027m \" + logo + \"\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" \"What can I do for you? \\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" return outputString;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":31}},{"path":"src/main/java/yong/command/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasklist.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasks.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import yong.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed if the user inputs a todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" String inp;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the todo command.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" * @param inp Line of input from the CLI","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" public ToDoCommand(TaskList taskList, String inp) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" this.inp \u003d inp;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" * Initializes a new ToDo object and adds it to the taskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" public String execute() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" String[] typeDescription \u003d inp.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" String type \u003d typeDescription[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" String description \u003d typeDescription[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" Task newTask \u003d new ToDo(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" taskList.add(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" outputString \u003d \"Okay! Task added \\n\" + newTask;","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" return outputString;","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":" throw new DukeException(\"Please give a valid description for a ToDo task!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":50}},{"path":"src/main/java/yong/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasklist.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the actions needed if the user inputs an unmark command.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" String numberString;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the unmark command.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList TaskList object being used to maintain the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" * @param numberString Parsed number input from the CLI.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" public UnmarkCommand(TaskList taskList, String numberString) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" super(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" this.numberString \u003d numberString;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" * Method to be executed when this command is called.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" * Initializes a new Deadline object and adds it to the tasklist.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" public String execute() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" Integer number \u003d Integer.parseInt(this.numberString);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d taskList.unmark(number);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" outputString \u003d \"YONG has unmarked this task successfully! \\n\" + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" return outputString;","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":39}},{"path":"src/main/java/yong/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.exception;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":" * Class to handle exceptions due to incorrect user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"public class DukeException extends RuntimeException {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ngeeyonglim":10}},{"path":"src/main/java/yong/tasklist/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.tasklist;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import yong.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":" * Represents the list of tasks in the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the taskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" this.taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" * Marks the specified task as being done.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" * @param number Number of the task, starting from index 1.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" * @return The task being marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" public Task mark(Integer number) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" if (number \u003e taskList.size() || number \u003c 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" throw new DukeException(\"Wrong Param\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d taskList.get(number-1);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":" * Unmarks the specified task as being done.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":" * @param number Number of the task, starting from index 1.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" * @return The task being unmarked.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":" public Task unmark(Integer number) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" if (number \u003e taskList.size() || number \u003c 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" throw new DukeException(\"Wrong Param\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d taskList.get(number-1);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":" task.unmarkAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ngeeyonglim"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ngeeyonglim"},"content":" * Deleted the specified task.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ngeeyonglim"},"content":" * @param number Number of the task, starting from index 1.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ngeeyonglim"},"content":" * @return The task being deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ngeeyonglim"},"content":" public Task delete(Integer number) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ngeeyonglim"},"content":" if (number \u003e taskList.size() || number \u003c 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ngeeyonglim"},"content":" throw new DukeException(\"Wrong Param\");","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d taskList.remove(number-1);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ngeeyonglim"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ngeeyonglim"},"content":" * Adds a specific task to the tasklist.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ngeeyonglim"},"content":" * @param task Task object to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ngeeyonglim"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ngeeyonglim"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ngeeyonglim"},"content":" * Returns string of all the task in the taskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ngeeyonglim"},"content":" public String list() {","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"ngeeyonglim"},"content":" String outputString \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"ngeeyonglim"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ngeeyonglim"},"content":" if (i !\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"ngeeyonglim"},"content":" outputString \u003d outputString.concat(\"\\n\" + (i+1) + \": \" + taskList.get(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"ngeeyonglim"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"ngeeyonglim"},"content":" outputString \u003d outputString.concat((i+1) + \": \" + taskList.get(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ngeeyonglim"},"content":" return outputString;","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ngeeyonglim"},"content":" * Returns the task list as an ArrayList object to be stored.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ngeeyonglim"},"content":" * @return task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ngeeyonglim"},"content":" public ArrayList\u003cTask\u003e get() {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ngeeyonglim"},"content":" return this.taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"ngeeyonglim"},"content":" * Allows the task list to be set after reading the saved file.","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"ngeeyonglim"},"content":" * @param taskList Stored tasklist.","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"ngeeyonglim"},"content":" public void set(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"ngeeyonglim"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"ngeeyonglim"},"content":" * Returns a string for all the tasks in the taskList matching the lookupString","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"ngeeyonglim"},"content":" * @param lookupString String that user wants to find within task description","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"ngeeyonglim"},"content":" * @return a string for all the tasks in the taskList matching the lookupString","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"ngeeyonglim"},"content":" public String find(String lookupString) {","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"ngeeyonglim"},"content":" String outputString \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"ngeeyonglim"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"ngeeyonglim"},"content":" Task currentTask \u003d taskList.get(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"ngeeyonglim"},"content":" if (currentTask.getDescription().contains(lookupString)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"ngeeyonglim"},"content":" if (i !\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"ngeeyonglim"},"content":" outputString \u003d outputString.concat(\"\\n\" + (i+1) + \": \" + currentTask);","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"ngeeyonglim"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"ngeeyonglim"},"content":" outputString \u003d outputString.concat((i+1) + \": \" + currentTask);","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ngeeyonglim"},"content":" return outputString;","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ngeeyonglim":139}},{"path":"src/main/java/yong/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":" * duke.tasks.Deadline class representing a task and description","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":" protected LocalDateTime dueBy;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the deadline class","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" * @param description Description of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" * @param dueBy deadline of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" public Deadline(String description, String dueBy) {","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" this.dueBy \u003d parseDateTime(dueBy.split(\" \", 2)[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" * String representation of the deadline task","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" * @return Information of deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" String ret \u003d \"[D] \" + super.toString() + \" (by: \" + printDateTime(this.dueBy) + \")\" ;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" return ret;","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ngeeyonglim":31}},{"path":"src/main/java/yong/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":" * duke.tasks.Event class representing a task and description.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the duke.tasks.Event class.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" * @param from start time of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" * @param to end time of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" this.from \u003d parseDateTime(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" this.to \u003d parseDateTime(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" * String representation of the duke.tasks.Event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" * @return Information of event.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" String ret \u003d \"[E] \" + super.toString() + \" (from: \" + printDateTime(this.from) + \" to: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" + printDateTime(this.to) + \")\" ;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" return ret;","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ngeeyonglim":37}},{"path":"src/main/java/yong/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import java.security.InvalidParameterException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":" * Superclass that supports task methods","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"public class Task implements Serializable {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for task invoked by superclass","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" * If tasks is done indicates \"X\" else shows a blank","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" * @return returns a string of either X or blank","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" * Marks the task as done","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":" * Marks the task as undone","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":" public void unmarkAsDone() { this.isDone \u003d false; }","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":" * String representation of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" * @return details of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":" String ret \u003d \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":" return ret;","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ngeeyonglim"},"content":" * Parses date string into LocalDate objects, with dateString in the format yyyy-mm-dd HHmm","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ngeeyonglim"},"content":" * @param datetimeString String format of the date and or time parsed in yyyy-mm-dd HHmm","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ngeeyonglim"},"content":" protected LocalDateTime parseDateTime(String datetimeString) throws InvalidParameterException {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ngeeyonglim"},"content":" String pattern \u003d \"yyyy-MM-dd HHmm\";","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ngeeyonglim"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(pattern);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ngeeyonglim"},"content":" LocalDateTime datetime \u003d LocalDateTime.parse(datetimeString, formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ngeeyonglim"},"content":" return datetime;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ngeeyonglim"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(\"Wrong date format provided\");","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ngeeyonglim"},"content":" throw new InvalidParameterException();","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"ngeeyonglim"},"content":" * Returns the string format of datetime objects","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ngeeyonglim"},"content":" * @param date Date to be converted to a string","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ngeeyonglim"},"content":" * @return String format of the date in MMM dd yyyy HHmm format","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"ngeeyonglim"},"content":" protected String printDateTime(LocalDateTime date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ngeeyonglim"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"ngeeyonglim"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ngeeyonglim"},"content":" return this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ngeeyonglim"},"content":" * Returns the description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ngeeyonglim"},"content":" * @return description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ngeeyonglim"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ngeeyonglim"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ngeeyonglim":95}},{"path":"src/main/java/yong/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":" * duke.tasks.ToDo class representing a task and description","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the duke.tasks.ToDo class","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":" * @param description Description of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" * String representation of the duke.tasks.ToDo task","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" * @return Information of event","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" String ret \u003d \"[T] \" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" return ret;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ngeeyonglim":26}},{"path":"src/main/java/yong/ui/Bridge.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"import yong.Yong;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" * A GUI for Yong using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"public class Bridge extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" private Yong yong \u003d new Yong();","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" * Starts the Yong GUI.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" * primary stages.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Bridge.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setYong(yong);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ngeeyonglim":41}},{"path":"src/main/java/yong/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for DialogBox","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" * @param text Text to be displayed","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" * @param img Image to be displayed","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(DialogBox.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"ngeeyonglim"},"content":" * Returns a User DialogBox.","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"ngeeyonglim"},"content":" * @param text User text","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"ngeeyonglim"},"content":" * @param img User image","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"ngeeyonglim"},"content":" * @return A DialogBox formatted for the users text","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"ngeeyonglim"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"ngeeyonglim"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"ngeeyonglim"},"content":" * Returns a Yong DialogBox.","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"ngeeyonglim"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"ngeeyonglim"},"content":" * @param text Yong\u0027s response text","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"ngeeyonglim"},"content":" * @param img Yong image","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"ngeeyonglim"},"content":" * @return A DialogBox formatted for Yong\u0027s response","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"ngeeyonglim"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"ngeeyonglim"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"ngeeyonglim"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"ngeeyonglim"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ngeeyonglim":80}},{"path":"src/main/java/yong/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"import yong.Yong;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" private Yong yong;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" * Initializes the GUI.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" * Sets the Yong variable to a yong object.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" * @param d Yong object","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":" public void setYong(Yong d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" this.yong \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":" String response \u003d yong.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"ngeeyonglim"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ngeeyonglim"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"ngeeyonglim"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"ngeeyonglim"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ngeeyonglim":60}},{"path":"src/main/java/yong/ui/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":" * UI class to handle UI methods.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"public class UI {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":" static Scanner reader;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" * Constructor for the UI class.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" * Initializes a scanner to read user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" public UI() {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" this.reader \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" * Prints out the error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" * @param errorMessage Error message to be printed.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" System.out.println(errorMessage);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ngeeyonglim":28}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ngeeyonglim":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"yong.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ngeeyonglim":19}},{"path":"src/test/java/yong/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"import yong.command.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import yong.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasklist.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" private Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" @BeforeEach","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" public void init() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" this.parser \u003d new Parser(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":" public void parseTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" Command command \u003d parser.parse(\"Hi\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(command instanceof StartCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":" command \u003d parser.parse(\"list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(command instanceof ListCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" command \u003d parser.parse(\"todo read book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(command instanceof ToDoCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" command \u003d parser.parse(\"deadline borrow book /by 2022-02-02 1900\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(command instanceof DeadlineCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" command \u003d parser.parse(\"event return book /from 2022-02-02 1800 /to 2023-01-02 1722\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(command instanceof EventCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" command \u003d parser.parse(\"bye\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(command instanceof ExitCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" fail(\"Unexpected DukeException: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" public void invalidCommandTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":" // Test invalid command","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" Command command \u003d parser.parse(\"INVALID\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":" fail(\"Expected DukeException, but got \" + command.getClass().getSimpleName());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":" assertEquals(\"I do not know what you are saying.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ngeeyonglim":58}},{"path":"src/test/java/yong/tasklist/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"package yong.tasklist;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"import yong.tasks.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ngeeyonglim"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ngeeyonglim"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ngeeyonglim"},"content":" @BeforeEach","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ngeeyonglim"},"content":" public void init() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ngeeyonglim"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ngeeyonglim"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ngeeyonglim"},"content":" public void addTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d new ToDo(\"Read book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ngeeyonglim"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ngeeyonglim"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskList.get();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ngeeyonglim"},"content":" assertEquals(1, tasks.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ngeeyonglim"},"content":" assertEquals(task, tasks.get(0));","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ngeeyonglim"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ngeeyonglim"},"content":" public void markAsDoneTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d new ToDo(\"Read book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ngeeyonglim"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ngeeyonglim"},"content":" taskList.mark(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ngeeyonglim"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ngeeyonglim"},"content":" public void unmarkTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d new ToDo(\"Read book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ngeeyonglim"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ngeeyonglim"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ngeeyonglim"},"content":" taskList.unmark(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(!task.isDone());","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ngeeyonglim"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ngeeyonglim"},"content":" public void deleteTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ngeeyonglim"},"content":" Task task \u003d new ToDo(\"Read book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ngeeyonglim"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ngeeyonglim"},"content":" Task deletedTask \u003d taskList.delete(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ngeeyonglim"},"content":" assertEquals(task, deletedTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ngeeyonglim"},"content":" assertTrue(taskList.get().isEmpty());","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ngeeyonglim"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ngeeyonglim"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ngeeyonglim"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ngeeyonglim":61}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ngeeyonglim"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"ngeeyonglim"},"content":"todo read book","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"ngeeyonglim"},"content":"todo join cca","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"ngeeyonglim"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"ngeeyonglim"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"ngeeyonglim"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ngeeyonglim"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ngeeyonglim"},"content":"list","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ngeeyonglim":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"ngeeyonglim"},"content":"java -classpath ..\\bin yong.Yong \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-05"},{"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":{"ngeeyonglim":1,"-":20}}] diff --git a/ngeeyonglim_ip_master/commits.json b/ngeeyonglim_ip_master/commits.json index 215e215f..263ff7b9 100644 --- a/ngeeyonglim_ip_master/commits.json +++ b/ngeeyonglim_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ngeeyonglim":[{"date":"2023-08-20","commitResults":[{"hash":"e56e3b55da09557be941633d6b1d04bf6fd841b5","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}}]},{"date":"2023-08-21","commitResults":[{"hash":"e15fc35fe2c9bfaee72e4e9dade8c7db23a6c7ad","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":3}}},{"hash":"f0a0fb0d0fb1b51ddf6b56667b909157d84c6eff","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":4}}},{"hash":"b90841609493b0ca3fe306a21f79d17af1c3ad69","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":8}}},{"hash":"937356dc5482b52d73c89c4d70b7655d2eeb0c0d","isMergeCommit":false,"messageTitle":"ToDo, Event, Deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":11}}},{"hash":"16fd897e1c7e200118708c71572390f492db1402","isMergeCommit":false,"messageTitle":"ToDo, Event, Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":8,"deletions":6}}},{"hash":"f5ed4e47523482a57e2552414b13c502d8c11cd9","isMergeCommit":false,"messageTitle":"Handle Erros","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":19}}},{"hash":"0853cf7d845d60c004e53ef5ca91696f9c0a5e6d","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":15}}},{"hash":"5f72cc8fe0a5dcffb89cc87207a5b49412291c44","isMergeCommit":false,"messageTitle":"Added unmark","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":3}}}]},{"date":"2023-08-24","commitResults":[{"hash":"1261510c5f87f6ba02ca60d95865aea4e939ab53","isMergeCommit":false,"messageTitle":"Added Java docs for all methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":6}}}]},{"date":"2023-08-29","commitResults":[{"hash":"452362b3e7248487d2d049492f6a39b433f318c9","isMergeCommit":false,"messageTitle":"Add a save feature and refactor the Duke class name","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":40},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"ef290508e77103152a72553c4609ebc6bbb1bb95","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"* branch-Level-7:\n Add an example data file\n Add a save feature and refactor the Duke class name\n","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"e149b8e4e7ab4c21c373bf5bec65fe349ba4ee38","isMergeCommit":false,"messageTitle":"Add function to parse dates and print in correct date format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":10}}},{"hash":"8d65e70f6dad970d2b0896e4d274e38ff0a9473b","isMergeCommit":false,"messageTitle":"Modify action method to handle different cases","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"c41175892aa09fd665d6a237d10f4808bdfdd057","isMergeCommit":false,"messageTitle":"Add support for Date and Time for specific tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":25}}},{"hash":"f62ed63924aea566358672769101f113a58987a0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"* branch-Level-8:\n Add support for Date and Time for specific tasks\n Modify action method to handle different cases\n Add function to parse dates and print in correct date format\n","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"66f766d14194f253f58f2e747ea0dbcec39ce404","isMergeCommit":false,"messageTitle":"Make the code more OOP.","messageBody":"Extracts different classes and adds more encapsulation and abstraction to the code.\n","fileTypesAndContributionMap":{"java":{"insertions":619,"deletions":258}}},{"hash":"a93aa2fcfc9fdd7c6b4d344c8544822bb11c583f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"* A-MoreOOP:\n Make the code more OOP.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"2b803eddc38decd02170567c7b147b2dab8dc46f","isMergeCommit":false,"messageTitle":"Add packages to separate different kinds of classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":28},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"341f29e58acc01f4a12ad12def2670c60b4eba6f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"* A-Packages:\n Add packages to separate different kinds of classes\n","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"5f5de79558395a48c09c12a8cccd8aca6219bf6a","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"* commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027:\n Bump gradle and lib version\n Add Gradle support\n","tags":["AddGradle","A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"dd7211048dad9f9e22c44cdc12522a11341b6d22","isMergeCommit":false,"messageTitle":"Add junit tests for Parser and TaskList classes","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":124,"deletions":0}}},{"hash":"da58a8dfe199c7dd2d173d143bb3c5f0deecdd3f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"* A-JUnit:\n Add junit tests for Parser and TaskList classes\n","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"5f6909ec9a8bd903134e61fdb70a07bdf94e629e","isMergeCommit":false,"messageTitle":"Merge 2 storage methods","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":3},"java":{"insertions":5,"deletions":13}}},{"hash":"c74308c49ed0203a0ccca97b026f96e9eba9217f","isMergeCommit":false,"messageTitle":"Change all imports to not include wildcards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":36}}},{"hash":"65ed8e82a766666368f838340e35c3a161ef3fa8","isMergeCommit":false,"messageTitle":"Change variable, methods and class names to coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":9}}},{"hash":"81a5d09ca7d13e0eb6c5e5ad5a24f9970785b435","isMergeCommit":false,"messageTitle":"Add line breaks between logical units","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":7}}},{"hash":"7d109f72410991f8b4ab6cff29af2e37a0a56ed5","isMergeCommit":false,"messageTitle":"Order import statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":2}}},{"hash":"cb661aba64aba3f02ce751400167b9204de2b3fd","isMergeCommit":false,"messageTitle":"Change class attributes to be protected","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"4c03521f48ef8162bbba20a9c84f7909632cb5f8","isMergeCommit":false,"messageTitle":"Edits javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"b5d173eab903094c7dd58d56738564d22558b012","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027","messageBody":"* A-CodingStandard:\n Change class attributes to be protected\n Order import statements\n Add line breaks between logical units\n Change variable, methods and class names to coding standard\n Change all imports to not include wildcards\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"67d550ff72c880be5d0f1c662fa5de7431fe1d94","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JavaDoc\u0027","messageBody":"* A-JavaDoc:\n Edits javadocs\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"bb5a1cdff18eb63a11d477b18152cd6c648b94f9","isMergeCommit":false,"messageTitle":"Add find command and related classes","messageBody":"","tags":["Find"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":1}}},{"hash":"764443b125c6644d8f4783c0ebcf4ee2e3488aea","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Add find command and related classes\n\n# Conflicts:\n#\tsrc/main/java/duke/Parser.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"c1cb3dea51da47347ffe91f81fb63d4c2d7d3ee5","isMergeCommit":false,"messageTitle":"Fix Storage class to create directory if needed","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":2},"java":{"insertions":9,"deletions":5}}},{"hash":"4a16cff0a8f27f0c4f29fc87fc1c35a24ecfef7e","isMergeCommit":false,"messageTitle":"Fix find method in Tasklist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"6475d592e1cbc78c130a091be961efee7a8ac085","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Fix find method in Tasklist\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"9ed3a373570e5c9395c0f1b9051247e48a4934fe","isMergeCommit":false,"messageTitle":"Change find function in tasklist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}}]}]},"authorFileTypeContributionMap":{"ngeeyonglim":{"java":1188,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":6,"txt":8}},"authorContributionVariance":{"ngeeyonglim":70870.805},"authorDisplayNameMap":{"ngeeyonglim":"CS2103T-T11-1 LIM ..YONG"}} +{"authorDailyContributionsMap":{"ngeeyonglim":[{"date":"2023-08-20","commitResults":[{"hash":"e56e3b55da09557be941633d6b1d04bf6fd841b5","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}}]},{"date":"2023-08-21","commitResults":[{"hash":"e15fc35fe2c9bfaee72e4e9dade8c7db23a6c7ad","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":3}}},{"hash":"f0a0fb0d0fb1b51ddf6b56667b909157d84c6eff","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":4}}},{"hash":"b90841609493b0ca3fe306a21f79d17af1c3ad69","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":8}}},{"hash":"937356dc5482b52d73c89c4d70b7655d2eeb0c0d","isMergeCommit":false,"messageTitle":"ToDo, Event, Deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":11}}},{"hash":"16fd897e1c7e200118708c71572390f492db1402","isMergeCommit":false,"messageTitle":"ToDo, Event, Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":8,"deletions":6}}},{"hash":"f5ed4e47523482a57e2552414b13c502d8c11cd9","isMergeCommit":false,"messageTitle":"Handle Erros","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":19}}},{"hash":"0853cf7d845d60c004e53ef5ca91696f9c0a5e6d","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":15}}},{"hash":"5f72cc8fe0a5dcffb89cc87207a5b49412291c44","isMergeCommit":false,"messageTitle":"Added unmark","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":3}}}]},{"date":"2023-08-24","commitResults":[{"hash":"1261510c5f87f6ba02ca60d95865aea4e939ab53","isMergeCommit":false,"messageTitle":"Added Java docs for all methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":6}}}]},{"date":"2023-08-29","commitResults":[{"hash":"452362b3e7248487d2d049492f6a39b433f318c9","isMergeCommit":false,"messageTitle":"Add a save feature and refactor the Duke class name","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":40},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"ef290508e77103152a72553c4609ebc6bbb1bb95","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"* branch-Level-7:\n Add an example data file\n Add a save feature and refactor the Duke class name\n","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"e149b8e4e7ab4c21c373bf5bec65fe349ba4ee38","isMergeCommit":false,"messageTitle":"Add function to parse dates and print in correct date format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":10}}},{"hash":"8d65e70f6dad970d2b0896e4d274e38ff0a9473b","isMergeCommit":false,"messageTitle":"Modify action method to handle different cases","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"c41175892aa09fd665d6a237d10f4808bdfdd057","isMergeCommit":false,"messageTitle":"Add support for Date and Time for specific tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":25}}},{"hash":"f62ed63924aea566358672769101f113a58987a0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"* branch-Level-8:\n Add support for Date and Time for specific tasks\n Modify action method to handle different cases\n Add function to parse dates and print in correct date format\n","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"66f766d14194f253f58f2e747ea0dbcec39ce404","isMergeCommit":false,"messageTitle":"Make the code more OOP.","messageBody":"Extracts different classes and adds more encapsulation and abstraction to the code.\n","fileTypesAndContributionMap":{"java":{"insertions":619,"deletions":258}}},{"hash":"a93aa2fcfc9fdd7c6b4d344c8544822bb11c583f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"* A-MoreOOP:\n Make the code more OOP.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"2b803eddc38decd02170567c7b147b2dab8dc46f","isMergeCommit":false,"messageTitle":"Add packages to separate different kinds of classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":28},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"341f29e58acc01f4a12ad12def2670c60b4eba6f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"* A-Packages:\n Add packages to separate different kinds of classes\n","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"5f5de79558395a48c09c12a8cccd8aca6219bf6a","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"* commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027:\n Bump gradle and lib version\n Add Gradle support\n","tags":["AddGradle","A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"dd7211048dad9f9e22c44cdc12522a11341b6d22","isMergeCommit":false,"messageTitle":"Add junit tests for Parser and TaskList classes","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":124,"deletions":0}}},{"hash":"da58a8dfe199c7dd2d173d143bb3c5f0deecdd3f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"* A-JUnit:\n Add junit tests for Parser and TaskList classes\n","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"5f6909ec9a8bd903134e61fdb70a07bdf94e629e","isMergeCommit":false,"messageTitle":"Merge 2 storage methods","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":3},"java":{"insertions":5,"deletions":13}}},{"hash":"c74308c49ed0203a0ccca97b026f96e9eba9217f","isMergeCommit":false,"messageTitle":"Change all imports to not include wildcards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":36}}},{"hash":"65ed8e82a766666368f838340e35c3a161ef3fa8","isMergeCommit":false,"messageTitle":"Change variable, methods and class names to coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":9}}},{"hash":"81a5d09ca7d13e0eb6c5e5ad5a24f9970785b435","isMergeCommit":false,"messageTitle":"Add line breaks between logical units","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":7}}},{"hash":"7d109f72410991f8b4ab6cff29af2e37a0a56ed5","isMergeCommit":false,"messageTitle":"Order import statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":2}}},{"hash":"cb661aba64aba3f02ce751400167b9204de2b3fd","isMergeCommit":false,"messageTitle":"Change class attributes to be protected","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"4c03521f48ef8162bbba20a9c84f7909632cb5f8","isMergeCommit":false,"messageTitle":"Edits javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"b5d173eab903094c7dd58d56738564d22558b012","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027","messageBody":"* A-CodingStandard:\n Change class attributes to be protected\n Order import statements\n Add line breaks between logical units\n Change variable, methods and class names to coding standard\n Change all imports to not include wildcards\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"67d550ff72c880be5d0f1c662fa5de7431fe1d94","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JavaDoc\u0027","messageBody":"* A-JavaDoc:\n Edits javadocs\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"bb5a1cdff18eb63a11d477b18152cd6c648b94f9","isMergeCommit":false,"messageTitle":"Add find command and related classes","messageBody":"","tags":["Find"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":1}}},{"hash":"764443b125c6644d8f4783c0ebcf4ee2e3488aea","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Add find command and related classes\n\n# Conflicts:\n#\tsrc/main/java/duke/Parser.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"c1cb3dea51da47347ffe91f81fb63d4c2d7d3ee5","isMergeCommit":false,"messageTitle":"Fix Storage class to create directory if needed","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":2},"java":{"insertions":9,"deletions":5}}},{"hash":"4a16cff0a8f27f0c4f29fc87fc1c35a24ecfef7e","isMergeCommit":false,"messageTitle":"Fix find method in Tasklist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"6475d592e1cbc78c130a091be961efee7a8ac085","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Fix find method in Tasklist\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"9ed3a373570e5c9395c0f1b9051247e48a4934fe","isMergeCommit":false,"messageTitle":"Change find function in tasklist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}}]},{"date":"2023-09-05","commitResults":[{"hash":"fc45a4c20b87c11b18e63704a6a0813e0ca09fa9","isMergeCommit":false,"messageTitle":"Add GUI functionality to the Yong chatbot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":21,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":436,"deletions":263},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"306d921f2a0c88b177b50b86397b932113314712","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"* branch-Level-10:\n Add GUI functionality to the Yong chatbot\n","tags":["Level-10","GUI"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ngeeyonglim":{"java":1364,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":27,"txt":8}},"authorContributionVariance":{"ngeeyonglim":87218.02},"authorDisplayNameMap":{"ngeeyonglim":"CS2103T-T11-1 LIM ..YONG"}} diff --git a/nicholascher_ip_master/authorship.json b/nicholascher_ip_master/authorship.json index 955de654..d80da4a8 100644 --- a/nicholascher_ip_master/authorship.json +++ b/nicholascher_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":"nicholascher"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"nicholascher":1,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":" * The main class that represents the Duke but BTR chatbot application.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" * Runs the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" ui.showWelcome(tasks.getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" ui.showDivider();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" Command c \u003d Parser.handleInput(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" } finally {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" ui.showDivider();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" * Constructs a Duke object with the given file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" * @param filePath The path to the file for storing task data.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicholascher"},"content":" * The main method to start the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicholascher"},"content":" * @param args Command-line arguments.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":60,"author":{"gitId":"nicholascher"},"content":" new Duke(\"./data/list.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"nicholascher":58,"-":4}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":" * Represents an exception specific to the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":" * Constructs a DukeException with the given error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":" * @param message The error message describing the exception.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nicholascher":15}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":" * Represents a command to add a task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" private final String type;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" private final String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" * Constructs an AddCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" * @param type The type of the task to add (e.g., \"todo\", \"deadline\", \"event\").","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" public AddCommand(String type, String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" * Executes the add command, adding the task to the task list and displaying relevant messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" * @param list The TaskList object managing the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" * @param ui The Ui object to interact with the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" * @param storage The Storage object to manage data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" Task newTask \u003d list.addTask(this.type, this.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" ui.showTaskAdded(newTask, list.getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":49}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":" * Represents an abstract command that can be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":" private String type;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" private String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" * Executes the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" * @param list The TaskList object managing the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" * @param ui The Ui object to interact with the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" * @param storage The Storage object to manage data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" public abstract void execute(TaskList list, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" * @return True if this command is an exit command, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":30}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.task.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":" private final String pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" * Constructs a DeleteCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" * @param pos The position of the task to be deleted in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" public DeleteCommand(String pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" this.pos \u003d pos;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" * Executes the delete command, deleting the task from the task list and displaying relevant messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" * @param list The TaskList object managing the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" * @param ui The Ui object to interact with the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" * @param storage The Storage object to manage data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" Task deletedTask \u003d list.deleteTask(this.pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" ui.showDelete(deletedTask, list.getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":46}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" * Executes the exit command, saving data and displaying an exit message.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" * @param list The TaskList object managing the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" * @param ui The Ui object to interact with the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" * @param storage The Storage object to manage data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" storage.saveDataToFile(list.getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" ui.showExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" * @return True, as this command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":35}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" * The FindCommand class represents a command to search for tasks containing a specified keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" * Upon execution, it searches the task list for tasks that match the given keyword and displays the results.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" private String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" * Constructs a FindCommand object with the specified keyword to search for.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" * @param keyword The keyword to search for within the task descriptions.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" * Executes the FindCommand by searching for tasks that match the specified keyword","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" * within the task list and displaying the matching tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" * @param list The task list containing tasks to search within.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" * @param storage The storage manager for reading and saving task data.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an error while executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e resultList \u003d list.findTask(this.keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" ui.showListMatching(resultList);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" * Indicates whether the FindCommand is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" * This method always returns false, as the FindCommand is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" * @return False, indicating that the command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nicholascher":53}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":" * Represents a command to list all tasks in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" * Executes the list command, displaying the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" * @param list The TaskList object managing the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" * @param ui The Ui object to interact with the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" * @param storage The Storage object to manage data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" ui.showList(list.getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":34}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":" * Represents a command to mark or unMark a task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" private final String type;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" private final String pos;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" * Constructs a MarkCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" * @param type Indicates whether this is a mark or unMark command.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" * @param pos The position of the task to be marked in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" public MarkCommand(String type, String pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" this.pos \u003d pos;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" * Executes the mark command, marking or unMarking the task and displaying relevant messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" * @param list The TaskList object managing the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" * @param ui The Ui object to interact with the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" * @param storage The Storage object to manage data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" Task markedTask \u003d list.markTask(this.type, this.pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" ui.showMark(this.type, markedTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":49}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" * Represents a parser for handling user inputs and generating corresponding commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" * Handles the user input and returns the corresponding command.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" * @param input The user input to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" * @return A Command object based on the parsed input.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue parsing the input or creating the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" public static Command handleInput(String input) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" String[] arr \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" if (arr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" arr \u003d new String[] { arr[0], \"\" };","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" String type \u003d arr[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" if (\"bye\".equals(type)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"mark\") || type.equals(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" return new MarkCommand(type, arr[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"deadline\") || type.equals(\"event\") || type.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" return new AddCommand(type, arr[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" } else if (\"list\".equals(input.strip())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" return new DeleteCommand(arr[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"find\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" return new FindCommand(arr[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"Oops!! That does not seem to be a valid command!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":54}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" * Represents a class for managing data storage and retrieval.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" private final String filepath;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" private static final String LINE \u003d \"___________________________________\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" * @param filepath The path to the file where data will be stored.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" * Loads tasks from the file and returns them as an ArrayList.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" * @return An ArrayList containing the loaded tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue loading tasks from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e temp \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" try (Scanner fileScanner \u003d new Scanner(new File(this.filepath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" while (fileScanner.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" String taskString \u003d fileScanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" String[] arr \u003d taskString.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" Task.readListFromFile(arr, temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"Looks like this is your first time!\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" \"Let\u0027s start with a new list!\\n\" + LINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" return temp;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" * Saves the list of tasks to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList of tasks to be saved.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicholascher"},"content":" public void saveDataToFile(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nicholascher"},"content":" File folder \u003d new File(\"./data/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nicholascher"},"content":" if (!folder.exists()) folder.mkdirs();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nicholascher"},"content":" try (PrintWriter writer \u003d new PrintWriter(this.filepath)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nicholascher"},"content":" for (Task task : list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nicholascher"},"content":" writer.println(task.toStringFile());","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"nicholascher"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"nicholascher"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":67}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" * Constructs a Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" * Returns a formatted string representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" * @return The formatted string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" return \"[D]\" + super.toString() + \"(by: \" + by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" * Returns a formatted string representation of the Deadline task for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" * @return The formatted string representation for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" public String toStringFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" return \"D | \" + super.toStringFile() + \"/by \" + by;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" * Returns the type of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" * @return The type of the task (\"Deadline\").","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" public String getType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":" return \"Deadline\";","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicholascher"},"content":" * Adds a new Deadline task to the list based on the description provided.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the task and its deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList of tasks to add the new task to.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nicholascher"},"content":" * @return The newly added Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue adding the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nicholascher"},"content":" public static Deadline addDeadline(String description, ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"nicholascher"},"content":" String[] deadline \u003d description.stripTrailing().split(\"/by \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"nicholascher"},"content":" if (deadline[0].isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"nicholascher"},"content":" if (deadline.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! Please provide a valid deadline\");","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"nicholascher"},"content":" Deadline newTask \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nicholascher"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"nicholascher"},"content":" LocalDate endDate \u003d LocalDate.parse(deadline[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"nicholascher"},"content":" newTask \u003d new Deadline(deadline[0], endDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"nicholascher"},"content":" list.add(newTask);","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"nicholascher"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"nicholascher"},"content":" System.out.println(\"Your date should be formatted as YYYY-MM-DD\");","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"nicholascher"},"content":" return newTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"nicholascher"},"content":" * Adds a Deadline task to the list based on the saved description and mark status.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nicholascher"},"content":" * @param description The saved description of the task and its deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList of tasks to add the saved task to.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nicholascher"},"content":" * @param isMarked The mark status of the saved task (\"1\" for marked, \"0\" for unmarked).","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nicholascher"},"content":" public static void addDeadlineFromFile(String description, ArrayList\u003cTask\u003e list, String isMarked) {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nicholascher"},"content":" String[] deadline \u003d description.stripTrailing().split(\"/by \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"nicholascher"},"content":" Deadline newTask \u003d new Deadline(deadline[0], LocalDate.parse(deadline[1]));","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"nicholascher"},"content":" newTask.markFromRead(isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"nicholascher"},"content":" list.add(newTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicholascher":99}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":" * Represents a task with a start and end date.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" * */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" * Constructs an Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" * @param from The start date of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" * @param to The end date of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" public Event(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" * Returns a formatted string representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" * @return The formatted string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" return \"[E]\" + super.toString() +","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" \"(from: \" + from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" + \" to: \" + to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" * Returns a formatted string representation of the Event task for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" * @return The formatted string representation for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" public String toStringFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" return \"E | \" + super.toStringFile() + \"/from \" + from + \"/to \" + to;","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicholascher"},"content":" * Returns the type of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicholascher"},"content":" * @return The type of the task (\"Event\").","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nicholascher"},"content":" public String getType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nicholascher"},"content":" return \"Event\";","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nicholascher"},"content":" * Adds a new Event task to the list based on the description provided.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the task and its start and end dates.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList of tasks to add the new task to.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nicholascher"},"content":" * @return The newly added Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue adding the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nicholascher"},"content":" public static Event addEvent(String description, ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nicholascher"},"content":" String[] event \u003d description.stripTrailing().split(\"/from |/to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"nicholascher"},"content":" if (event[0].isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! The description of an Event cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"nicholascher"},"content":" if (event.length \u003c 3) {","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! Please provide a valid start and end date\");","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"nicholascher"},"content":" Event newTask \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nicholascher"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"nicholascher"},"content":" LocalDate start \u003d LocalDate.parse(event[1].stripTrailing());","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"nicholascher"},"content":" LocalDate end \u003d LocalDate.parse(event[2].stripTrailing());","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"nicholascher"},"content":" if (start.isAfter(end)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! Your start date has to be before your end date!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"nicholascher"},"content":" newTask \u003d new Event(event[0], start, end);","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"nicholascher"},"content":" list.add(newTask);","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"nicholascher"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"nicholascher"},"content":" System.out.println(\"Your date should be formatted as YYYY-MM-DD\");","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"nicholascher"},"content":" return newTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nicholascher"},"content":" * Adds an Event task to the list based on the saved description and mark status.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nicholascher"},"content":" * @param description The saved description of the task and its start and end dates.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList of tasks to add the saved task to.","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nicholascher"},"content":" * @param isMarked The mark status of the saved task (\"1\" for marked, \"0\" for unmarked).","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nicholascher"},"content":" public static void addEventFromFile(String description, ArrayList\u003cTask\u003e list, String isMarked) {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"nicholascher"},"content":" String[] event \u003d description.stripTrailing().split(\"/from |/to \");","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"nicholascher"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"nicholascher"},"content":" Event newTask \u003d new Event(event[0], LocalDate.parse(event[1]), LocalDate.parse(event[2]));","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"nicholascher"},"content":" list.add(newTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"nicholascher"},"content":" newTask.markFromRead(isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"nicholascher"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"nicholascher"},"content":" System.out.println(\"Please enter a valid Date!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nicholascher"},"content":" * Compares this Event task with another object for equality.","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nicholascher"},"content":" * @param obj The object to compare with.","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nicholascher"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nicholascher"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nicholascher"},"content":" if (obj instanceof Event event) {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nicholascher"},"content":" if (obj \u003d\u003d this) {","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nicholascher"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nicholascher"},"content":" return this.description.equals(event.description) \u0026\u0026","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nicholascher"},"content":" this.to.equals(event.to) \u0026\u0026 this.from.equals(event.from);","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"nicholascher"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicholascher":133}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":" * Represents a task with a description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" * Constructs a Task object with the given description.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" * This constructor initializes a Task object with the provided description and sets its initial","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" * \"done\" status to false.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" * Reads task information from a file and adds it to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" * @param arr The array of task information from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList to which the tasks will be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there\u0027s a problem with the file or task data.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" public static void readListFromFile(String[] arr, ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" if (arr.length !\u003d 3) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"Uh Oh! There seems to be a problem with the file!\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" \"Some of the tasks may be gone! Sorry!!\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" String type \u003d arr[0].strip();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" String description \u003d arr[2].strip();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" String isMarked \u003d arr[1].strip();","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" ToDo.addToDoFromFile(description, list, isMarked);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" Deadline.addDeadlineFromFile(description, list, isMarked);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"E\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" Event.addEventFromFile(description, list, isMarked);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicholascher"},"content":" public void mark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"nicholascher"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nicholascher"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nicholascher"},"content":" public void unMark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"nicholascher"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nicholascher"},"content":" * Gets the type of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nicholascher"},"content":" * @return The type of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nicholascher"},"content":" public String getType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nicholascher"},"content":" return \"Task\";","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nicholascher"},"content":" * Marks the task based on the value read from a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nicholascher"},"content":" * @param isMarked The value indicating whether the task is marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"nicholascher"},"content":" public void markFromRead(String isMarked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"nicholascher"},"content":" if (isMarked.equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nicholascher"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nicholascher"},"content":" * Gets the status icon of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nicholascher"},"content":" * @return The status icon of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nicholascher"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":93,"author":{"gitId":"nicholascher"},"content":" return (isDone ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"nicholascher"},"content":" * Gets the status of the task from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nicholascher"},"content":" * @return The status of the task (1 for done, 0 for not done).","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nicholascher"},"content":" public int getStatusFromFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nicholascher"},"content":" return (isDone ? 1 : 0);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"nicholascher"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"nicholascher"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":111,"author":{"gitId":"nicholascher"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":112,"author":{"gitId":"nicholascher"},"content":" return getStatusIcon() + \" \" + description;","lastModifiedDate":"2023-08-23"},{"lineNumber":113,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":114,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nicholascher"},"content":" * Returns a string representation of the task for writing to a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nicholascher"},"content":" * @return A string representation of the task for file output.","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nicholascher"},"content":" public String toStringFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"nicholascher"},"content":" return getStatusFromFile() + \" | \" + description;","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nicholascher"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nicholascher"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicholascher":127}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":" * Represents a list of tasks with various operations.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" * Constructs a TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList containing tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" public TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" this.list \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" * Adds a task to the list based on the given type and description.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" * @param type The type of task (\"todo\", \"deadline\", or \"event\").","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" * @return The added task.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If the input type is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" public Task addTask(String type, String description) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" if (type.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" return ToDo.addTodo(description, list);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" return Deadline.addDeadline(description, list);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" return Event.addEvent(description, list);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"That\u0027s not a valid input!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" * Deletes a task at the specified position.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" * @param pos The position of the task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":" * @return The deleted task.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If the position is invalid or not provided.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicholascher"},"content":" public Task deleteTask(String pos) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nicholascher"},"content":" if (pos.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! Please indicate which item you wish to delete\");","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nicholascher"},"content":" int amt \u003d Integer.parseInt(pos.strip()) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nicholascher"},"content":" if (amt \u003e\u003d list.size()) throw new DukeException(\"☹ OOPS!!! That\u0027s not a valid item!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nicholascher"},"content":" Task temp \u003d list.get(amt);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"nicholascher"},"content":" list.remove(amt);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nicholascher"},"content":" return temp;","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nicholascher"},"content":" * Marks or unmarks a task at the specified position.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nicholascher"},"content":" * @param type The action (\"mark\" or \"unmark\").","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nicholascher"},"content":" * @param pos The position of the task to be marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nicholascher"},"content":" * @return The task after marking or unmarking.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If the position is invalid or not provided.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nicholascher"},"content":" public Task markTask(String type, String pos) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"nicholascher"},"content":" if (pos.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! Please indicate which item you wish to mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"nicholascher"},"content":" int amt \u003d Integer.parseInt(pos.strip()) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nicholascher"},"content":" if (amt \u003e\u003d list.size()) throw new DukeException(\"☹ OOPS!!! That\u0027s not a valid item!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nicholascher"},"content":" Task newTask \u003d list.get(amt);","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nicholascher"},"content":" if (type.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nicholascher"},"content":" newTask.mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nicholascher"},"content":" newTask.unMark();","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"nicholascher"},"content":" return newTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nicholascher"},"content":" * Finds tasks that match a specified keyword within the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"nicholascher"},"content":" * This method searches through the task list for tasks whose descriptions contain the specified keyword,","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"nicholascher"},"content":" * and returns a list of tasks that match the search criteria.","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nicholascher"},"content":" * @param keyword The keyword to search for within task descriptions.","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nicholascher"},"content":" * @return An ArrayList containing tasks that match the search criteria.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nicholascher"},"content":" public ArrayList\u003cTask\u003e findTask(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e resultList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nicholascher"},"content":" Task[] temp \u003d list.toArray(new Task[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nicholascher"},"content":" for (Task task : temp) {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"nicholascher"},"content":" String description \u003d task.getDescription().stripTrailing().toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"nicholascher"},"content":" if (description.contains(keyword.stripTrailing().toLowerCase())) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"nicholascher"},"content":" resultList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"nicholascher"},"content":" return resultList;","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nicholascher"},"content":" * Gets a task at the specified position.","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nicholascher"},"content":" * @param pos The position of the task to retrieve.","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nicholascher"},"content":" * @return The task at the specified position.","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nicholascher"},"content":" public Task getTask(int pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"nicholascher"},"content":" return list.get(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nicholascher"},"content":" * Gets the entire task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nicholascher"},"content":" * @return The ArrayList containing tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"nicholascher"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"nicholascher"},"content":" return this.list;","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":134}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":" public String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" * Constructs a ToDo task with the given description.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" * Returns a string representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" * @return A string representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" * Returns a string representation of the ToDo task for writing to a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" * @return A string representation of the ToDo task for file output.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" public String toStringFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" return \"T | \" + super.toStringFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" * Gets the type of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" * @return The type of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" public String getType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" return \"TODO\";","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":" * Adds a ToDo task to the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList to which the task will be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicholascher"},"content":" * @return The added ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If the description is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nicholascher"},"content":" public static ToDo addTodo(String description, ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nicholascher"},"content":" if (description.isBlank()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"nicholascher"},"content":" ToDo newTask \u003d new ToDo(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"nicholascher"},"content":" list.add(newTask);","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"nicholascher"},"content":" return newTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nicholascher"},"content":" * Adds a ToDo task to the list of tasks from a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList to which the task will be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nicholascher"},"content":" * @param isMarked The value indicating whether the task is marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nicholascher"},"content":" public static void addToDoFromFile(String description, ArrayList\u003cTask\u003e list, String isMarked) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nicholascher"},"content":" ToDo newTask \u003d new ToDo(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"nicholascher"},"content":" newTask.markFromRead(isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"nicholascher"},"content":" list.add(newTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"nicholascher"},"content":" * Compares this ToDo task to another object for equality.","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"nicholascher"},"content":" * @param obj The object to compare.","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"nicholascher"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nicholascher"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nicholascher"},"content":" if (obj instanceof ToDo toDo) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nicholascher"},"content":" return this.description.equals(toDo.description);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nicholascher"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicholascher":94}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":" * The Ui class handles the user interface interactions of the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" private static final String DIVIDER \u003d \"___________________________________\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" * Constructs an Ui object and initializes the scanner for user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" * Displays a farewell message to the user upon exiting the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" public void showExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" System.out.println(\"Bye Bye. Hope to see you again soon!\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" * Displays a welcome message along with the existing task list or an empty list message.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" * @param list The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" public void showWelcome(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" String msg \u003d \"Looks like you have been here before!\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" if (list.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" msg \u003d \"Looks like your list is empty!\\nTime to add some new Tasks!\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" String welcome \u003d String.format(\"Hi I\u0027m Duke but BETTTERRRR!!!\\n%s\", msg);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" System.out.println(welcome + DIVIDER);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" if (!list.isEmpty()){","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" showList(list);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" showDivider();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" * Displays the standard divider line.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" public void showDivider() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" System.out.println(DIVIDER);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicholascher"},"content":" * @param error The error message to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nicholascher"},"content":" public void showError(String error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nicholascher"},"content":" System.out.println(error);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nicholascher"},"content":" * Displays a message confirming the deletion of a task and the updated task list size.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nicholascher"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nicholascher"},"content":" * @param list The updated list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nicholascher"},"content":" public void showDelete(Task task, ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nicholascher"},"content":" String msg \u003d String.format(\"Okay I have deleted this task from the list\\n\\t %s\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"nicholascher"},"content":" \"Now you have %d items in your list\\n\", task.toString(), list.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"nicholascher"},"content":" System.out.println(msg);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nicholascher"},"content":" * Displays a message confirming the addition of a new task and the updated task list size.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nicholascher"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nicholascher"},"content":" * @param list The updated list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nicholascher"},"content":" public void showTaskAdded(Task task, ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nicholascher"},"content":" String msg \u003d String.format(\"Okay!! I have added a new %s\\n\\t %s\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nicholascher"},"content":" \"You now have %d items in your list!\", task.getType(), task.toString(), list.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nicholascher"},"content":" System.out.println(msg);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nicholascher"},"content":" * Displays a message confirming the marking or unMarking of a task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nicholascher"},"content":" * @param type The type of action (\"mark\" or \"unMark\").","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nicholascher"},"content":" * @param task The task that was marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nicholascher"},"content":" public void showMark(String type, Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"nicholascher"},"content":" String msg \u003d String.format(\"Okay I have unmarked this task:\\n%s\\n\", task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nicholascher"},"content":" if (type.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"nicholascher"},"content":" msg \u003d String.format(\"Nice!! I have marked this task as done:\\n%s\\n\", task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nicholascher"},"content":" System.out.println(msg);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nicholascher"},"content":" * Displays the list of tasks with their respective indices.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nicholascher"},"content":" * @param list The list of tasks to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nicholascher"},"content":" public void showList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"nicholascher"},"content":" Task[] temp \u003d list.toArray(new Task[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"nicholascher"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"nicholascher"},"content":" for (int i \u003d 0; i \u003c temp.length; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nicholascher"},"content":" System.out.println(i + 1 + \". \" + temp[i].toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nicholascher"},"content":" * Displays a list of tasks that match the specified search criteria.","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nicholascher"},"content":" * This method is used to show a subset of tasks from the given list that match a certain search criteria.","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nicholascher"},"content":" * It displays the matching tasks along with their indices in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nicholascher"},"content":" * @param list The list of tasks to search within.","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nicholascher"},"content":" public void showListMatching(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nicholascher"},"content":" Task[] temp \u003d list.toArray(new Task[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nicholascher"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nicholascher"},"content":" for (int i \u003d 0; i \u003c temp.length; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nicholascher"},"content":" System.out.println(i + 1 + \". \" + temp[i].toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nicholascher"},"content":" * Reads and retrieves a user command from the console input.","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"nicholascher"},"content":" * @return The user command.","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"nicholascher"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"nicholascher"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"nicholascher"},"content":" * Displays an \"invalid command\" message to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"nicholascher"},"content":" public void invalidCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"nicholascher"},"content":" System.out.println(DIVIDER + \"Oops! That does not seem to be a valid action!\\n\" + DIVIDER);","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":146}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" public void exitCommandParsed_success() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" assertTrue(Parser.handleInput(\"bye\") instanceof ExitCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nicholascher":18}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" public void addEvent_success() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" String description \u003d \"Test Event /from 2023-10-20 /to 2023-10-21\";","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e testList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" LocalDate testStart \u003d LocalDate.parse(\"2023-10-20\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" LocalDate testEnd \u003d LocalDate.parse(\"2023-10-21\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" Event expectedEvent \u003d new Event(\"Test Event \", testStart, testEnd);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e expectedList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" expectedList.add(expectedEvent);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" assertEquals(expectedEvent, Event.addEvent(description, testList));","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" assertEquals(expectedList, testList);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" public void addEvent_descriptionEmpty_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e testList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" LocalDate testStart \u003d LocalDate.parse(\"2023-10-20\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" LocalDate testEnd \u003d LocalDate.parse(\"2023-10-21\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" assertEquals(new Event(description, testStart, testEnd), Event.addEvent(description, testList));","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" assertEquals(\"☹ OOPS!!! The description of an Event cannot be empty.\",","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nicholascher":44}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" public void testStringConversion() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" Assertions.assertEquals(\"[T][ ] Test TODO\",","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" new ToDo(\"Test TODO\").toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" public void addToDo_success() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" String description \u003d \"New TODO\";","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e expectedList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" ToDo testToDo \u003d new ToDo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" expectedList.add(testToDo);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e testList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" assertEquals(testToDo, ToDo.addTodo(description, testList));","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" assertEquals(expectedList, testList);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" public void addTodo_descriptionEmpty_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e testList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" assertEquals(new ToDo(description), ToDo.addTodo(description, testList));","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" assertEquals(\"☹ OOPS!!! The description of a todo cannot be empty.\",","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nicholascher":44}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"todo new Task","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"deadline new Deadline /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"event new Event /from Sunday /to Monday","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"BLAH BLAH BLAH","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"event /from Sunday /to Monday","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"event NEW EVENT /from /to","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"deadline /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":"deadline NEW DEADLINE /by","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":"mark 20","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":"unmark 20","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":"delete 20","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":"delete","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":"mark","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":"unmark","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicholascher":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":"nicholascher"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"nicholascher":6,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":" * The main class that represents the Duke but BTR chatbot application.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" * Constructs a Duke object with the given file path.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" * @param filePath The path to the file for storing task data.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" * Runs the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" ui.showWelcome(tasks.getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" ui.showDivider();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" Command c \u003d Parser.handleInput(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" } finally {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" ui.showDivider();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicholascher"},"content":" * The main method to start the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nicholascher"},"content":" * @param args Command-line arguments.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":62,"author":{"gitId":"nicholascher"},"content":" new Duke(\"./data/list.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"nicholascher":60,"-":4}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":" * Represents an exception specific to the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":" * Constructs a DukeException with the given error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":" * @param message The error message describing the exception.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nicholascher":15}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":" * Represents a command to add a task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" private final String type;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" private final String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" * Constructs an AddCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" * @param type The type of the task to add (e.g., \"todo\", \"deadline\", \"event\").","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" public AddCommand(String type, String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" * Executes the add command, adding the task to the task list and displaying relevant messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" * @param list The TaskList object managing the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" * @param ui The Ui object to interact with the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" * @param storage The Storage object to manage data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" Task newTask \u003d list.addTask(this.type, this.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" ui.showTaskAdded(newTask, list.getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":51}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":" * Represents an abstract command that can be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":" private String type;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" private String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" * Executes the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" * @param list The TaskList object managing the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" * @param ui The Ui object to interact with the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" * @param storage The Storage object to manage data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" public abstract void execute(TaskList list, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" * @return True if this command is an exit command, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":30}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" private final String pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" * Constructs a DeleteCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" * @param pos The position of the task to be deleted in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" public DeleteCommand(String pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" this.pos \u003d pos;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" * Executes the delete command, deleting the task from the task list and displaying relevant messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" * @param list The TaskList object managing the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" * @param ui The Ui object to interact with the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" * @param storage The Storage object to manage data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" Task deletedTask \u003d list.deleteTask(this.pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" ui.showDelete(deletedTask, list.getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":50}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" * Executes the exit command, saving data and displaying an exit message.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" * @param list The TaskList object managing the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" * @param ui The Ui object to interact with the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" * @param storage The Storage object to manage data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" storage.saveDataToFile(list.getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" ui.showExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" * @return True, as this command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":35}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" * The FindCommand class represents a command to search for tasks containing a specified keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" * Upon execution, it searches the task list for tasks that match the given keyword and displays the results.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" private String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" * Constructs a FindCommand object with the specified keyword to search for.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" * @param keyword The keyword to search for within the task descriptions.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" * Executes the FindCommand by searching for tasks that match the specified keyword","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" * within the task list and displaying the matching tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" * @param list The task list containing tasks to search within.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" * @param storage The storage manager for reading and saving task data.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an error while executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e resultList \u003d list.findTask(this.keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" ui.showListMatching(resultList);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" * Indicates whether the FindCommand is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" * This method always returns false, as the FindCommand is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" * @return False, indicating that the command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nicholascher":53}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":" * Represents a command to list all tasks in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" * Executes the list command, displaying the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" * @param list The TaskList object managing the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" * @param ui The Ui object to interact with the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" * @param storage The Storage object to manage data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" ui.showList(list.getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":37}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":" * Represents a command to mark or unMark a task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" private final String type;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" private final String pos;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" * Constructs a MarkCommand object.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" * @param type Indicates whether this is a mark or unMark command.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" * @param pos The position of the task to be marked in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" public MarkCommand(String type, String pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" this.pos \u003d pos;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" * Executes the mark command, marking or unMarking the task and displaying relevant messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" * @param list The TaskList object managing the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" * @param ui The Ui object to interact with the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" * @param storage The Storage object to manage data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" Task markedTask \u003d list.markTask(this.type, this.pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" ui.showMark(this.type, markedTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" * Indicates whether this command is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" * @return False, as this command is not an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":50}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" * Represents a parser for handling user inputs and generating corresponding commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" * Handles the user input and returns the corresponding command.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" * @param input The user input to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" * @return A Command object based on the parsed input.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue parsing the input or creating the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" public static Command handleInput(String input) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" String[] arr \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" if (arr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" arr \u003d new String[] { arr[0], \"\" };","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" String type \u003d arr[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" if (\"bye\".equals(type)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"mark\") || type.equals(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" return new MarkCommand(type, arr[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"deadline\") || type.equals(\"event\") || type.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" return new AddCommand(type, arr[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" } else if (\"list\".equals(input.strip())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" return new DeleteCommand(arr[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"find\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" return new FindCommand(arr[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"Oops!! That does not seem to be a valid command!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":55}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" * Represents a class for managing data storage and retrieval.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" private static final String LINE \u003d \"___________________________________\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" private final String filepath;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" * @param filepath The path to the file where data will be stored.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" * Loads tasks from the file and returns them as an ArrayList.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" * @return An ArrayList containing the loaded tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue loading tasks from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e temp \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" try (Scanner fileScanner \u003d new Scanner(new File(this.filepath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" while (fileScanner.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" String taskString \u003d fileScanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" String[] arr \u003d taskString.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" Task.readListFromFile(arr, temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"Looks like this is your first time!\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" + \"Let\u0027s start with a new list!\\n\" + LINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" return temp;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" * Saves the list of tasks to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList of tasks to be saved.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":" public void saveDataToFile(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nicholascher"},"content":" File folder \u003d new File(\"./data/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nicholascher"},"content":" if (!folder.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"nicholascher"},"content":" folder.mkdirs();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"nicholascher"},"content":" try (PrintWriter writer \u003d new PrintWriter(this.filepath)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nicholascher"},"content":" for (Task task : list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nicholascher"},"content":" writer.println(task.toStringFile());","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"nicholascher"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nicholascher"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":68}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" * Constructs a Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" * Returns a formatted string representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" * @return The formatted string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" return \"[D]\" + super.toString() + \"(by: \" + by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" * Returns a formatted string representation of the Deadline task for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" * @return The formatted string representation for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" public String toStringFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" return \"D | \" + super.toStringFile() + \"/by \" + by;","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" * Returns the type of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" * @return The type of the task (\"Deadline\").","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":" public String getType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":" return \"Deadline\";","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicholascher"},"content":" * Adds a new Deadline task to the list based on the description provided.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the task and its deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList of tasks to add the new task to.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nicholascher"},"content":" * @return The newly added Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue adding the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nicholascher"},"content":" public static Deadline addDeadline(String description, ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nicholascher"},"content":" String[] deadline \u003d description.stripTrailing().split(\"/by \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"nicholascher"},"content":" if (deadline[0].isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"nicholascher"},"content":" if (deadline.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! Please provide a valid deadline\");","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"nicholascher"},"content":" Deadline newTask \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nicholascher"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"nicholascher"},"content":" LocalDate endDate \u003d LocalDate.parse(deadline[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"nicholascher"},"content":" newTask \u003d new Deadline(deadline[0], endDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"nicholascher"},"content":" list.add(newTask);","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"nicholascher"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"nicholascher"},"content":" System.out.println(\"Your date should be formatted as YYYY-MM-DD\");","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"nicholascher"},"content":" return newTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nicholascher"},"content":" * Adds a Deadline task to the list based on the saved description and mark status.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nicholascher"},"content":" * @param description The saved description of the task and its deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList of tasks to add the saved task to.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nicholascher"},"content":" * @param isMarked The mark status of the saved task (\"1\" for marked, \"0\" for unmarked).","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nicholascher"},"content":" public static void addDeadlineFromFile(String description, ArrayList\u003cTask\u003e list, String isMarked) {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nicholascher"},"content":" String[] deadline \u003d description.stripTrailing().split(\"/by \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"nicholascher"},"content":" Deadline newTask \u003d new Deadline(deadline[0], LocalDate.parse(deadline[1]));","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"nicholascher"},"content":" newTask.markFromRead(isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"nicholascher"},"content":" list.add(newTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicholascher":100}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" * Represents a task with a start and end date.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" * */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" * Constructs an Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" * @param from The start date of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" * @param to The end date of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" public Event(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" * Returns a formatted string representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" * @return The formatted string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" + \"(from: \" + from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" + \" to: \" + to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" * Returns a formatted string representation of the Event task for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" * @return The formatted string representation for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" public String toStringFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":" return \"E | \" + super.toStringFile() + \"/from \" + from + \"/to \" + to;","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicholascher"},"content":" * Returns the type of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nicholascher"},"content":" * @return The type of the task (\"Event\").","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nicholascher"},"content":" public String getType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nicholascher"},"content":" return \"Event\";","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nicholascher"},"content":" * Adds a new Event task to the list based on the description provided.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the task and its start and end dates.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList of tasks to add the new task to.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nicholascher"},"content":" * @return The newly added Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there is an issue adding the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nicholascher"},"content":" public static Event addEvent(String description, ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nicholascher"},"content":" String[] event \u003d description.stripTrailing().split(\"/from |/to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"nicholascher"},"content":" if (event[0].isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! The description of an Event cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"nicholascher"},"content":" if (event.length \u003c 3) {","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! Please provide a valid start and end date\");","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"nicholascher"},"content":" Event newTask \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nicholascher"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"nicholascher"},"content":" LocalDate start \u003d LocalDate.parse(event[1].stripTrailing());","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"nicholascher"},"content":" LocalDate end \u003d LocalDate.parse(event[2].stripTrailing());","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"nicholascher"},"content":" if (start.isAfter(end)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! Your start date has to be before your end date!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"nicholascher"},"content":" newTask \u003d new Event(event[0], start, end);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"nicholascher"},"content":" list.add(newTask);","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"nicholascher"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"nicholascher"},"content":" System.out.println(\"Your date should be formatted as YYYY-MM-DD\");","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"nicholascher"},"content":" return newTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nicholascher"},"content":" * Adds an Event task to the list based on the saved description and mark status.","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nicholascher"},"content":" * @param description The saved description of the task and its start and end dates.","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList of tasks to add the saved task to.","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nicholascher"},"content":" * @param isMarked The mark status of the saved task (\"1\" for marked, \"0\" for unmarked).","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"nicholascher"},"content":" public static void addEventFromFile(String description, ArrayList\u003cTask\u003e list, String isMarked) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"nicholascher"},"content":" String[] event \u003d description.stripTrailing().split(\"/from |/to \");","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"nicholascher"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"nicholascher"},"content":" Event newTask \u003d new Event(event[0], LocalDate.parse(event[1]), LocalDate.parse(event[2]));","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"nicholascher"},"content":" list.add(newTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"nicholascher"},"content":" newTask.markFromRead(isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"nicholascher"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"nicholascher"},"content":" System.out.println(\"Please enter a valid Date!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nicholascher"},"content":" * Compares this Event task with another object for equality.","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nicholascher"},"content":" * @param obj The object to compare with.","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nicholascher"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nicholascher"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nicholascher"},"content":" if (obj instanceof Event event) {","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nicholascher"},"content":" if (obj \u003d\u003d this) {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nicholascher"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nicholascher"},"content":" return this.description.equals(event.description)","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"nicholascher"},"content":" \u0026\u0026 this.to.equals(event.to) \u0026\u0026 this.from.equals(event.from);","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nicholascher"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicholascher":134}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":" * Represents a task with a description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" * Constructs a Task object with the given description.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" * This constructor initializes a Task object with the provided description and sets its initial","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" * \"done\" status to false.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" * Reads task information from a file and adds it to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" * @param arr The array of task information from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList to which the tasks will be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If there\u0027s a problem with the file or task data.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" public static void readListFromFile(String[] arr, ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" if (arr.length !\u003d 3) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"Uh Oh! There seems to be a problem with the file!\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" + \"Some of the tasks may be gone! Sorry!!\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" String type \u003d arr[0].strip();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" String description \u003d arr[2].strip();","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" String isMarked \u003d arr[1].strip();","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" ToDo.addToDoFromFile(description, list, isMarked);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" Deadline.addDeadlineFromFile(description, list, isMarked);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"E\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" Event.addEventFromFile(description, list, isMarked);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicholascher"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicholascher"},"content":" public void mark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"nicholascher"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nicholascher"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nicholascher"},"content":" public void unMark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"nicholascher"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nicholascher"},"content":" * Gets the type of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nicholascher"},"content":" * @return The type of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nicholascher"},"content":" public String getType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nicholascher"},"content":" return \"Task\";","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nicholascher"},"content":" * Marks the task based on the value read from a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nicholascher"},"content":" * @param isMarked The value indicating whether the task is marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"nicholascher"},"content":" public void markFromRead(String isMarked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"nicholascher"},"content":" if (isMarked.equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"nicholascher"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nicholascher"},"content":" * Gets the status icon of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nicholascher"},"content":" * @return The status icon of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nicholascher"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"nicholascher"},"content":" return (isDone ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nicholascher"},"content":" * Gets the status of the task from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nicholascher"},"content":" * @return The status of the task (1 for done, 0 for not done).","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nicholascher"},"content":" public int getStatusFromFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nicholascher"},"content":" return (isDone ? 1 : 0);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"nicholascher"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"nicholascher"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":112,"author":{"gitId":"nicholascher"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":113,"author":{"gitId":"nicholascher"},"content":" return getStatusIcon() + \" \" + description;","lastModifiedDate":"2023-08-23"},{"lineNumber":114,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":115,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nicholascher"},"content":" * Returns a string representation of the task for writing to a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nicholascher"},"content":" * @return A string representation of the task for file output.","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nicholascher"},"content":" public String toStringFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"nicholascher"},"content":" return getStatusFromFile() + \" | \" + description;","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nicholascher"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nicholascher"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicholascher":128}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":" * Represents a list of tasks with various operations.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" * Constructs a TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList containing tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" public TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" this.list \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" * Adds a task to the list based on the given type and description.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" * @param type The type of task (\"todo\", \"deadline\", or \"event\").","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" * @return The added task.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If the input type is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" public Task addTask(String type, String description) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" if (type.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" return ToDo.addTodo(description, list);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" return Deadline.addDeadline(description, list);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" return Event.addEvent(description, list);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"That\u0027s not a valid input!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" * Deletes a task at the specified position.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":" * @param pos The position of the task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":" * @return The deleted task.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If the position is invalid or not provided.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicholascher"},"content":" public Task deleteTask(String pos) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nicholascher"},"content":" if (pos.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! Please indicate which item you wish to delete\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nicholascher"},"content":" int amt \u003d Integer.parseInt(pos.strip()) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nicholascher"},"content":" if (amt \u003e\u003d list.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! That\u0027s not a valid item!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nicholascher"},"content":" Task temp \u003d list.get(amt);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nicholascher"},"content":" list.remove(amt);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nicholascher"},"content":" return temp;","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nicholascher"},"content":" * Marks or unmarks a task at the specified position.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nicholascher"},"content":" * @param type The action (\"mark\" or \"unmark\").","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nicholascher"},"content":" * @param pos The position of the task to be marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nicholascher"},"content":" * @return The task after marking or unmarking.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If the position is invalid or not provided.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nicholascher"},"content":" public Task markTask(String type, String pos) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"nicholascher"},"content":" if (pos.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! Please indicate which item you wish to mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nicholascher"},"content":" int amt \u003d Integer.parseInt(pos.strip()) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nicholascher"},"content":" if (amt \u003e\u003d list.size()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! That\u0027s not a valid item!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"nicholascher"},"content":" Task newTask \u003d list.get(amt);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"nicholascher"},"content":" if (type.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"nicholascher"},"content":" newTask.mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nicholascher"},"content":" } else if (type.equals(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nicholascher"},"content":" newTask.unMark();","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"nicholascher"},"content":" return newTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nicholascher"},"content":" * Finds tasks that match a specified keyword within the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nicholascher"},"content":" * This method searches through the task list for tasks whose descriptions contain the specified keyword,","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nicholascher"},"content":" * and returns a list of tasks that match the search criteria.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nicholascher"},"content":" * @param keyword The keyword to search for within task descriptions.","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nicholascher"},"content":" * @return An ArrayList containing tasks that match the search criteria.","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"nicholascher"},"content":" public ArrayList\u003cTask\u003e findTask(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e resultList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"nicholascher"},"content":" Task[] temp \u003d list.toArray(new Task[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"nicholascher"},"content":" for (Task task : temp) {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"nicholascher"},"content":" String description \u003d task.getDescription().stripTrailing().toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"nicholascher"},"content":" if (description.contains(keyword.stripTrailing().toLowerCase())) {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nicholascher"},"content":" resultList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nicholascher"},"content":" return resultList;","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nicholascher"},"content":" * Gets a task at the specified position.","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nicholascher"},"content":" * @param pos The position of the task to retrieve.","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nicholascher"},"content":" * @return The task at the specified position.","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nicholascher"},"content":" public Task getTask(int pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"nicholascher"},"content":" return list.get(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nicholascher"},"content":" * Gets the entire task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"nicholascher"},"content":" * @return The ArrayList containing tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"nicholascher"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"nicholascher"},"content":" return this.list;","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":139}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":" private String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" * Constructs a ToDo task with the given description.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" * Returns a string representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" * @return A string representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" * Returns a string representation of the ToDo task for writing to a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" * @return A string representation of the ToDo task for file output.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" public String toStringFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" return \"T | \" + super.toStringFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" * Gets the type of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" * @return The type of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" public String getType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" return \"TODO\";","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":" * Adds a ToDo task to the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList to which the task will be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicholascher"},"content":" * @return The added ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicholascher"},"content":" * @throws DukeException If the description is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nicholascher"},"content":" public static ToDo addTodo(String description, ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nicholascher"},"content":" if (description.isBlank()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"nicholascher"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"nicholascher"},"content":" ToDo newTask \u003d new ToDo(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"nicholascher"},"content":" list.add(newTask);","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"nicholascher"},"content":" return newTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nicholascher"},"content":" * Adds a ToDo task to the list of tasks from a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nicholascher"},"content":" * @param description The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nicholascher"},"content":" * @param list The ArrayList to which the task will be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nicholascher"},"content":" * @param isMarked The value indicating whether the task is marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nicholascher"},"content":" public static void addToDoFromFile(String description, ArrayList\u003cTask\u003e list, String isMarked) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nicholascher"},"content":" ToDo newTask \u003d new ToDo(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"nicholascher"},"content":" newTask.markFromRead(isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"nicholascher"},"content":" list.add(newTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"nicholascher"},"content":" * Compares this ToDo task to another object for equality.","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"nicholascher"},"content":" * @param obj The object to compare.","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"nicholascher"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nicholascher"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nicholascher"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nicholascher"},"content":" if (obj instanceof ToDo toDo) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nicholascher"},"content":" return this.description.equals(toDo.description);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nicholascher"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicholascher":94}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":" * The Ui class handles the user interface interactions of the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":" private static final String DIVIDER \u003d \"___________________________________\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" * Constructs an Ui object and initializes the scanner for user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" * Displays a farewell message to the user upon exiting the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" public void showExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" System.out.println(\"Bye Bye. Hope to see you again soon!\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" * Displays a welcome message along with the existing task list or an empty list message.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" * @param list The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" public void showWelcome(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" String msg \u003d \"Looks like you have been here before!\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" if (list.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" msg \u003d \"Looks like your list is empty!\\nTime to add some new Tasks!\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" String welcome \u003d String.format(\"Hi I\u0027m Duke but BETTTERRRR!!!\\n%s\", msg);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" System.out.println(welcome + DIVIDER);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" if (!list.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" showList(list);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" showDivider();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicholascher"},"content":" * Displays the standard divider line.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicholascher"},"content":" public void showDivider() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nicholascher"},"content":" System.out.println(DIVIDER);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicholascher"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicholascher"},"content":" * @param error The error message to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nicholascher"},"content":" public void showError(String error) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nicholascher"},"content":" System.out.println(error);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nicholascher"},"content":" * Displays a message confirming the deletion of a task and the updated task list size.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nicholascher"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nicholascher"},"content":" * @param list The updated list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nicholascher"},"content":" public void showDelete(Task task, ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nicholascher"},"content":" String msg \u003d String.format(\"Okay I have deleted this task from the list\\n\\t %s\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"nicholascher"},"content":" + \"Now you have %d items in your list\\n\", task.toString(), list.size());","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"nicholascher"},"content":" System.out.println(msg);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nicholascher"},"content":" * Displays a message confirming the addition of a new task and the updated task list size.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nicholascher"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nicholascher"},"content":" * @param list The updated list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nicholascher"},"content":" public void showTaskAdded(Task task, ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nicholascher"},"content":" String msg \u003d String.format(\"Okay!! I have added a new %s\\n\\t %s\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"nicholascher"},"content":" + \"You now have %d items in your list!\", task.getType(), task.toString(), list.size());","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"nicholascher"},"content":" System.out.println(msg);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"nicholascher"},"content":" * Displays a message confirming the marking or unMarking of a task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"nicholascher"},"content":" * @param type The type of action (\"mark\" or \"unMark\").","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nicholascher"},"content":" * @param task The task that was marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nicholascher"},"content":" public void showMark(String type, Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"nicholascher"},"content":" String msg \u003d String.format(\"Okay I have unmarked this task:\\n%s\\n\", task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"nicholascher"},"content":" if (type.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"nicholascher"},"content":" msg \u003d String.format(\"Nice!! I have marked this task as done:\\n%s\\n\", task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nicholascher"},"content":" System.out.println(msg);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nicholascher"},"content":" * Displays the list of tasks with their respective indices.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nicholascher"},"content":" * @param list The list of tasks to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"nicholascher"},"content":" public void showList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"nicholascher"},"content":" Task[] temp \u003d list.toArray(new Task[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"nicholascher"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"nicholascher"},"content":" for (int i \u003d 0; i \u003c temp.length; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nicholascher"},"content":" System.out.println(i + 1 + \". \" + temp[i].toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nicholascher"},"content":" * Displays a list of tasks that match the specified search criteria.","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"nicholascher"},"content":" * This method is used to show a subset of tasks from the given list that match a certain search criteria.","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"nicholascher"},"content":" * It displays the matching tasks along with their indices in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"nicholascher"},"content":" * @param list The list of tasks to search within.","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nicholascher"},"content":" public void showListMatching(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nicholascher"},"content":" Task[] temp \u003d list.toArray(new Task[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nicholascher"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"nicholascher"},"content":" for (int i \u003d 0; i \u003c temp.length; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nicholascher"},"content":" System.out.println(i + 1 + \". \" + temp[i].toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"nicholascher"},"content":" * Reads and retrieves a user command from the console input.","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"nicholascher"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"nicholascher"},"content":" * @return The user command.","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"nicholascher"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"nicholascher"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"nicholascher"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"nicholascher"},"content":" * Displays an \"invalid command\" message to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"nicholascher"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"nicholascher"},"content":" public void invalidCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"nicholascher"},"content":" System.out.println(DIVIDER + \"Oops! That does not seem to be a valid action!\\n\" + DIVIDER);","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicholascher":146}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" public void exitCommandParsed_success() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" assertTrue(Parser.handleInput(\"bye\") instanceof ExitCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nicholascher":20}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" public void addEvent_success() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" String description \u003d \"Test Event /from 2023-10-20 /to 2023-10-21\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e testList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":" LocalDate testStart \u003d LocalDate.parse(\"2023-10-20\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" LocalDate testEnd \u003d LocalDate.parse(\"2023-10-21\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" Event expectedEvent \u003d new Event(\"Test Event \", testStart, testEnd);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e expectedList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" expectedList.add(expectedEvent);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" assertEquals(expectedEvent, Event.addEvent(description, testList));","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" assertEquals(expectedList, testList);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" public void addEvent_descriptionEmpty_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e testList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" LocalDate testStart \u003d LocalDate.parse(\"2023-10-20\");","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" LocalDate testEnd \u003d LocalDate.parse(\"2023-10-21\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" assertEquals(new Event(description, testStart, testEnd), Event.addEvent(description, testList));","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" assertEquals(\"☹ OOPS!!! The description of an Event cannot be empty.\",","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nicholascher":43}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":" public void testStringConversion() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":" Assertions.assertEquals(\"[T][ ] Test TODO\",","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":" new ToDo(\"Test TODO\").toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":" public void addToDo_success() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicholascher"},"content":" String description \u003d \"New TODO\";","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e expectedList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicholascher"},"content":" ToDo testToDo \u003d new ToDo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicholascher"},"content":" expectedList.add(testToDo);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e testList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicholascher"},"content":" assertEquals(testToDo, ToDo.addTodo(description, testList));","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicholascher"},"content":" assertEquals(expectedList, testList);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicholascher"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicholascher"},"content":" public void addTodo_descriptionEmpty_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicholascher"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicholascher"},"content":" ArrayList\u003cTask\u003e testList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicholascher"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicholascher"},"content":" assertEquals(new ToDo(description), ToDo.addTodo(description, testList));","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nicholascher"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nicholascher"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nicholascher"},"content":" assertEquals(\"☹ OOPS!!! The description of a todo cannot be empty.\",","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicholascher"},"content":" e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicholascher"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicholascher"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicholascher"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nicholascher":45}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nicholascher"},"content":"todo new Task","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nicholascher"},"content":"deadline new Deadline /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nicholascher"},"content":"event new Event /from Sunday /to Monday","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nicholascher"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nicholascher"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nicholascher"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nicholascher"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nicholascher"},"content":"BLAH BLAH BLAH","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nicholascher"},"content":"event /from Sunday /to Monday","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nicholascher"},"content":"event NEW EVENT /from /to","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nicholascher"},"content":"deadline /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nicholascher"},"content":"deadline NEW DEADLINE /by","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nicholascher"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nicholascher"},"content":"mark 20","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nicholascher"},"content":"unmark 20","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nicholascher"},"content":"delete 20","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nicholascher"},"content":"delete","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nicholascher"},"content":"mark","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nicholascher"},"content":"unmark","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nicholascher"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicholascher":20}}] diff --git a/nicholascher_ip_master/commits.json b/nicholascher_ip_master/commits.json index 7d66ab75..08aaca4d 100644 --- a/nicholascher_ip_master/commits.json +++ b/nicholascher_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"nicholascher":[{"date":"2023-08-22","commitResults":[{"hash":"99d3c805f9532384e48fd0f877fdf0ad3cfd0ef3","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"455b70de90223b55464bb5c8ae14f13aa301054e","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":2}}}]},{"date":"2023-08-23","commitResults":[{"hash":"fb31d3c4c92bc77775aa00d69b8371f1a7cbf948","isMergeCommit":false,"messageTitle":"Level-2 : Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"06ac552d8a2df8518c49034b4ffabc6e11fb62d7","isMergeCommit":false,"messageTitle":"Level-3 Mark and Unmark","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":12}}},{"hash":"23fdff342a74226d6a16155b876c6be2de50d40c","isMergeCommit":false,"messageTitle":"Level-4: Todo, event and deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":7}}},{"hash":"d17277f7dae97d1f5318b08cf92c86338403be51","isMergeCommit":false,"messageTitle":"Automated TextUITesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"48d936375374cb1e9e9703670c5bdce924a47b00","isMergeCommit":false,"messageTitle":"Level-5: Handle errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":108,"deletions":57}}},{"hash":"dd6bba0961ad4d301882624e78d789d753f67ec9","isMergeCommit":false,"messageTitle":"Level-6: Delete + cleanup all code","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":83,"deletions":43}}}]},{"date":"2023-08-28","commitResults":[{"hash":"62d3925a86c4e0055482143deb40f3480d1cd09d","isMergeCommit":false,"messageTitle":"Update Duke to save previous list state","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"fe2c1ecb23b9b0175648f9bef542f31ace662b35","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c2cbcba29a804e6bcecfb51ed337837fcda995de","isMergeCommit":false,"messageTitle":"Update Date and Time to use LocalDate","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":23}}},{"hash":"3fdfb7d676d070e32259bf374a3cec54d6b5da8b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"9aba3f05dd3ef2c06d2adc533da5264c9cfdf96c","isMergeCommit":false,"messageTitle":"Update code to be more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":339,"deletions":157}}},{"hash":"f98f05a2c33e7e891584d33170bf6da36e244e69","isMergeCommit":false,"messageTitle":"Move all files to respective packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":1}}},{"hash":"25b58a8d262508283f1db34e8d3fd81ae2ef25c9","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c57835e8621720e42289af81de9f09ad83fd94c9","isMergeCommit":false,"messageTitle":"Add gradle to project","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"970b2625689dde8751d0c41510e9d05c6ca16a28","isMergeCommit":false,"messageTitle":"Added tests for Parser, Event and ToDo","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":1}}},{"hash":"5c173c00de0af41987c825da3152c26fecb07888","isMergeCommit":false,"messageTitle":"Update all classes to add javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":528,"deletions":63}}},{"hash":"ae726f1c6800059f10aa608fad0c531a6ab0543a","isMergeCommit":false,"messageTitle":"Update all files to meet coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":18}}},{"hash":"db7a5fd2f16bb8465e8ce9315d1711f608dc52f0","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":5}}},{"hash":"f88cad631ec9a7b3d42b7810e3bff52b72204551","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"62520ebdd647ce1a31d0f3dca39dd7e5ed227830","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/duke/command/DeleteCommand.java\n#\tsrc/main/java/duke/parser/Parser.java\n#\tsrc/main/java/duke/task/Deadline.java\n#\tsrc/main/java/duke/task/Event.java\n#\tsrc/main/java/duke/task/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"0f488716a7d385cfff1c9f18ea66a10d7bb83c76","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/command/DeleteCommand.java\n#\tsrc/main/java/duke/task/Event.java\n#\tsrc/main/java/duke/task/Task.java\n#\tsrc/main/java/duke/task/TaskList.java\n#\tsrc/main/java/duke/ui/Ui.java\n","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"nicholascher":{"java":1329,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":1,"txt":20}},"authorContributionVariance":{"nicholascher":60462.207},"authorDisplayNameMap":{"nicholascher":"CS2103T-W09-2 NICH.. HUI"}} +{"authorDailyContributionsMap":{"nicholascher":[{"date":"2023-08-22","commitResults":[{"hash":"99d3c805f9532384e48fd0f877fdf0ad3cfd0ef3","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"455b70de90223b55464bb5c8ae14f13aa301054e","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":2}}}]},{"date":"2023-08-23","commitResults":[{"hash":"fb31d3c4c92bc77775aa00d69b8371f1a7cbf948","isMergeCommit":false,"messageTitle":"Level-2 : Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"06ac552d8a2df8518c49034b4ffabc6e11fb62d7","isMergeCommit":false,"messageTitle":"Level-3 Mark and Unmark","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":12}}},{"hash":"23fdff342a74226d6a16155b876c6be2de50d40c","isMergeCommit":false,"messageTitle":"Level-4: Todo, event and deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":7}}},{"hash":"d17277f7dae97d1f5318b08cf92c86338403be51","isMergeCommit":false,"messageTitle":"Automated TextUITesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"48d936375374cb1e9e9703670c5bdce924a47b00","isMergeCommit":false,"messageTitle":"Level-5: Handle errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":108,"deletions":57}}},{"hash":"dd6bba0961ad4d301882624e78d789d753f67ec9","isMergeCommit":false,"messageTitle":"Level-6: Delete + cleanup all code","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":83,"deletions":43}}}]},{"date":"2023-08-28","commitResults":[{"hash":"62d3925a86c4e0055482143deb40f3480d1cd09d","isMergeCommit":false,"messageTitle":"Update Duke to save previous list state","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"fe2c1ecb23b9b0175648f9bef542f31ace662b35","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c2cbcba29a804e6bcecfb51ed337837fcda995de","isMergeCommit":false,"messageTitle":"Update Date and Time to use LocalDate","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":23}}},{"hash":"3fdfb7d676d070e32259bf374a3cec54d6b5da8b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"9aba3f05dd3ef2c06d2adc533da5264c9cfdf96c","isMergeCommit":false,"messageTitle":"Update code to be more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":339,"deletions":157}}},{"hash":"f98f05a2c33e7e891584d33170bf6da36e244e69","isMergeCommit":false,"messageTitle":"Move all files to respective packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":1}}},{"hash":"25b58a8d262508283f1db34e8d3fd81ae2ef25c9","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c57835e8621720e42289af81de9f09ad83fd94c9","isMergeCommit":false,"messageTitle":"Add gradle to project","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"970b2625689dde8751d0c41510e9d05c6ca16a28","isMergeCommit":false,"messageTitle":"Added tests for Parser, Event and ToDo","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":1}}},{"hash":"5c173c00de0af41987c825da3152c26fecb07888","isMergeCommit":false,"messageTitle":"Update all classes to add javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":528,"deletions":63}}},{"hash":"ae726f1c6800059f10aa608fad0c531a6ab0543a","isMergeCommit":false,"messageTitle":"Update all files to meet coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":18}}},{"hash":"db7a5fd2f16bb8465e8ce9315d1711f608dc52f0","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":5}}},{"hash":"f88cad631ec9a7b3d42b7810e3bff52b72204551","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"62520ebdd647ce1a31d0f3dca39dd7e5ed227830","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/duke/command/DeleteCommand.java\n#\tsrc/main/java/duke/parser/Parser.java\n#\tsrc/main/java/duke/task/Deadline.java\n#\tsrc/main/java/duke/task/Event.java\n#\tsrc/main/java/duke/task/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"0f488716a7d385cfff1c9f18ea66a10d7bb83c76","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/command/DeleteCommand.java\n#\tsrc/main/java/duke/task/Event.java\n#\tsrc/main/java/duke/task/Task.java\n#\tsrc/main/java/duke/task/TaskList.java\n#\tsrc/main/java/duke/ui/Ui.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"249270cda3cfc1cedfadc3acf7a51e86781b7e7e","isMergeCommit":false,"messageTitle":"Add and Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":108,"deletions":84}}},{"hash":"c90de2fc6f9c05fccff16fe272251956d4bc94c9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"nicholascher":{"java":1353,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":6,"txt":20}},"authorContributionVariance":{"nicholascher":48554.027},"authorDisplayNameMap":{"nicholascher":"CS2103T-W09-2 NICH.. HUI"}} diff --git a/nubnubyas_ip_master/authorship.json b/nubnubyas_ip_master/authorship.json index 9e49860e..6cfe84fc 100644 --- a/nubnubyas_ip_master/authorship.json +++ b/nubnubyas_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":"nubnubyas"},"content":" mainClass.set(\"monday.Monday\")","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"nubnubyas":1,"-":41}},{"path":"src/main/java/monday/Monday.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"import monday.monday.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"import monday.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"import monday.monday.parser.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"import monday.monday.exception.MondayExceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":" * Monday is a task management ChatBot. Users can add, mark, unmark,","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" * delete, keep track of the tasks they have.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":"public class Monday {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" /** ","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" * Starts the Monday application. ","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" * Initializes necessary components, greets the user, handles user input, and handles errors. ","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" * @param filepath the filepath to store the tasks ","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" */ ","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" private static void startMonday(String filepath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" TaskList taskList \u003d new TaskList(filepath);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" boolean isRunning \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" Ui.printSeparator();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" Ui.greet();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":" Ui.printSeparator();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":" while (isRunning) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" Ui.printSeparator();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" isRunning \u003d Parser.mondayParser(userInput, taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" } catch (MondayExceptions e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Mark/UnMark number error. \" + e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Argument Error: \" + e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Index out of Bound Error: \" + e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"nubnubyas"},"content":" Ui.printSeparator();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"nubnubyas"},"content":" scanner.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"nubnubyas"},"content":" * Entry point to Monday.","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"nubnubyas"},"content":" * @param args Command line arguments","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"nubnubyas"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"nubnubyas"},"content":" startMonday(\"./data/duke.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nubnubyas":56}},{"path":"src/main/java/monday/monday/dateTime/DateFormatter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.monday.dateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":" * Class for parsing and formatting date and time using the specified pattern.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":"public class DateFormatter {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" * Parses the given date and time string using the specified pattern.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" * @param dateTime the date and time string to parse","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" * @param pattern the pattern to use for parsing","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" * @return the parsed LocalDateTime object","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" * @throws IllegalArgumentException if the date format is invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" public static LocalDateTime parseTime(String dateTime, String pattern) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(pattern);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" return LocalDateTime.parse(dateTime, formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" throw new IllegalArgumentException(\"Invalid date format. \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" \"Please use the format: \" + pattern);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" * Formats the given LocalDateTime object using the specified pattern.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" * @param dateTime the LocalDateTime object to format","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" * @param pattern the pattern to use for formatting","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" * @return the formatted date and time string","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":" public static String format(LocalDateTime dateTime, String pattern) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(pattern);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":" return dateTime.format(formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nubnubyas":41}},{"path":"src/main/java/monday/monday/exception/MondayExceptions.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.monday.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":" * MondayExceptions is a custom exception class for handling","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":" * exceptions related to the Monday application.","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"public class MondayExceptions extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" * Constructs a MondayExceptions object with the specified error message.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" * @param message the error message associated with the exception","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":" public MondayExceptions(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" * Returns a string representation of the exception message.","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" * @return a string representation of the exception message","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" return \"☹ OOPS!!! \" + super.getMessage();","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nubnubyas":27}},{"path":"src/main/java/monday/monday/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.monday.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import monday.monday.exception.MondayExceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"import monday.monday.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"import monday.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"import monday.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"import monday.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"import monday.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":"/** ","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" * Parser class is responsible for parsing user input and performing the corresponding actions. ","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" */ ","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" * An enumeration of available commands.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" private enum Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" BYE,","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" LIST,","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" MARK,","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" UNMARK,","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" TODO,","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" DEADLINE,","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" EVENT,","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" DELETE,","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" FIND","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" /** ","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" * Parses the user input and performs the corresponding action. ","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" * @param userInput the user input to be parsed ","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" * @param taskList the TaskList object to perform actions on ","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" * @return true if the application should continue running, false otherwise ","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" * @throws MondayExceptions if there are errors related to the Monday application ","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":" * @throws IllegalArgumentException if the user input is in the wrong format ","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":" */ ","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":" public static boolean mondayParser(String userInput, TaskList taskList) throws MondayExceptions {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":" String[] input \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":" String command \u003d input[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nubnubyas"},"content":" String content \u003d input.length \u003e 1 ? input[1] : null;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nubnubyas"},"content":" Command commandEnum \u003d Command.valueOf(command.toUpperCase());","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nubnubyas"},"content":" switch (commandEnum) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nubnubyas"},"content":" case BYE:","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nubnubyas"},"content":" Ui.exit();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nubnubyas"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nubnubyas"},"content":" case LIST:","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nubnubyas"},"content":" taskList.displayList();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nubnubyas"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nubnubyas"},"content":" case MARK: {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nubnubyas"},"content":" if (content \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nubnubyas"},"content":" throw new MondayExceptions(\"Mark requires a index to mark the task as completed.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nubnubyas"},"content":" int index \u003d Integer.parseInt(content);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nubnubyas"},"content":" taskList.mark(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nubnubyas"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"nubnubyas"},"content":" case UNMARK: {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"nubnubyas"},"content":" if (content \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nubnubyas"},"content":" throw new MondayExceptions(\"UnMark requires a index to mark the task as uncompleted.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nubnubyas"},"content":" int index \u003d Integer.parseInt(content);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"nubnubyas"},"content":" taskList.unMark(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"nubnubyas"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nubnubyas"},"content":" case TODO:","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nubnubyas"},"content":" if (content \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"nubnubyas"},"content":" throw new MondayExceptions(\"The description of a todo cannot be empty.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"nubnubyas"},"content":" \"Usage: todo (task)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"nubnubyas"},"content":" taskList.addToTask(new ToDo(content));","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nubnubyas"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nubnubyas"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nubnubyas"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nubnubyas"},"content":" if (content \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nubnubyas"},"content":" throw new MondayExceptions(\"The description of a deadline cannot be empty.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nubnubyas"},"content":" \"Usage: deadline (task) /by (time)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nubnubyas"},"content":" String[] taskDetails \u003d content.split(\"/by\",2);","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"nubnubyas"},"content":" String description \u003d taskDetails[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"nubnubyas"},"content":" String date \u003d taskDetails[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nubnubyas"},"content":" taskList.addToTask(new Deadline(description.trim(), date.trim()));","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nubnubyas"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"nubnubyas"},"content":" throw new IllegalArgumentException(\"Invalid Format. \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"nubnubyas"},"content":" \"Usage: deadline (task) /by (time)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nubnubyas"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"nubnubyas"},"content":" case EVENT:","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"nubnubyas"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"nubnubyas"},"content":" if (content \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"nubnubyas"},"content":" throw new MondayExceptions(\"The description of a event cannot be empty.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"nubnubyas"},"content":" \"Usage: event (task) /from (start time) /to (end time)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"nubnubyas"},"content":" String[] taskDetails \u003d content.split(\"/from\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"nubnubyas"},"content":" String description \u003d taskDetails[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"nubnubyas"},"content":" String[] taskTiming \u003d taskDetails[1].split(\"/to\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"nubnubyas"},"content":" String start \u003d taskTiming[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nubnubyas"},"content":" String end \u003d taskTiming[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nubnubyas"},"content":" taskList.addToTask(new Event(description.trim(),","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"nubnubyas"},"content":" start.trim(),","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"nubnubyas"},"content":" end.trim()));","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"nubnubyas"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"nubnubyas"},"content":" throw new IllegalArgumentException(\"Invalid Format. \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"nubnubyas"},"content":" \"Usage: event (task) /from (start time) /to (end time)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"nubnubyas"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"nubnubyas"},"content":" case DELETE:","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"nubnubyas"},"content":" if (content \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"nubnubyas"},"content":" throw new MondayExceptions(\"Delete requires a index to delete the task\");","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"nubnubyas"},"content":" int index \u003d Integer.parseInt(content);","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"nubnubyas"},"content":" taskList.delete(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"nubnubyas"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"nubnubyas"},"content":" case FIND:","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"nubnubyas"},"content":" if (content \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"nubnubyas"},"content":" throw new MondayExceptions(\"Find requires a keyword to find the tasks\");","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"nubnubyas"},"content":" String[] keywordDetails \u003d content.split(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"nubnubyas"},"content":" if (keywordDetails.length \u003e 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"nubnubyas"},"content":" throw new IllegalArgumentException(\"Invalid Format. \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"nubnubyas"},"content":" \"Usage: find (keyword), there should only be one keyword.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"nubnubyas"},"content":" taskList.find(keywordDetails[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"nubnubyas"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"nubnubyas"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"nubnubyas"},"content":" throw new MondayExceptions(\"Sorry, I do not understand what that means.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"nubnubyas"},"content":" \"Please provide a valid input/command. e.g todo read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"nubnubyas"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nubnubyas":147}},{"path":"src/main/java/monday/monday/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.monday.ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"/** ","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":" * Ui class is responsible for handling user interface related functions. ","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":" */ ","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":" * Prints a greeting message to the console.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" public static void greet() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Hello! I\u0027m \" + \"Monday\");","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" * Prints a farewell message to the console.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" public static void exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" * Prints a separator line to the console.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" public static void printSeparator() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nubnubyas":28}},{"path":"src/main/java/monday/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":"import java.io.EOFException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":"import monday.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" * Class for handling the storage of tasks in a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" private final String FILEPATH;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" * @param fileName the name of the file to store the tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" public Storage(String fileName) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" this.FILEPATH \u003d fileName;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" File file \u003d new File(fileName);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":" if (!file.getParentFile().exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Error creating file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":" * Saves the given list of tasks to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nubnubyas"},"content":" * @param tasks the list of tasks to save","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nubnubyas"},"content":" * @throws IOException if an I/O error occurs while saving the tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nubnubyas"},"content":" public void save(ArrayList\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nubnubyas"},"content":" try (ObjectOutputStream output \u003d new ObjectOutputStream(new FileOutputStream(FILEPATH))){","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"nubnubyas"},"content":" output.writeObject(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nubnubyas"},"content":" * Loads the list of tasks from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nubnubyas"},"content":" * @return the list of tasks loaded from the file","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nubnubyas"},"content":" * @throws ClassNotFoundException if the class of a serialized object cannot be found","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nubnubyas"},"content":" * @throws IOException if an I/O error occurs while loading the tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nubnubyas"},"content":" public ArrayList\u003cTask\u003e load() throws ClassNotFoundException, IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nubnubyas"},"content":" try (ObjectInputStream input \u003d new ObjectInputStream(new FileInputStream(FILEPATH))){","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"nubnubyas"},"content":" // We know the objects inside are all Tasks,therefore we can suppress the unchecked warning.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nubnubyas"},"content":" @SuppressWarnings(\"unchecked\")","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"nubnubyas"},"content":" ArrayList\u003cTask\u003e tasklists \u003d (ArrayList\u003cTask\u003e) input.readObject();","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nubnubyas"},"content":" return tasklists;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nubnubyas"},"content":" } catch (EOFException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nubnubyas"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nubnubyas":69}},{"path":"src/main/java/monday/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"import monday.monday.dateTime.DateFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":" * The Deadlines class extends the Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":" * It contains a description, a deadline, and inherits the","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" * completion status functionality from the Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" protected LocalDateTime deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" * Constructs a Deadlines object with the given description and deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" * @param description the description of the Deadlines task","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" * @param deadline the deadline of the Deadlines task","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" public Deadline(String description, String deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" this.deadline \u003d DateFormatter.parseTime(deadline, \"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" * Returns a string representation of the Deadlines task,","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":" * including its task type indicator, description, and deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" * @return a string representation of the Deadlines task","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" String formatDateTime \u003d DateFormatter.format(deadline, \"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formatDateTime + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nubnubyas":37}},{"path":"src/main/java/monday/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"import monday.monday.dateTime.DateFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":" * The Events class extends the Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":" * It contains a description, start time, end time, and inherits the","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" * completion status functionality from the Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":" protected LocalDateTime end;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" * Constructs an Events object with the given description, start time, and end time.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" * @param description the description of the Events task","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" * @param start the start time of the Events task","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" * @param end the end time of the Events task","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" public Event(String description, String start, String end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" this.start \u003d DateFormatter.parseTime(start, \"yyyy-MM-dd HH:mm\");;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" this.end \u003d DateFormatter.parseTime(end, \"yyyy-MM-dd HH:mm\");;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" * Returns a string representation of the Events task,","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" * including its task type indicator, description, start time, and end time.","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" * @return a string representation of the Events task","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":" String formatStartDateTime \u003d DateFormatter.format(start, \"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":" String formatEndDateTime \u003d DateFormatter.format(end, \"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":" return \"[E]\" + super.toString() + \" (from: \" + formatStartDateTime + \" to: \" + formatEndDateTime + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nubnubyas":41}},{"path":"src/main/java/monday/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":" * The Task class represents a task with a description and a completion status.","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"public class Task implements Serializable {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" * Constructs a Task object with the given description","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":" * and sets its completion status to false.","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" * @param description the description of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" * Returns the status icon of the task based on its completion status.","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" * @return \"X\" if the task is done, \" \" (empty space) otherwise","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" * Marks the task as done by setting its completion status to true.","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":" * Marks the task as not done by setting its completion status to false.","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"nubnubyas"},"content":" public void unMark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"nubnubyas"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"nubnubyas"},"content":" * Returns a string representation of the task,","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"nubnubyas"},"content":" * including its completion status icon and description.","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"nubnubyas"},"content":" * @return a string representation of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"nubnubyas"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"nubnubyas"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"nubnubyas"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nubnubyas":56}},{"path":"src/main/java/monday/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"import monday.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":" * The TaskList class is responsible for storing and managing the tasks in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" /** ","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" * Constructs a TaskList object with the specified file path. ","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" * @param filePath the file path to store the tasks ","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" */ ","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" public TaskList(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" this.list \u003d storage.load();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" } catch (IOException | ClassNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Error loading tasks from file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" * Saves the list of tasks to the storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" * @throws IOException if an I/O error occurs while saving the tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" private void save() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" storage.save(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nubnubyas"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nubnubyas"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nubnubyas"},"content":" public void addToTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nubnubyas"},"content":" list.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"nubnubyas"},"content":" save();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nubnubyas"},"content":" * Displays the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nubnubyas"},"content":" public void displayList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nubnubyas"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"nubnubyas"},"content":" System.out.println((i + 1) + \".\" + list.get(i).toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nubnubyas"},"content":" * Marks a task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nubnubyas"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nubnubyas"},"content":" * @throws IndexOutOfBoundsException If the index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"nubnubyas"},"content":" public void mark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"nubnubyas"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"nubnubyas"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range. \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nubnubyas"},"content":" \"Check the number of tasks using the \u0027list\u0027 command.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"nubnubyas"},"content":" Task taskToEdit \u003d list.get(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"nubnubyas"},"content":" taskToEdit.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"nubnubyas"},"content":" save();","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\\n\" + taskToEdit);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nubnubyas"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nubnubyas"},"content":" * @param index The index of the task to be marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nubnubyas"},"content":" * @throws IndexOutOfBoundsException If the index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nubnubyas"},"content":" public void unMark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nubnubyas"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"nubnubyas"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range. \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"nubnubyas"},"content":" \"Check the number of tasks using the \u0027list\u0027 command.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nubnubyas"},"content":" Task taskToEdit \u003d list.get(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"nubnubyas"},"content":" taskToEdit.unMark();","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"nubnubyas"},"content":" save();","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\\n\" + taskToEdit);","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"nubnubyas"},"content":" * Deletes a task from the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"nubnubyas"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"nubnubyas"},"content":" * @throws IndexOutOfBoundsException If the index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"nubnubyas"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"nubnubyas"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"nubnubyas"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range. \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"nubnubyas"},"content":" \"Check the number of tasks using the \u0027list\u0027 command.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nubnubyas"},"content":" Task taskToEdit \u003d list.get(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"nubnubyas"},"content":" list.remove(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"nubnubyas"},"content":" save();","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\\n\" + taskToEdit);","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"nubnubyas"},"content":" * Finds and prints tasks containing the specified keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"nubnubyas"},"content":" * @param keyword the keyword to search for in the tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"nubnubyas"},"content":" public void find(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"nubnubyas"},"content":" if (list.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Your list is empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"nubnubyas"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"nubnubyas"},"content":" int matchingTaskCount \u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"nubnubyas"},"content":" for (Task curr : list) {","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"nubnubyas"},"content":" if (curr.toString().contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"nubnubyas"},"content":" System.out.println(matchingTaskCount + \".\" + curr);","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"nubnubyas"},"content":" matchingTaskCount++;","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nubnubyas":135}},{"path":"src/main/java/monday/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":" * The ToDos class extends the Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":" * It contains a description and inherits the ","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":" * completion status functionality from the Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":" * Constructs a ToDos object with the given description.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" * @param description the description of the ToDos task","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" * Returns a string representation of the ToDos task,","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" * including its task type indicator and description.","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" * @return a string representation of the ToDos task","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nubnubyas":29}},{"path":"src/test/java/monday/DateFormatterTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import monday.monday.dateTime.DateFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" * The DateFormatterTest class is responsible for testing the functionality of the DateFormatter class.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":"public class DateFormatterTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":" * Tests the DateTimeParseException scenario.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" public void testDateTimeParseException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" DateFormatter.parseTime(\"31-08-2023\", \"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" fail(\"Expected IllegalArgumentException to be thrown.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" assertEquals(\"Invalid date format. Please use the format: yyyy-MM-dd HH:mm\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" * Tests the parseTime method.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" public void testParseTime(){","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" String dateTimeString \u003d \"2023-08-31 12:34\";","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" String pattern \u003d \"yyyy-MM-dd HH:mm\";","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" LocalDateTime expectedDateTime \u003d LocalDateTime.of(2023, 8, 31, 12, 34);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" LocalDateTime parsedDateTime \u003d DateFormatter.parseTime(dateTimeString, pattern);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" assertEquals(expectedDateTime, parsedDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":" * Tests the format method with a valid DateTime object.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nubnubyas"},"content":" public void testFormat_ValidDateTime() {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nubnubyas"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 31, 12, 34);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nubnubyas"},"content":" String pattern \u003d \"yyyy-MM-dd HH:mm\";","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nubnubyas"},"content":" String expectedFormattedString \u003d \"2023-08-31 12:34\";","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nubnubyas"},"content":" String formattedString \u003d DateFormatter.format(dateTime, pattern);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nubnubyas"},"content":" assertEquals(expectedFormattedString, formattedString);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nubnubyas":49}},{"path":"src/test/java/monday/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import monday.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":" * The ToDoTest class is responsible for testing the functionality of the ToDo class.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":" * Tests the mark method.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":" public void testMarkAsDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" ToDo todo \u003d new ToDo(\"return book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" assert todo.getStatusIcon().equals(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" assert todo.getStatusIcon().equals(\"X\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" * Tests the unMark method.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" public void testUnMark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" ToDo todo \u003d new ToDo(\"return book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":" assert todo.getStatusIcon().equals(\"X\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":" todo.unMark();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" assert todo.getStatusIcon().equals(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" * Tests the toString method.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":" public void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":" ToDo todo \u003d new ToDo(\"return book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":" assert todo.toString().equals(\"[T][ ] return book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":" assert todo.toString().equals(\"[T][X] return book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nubnubyas":43}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"todo read book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"todo join sports club","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nubnubyas":12}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":"java -classpath ..\\bin Monday \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":{"nubnubyas":1,"-":20}},{"path":"data/duke.txt","fileType":"txt","isBinary":true,"lines":[],"authorContributionMap":{"nubnubyas":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":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"checkstyle {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" mainClass.set(\"monday.Monday\")","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"nubnubyas":6,"-":41}},{"path":"src/main/java/monday/Monday.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"import monday.monday.exception.MondayExceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"import monday.monday.parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"import monday.monday.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"import monday.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":" * Monday is a task management ChatBot. Users can add, mark, unmark,","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" * delete, keep track of the tasks they have.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":"public class Monday {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" * Starts the Monday application.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" * Initializes necessary components, greets the user, handles user input, and handles errors.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" * @param filepath the filepath to store the tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" private static void startMonday(String filepath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" TaskList taskList \u003d new TaskList(filepath);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" boolean isRunning \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" Ui.printSeparator();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" Ui.greet();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":" Ui.printSeparator();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":" while (isRunning) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" Ui.printSeparator();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" isRunning \u003d Parser.mondayParser(userInput, taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" } catch (MondayExceptions e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Mark/UnMark number error. \" + e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Argument Error: \" + e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Index out of Bound Error: \" + e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"nubnubyas"},"content":" Ui.printSeparator();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"nubnubyas"},"content":" scanner.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"nubnubyas"},"content":" * Entry point to Monday.","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"nubnubyas"},"content":" * @param args Command line arguments","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"nubnubyas"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"nubnubyas"},"content":" startMonday(\"./data/duke.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nubnubyas":56}},{"path":"src/main/java/monday/monday/datetime/DateFormatter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.monday.datetime;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":" * Class for parsing and formatting date and time using the specified pattern.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":"public class DateFormatter {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" * Parses the given date and time string using the specified pattern.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" * @param dateTime the date and time string to parse","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" * @param pattern the pattern to use for parsing","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" * @return the parsed LocalDateTime object","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" * @throws IllegalArgumentException if the date format is invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" public static LocalDateTime parseTime(String dateTime, String pattern) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(pattern);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" return LocalDateTime.parse(dateTime, formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" throw new IllegalArgumentException(\"Invalid date format. \"","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" + \"Please use the format: \" + pattern);","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" * Formats the given LocalDateTime object using the specified pattern.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" * @param dateTime the LocalDateTime object to format","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" * @param pattern the pattern to use for formatting","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" * @return the formatted date and time string","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":" public static String format(LocalDateTime dateTime, String pattern) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(pattern);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":" return dateTime.format(formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nubnubyas":41}},{"path":"src/main/java/monday/monday/exception/MondayExceptions.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.monday.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":" * MondayExceptions is a custom exception class for handling","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":" * exceptions related to the Monday application.","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"public class MondayExceptions extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" * Constructs a MondayExceptions object with the specified error message.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" * @param message the error message associated with the exception","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":" public MondayExceptions(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" * Returns a string representation of the exception message.","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" * @return a string representation of the exception message","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" return \"☹ OOPS!!! \" + super.getMessage();","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nubnubyas":27}},{"path":"src/main/java/monday/monday/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.monday.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import monday.monday.exception.MondayExceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"import monday.monday.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"import monday.task.Deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"import monday.task.Event;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"import monday.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"import monday.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" * Parser class is responsible for parsing user input and performing the corresponding actions.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" * An enumeration of available commands.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" private enum Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" BYE,","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" LIST,","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" MARK,","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" UNMARK,","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" TODO,","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" DEADLINE,","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" EVENT,","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" DELETE,","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" FIND","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" * Parses the user input and performs the corresponding action.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" * @param userInput the user input to be parsed","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" * @param taskList the TaskList object to perform actions on","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" * @return true if the application should continue running, false otherwise","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" * @throws MondayExceptions if there are errors related to the Monday application","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":" * @throws IllegalArgumentException if the user input is in the wrong format","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":" public static boolean mondayParser(String userInput, TaskList taskList) throws MondayExceptions {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":" String[] input \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":" String command \u003d input[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nubnubyas"},"content":" String content \u003d input.length \u003e 1 ? input[1] : null;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nubnubyas"},"content":" Command commandEnum \u003d Command.valueOf(command.toUpperCase());","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nubnubyas"},"content":" switch (commandEnum) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nubnubyas"},"content":" case BYE:","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"nubnubyas"},"content":" Ui.exit();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nubnubyas"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nubnubyas"},"content":" case LIST:","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nubnubyas"},"content":" taskList.displayList();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nubnubyas"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nubnubyas"},"content":" case MARK: {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nubnubyas"},"content":" if (content \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nubnubyas"},"content":" throw new MondayExceptions(\"Mark requires a index to mark the task as completed.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nubnubyas"},"content":" int index \u003d Integer.parseInt(content);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nubnubyas"},"content":" taskList.mark(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"nubnubyas"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"nubnubyas"},"content":" case UNMARK: {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"nubnubyas"},"content":" if (content \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nubnubyas"},"content":" throw new MondayExceptions(\"UnMark requires a index to mark the task as uncompleted.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nubnubyas"},"content":" int index \u003d Integer.parseInt(content);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"nubnubyas"},"content":" taskList.unMark(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"nubnubyas"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nubnubyas"},"content":" case TODO:","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nubnubyas"},"content":" if (content \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"nubnubyas"},"content":" throw new MondayExceptions(\"The description of a todo cannot be empty.\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"nubnubyas"},"content":" + \"Usage: todo (task)\");","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"nubnubyas"},"content":" taskList.addToTask(new ToDo(content));","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nubnubyas"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nubnubyas"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nubnubyas"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nubnubyas"},"content":" if (content \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nubnubyas"},"content":" throw new MondayExceptions(\"The description of a deadline cannot be empty.\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"nubnubyas"},"content":" + \"Usage: deadline (task) /by (time)\");","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nubnubyas"},"content":" String[] taskDetails \u003d content.split(\"/by\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"nubnubyas"},"content":" String description \u003d taskDetails[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"nubnubyas"},"content":" String date \u003d taskDetails[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nubnubyas"},"content":" taskList.addToTask(new Deadline(description.trim(), date.trim()));","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"nubnubyas"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"nubnubyas"},"content":" throw new IllegalArgumentException(\"Invalid Format. \"","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"nubnubyas"},"content":" + \"Usage: deadline (task) /by (time)\");","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nubnubyas"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"nubnubyas"},"content":" case EVENT:","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"nubnubyas"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"nubnubyas"},"content":" if (content \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"nubnubyas"},"content":" throw new MondayExceptions(\"The description of a event cannot be empty.\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"nubnubyas"},"content":" + \"Usage: event (task) /from (start time) /to (end time)\");","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"nubnubyas"},"content":" String[] taskDetails \u003d content.split(\"/from\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"nubnubyas"},"content":" String description \u003d taskDetails[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"nubnubyas"},"content":" String[] taskTiming \u003d taskDetails[1].split(\"/to\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"nubnubyas"},"content":" String start \u003d taskTiming[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nubnubyas"},"content":" String end \u003d taskTiming[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nubnubyas"},"content":" taskList.addToTask(new Event(description.trim(),","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"nubnubyas"},"content":" start.trim(),","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"nubnubyas"},"content":" end.trim()));","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"nubnubyas"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"nubnubyas"},"content":" throw new IllegalArgumentException(\"Invalid Format. \"","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"nubnubyas"},"content":" + \"Usage: event (task) /from (start time) /to (end time)\");","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"nubnubyas"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"nubnubyas"},"content":" case DELETE:","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"nubnubyas"},"content":" if (content \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"nubnubyas"},"content":" throw new MondayExceptions(\"Delete requires a index to delete the task\");","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"nubnubyas"},"content":" int index \u003d Integer.parseInt(content);","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"nubnubyas"},"content":" taskList.delete(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"nubnubyas"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"nubnubyas"},"content":" case FIND:","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"nubnubyas"},"content":" if (content \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"nubnubyas"},"content":" throw new MondayExceptions(\"Find requires a keyword to find the tasks\");","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"nubnubyas"},"content":" String[] keywordDetails \u003d content.split(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"nubnubyas"},"content":" if (keywordDetails.length \u003e 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"nubnubyas"},"content":" throw new IllegalArgumentException(\"Invalid Format. \"","lastModifiedDate":"2023-09-06"},{"lineNumber":136,"author":{"gitId":"nubnubyas"},"content":" + \"Usage: find (keyword), there should only be one keyword.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":137,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"nubnubyas"},"content":" taskList.find(keywordDetails[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"nubnubyas"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"nubnubyas"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"nubnubyas"},"content":" throw new MondayExceptions(\"Sorry, I do not understand what that means.\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":143,"author":{"gitId":"nubnubyas"},"content":" + \"Please provide a valid input/command. e.g todo read book\");","lastModifiedDate":"2023-09-06"},{"lineNumber":144,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"nubnubyas"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nubnubyas":147}},{"path":"src/main/java/monday/monday/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.monday.ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":" * Ui class is responsible for handling user interface related functions.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":" * Prints a greeting message to the console.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" public static void greet() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Hello! I\u0027m \" + \"Monday\");","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" * Prints a farewell message to the console.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" public static void exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" * Prints a separator line to the console.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" public static void printSeparator() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nubnubyas":28}},{"path":"src/main/java/monday/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import java.io.EOFException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":"import monday.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" * Class for handling the storage of tasks in a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" //CHECKSTYLE.OFF: AbbreviationAsWordInName","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" //CHECKSTYLE.OFF: MemberName","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" private final String FILEPATH;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" //CHECKSTYLE.ON: AbbreviationAsWordInName","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" //CHECKSTYLE.ON: MemberName","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":" * @param fileName the name of the file to store the tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" public Storage(String fileName) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" this.FILEPATH \u003d fileName;","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" File file \u003d new File(fileName);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" if (!file.getParentFile().exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Error creating file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nubnubyas"},"content":" * Saves the given list of tasks to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nubnubyas"},"content":" * @param tasks the list of tasks to save","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nubnubyas"},"content":" * @throws IOException if an I/O error occurs while saving the tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nubnubyas"},"content":" public void save(ArrayList\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nubnubyas"},"content":" try (ObjectOutputStream output \u003d new ObjectOutputStream(new FileOutputStream(FILEPATH))) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"nubnubyas"},"content":" output.writeObject(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nubnubyas"},"content":" * Loads the list of tasks from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nubnubyas"},"content":" * @return the list of tasks loaded from the file","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nubnubyas"},"content":" * @throws ClassNotFoundException if the class of a serialized object cannot be found","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nubnubyas"},"content":" * @throws IOException if an I/O error occurs while loading the tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nubnubyas"},"content":" public ArrayList\u003cTask\u003e load() throws ClassNotFoundException, IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nubnubyas"},"content":" try (ObjectInputStream input \u003d new ObjectInputStream(new FileInputStream(FILEPATH))) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"nubnubyas"},"content":" // We know the objects inside are all Tasks,therefore we can suppress the unchecked warning.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nubnubyas"},"content":" @SuppressWarnings(\"unchecked\")","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nubnubyas"},"content":" ArrayList\u003cTask\u003e tasklists \u003d (ArrayList\u003cTask\u003e) input.readObject();","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nubnubyas"},"content":" return tasklists;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nubnubyas"},"content":" } catch (EOFException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"nubnubyas"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nubnubyas":74}},{"path":"src/main/java/monday/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"import monday.monday.datetime.DateFormatter;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":" * The Deadlines class extends the Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":" * It contains a description, a deadline, and inherits the","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" * completion status functionality from the Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" protected LocalDateTime deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" * Constructs a Deadlines object with the given description and deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" * @param description the description of the Deadlines task","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" * @param deadline the deadline of the Deadlines task","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" public Deadline(String description, String deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" this.deadline \u003d DateFormatter.parseTime(deadline, \"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" * Returns a string representation of the Deadlines task,","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":" * including its task type indicator, description, and deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" * @return a string representation of the Deadlines task","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" String formatDateTime \u003d DateFormatter.format(deadline, \"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formatDateTime + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nubnubyas":37}},{"path":"src/main/java/monday/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"import monday.monday.datetime.DateFormatter;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":" * The Events class extends the Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":" * It contains a description, start time, end time, and inherits the","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" * completion status functionality from the Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":" protected LocalDateTime end;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" * Constructs an Events object with the given description, start time, and end time.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" * @param description the description of the Events task","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" * @param start the start time of the Events task","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" * @param end the end time of the Events task","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" public Event(String description, String start, String end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" this.start \u003d DateFormatter.parseTime(start, \"yyyy-MM-dd HH:mm\");;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" this.end \u003d DateFormatter.parseTime(end, \"yyyy-MM-dd HH:mm\");;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" * Returns a string representation of the Events task,","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" * including its task type indicator, description, start time, and end time.","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" * @return a string representation of the Events task","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":" String formatStartDateTime \u003d DateFormatter.format(start, \"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":" String formatEndDateTime \u003d DateFormatter.format(end, \"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":" return \"[E]\" + super.toString() + \" (from: \" + formatStartDateTime + \" to: \" + formatEndDateTime + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nubnubyas":41}},{"path":"src/main/java/monday/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":" * The Task class represents a task with a description and a completion status.","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"public class Task implements Serializable {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" * Constructs a Task object with the given description","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":" * and sets its completion status to false.","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" * @param description the description of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" * Returns the status icon of the task based on its completion status.","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" * @return \"X\" if the task is done, \" \" (empty space) otherwise","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" * Marks the task as done by setting its completion status to true.","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":" * Marks the task as not done by setting its completion status to false.","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"nubnubyas"},"content":" public void unMark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"nubnubyas"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"nubnubyas"},"content":" * Returns a string representation of the task,","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"nubnubyas"},"content":" * including its completion status icon and description.","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"nubnubyas"},"content":" * @return a string representation of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"nubnubyas"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"nubnubyas"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"nubnubyas"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"nubnubyas":57}},{"path":"src/main/java/monday/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"import monday.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":" * The TaskList class is responsible for storing and managing the tasks in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" * Constructs a TaskList object with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" * @param filePath the file path to store the tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" public TaskList(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" this.list \u003d storage.load();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" } catch (IOException | ClassNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Error loading tasks from file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" * Saves the list of tasks to the storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" * @throws IOException if an I/O error occurs while saving the tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" private void save() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" storage.save(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nubnubyas"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nubnubyas"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nubnubyas"},"content":" public void addToTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nubnubyas"},"content":" list.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"nubnubyas"},"content":" save();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nubnubyas"},"content":" * Displays the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"nubnubyas"},"content":" public void displayList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nubnubyas"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"nubnubyas"},"content":" System.out.println((i + 1) + \".\" + list.get(i).toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nubnubyas"},"content":" * Marks a task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nubnubyas"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nubnubyas"},"content":" * @throws IndexOutOfBoundsException If the index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"nubnubyas"},"content":" public void mark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"nubnubyas"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"nubnubyas"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range. \"","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"nubnubyas"},"content":" + \"Check the number of tasks using the \u0027list\u0027 command.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"nubnubyas"},"content":" Task taskToEdit \u003d list.get(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"nubnubyas"},"content":" taskToEdit.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"nubnubyas"},"content":" save();","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\\n\" + taskToEdit);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"nubnubyas"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nubnubyas"},"content":" * @param index The index of the task to be marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nubnubyas"},"content":" * @throws IndexOutOfBoundsException If the index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nubnubyas"},"content":" public void unMark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nubnubyas"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"nubnubyas"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range. \"","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"nubnubyas"},"content":" + \"Check the number of tasks using the \u0027list\u0027 command.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nubnubyas"},"content":" Task taskToEdit \u003d list.get(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"nubnubyas"},"content":" taskToEdit.unMark();","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"nubnubyas"},"content":" save();","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\\n\" + taskToEdit);","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"nubnubyas"},"content":" * Deletes a task from the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"nubnubyas"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"nubnubyas"},"content":" * @throws IndexOutOfBoundsException If the index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"nubnubyas"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"nubnubyas"},"content":" if (index \u003c 1 || index \u003e list.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"nubnubyas"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range. \"","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"nubnubyas"},"content":" + \"Check the number of tasks using the \u0027list\u0027 command.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nubnubyas"},"content":" Task taskToEdit \u003d list.get(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"nubnubyas"},"content":" list.remove(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"nubnubyas"},"content":" save();","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\\n\" + taskToEdit);","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"nubnubyas"},"content":" * Finds and prints tasks containing the specified keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"nubnubyas"},"content":" * @param keyword the keyword to search for in the tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"nubnubyas"},"content":" public void find(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"nubnubyas"},"content":" if (list.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Your list is empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"nubnubyas"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"nubnubyas"},"content":" int matchingTaskCount \u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"nubnubyas"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"nubnubyas"},"content":" for (Task curr : list) {","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"nubnubyas"},"content":" if (curr.toString().contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"nubnubyas"},"content":" System.out.println(matchingTaskCount + \".\" + curr);","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"nubnubyas"},"content":" matchingTaskCount++;","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nubnubyas":135}},{"path":"src/main/java/monday/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":" * The ToDos class extends the Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":" * It contains a description and inherits the","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":" * completion status functionality from the Task class.","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":" * Constructs a ToDos object with the given description.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" * @param description the description of the ToDos task","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" * Returns a string representation of the ToDos task,","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" * including its task type indicator and description.","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" * @return a string representation of the ToDos task","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nubnubyas":29}},{"path":"src/test/java/monday/DateFormatterTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":"import monday.monday.datetime.DateFormatter;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" * The DateFormatterTest class is responsible for testing the functionality of the DateFormatter class.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":"public class DateFormatterTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" * Tests the DateTimeParseException scenario.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" public void testDateTimeParseException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" DateFormatter.parseTime(\"31-08-2023\", \"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" fail(\"Expected IllegalArgumentException to be thrown.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" assertEquals(\"Invalid date format. Please use the format: yyyy-MM-dd HH:mm\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" * Tests the parseTime method.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":" public void testParseTime() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" String dateTimeString \u003d \"2023-08-31 12:34\";","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" String pattern \u003d \"yyyy-MM-dd HH:mm\";","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" LocalDateTime expectedDateTime \u003d LocalDateTime.of(2023, 8, 31, 12, 34);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":" LocalDateTime parsedDateTime \u003d DateFormatter.parseTime(dateTimeString, pattern);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":" assertEquals(expectedDateTime, parsedDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nubnubyas"},"content":" * Tests the format method with a valid DateTime object.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nubnubyas"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nubnubyas"},"content":" public void testFormat_validDateTime() {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"nubnubyas"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 8, 31, 12, 34);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nubnubyas"},"content":" String pattern \u003d \"yyyy-MM-dd HH:mm\";","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nubnubyas"},"content":" String expectedFormattedString \u003d \"2023-08-31 12:34\";","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nubnubyas"},"content":" String formattedString \u003d DateFormatter.format(dateTime, pattern);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nubnubyas"},"content":" assertEquals(expectedFormattedString, formattedString);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nubnubyas":52}},{"path":"src/test/java/monday/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"package monday;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"import monday.task.ToDo;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":" * The ToDoTest class is responsible for testing the functionality of the ToDo class.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":" * Tests the mark method.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nubnubyas"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nubnubyas"},"content":" public void testMarkAsDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nubnubyas"},"content":" ToDo todo \u003d new ToDo(\"return book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nubnubyas"},"content":" assert todo.getStatusIcon().equals(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nubnubyas"},"content":" assert todo.getStatusIcon().equals(\"X\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nubnubyas"},"content":" * Tests the unMark method.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nubnubyas"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nubnubyas"},"content":" public void testUnMark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nubnubyas"},"content":" ToDo todo \u003d new ToDo(\"return book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nubnubyas"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nubnubyas"},"content":" assert todo.getStatusIcon().equals(\"X\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nubnubyas"},"content":" todo.unMark();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nubnubyas"},"content":" assert todo.getStatusIcon().equals(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nubnubyas"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nubnubyas"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nubnubyas"},"content":" * Tests the toString method.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nubnubyas"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nubnubyas"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nubnubyas"},"content":" public void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nubnubyas"},"content":" ToDo todo \u003d new ToDo(\"return book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nubnubyas"},"content":" assert todo.toString().equals(\"[T][ ] return book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nubnubyas"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nubnubyas"},"content":" assert todo.toString().equals(\"[T][X] return book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nubnubyas"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nubnubyas"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nubnubyas":44}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nubnubyas"},"content":"todo read book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"nubnubyas"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"nubnubyas"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"nubnubyas"},"content":"todo join sports club","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"nubnubyas"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"nubnubyas"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nubnubyas"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nubnubyas"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nubnubyas"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nubnubyas"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"nubnubyas"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nubnubyas"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nubnubyas":12}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"nubnubyas"},"content":"java -classpath ..\\bin Monday \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":{"nubnubyas":1,"-":20}},{"path":"data/duke.txt","fileType":"txt","isBinary":true,"lines":[],"authorContributionMap":{"nubnubyas":0}}] diff --git a/nubnubyas_ip_master/commits.json b/nubnubyas_ip_master/commits.json index 793f5323..2b77589d 100644 --- a/nubnubyas_ip_master/commits.json +++ b/nubnubyas_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"nubnubyas":[{"date":"2023-08-23","commitResults":[{"hash":"c430b04aefc792713a85c34b25dd4c1c5237ab22","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":10}}},{"hash":"07fb9ca31b45fe44fbeb3a12528697dd50050c9c","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"ba0d375257caefb04722b6a7d955554cc230d472","isMergeCommit":false,"messageTitle":"Completed Level-1 Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"2498f8a242e23e54a41188389d0c51dad1cd264c","isMergeCommit":false,"messageTitle":"Completed Level-2 Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":8}}},{"hash":"296d3903d83cee35c43769f924d847f8f8b686d5","isMergeCommit":false,"messageTitle":"Completed Level-3 Mark as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":3}}},{"hash":"262440e2025340129a6bfc5b7a2a0e1b2af0b81d","isMergeCommit":false,"messageTitle":"Completed Level-4 ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":9}}}]},{"date":"2023-08-24","commitResults":[{"hash":"9d7e8235aca0a86f70d4156dc63b29353be9be27","isMergeCommit":false,"messageTitle":"Completed A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"68415133afa2b134d4c0564df4e32e2d87ab1b6b","isMergeCommit":false,"messageTitle":"Completed Level 5 Handle Errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":43}}},{"hash":"876a8c9919636757745546b084aca42fe4030b77","isMergeCommit":false,"messageTitle":"Completed Level 5 Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"440f456f613efe2020b66f2df010f29c335c93de","isMergeCommit":false,"messageTitle":"Completed Level 6 Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":1}}},{"hash":"8f23df8f1b957e6685f311bc4e0936f509150d58","isMergeCommit":false,"messageTitle":"Completed A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":11}}},{"hash":"19b9063b8b0328f225f98d2718f4b991868dce34","isMergeCommit":false,"messageTitle":"Added Documentations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":168,"deletions":15}}},{"hash":"6f6aa05fef37664ddfa5a948cb96e63c126f2754","isMergeCommit":false,"messageTitle":"Added TestCases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"699563809f0fc64e1a3274e6d943e134a7de081a","isMergeCommit":false,"messageTitle":"Add Level-7 Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":77}}},{"hash":"9d90ef78353fc2c1e6121a639afc68b38774843a","isMergeCommit":true,"messageTitle":"Merge pull request #1 from nubnubyas/branch-Level-7","messageBody":"Merge branch-Level-7","fileTypesAndContributionMap":{}},{"hash":"10716808f61deb2e99433e0333bcb3cabf69299e","isMergeCommit":false,"messageTitle":"Add Level-7 Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":25}}},{"hash":"d8ac3948c5674f229ea32f5148bab2d7bea3d751","isMergeCommit":true,"messageTitle":"Merge pull request #2 from nubnubyas/branch-Level-7","messageBody":"Merge Level-7 Save","fileTypesAndContributionMap":{}},{"hash":"16329e58f4446d261cfadd400df26fbad8c00e66","isMergeCommit":false,"messageTitle":"Add Level-8 Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":36,"deletions":8}}},{"hash":"5b7353e0e33ce898d92ab1444474fbba346b38cc","isMergeCommit":true,"messageTitle":"Merge pull request #3 from nubnubyas/branch-Level-8","messageBody":"Merge Level-8 Dates and Times","fileTypesAndContributionMap":{}},{"hash":"a8a7065dfd37e9b142bd7537264c5ee50f8a8d01","isMergeCommit":false,"messageTitle":"Complete A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":149,"deletions":148}}}]},{"date":"2023-08-31","commitResults":[{"hash":"9dd697985f8ef016a7415c2719bfe9e2dd14ac80","isMergeCommit":true,"messageTitle":"Merge pull request #4 from nubnubyas/branch-A-MoreOOP","messageBody":"Merge A-MoreOOP","fileTypesAndContributionMap":{}},{"hash":"9524baae4a7bbc02c84547de88e2338ea45eb5fb","isMergeCommit":false,"messageTitle":"Complete A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":39,"deletions":1}}},{"hash":"fe9e10affdb152e5a92eaa31e40843642f283eec","isMergeCommit":true,"messageTitle":"Merge pull request #5 from nubnubyas/branch-A-Packages","messageBody":"Merge A-Packages","fileTypesAndContributionMap":{}},{"hash":"e3b53ba860086a04a2235b3a4cdbbcc46791e73e","isMergeCommit":true,"messageTitle":"Merge pull request #6 from nubnubyas/add-gradle-support","messageBody":"Add gradle support","fileTypesAndContributionMap":{}},{"hash":"697fc69e6fa726c6292a9985ac2c5cf9562dacac","isMergeCommit":false,"messageTitle":"Use Gradle to run Duke","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"82f63ac075b1caabe3a520a71ce4815f79e95ab3","isMergeCommit":true,"messageTitle":"Merge pull request #7 from nubnubyas/branch-A-Gradle","messageBody":"Merge A gradle","fileTypesAndContributionMap":{}},{"hash":"1829f90b2bb979afe8ded9cc08b6b2e665920245","isMergeCommit":false,"messageTitle":"Use Gradle to run Duke","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":29,"deletions":27}}},{"hash":"88fb9c7e263255b4b2e37a4d4d0abbfce10d24a7","isMergeCommit":true,"messageTitle":"Merge pull request #8 from nubnubyas/branch-A-Gradle","messageBody":"Use Gradle to run Duke","fileTypesAndContributionMap":{}},{"hash":"481084bf6b0dc9edfef2538d30872a80a20f71b0","isMergeCommit":false,"messageTitle":"Add JUnit Test for ToDo and DateFormatter","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":12}}},{"hash":"ee8f8b994f1d6d6d3264d68dc6c3cc8bcb2d1869","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"04eb079b8429c740e1a99238759e5212e8073ed4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/nubnubyas/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4f056b112f4a768fa2e7b1fb0f9e6348bce5edd0","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":36}}},{"hash":"05217cfd1bbe710092443b58ea1cb0e71a5b9eca","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":93}}},{"hash":"3a2b7a25dd7493dd1ffdd4a12ce0279d3800879e","isMergeCommit":false,"messageTitle":"Modify code to follow Java Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":76}}}]},{"date":"2023-09-01","commitResults":[{"hash":"93c5d02f3858e5cdec0398e6346fa94a33b31f1d","isMergeCommit":false,"messageTitle":"Modify code to follow Java Coding Standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"24f7fb21eeecc71dcc6fed646fe7af36586aadab","isMergeCommit":false,"messageTitle":"Add find task function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":114,"deletions":72}}},{"hash":"eb9f4bf0a55728f96af6bf817fe48f34b9833450","isMergeCommit":false,"messageTitle":"Add JavaDoc for functions and classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"c40cf05802c125512e7e6cf33e1b0d9e573b7402","isMergeCommit":false,"messageTitle":"Add find task function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":8}}},{"hash":"351f176784330376315b94625c02bfc82732ecd1","isMergeCommit":false,"messageTitle":"Modify storage","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"79f7b0e5a045728d068c567660df65b51456b9e6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"026cb7c86dbf9fe85688c8965c888533e9f34535","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"79cbc9412e6593c9d13e8d1974629d44ccf229a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7dd207e5b7838a8e3b77e0129b87f7619070099e","isMergeCommit":false,"messageTitle":"Add find function to find according to keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":15}}},{"hash":"070daebca55eb98c73de61213632f503e1d44321","isMergeCommit":false,"messageTitle":"Add find function to find according to keyword","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"639233b2c2c1e455591a371a3836fa856556957f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"nubnubyas":{"java":758,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":1,"txt":12}},"authorContributionVariance":{"nubnubyas":54147.723},"authorDisplayNameMap":{"nubnubyas":"CS2103T-T14-3 ZHAN..HENG"}} +{"authorDailyContributionsMap":{"nubnubyas":[{"date":"2023-08-23","commitResults":[{"hash":"c430b04aefc792713a85c34b25dd4c1c5237ab22","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":10}}},{"hash":"07fb9ca31b45fe44fbeb3a12528697dd50050c9c","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"ba0d375257caefb04722b6a7d955554cc230d472","isMergeCommit":false,"messageTitle":"Completed Level-1 Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"2498f8a242e23e54a41188389d0c51dad1cd264c","isMergeCommit":false,"messageTitle":"Completed Level-2 Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":8}}},{"hash":"296d3903d83cee35c43769f924d847f8f8b686d5","isMergeCommit":false,"messageTitle":"Completed Level-3 Mark as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":3}}},{"hash":"262440e2025340129a6bfc5b7a2a0e1b2af0b81d","isMergeCommit":false,"messageTitle":"Completed Level-4 ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":9}}}]},{"date":"2023-08-24","commitResults":[{"hash":"9d7e8235aca0a86f70d4156dc63b29353be9be27","isMergeCommit":false,"messageTitle":"Completed A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"68415133afa2b134d4c0564df4e32e2d87ab1b6b","isMergeCommit":false,"messageTitle":"Completed Level 5 Handle Errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":43}}},{"hash":"876a8c9919636757745546b084aca42fe4030b77","isMergeCommit":false,"messageTitle":"Completed Level 5 Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"440f456f613efe2020b66f2df010f29c335c93de","isMergeCommit":false,"messageTitle":"Completed Level 6 Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":1}}},{"hash":"8f23df8f1b957e6685f311bc4e0936f509150d58","isMergeCommit":false,"messageTitle":"Completed A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":11}}},{"hash":"19b9063b8b0328f225f98d2718f4b991868dce34","isMergeCommit":false,"messageTitle":"Added Documentations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":168,"deletions":15}}},{"hash":"6f6aa05fef37664ddfa5a948cb96e63c126f2754","isMergeCommit":false,"messageTitle":"Added TestCases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"699563809f0fc64e1a3274e6d943e134a7de081a","isMergeCommit":false,"messageTitle":"Add Level-7 Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":77}}},{"hash":"9d90ef78353fc2c1e6121a639afc68b38774843a","isMergeCommit":true,"messageTitle":"Merge pull request #1 from nubnubyas/branch-Level-7","messageBody":"Merge branch-Level-7","fileTypesAndContributionMap":{}},{"hash":"10716808f61deb2e99433e0333bcb3cabf69299e","isMergeCommit":false,"messageTitle":"Add Level-7 Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":25}}},{"hash":"d8ac3948c5674f229ea32f5148bab2d7bea3d751","isMergeCommit":true,"messageTitle":"Merge pull request #2 from nubnubyas/branch-Level-7","messageBody":"Merge Level-7 Save","fileTypesAndContributionMap":{}},{"hash":"16329e58f4446d261cfadd400df26fbad8c00e66","isMergeCommit":false,"messageTitle":"Add Level-8 Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":36,"deletions":8}}},{"hash":"5b7353e0e33ce898d92ab1444474fbba346b38cc","isMergeCommit":true,"messageTitle":"Merge pull request #3 from nubnubyas/branch-Level-8","messageBody":"Merge Level-8 Dates and Times","fileTypesAndContributionMap":{}},{"hash":"a8a7065dfd37e9b142bd7537264c5ee50f8a8d01","isMergeCommit":false,"messageTitle":"Complete A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":149,"deletions":148}}}]},{"date":"2023-08-31","commitResults":[{"hash":"9dd697985f8ef016a7415c2719bfe9e2dd14ac80","isMergeCommit":true,"messageTitle":"Merge pull request #4 from nubnubyas/branch-A-MoreOOP","messageBody":"Merge A-MoreOOP","fileTypesAndContributionMap":{}},{"hash":"9524baae4a7bbc02c84547de88e2338ea45eb5fb","isMergeCommit":false,"messageTitle":"Complete A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":39,"deletions":1}}},{"hash":"fe9e10affdb152e5a92eaa31e40843642f283eec","isMergeCommit":true,"messageTitle":"Merge pull request #5 from nubnubyas/branch-A-Packages","messageBody":"Merge A-Packages","fileTypesAndContributionMap":{}},{"hash":"e3b53ba860086a04a2235b3a4cdbbcc46791e73e","isMergeCommit":true,"messageTitle":"Merge pull request #6 from nubnubyas/add-gradle-support","messageBody":"Add gradle support","fileTypesAndContributionMap":{}},{"hash":"697fc69e6fa726c6292a9985ac2c5cf9562dacac","isMergeCommit":false,"messageTitle":"Use Gradle to run Duke","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"82f63ac075b1caabe3a520a71ce4815f79e95ab3","isMergeCommit":true,"messageTitle":"Merge pull request #7 from nubnubyas/branch-A-Gradle","messageBody":"Merge A gradle","fileTypesAndContributionMap":{}},{"hash":"1829f90b2bb979afe8ded9cc08b6b2e665920245","isMergeCommit":false,"messageTitle":"Use Gradle to run Duke","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":29,"deletions":27}}},{"hash":"88fb9c7e263255b4b2e37a4d4d0abbfce10d24a7","isMergeCommit":true,"messageTitle":"Merge pull request #8 from nubnubyas/branch-A-Gradle","messageBody":"Use Gradle to run Duke","fileTypesAndContributionMap":{}},{"hash":"481084bf6b0dc9edfef2538d30872a80a20f71b0","isMergeCommit":false,"messageTitle":"Add JUnit Test for ToDo and DateFormatter","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":12}}},{"hash":"ee8f8b994f1d6d6d3264d68dc6c3cc8bcb2d1869","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"04eb079b8429c740e1a99238759e5212e8073ed4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/nubnubyas/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4f056b112f4a768fa2e7b1fb0f9e6348bce5edd0","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":36}}},{"hash":"05217cfd1bbe710092443b58ea1cb0e71a5b9eca","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":93}}},{"hash":"3a2b7a25dd7493dd1ffdd4a12ce0279d3800879e","isMergeCommit":false,"messageTitle":"Modify code to follow Java Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":76}}}]},{"date":"2023-09-01","commitResults":[{"hash":"93c5d02f3858e5cdec0398e6346fa94a33b31f1d","isMergeCommit":false,"messageTitle":"Modify code to follow Java Coding Standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"24f7fb21eeecc71dcc6fed646fe7af36586aadab","isMergeCommit":false,"messageTitle":"Add find task function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":114,"deletions":72}}},{"hash":"eb9f4bf0a55728f96af6bf817fe48f34b9833450","isMergeCommit":false,"messageTitle":"Add JavaDoc for functions and classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"c40cf05802c125512e7e6cf33e1b0d9e573b7402","isMergeCommit":false,"messageTitle":"Add find task function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":8}}},{"hash":"351f176784330376315b94625c02bfc82732ecd1","isMergeCommit":false,"messageTitle":"Modify storage","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"79f7b0e5a045728d068c567660df65b51456b9e6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"026cb7c86dbf9fe85688c8965c888533e9f34535","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"79cbc9412e6593c9d13e8d1974629d44ccf229a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7dd207e5b7838a8e3b77e0129b87f7619070099e","isMergeCommit":false,"messageTitle":"Add find function to find according to keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":15}}},{"hash":"070daebca55eb98c73de61213632f503e1d44321","isMergeCommit":false,"messageTitle":"Add find function to find according to keyword","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"639233b2c2c1e455591a371a3836fa856556957f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"5143718c73841af245acf52b251d7742203615ce","isMergeCommit":false,"messageTitle":"Add checkstyle to gradle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":87,"deletions":77}}}]}]},"authorFileTypeContributionMap":{"nubnubyas":{"java":768,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":6,"txt":12}},"authorContributionVariance":{"nubnubyas":44077.316},"authorDisplayNameMap":{"nubnubyas":"CS2103T-T14-3 ZHAN..HENG"}} diff --git a/oeggy03_ip_master/authorship.json b/oeggy03_ip_master/authorship.json index 74166895..5edba385 100644 --- a/oeggy03_ip_master/authorship.json +++ b/oeggy03_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/data/memory.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"Todo,hello,false","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"Todo,hello,false","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":2}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"import Storage.Dbops;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"import LogicHandlers.CentralCommandHandler;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" private static TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" private static CentralCommandHandler commandHandler;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" * Initializes the bot.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" private static void initializeBot() {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" Duke.tasks \u003d Dbops.initializeDatabase();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" Duke.commandHandler \u003d CentralCommandHandler.initializeCommandHandler(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" Duke.initializeBot();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" String introduction \u003d \" Hello! I\u0027m EGGBOT!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" \" Type \u0027help\u0027 to show available commands!\";","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(introduction);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" while (true) {","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" System.out.println(\"Please type a command, or type \u0027help\u0027 to show available commands:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" String input \u003d scanner.nextLine().strip(); // Read input","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" Duke.commandHandler.parseInput(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":4,"oeggy03":33}},{"path":"src/main/java/Exceptions/DukeCorruptedDataException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public class DukeCorruptedDataException extends Exception{","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" public DukeCorruptedDataException(String errorString) {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":" super(errorString);","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"oeggy03":8}},{"path":"src/main/java/Exceptions/DukeInvalidDateTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public class DukeInvalidDateTimeException extends Exception{","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":" public DukeInvalidDateTimeException(String errorString) {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" super(errorString);","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":7}},{"path":"src/main/java/Exceptions/DukeInvalidFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public class DukeInvalidFormatException extends Exception{","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":" public DukeInvalidFormatException(String errorString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" super(errorString);","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"oeggy03":7}},{"path":"src/main/java/Exceptions/DukeInvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public class DukeInvalidIndexException extends Exception{","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":" public DukeInvalidIndexException(String errorString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" super(errorString);","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"oeggy03":7}},{"path":"src/main/java/LogicHandlers/CentralCommandHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import LogicHandlers.CommandHandlers.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" * Handles and parses all user input, and assigns each command to a valid handler.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"public class CentralCommandHandler {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":" private static final HashMap\u003cString, Command\u003e COMMAND_MAP \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" private CentralCommandHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"todo\", new TodoHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"deadline\", new DeadlineHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"event\", new EventHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"bye\", new ExitHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"exit\", new ExitHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"list\", new ListTasksHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"mark\", new MarkCommandHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"unmark\", new UnmarkCommandHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"delete\", new DeleteHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"help\", new HelpCommandHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" public static CentralCommandHandler initializeCommandHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" return new CentralCommandHandler(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" public void parseInput(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" String[] splitInput \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" // The command inputted.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" String command \u003d splitInput[0].strip();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":" if (!COMMAND_MAP.containsKey(command)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":" InvalidInputHandler invalidHandler \u003d new InvalidInputHandler(this.tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" invalidHandler.parseCommandContent(\"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":" Command commandHandler\u003d COMMAND_MAP.get(command);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":" if (splitInput.length \u003c 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":" commandHandler.parseCommandContent(\"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":" commandHandler.parseCommandContent(splitInput[1].strip());","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":53}},{"path":"src/main/java/LogicHandlers/CommandHandlers/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public interface Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input, that succeeds the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" void parseCommandContent(String commandContent);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":11}},{"path":"src/main/java/LogicHandlers/CommandHandlers/DeadlineHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidDateTimeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidFormatException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import Models.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"import static LogicHandlers.Parsers.DateTimeParser.parseDateTimeFromString;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"import static Ui.ErrorOutputPrinter.printErrorOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" * DeadlineHandler handles all \u0027deadline\u0027 commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":"public class DeadlineHandler implements Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" * Constructor for DeadlineHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" public DeadlineHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" if (commandContent.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"You cannot add an empty \u0027Deadline\u0027 task!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" String[] taskArr \u003d commandContent.split(\"/\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":" if (taskArr.length !\u003d 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" String errorStr \u003d \"\\nFormat for Deadline task incorrect!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" \"Expected 2 parts (Task name \u0026 deadline) in input, got \" + taskArr.length;","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" throw new DukeInvalidFormatException(errorStr);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":" tasks.addTask(new Deadline(taskArr[0].strip(),","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":" false, parseDateTimeFromString(taskArr[1].strip())));","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":" String output \u003d \"Got it, I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":" tasks.get(tasks.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":" \"You now have \" + tasks.size() + \" tasks in the list\";","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"oeggy03"},"content":" } catch (DukeInvalidFormatException | DukeInvalidDateTimeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"oeggy03"},"content":" String errorString \u003d \"Something went wrong! Please format the task properly and add it again. \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"oeggy03"},"content":" \"Error: \" + e;","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(errorString);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":63}},{"path":"src/main/java/LogicHandlers/CommandHandlers/DeleteHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidIndexException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"import static Ui.ErrorOutputPrinter.printErrorOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" * DeleteHandler handles all \u0027delete\u0027 commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":"public class DeleteHandler implements Command{","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" * Constructor for DeleteHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" public DeleteHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" if (commandContent.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"Please specify a task to delete!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" // Regex to tell if content is an integer","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":" Pattern intPattern \u003d Pattern.compile(\"^\\\\d+$\");","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":" Matcher matcher \u003d intPattern.matcher(commandContent);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" throw new DukeInvalidIndexException(\"Invalid task index! Please try again.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":" int index \u003d Integer.parseInt(commandContent) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":" if (index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"Task \" + (index + 1) + \" not found!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":" String output \u003d \"Noted, I\u0027ve removed this task: \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"oeggy03"},"content":" tasks.get(index) + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"oeggy03"},"content":" \"You now have \" + (tasks.size() - 1) + \" tasks in the list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"oeggy03"},"content":" tasks.deleteTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"oeggy03"},"content":" } catch (DukeInvalidIndexException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(e.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":64}},{"path":"src/main/java/LogicHandlers/CommandHandlers/EventHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidDateTimeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidFormatException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import Models.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"import static LogicHandlers.Parsers.DateTimeParser.parseDateTimeFromString;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"import static Ui.ErrorOutputPrinter.printErrorOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" * EventHandler handles all \u0027event\u0027 commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":"public class EventHandler implements Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" * Constructor for EventHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" public EventHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" if (commandContent.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"You cannot add an empty \u0027Event\u0027 task!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":" String[] taskArr \u003d commandContent.split(\"/\", 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" if (taskArr.length !\u003d 3) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" String errorStr \u003d \"\\nFormat for Event task incorrect!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" \"Expected 3 parts (Task name, start \u0026 end time) in input, got \" + taskArr.length;","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":" throw new DukeInvalidFormatException(errorStr);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":" tasks.addTask(new Event(taskArr[0].strip(), false,","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":" parseDateTimeFromString(taskArr[1].strip()), parseDateTimeFromString(taskArr[2].strip())));","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":" String output \u003d \"Got it, I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":" tasks.get(tasks.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"oeggy03"},"content":" \"You now have \" + tasks.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"oeggy03"},"content":" } catch (DukeInvalidFormatException | DukeInvalidDateTimeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"oeggy03"},"content":" String errorString \u003d \"Something went wrong! Please format the task properly and add it again. \\n\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"oeggy03"},"content":" \"Error: \" + e;","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(errorString);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":64}},{"path":"src/main/java/LogicHandlers/CommandHandlers/ExitHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import static java.lang.System.exit;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" * ExitHandler handles all exit commands (i.e. bye, exit).","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"public class ExitHandler implements Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" * Constructor for ExitHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" public ExitHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" exit(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":35}},{"path":"src/main/java/LogicHandlers/CommandHandlers/HelpCommandHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" * HelpCommandHandler handles all \u0027help\u0027 commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"public class HelpCommandHandler implements Command{","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" * Constructor for HelpCommandHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" public HelpCommandHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" * Returns the help message.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" * commandContent here is redundant.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" String help \u003d \" Hello! I\u0027m EGGBOT!\\n\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" \" Adding of tasks:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" \" ToDo task: \u0027todo [Task]\u0027\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" \" Deadline task: \u0027deadline [Task /Deadline (dd-mm-yyyy hhmm)]\u0027\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" \" Event task: \u0027event [Task /Start Date (dd-mm-yyyy hhmm)/End Date (dd-mm-yyyy hhmm)]\u0027\\n\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" \" Other commands:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" \" To view tasks, type \u0027list\u0027 \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" \" To mark a task as \u0027done\u0027, type \u0027mark [index]\u0027 \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" \" To mark a task as \u0027undone\u0027, type \u0027unmark [index]\u0027 \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":" \" To delete a task, type \u0027delete [index]\u0027 \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":" \" To view a list of commands, type \u0027help\u0027 \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" \" To exit, type \u0027bye\u0027 or \u0027exit\u0027\";","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(help);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":46}},{"path":"src/main/java/LogicHandlers/CommandHandlers/InvalidInputHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import static Ui.ErrorOutputPrinter.printErrorOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" * InvalidInputHandler handles all \u0027todo\u0027 commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"public class InvalidInputHandler implements Command{","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" * Constructor for InvalidInputHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" public InvalidInputHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" * Replies to the invalid command.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" * commandContent is redundant as command is invalid.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"Not a valid command!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":32}},{"path":"src/main/java/LogicHandlers/CommandHandlers/ListTasksHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" * ListTasksHandler handles all list commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"public class ListTasksHandler implements Command{","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" * Constructor for ListTasksHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" public ListTasksHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(\"You have no tasks!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" String output \u003d \"Your tasks: \\n\" + this.tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":37}},{"path":"src/main/java/LogicHandlers/CommandHandlers/MarkCommandHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidIndexException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"import static Ui.ErrorOutputPrinter.printErrorOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" * MarkCommandHandler handles all mark commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":"public class MarkCommandHandler implements Command{","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" * Constructor for MarkCommandHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" public MarkCommandHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" if (commandContent.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"You cannot mark an empty task!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" int index;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" // Regex to tell if content is an integer","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" Pattern intPattern \u003d Pattern.compile(\"^\\\\d+$\");","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" Matcher matcher \u003d intPattern.matcher(commandContent);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":" throw new DukeInvalidIndexException(\"Invalid task index! Please try again.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":" index \u003d Integer.parseInt(commandContent) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":" if (index \u003e\u003d tasks.size() || index \u003c 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"Task \" + (index + 1) + \" not found!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"oeggy03"},"content":" tasks.markTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"oeggy03"},"content":" String output \u003d \"Nice! I\u0027ve marked this task as done: \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"oeggy03"},"content":" tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"oeggy03"},"content":" } catch (DukeInvalidIndexException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(e.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":67}},{"path":"src/main/java/LogicHandlers/CommandHandlers/TodoHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"import Models.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"import static Ui.ErrorOutputPrinter.printErrorOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" * TodoHandler handles all \u0027todo\u0027 commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"public class TodoHandler implements Command{","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" * Constructor for TodoHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" public TodoHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" if (commandContent.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"You cannot add an empty \u0027ToDo\u0027 task!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" tasks.addTask(new ToDo(commandContent, false));","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" String output \u003d \"Got it, I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" tasks.get(tasks.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":" \"You now have \" + tasks.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":44}},{"path":"src/main/java/LogicHandlers/CommandHandlers/UnmarkCommandHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidIndexException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"import static Ui.ErrorOutputPrinter.printErrorOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" * UnmarkCommandHandler handles all mark commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":"public class UnmarkCommandHandler implements Command{","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" * Constructor for UnmarkCommandHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" public UnmarkCommandHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" if (commandContent.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"You cannot unmark an empty task!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" int index;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" // Regex to tell if content is an integer","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" Pattern intPattern \u003d Pattern.compile(\"^\\\\d+$\");","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" Matcher matcher \u003d intPattern.matcher(commandContent);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":" throw new DukeInvalidIndexException(\"Invalid task index! Please try again.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":" index \u003d Integer.parseInt(commandContent) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":" if (index \u003e\u003d tasks.size() || index \u003c 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"Task \" + (index + 1) + \" not found!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"oeggy03"},"content":" tasks.unmarkTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"oeggy03"},"content":" String output \u003d \"OK, I\u0027ve marked this task as not done yet: \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"oeggy03"},"content":" tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"oeggy03"},"content":" } catch (DukeInvalidIndexException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(e.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":68}},{"path":"src/main/java/LogicHandlers/Parsers/DateTimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.Parsers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidDateTimeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" * This class parses datetimes in String and returns them in DateTime formats.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"public class DateTimeParser {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" private static DateTimeFormatter dateTimeFormatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy Hmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" private static DateTimeFormatter outputDateTimeFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mm a\");","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" * Parses a String into a LocalDateTime format for storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" * @param dateTimeString The string.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" * @return The string parsed into a LocalDateTime.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" * @throws DukeInvalidDateTimeException In the event where the String is in the incorrect format.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" public static LocalDateTime parseDateTimeFromString(String dateTimeString) throws DukeInvalidDateTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" return LocalDateTime.parse(dateTimeString, dateTimeFormatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" throw new DukeInvalidDateTimeException(\"Invalid date and time format! Please try again.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" * Parses a LocalDateTime into a String format for storage in memory.txt.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" * @param dateTime The LocalDateTime.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" * @return A String based on the LocalDateTime.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" public static String parseStringFromDateTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" return dateTime.format(dateTimeFormatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" * Parses a LocalDateTime into a String format for outputting.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":" * @param dateTime The LocalDateTime.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":" * @return A String based on the LocalDateTime.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":" public static String parseDateTimeForOutput(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":" return dateTime.format(outputDateTimeFormatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":51}},{"path":"src/main/java/Models/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Models;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import static LogicHandlers.Parsers.DateTimeParser.parseDateTimeForOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import static LogicHandlers.Parsers.DateTimeParser.parseStringFromDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" LocalDateTime endTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" public Deadline(String name, Boolean marked, LocalDateTime endTime) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" super(name, marked);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" public String getTaskDetails() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" return \"Deadline,\" + this.name + \",\" + this.isMarked + \",\" + parseStringFromDateTime(this.endTime);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" if (this.isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" return \"[D][X] \" + this.name +","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" \" (by: \" + parseDateTimeForOutput(this.endTime) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" return \"[D][ ] \" + this.name +","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" \" (by: \" + parseDateTimeForOutput(this.endTime) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"oeggy03":30}},{"path":"src/main/java/Models/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Models;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import static LogicHandlers.Parsers.DateTimeParser.parseDateTimeForOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import static LogicHandlers.Parsers.DateTimeParser.parseStringFromDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" LocalDateTime startTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" LocalDateTime endTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" public Event(String name, Boolean marked, LocalDateTime startTime, LocalDateTime endTime) {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":" super(name, marked);","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" public String getTaskDetails() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" return \"Event,\" + this.name + \",\" + this.isMarked + \",\"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" + parseStringFromDateTime(this.startTime) + \",\" + parseStringFromDateTime(this.endTime);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" if (this.isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" return \"[E][X] \" + this.name +","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" \" (from: \" + parseDateTimeForOutput(this.startTime) +","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" \" to: \" + parseDateTimeForOutput(this.endTime) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" return \"[E][ ] \" + this.name +","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" \" (from: \" + parseDateTimeForOutput(this.startTime) +","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" \" to: \" + parseDateTimeForOutput(this.endTime) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"oeggy03":35}},{"path":"src/main/java/Models/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Models;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":" Boolean isMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" String name;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":" public Task(String name, Boolean marked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" this.isMarked \u003d marked;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" this.isMarked \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" this.isMarked \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" public String getTaskDetails() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" return \"Model.Task,\" + this.name + \",\" + this.isMarked;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" if (this.isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" return \"[X] \" + this.name;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" return \"[ ] \" + this.name;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"oeggy03":31}},{"path":"src/main/java/Models/TaskArray.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Models;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import static Storage.Dbops.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" * TaskArray is used to store tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"public class TaskArray extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" * Constructor for a new TaskArray.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" public TaskArray() {}","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" * Checks if TaskArray is empty.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" * @return Whether TaskArray is empty","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" return super.isEmpty();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" * Adds a task to this TaskArray.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" this.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" // Save tasks to file whenever the list changes","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" saveTasksToFile(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":" * Deletes a task from this TaskArray.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":" this.remove(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":" // Save tasks to file whenever the list changes","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":" saveTasksToFile(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":" * Marks a task, given its index.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"oeggy03"},"content":" * @param index The index of the task to be marked.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"oeggy03"},"content":" public void markTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"oeggy03"},"content":" this.get(index).markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"oeggy03"},"content":" saveTasksToFile(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"oeggy03"},"content":" * Unmarks a task, given its index.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"oeggy03"},"content":" * @param index The index of the task to be unmarked.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"oeggy03"},"content":" public void unmarkTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"oeggy03"},"content":" this.get(index).markAsUndone();","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"oeggy03"},"content":" saveTasksToFile(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"oeggy03"},"content":" public void modifyTask(int index, Task modifiedTask) {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"oeggy03"},"content":" * Returns a String of all tasks in this TaskArray.","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"oeggy03"},"content":" * @return All tasks in TaskArray.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"oeggy03"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"oeggy03"},"content":" // Display the list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"oeggy03"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"oeggy03"},"content":" for (int i \u003d 0; i \u003c this.size(); i ++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"oeggy03"},"content":" output.append(i + 1).append(\". \").append(this.get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"oeggy03"},"content":" return String.valueOf(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":89}},{"path":"src/main/java/Models/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Models;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":" public ToDo(String name, Boolean marked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" super(name, marked);","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" public String getTaskDetails() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" return \"Todo,\" + this.name + \",\" + this.isMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" if (this.isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" return \"[T][X] \" + this.name;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" return \"[T][ ] \" + this.name;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"oeggy03":21}},{"path":"src/main/java/Storage/Dbops.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeCorruptedDataException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidDateTimeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import Models.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"import java.io.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"import static LogicHandlers.Parsers.DateTimeParser.parseDateTimeFromString;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"import static Ui.ErrorOutputPrinter.printErrorOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":"import static java.lang.System.exit;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" * Dbops (Database Operations) Class:","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" * Handles all writing and retrieval from the database, memory.txt.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":"public class Dbops {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" * A constant that holds the path to the memory file.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" private static final String FILEPATH \u003d \"src/data/\";","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" * A constant that holds the name of the memory file.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" private static final String FILENAME \u003d \"memory.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" * Initializes the Task Array and loads data from memory file, or initializes a memory file if not found.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" * @return The initialized TaskArray.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" public static TaskArray initializeDatabase() {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" TaskArray tasks \u003d new TaskArray();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" loadTasksFromFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" * Creates the memory file, based on the filepath and filename.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":" private static void createMemoryFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":" File newFile \u003d new File(Dbops.FILEPATH + Dbops.FILENAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":" if (newFile.createNewFile()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":" System.out.println(\"Memory file created successfully.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"oeggy03"},"content":" System.err.println(\"Memory file already exists.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"oeggy03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"An error occurred while creating memory file: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"oeggy03"},"content":" exit(1);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"oeggy03"},"content":" * Deletes the memory file, based on the filepath and filename.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"oeggy03"},"content":" private static void deleteMemoryFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"oeggy03"},"content":" File fileToDelete \u003d new File(Dbops.FILEPATH + Dbops.FILENAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"oeggy03"},"content":" if (fileToDelete.delete()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"oeggy03"},"content":" System.out.println(\"Old memory file deleted successfully.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"oeggy03"},"content":" System.err.println(\"Failed to delete the old memory file.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"oeggy03"},"content":" * Loads tasks from the memory file.","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"oeggy03"},"content":" * @param taskArray The TaskArray to load the tasks into.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"oeggy03"},"content":" public static void loadTasksFromFile(TaskArray taskArray) {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"oeggy03"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(Dbops.FILEPATH + Dbops.FILENAME))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"oeggy03"},"content":" String line;","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"oeggy03"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"oeggy03"},"content":" // Create Task from each line and add them to the list","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"oeggy03"},"content":" String[] parts \u003d line.split(\",\");","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"oeggy03"},"content":" boolean isMarked \u003d Objects.equals(parts[2], \"true\");","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"oeggy03"},"content":" if (Objects.equals(parts[0], \"Todo\") \u0026\u0026 parts.length \u003d\u003d 3) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"oeggy03"},"content":" taskArray.add(new ToDo(parts[1], isMarked));","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"oeggy03"},"content":" } else if (Objects.equals(parts[0], \"Deadline\") \u0026\u0026 parts.length \u003d\u003d 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"oeggy03"},"content":" taskArray.add(new Deadline(parts[1], isMarked, parseDateTimeFromString(parts[3])));","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"oeggy03"},"content":" } else if (Objects.equals(parts[0], \"Event\") \u0026\u0026 parts.length \u003d\u003d 5) {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"oeggy03"},"content":" taskArray.add(new Event(parts[1], isMarked, parseDateTimeFromString(parts[3]), parseDateTimeFromString(parts[4])));","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"oeggy03"},"content":" throw new DukeCorruptedDataException(\"Error: file is corrupted. Failed to load data from file.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"oeggy03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"oeggy03"},"content":" String output \u003d \"File not found: \" + Dbops.FILENAME + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"oeggy03"},"content":" \"If this is your first day, welcome!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"oeggy03"},"content":" \"A new memory file, \" + Dbops.FILENAME + \" has been created.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"oeggy03"},"content":" Dbops.createMemoryFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"oeggy03"},"content":" } catch (DukeCorruptedDataException | DukeInvalidDateTimeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(e + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"oeggy03"},"content":" Dbops.deleteMemoryFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"oeggy03"},"content":" Dbops.createMemoryFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(\"A new memory file, \" + Dbops.FILENAME + \" has been created.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"oeggy03"},"content":" * Saves all tasks to the memory file.","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"oeggy03"},"content":" * @param taskArray The TaskArray to load the tasks from.","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"oeggy03"},"content":" public static void saveTasksToFile(TaskArray taskArray) {","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"oeggy03"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(Dbops.FILEPATH + Dbops.FILENAME))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"oeggy03"},"content":" for (Task task : taskArray) {","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"oeggy03"},"content":" // Format and write each task to the file","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"oeggy03"},"content":" writer.write(task.getTaskDetails());","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"oeggy03"},"content":" writer.newLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"oeggy03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"Error saving tasks to memory file: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":128}},{"path":"src/main/java/Ui/BasicOutputPrinter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public class BasicOutputPrinter {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":" public static void printBasicOutput(String output) {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" System.out.println(\"_______________________________ EGGBOT: _______________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":" output +","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":" \"\\n_______________________________________________________________________\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":9}},{"path":"src/main/java/Ui/ErrorOutputPrinter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public class ErrorOutputPrinter {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":" public static void printErrorOutput(String output) {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" System.err.println(\"_______________________________ ERROR!: _______________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":" output +","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":" \"\\n_______________________________________________________________________\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":9}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"todo hello","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"event Graduation / Monday 2pm / Tuesday 3pm","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"deadline Finish EGGBOT / tmr 3pm","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"mark 3","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"unmark 3","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"event Swim/6pm","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"delete 2","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"oeggy03":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"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":{"-":20,"oeggy03":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":"oeggy03"},"content":" mainClass.set(\"Duke\")","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"oeggy03":1}},{"path":"src/data/memory.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"Todo,hello,false","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"Todo,hello,false","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":2}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"import Storage.Dbops;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"import LogicHandlers.CentralCommandHandler;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" private static TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" private static CentralCommandHandler commandHandler;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" * Initializes the bot.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" private static void initializeBot() {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" Duke.tasks \u003d Dbops.initializeDatabase();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" Duke.commandHandler \u003d CentralCommandHandler.initializeCommandHandler(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" Duke.initializeBot();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" String introduction \u003d \" Hello! I\u0027m EGGBOT!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" \" Type \u0027help\u0027 to show available commands!\";","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(introduction);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" while (true) {","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" System.out.println(\"Please type a command, or type \u0027help\u0027 to show available commands:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" String input \u003d scanner.nextLine().strip(); // Read input","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" Duke.commandHandler.parseInput(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":4,"oeggy03":33}},{"path":"src/main/java/Exceptions/DukeCorruptedDataException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public class DukeCorruptedDataException extends Exception{","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" public DukeCorruptedDataException(String errorString) {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":" super(errorString);","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"oeggy03":8}},{"path":"src/main/java/Exceptions/DukeInvalidDateTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public class DukeInvalidDateTimeException extends Exception{","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":" public DukeInvalidDateTimeException(String errorString) {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" super(errorString);","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":7}},{"path":"src/main/java/Exceptions/DukeInvalidFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public class DukeInvalidFormatException extends Exception{","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":" public DukeInvalidFormatException(String errorString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" super(errorString);","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"oeggy03":7}},{"path":"src/main/java/Exceptions/DukeInvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public class DukeInvalidIndexException extends Exception{","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":" public DukeInvalidIndexException(String errorString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" super(errorString);","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"oeggy03":7}},{"path":"src/main/java/LogicHandlers/CentralCommandHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import LogicHandlers.CommandHandlers.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" * Handles and parses all user input, and assigns each command to a valid handler.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"public class CentralCommandHandler {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":" private static final HashMap\u003cString, Command\u003e COMMAND_MAP \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" private CentralCommandHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"todo\", new TodoHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"deadline\", new DeadlineHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"event\", new EventHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"bye\", new ExitHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"exit\", new ExitHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"list\", new ListTasksHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"mark\", new MarkCommandHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"unmark\", new UnmarkCommandHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"delete\", new DeleteHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" COMMAND_MAP.put(\"help\", new HelpCommandHandler(this.tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" public static CentralCommandHandler initializeCommandHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" return new CentralCommandHandler(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" public void parseInput(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" String[] splitInput \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" // The command inputted.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" String command \u003d splitInput[0].strip();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":" if (!COMMAND_MAP.containsKey(command)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":" InvalidInputHandler invalidHandler \u003d new InvalidInputHandler(this.tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" invalidHandler.parseCommandContent(\"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":" Command commandHandler\u003d COMMAND_MAP.get(command);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":" if (splitInput.length \u003c 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":" commandHandler.parseCommandContent(\"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":" commandHandler.parseCommandContent(splitInput[1].strip());","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":53}},{"path":"src/main/java/LogicHandlers/CommandHandlers/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public interface Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input, that succeeds the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" void parseCommandContent(String commandContent);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":11}},{"path":"src/main/java/LogicHandlers/CommandHandlers/DeadlineHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidDateTimeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidFormatException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import Models.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"import static LogicHandlers.Parsers.DateTimeParser.parseDateTimeFromString;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"import static Ui.ErrorOutputPrinter.printErrorOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" * DeadlineHandler handles all \u0027deadline\u0027 commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":"public class DeadlineHandler implements Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" * Constructor for DeadlineHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" public DeadlineHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" if (commandContent.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"You cannot add an empty \u0027Deadline\u0027 task!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" String[] taskArr \u003d commandContent.split(\"/\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":" if (taskArr.length !\u003d 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" String errorStr \u003d \"\\nFormat for Deadline task incorrect!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" \"Expected 2 parts (Task name \u0026 deadline) in input, got \" + taskArr.length;","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" throw new DukeInvalidFormatException(errorStr);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":" tasks.addTask(new Deadline(taskArr[0].strip(),","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":" false, parseDateTimeFromString(taskArr[1].strip())));","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":" String output \u003d \"Got it, I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":" tasks.get(tasks.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":" \"You now have \" + tasks.size() + \" tasks in the list\";","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"oeggy03"},"content":" } catch (DukeInvalidFormatException | DukeInvalidDateTimeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"oeggy03"},"content":" String errorString \u003d \"Something went wrong! Please format the task properly and add it again. \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"oeggy03"},"content":" \"Error: \" + e;","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(errorString);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":63}},{"path":"src/main/java/LogicHandlers/CommandHandlers/DeleteHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidIndexException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"import static Ui.ErrorOutputPrinter.printErrorOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" * DeleteHandler handles all \u0027delete\u0027 commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":"public class DeleteHandler implements Command{","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" * Constructor for DeleteHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" public DeleteHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" if (commandContent.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"Please specify a task to delete!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" // Regex to tell if content is an integer","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":" Pattern intPattern \u003d Pattern.compile(\"^\\\\d+$\");","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":" Matcher matcher \u003d intPattern.matcher(commandContent);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" throw new DukeInvalidIndexException(\"Invalid task index! Please try again.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":" int index \u003d Integer.parseInt(commandContent) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":" if (index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"Task \" + (index + 1) + \" not found!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":" String output \u003d \"Noted, I\u0027ve removed this task: \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"oeggy03"},"content":" tasks.get(index) + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"oeggy03"},"content":" \"You now have \" + (tasks.size() - 1) + \" tasks in the list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"oeggy03"},"content":" tasks.deleteTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"oeggy03"},"content":" } catch (DukeInvalidIndexException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(e.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":64}},{"path":"src/main/java/LogicHandlers/CommandHandlers/EventHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidDateTimeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidFormatException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import Models.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"import static LogicHandlers.Parsers.DateTimeParser.parseDateTimeFromString;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"import static Ui.ErrorOutputPrinter.printErrorOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" * EventHandler handles all \u0027event\u0027 commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":"public class EventHandler implements Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" * Constructor for EventHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" public EventHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" if (commandContent.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"You cannot add an empty \u0027Event\u0027 task!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":" String[] taskArr \u003d commandContent.split(\"/\", 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" if (taskArr.length !\u003d 3) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" String errorStr \u003d \"\\nFormat for Event task incorrect!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" \"Expected 3 parts (Task name, start \u0026 end time) in input, got \" + taskArr.length;","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":" throw new DukeInvalidFormatException(errorStr);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":" tasks.addTask(new Event(taskArr[0].strip(), false,","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":" parseDateTimeFromString(taskArr[1].strip()), parseDateTimeFromString(taskArr[2].strip())));","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":" String output \u003d \"Got it, I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":" tasks.get(tasks.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"oeggy03"},"content":" \"You now have \" + tasks.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"oeggy03"},"content":" } catch (DukeInvalidFormatException | DukeInvalidDateTimeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"oeggy03"},"content":" String errorString \u003d \"Something went wrong! Please format the task properly and add it again. \\n\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"oeggy03"},"content":" \"Error: \" + e;","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(errorString);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":64}},{"path":"src/main/java/LogicHandlers/CommandHandlers/ExitHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import static java.lang.System.exit;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" * ExitHandler handles all exit commands (i.e. bye, exit).","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"public class ExitHandler implements Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" * Constructor for ExitHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" public ExitHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" exit(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":35}},{"path":"src/main/java/LogicHandlers/CommandHandlers/HelpCommandHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" * HelpCommandHandler handles all \u0027help\u0027 commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"public class HelpCommandHandler implements Command{","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" * Constructor for HelpCommandHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" public HelpCommandHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" * Returns the help message.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" * commandContent here is redundant.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" String help \u003d \" Hello! I\u0027m EGGBOT!\\n\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" \" Adding of tasks:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" \" ToDo task: \u0027todo [Task]\u0027\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" \" Deadline task: \u0027deadline [Task /Deadline (dd-mm-yyyy hhmm)]\u0027\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" \" Event task: \u0027event [Task /Start Date (dd-mm-yyyy hhmm)/End Date (dd-mm-yyyy hhmm)]\u0027\\n\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" \" Other commands:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" \" To view tasks, type \u0027list\u0027 \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" \" To mark a task as \u0027done\u0027, type \u0027mark [index]\u0027 \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" \" To mark a task as \u0027undone\u0027, type \u0027unmark [index]\u0027 \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":" \" To delete a task, type \u0027delete [index]\u0027 \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":" \" To view a list of commands, type \u0027help\u0027 \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" \" To exit, type \u0027bye\u0027 or \u0027exit\u0027\";","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(help);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":46}},{"path":"src/main/java/LogicHandlers/CommandHandlers/InvalidInputHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import static Ui.ErrorOutputPrinter.printErrorOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" * InvalidInputHandler handles all \u0027todo\u0027 commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"public class InvalidInputHandler implements Command{","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" * Constructor for InvalidInputHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" public InvalidInputHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" * Replies to the invalid command.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" * commandContent is redundant as command is invalid.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"Not a valid command!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":32}},{"path":"src/main/java/LogicHandlers/CommandHandlers/ListTasksHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" * ListTasksHandler handles all list commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"public class ListTasksHandler implements Command{","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" * Constructor for ListTasksHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" public ListTasksHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(\"You have no tasks!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" String output \u003d \"Your tasks: \\n\" + this.tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":37}},{"path":"src/main/java/LogicHandlers/CommandHandlers/MarkCommandHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidIndexException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"import static Ui.ErrorOutputPrinter.printErrorOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" * MarkCommandHandler handles all mark commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":"public class MarkCommandHandler implements Command{","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" * Constructor for MarkCommandHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" public MarkCommandHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" if (commandContent.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"You cannot mark an empty task!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" int index;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" // Regex to tell if content is an integer","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" Pattern intPattern \u003d Pattern.compile(\"^\\\\d+$\");","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" Matcher matcher \u003d intPattern.matcher(commandContent);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":" throw new DukeInvalidIndexException(\"Invalid task index! Please try again.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":" index \u003d Integer.parseInt(commandContent) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":" if (index \u003e\u003d tasks.size() || index \u003c 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"Task \" + (index + 1) + \" not found!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"oeggy03"},"content":" tasks.markTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"oeggy03"},"content":" String output \u003d \"Nice! I\u0027ve marked this task as done: \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"oeggy03"},"content":" tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"oeggy03"},"content":" } catch (DukeInvalidIndexException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(e.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":67}},{"path":"src/main/java/LogicHandlers/CommandHandlers/TodoHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"import Models.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"import static Ui.ErrorOutputPrinter.printErrorOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" * TodoHandler handles all \u0027todo\u0027 commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"public class TodoHandler implements Command{","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" * Constructor for TodoHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" public TodoHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" if (commandContent.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"You cannot add an empty \u0027ToDo\u0027 task!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" tasks.addTask(new ToDo(commandContent, false));","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" String output \u003d \"Got it, I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" tasks.get(tasks.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":" \"You now have \" + tasks.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":44}},{"path":"src/main/java/LogicHandlers/CommandHandlers/UnmarkCommandHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.CommandHandlers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidIndexException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"import Models.TaskArray;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"import static Ui.ErrorOutputPrinter.printErrorOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" * UnmarkCommandHandler handles all mark commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":"public class UnmarkCommandHandler implements Command{","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" private TaskArray tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" * Constructor for UnmarkCommandHandler.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" * @param tasks The TaskArray we are working with","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" public UnmarkCommandHandler(TaskArray tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" * Parses the content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" * @param commandContent The content of the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" public void parseCommandContent(String commandContent) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" if (commandContent.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"You cannot unmark an empty task!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" int index;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" // Regex to tell if content is an integer","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" Pattern intPattern \u003d Pattern.compile(\"^\\\\d+$\");","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" Matcher matcher \u003d intPattern.matcher(commandContent);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":" throw new DukeInvalidIndexException(\"Invalid task index! Please try again.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":" index \u003d Integer.parseInt(commandContent) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":" if (index \u003e\u003d tasks.size() || index \u003c 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"Task \" + (index + 1) + \" not found!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"oeggy03"},"content":" tasks.unmarkTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"oeggy03"},"content":" String output \u003d \"OK, I\u0027ve marked this task as not done yet: \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"oeggy03"},"content":" tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"oeggy03"},"content":" } catch (DukeInvalidIndexException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(e.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":68}},{"path":"src/main/java/LogicHandlers/Parsers/DateTimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package LogicHandlers.Parsers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidDateTimeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" * This class parses datetimes in String and returns them in DateTime formats.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"public class DateTimeParser {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" private static DateTimeFormatter dateTimeFormatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy Hmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" private static DateTimeFormatter outputDateTimeFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mm a\");","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" * Parses a String into a LocalDateTime format for storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" * @param dateTimeString The string.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" * @return The string parsed into a LocalDateTime.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" * @throws DukeInvalidDateTimeException In the event where the String is in the incorrect format.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" public static LocalDateTime parseDateTimeFromString(String dateTimeString) throws DukeInvalidDateTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" return LocalDateTime.parse(dateTimeString, dateTimeFormatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" throw new DukeInvalidDateTimeException(\"Invalid date and time format! Please try again.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" * Parses a LocalDateTime into a String format for storage in memory.txt.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" * @param dateTime The LocalDateTime.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" * @return A String based on the LocalDateTime.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" public static String parseStringFromDateTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" return dateTime.format(dateTimeFormatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" * Parses a LocalDateTime into a String format for outputting.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":" * @param dateTime The LocalDateTime.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":" * @return A String based on the LocalDateTime.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":" public static String parseDateTimeForOutput(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":" return dateTime.format(outputDateTimeFormatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":51}},{"path":"src/main/java/Models/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Models;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import static LogicHandlers.Parsers.DateTimeParser.parseDateTimeForOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import static LogicHandlers.Parsers.DateTimeParser.parseStringFromDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" LocalDateTime endTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" public Deadline(String name, Boolean marked, LocalDateTime endTime) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" super(name, marked);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" public String getTaskDetails() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" return \"Deadline,\" + this.name + \",\" + this.isMarked + \",\" + parseStringFromDateTime(this.endTime);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" if (this.isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" return \"[D][X] \" + this.name +","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" \" (by: \" + parseDateTimeForOutput(this.endTime) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" return \"[D][ ] \" + this.name +","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" \" (by: \" + parseDateTimeForOutput(this.endTime) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"oeggy03":30}},{"path":"src/main/java/Models/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Models;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import static LogicHandlers.Parsers.DateTimeParser.parseDateTimeForOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"import static LogicHandlers.Parsers.DateTimeParser.parseStringFromDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" LocalDateTime startTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" LocalDateTime endTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" public Event(String name, Boolean marked, LocalDateTime startTime, LocalDateTime endTime) {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":" super(name, marked);","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" public String getTaskDetails() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" return \"Event,\" + this.name + \",\" + this.isMarked + \",\"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" + parseStringFromDateTime(this.startTime) + \",\" + parseStringFromDateTime(this.endTime);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" if (this.isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" return \"[E][X] \" + this.name +","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" \" (from: \" + parseDateTimeForOutput(this.startTime) +","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" \" to: \" + parseDateTimeForOutput(this.endTime) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" return \"[E][ ] \" + this.name +","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" \" (from: \" + parseDateTimeForOutput(this.startTime) +","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" \" to: \" + parseDateTimeForOutput(this.endTime) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"oeggy03":35}},{"path":"src/main/java/Models/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Models;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":" Boolean isMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" String name;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":" public Task(String name, Boolean marked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" this.isMarked \u003d marked;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" this.isMarked \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" this.isMarked \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" public String getTaskDetails() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" return \"Model.Task,\" + this.name + \",\" + this.isMarked;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" if (this.isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" return \"[X] \" + this.name;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" return \"[ ] \" + this.name;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"oeggy03":31}},{"path":"src/main/java/Models/TaskArray.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Models;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import static Storage.Dbops.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" * TaskArray is used to store tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"public class TaskArray extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" * Constructor for a new TaskArray.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" public TaskArray() {}","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" * Checks if TaskArray is empty.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" * @return Whether TaskArray is empty","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" return super.isEmpty();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" * Adds a task to this TaskArray.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" this.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" // Save tasks to file whenever the list changes","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" saveTasksToFile(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":" * Deletes a task from this TaskArray.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":" this.remove(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":" // Save tasks to file whenever the list changes","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":" saveTasksToFile(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":" * Marks a task, given its index.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"oeggy03"},"content":" * @param index The index of the task to be marked.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"oeggy03"},"content":" public void markTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"oeggy03"},"content":" this.get(index).markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"oeggy03"},"content":" saveTasksToFile(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"oeggy03"},"content":" * Unmarks a task, given its index.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"oeggy03"},"content":" * @param index The index of the task to be unmarked.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"oeggy03"},"content":" public void unmarkTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"oeggy03"},"content":" this.get(index).markAsUndone();","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"oeggy03"},"content":" saveTasksToFile(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"oeggy03"},"content":" public void modifyTask(int index, Task modifiedTask) {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"oeggy03"},"content":" * Returns a String of all tasks in this TaskArray.","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"oeggy03"},"content":" * @return All tasks in TaskArray.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"oeggy03"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"oeggy03"},"content":" // Display the list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"oeggy03"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"oeggy03"},"content":" for (int i \u003d 0; i \u003c this.size(); i ++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"oeggy03"},"content":" output.append(i + 1).append(\". \").append(this.get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"oeggy03"},"content":" return String.valueOf(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":89}},{"path":"src/main/java/Models/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Models;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":" public ToDo(String name, Boolean marked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" super(name, marked);","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":" public String getTaskDetails() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":" return \"Todo,\" + this.name + \",\" + this.isMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":" if (this.isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" return \"[T][X] \" + this.name;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":" return \"[T][ ] \" + this.name;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"oeggy03":21}},{"path":"src/main/java/Storage/Dbops.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeCorruptedDataException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"import Exceptions.DukeInvalidDateTimeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"import Models.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"import java.io.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"oeggy03"},"content":"import static LogicHandlers.Parsers.DateTimeParser.parseDateTimeFromString;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"oeggy03"},"content":"import static Ui.BasicOutputPrinter.printBasicOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"oeggy03"},"content":"import static Ui.ErrorOutputPrinter.printErrorOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"oeggy03"},"content":"import static java.lang.System.exit;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"oeggy03"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"oeggy03"},"content":" * Dbops (Database Operations) Class:","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"oeggy03"},"content":" * Handles all writing and retrieval from the database, memory.txt.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"oeggy03"},"content":"public class Dbops {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"oeggy03"},"content":" * A constant that holds the path to the memory file.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"oeggy03"},"content":" private static final String FILEPATH \u003d \"src/data/\";","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"oeggy03"},"content":" * A constant that holds the name of the memory file.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"oeggy03"},"content":" private static final String FILENAME \u003d \"memory.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"oeggy03"},"content":" * Initializes the Task Array and loads data from memory file, or initializes a memory file if not found.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"oeggy03"},"content":" * @return The initialized TaskArray.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"oeggy03"},"content":" public static TaskArray initializeDatabase() {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"oeggy03"},"content":" TaskArray tasks \u003d new TaskArray();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"oeggy03"},"content":" loadTasksFromFile(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"oeggy03"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"oeggy03"},"content":" * Creates the memory file, based on the filepath and filename.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"oeggy03"},"content":" private static void createMemoryFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"oeggy03"},"content":" File newFile \u003d new File(Dbops.FILEPATH + Dbops.FILENAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"oeggy03"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"oeggy03"},"content":" if (newFile.createNewFile()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"oeggy03"},"content":" System.out.println(\"Memory file created successfully.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"oeggy03"},"content":" System.err.println(\"Memory file already exists.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"oeggy03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"An error occurred while creating memory file: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"oeggy03"},"content":" exit(1);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"oeggy03"},"content":" * Deletes the memory file, based on the filepath and filename.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"oeggy03"},"content":" private static void deleteMemoryFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"oeggy03"},"content":" File fileToDelete \u003d new File(Dbops.FILEPATH + Dbops.FILENAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"oeggy03"},"content":" if (fileToDelete.delete()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"oeggy03"},"content":" System.out.println(\"Old memory file deleted successfully.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"oeggy03"},"content":" System.err.println(\"Failed to delete the old memory file.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"oeggy03"},"content":" * Loads tasks from the memory file.","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"oeggy03"},"content":" * @param taskArray The TaskArray to load the tasks into.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"oeggy03"},"content":" public static void loadTasksFromFile(TaskArray taskArray) {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"oeggy03"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(Dbops.FILEPATH + Dbops.FILENAME))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"oeggy03"},"content":" String line;","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"oeggy03"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"oeggy03"},"content":" // Create Task from each line and add them to the list","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"oeggy03"},"content":" String[] parts \u003d line.split(\",\");","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"oeggy03"},"content":" boolean isMarked \u003d Objects.equals(parts[2], \"true\");","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"oeggy03"},"content":" if (Objects.equals(parts[0], \"Todo\") \u0026\u0026 parts.length \u003d\u003d 3) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"oeggy03"},"content":" taskArray.add(new ToDo(parts[1], isMarked));","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"oeggy03"},"content":" } else if (Objects.equals(parts[0], \"Deadline\") \u0026\u0026 parts.length \u003d\u003d 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"oeggy03"},"content":" taskArray.add(new Deadline(parts[1], isMarked, parseDateTimeFromString(parts[3])));","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"oeggy03"},"content":" } else if (Objects.equals(parts[0], \"Event\") \u0026\u0026 parts.length \u003d\u003d 5) {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"oeggy03"},"content":" taskArray.add(new Event(parts[1], isMarked, parseDateTimeFromString(parts[3]), parseDateTimeFromString(parts[4])));","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"oeggy03"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"oeggy03"},"content":" throw new DukeCorruptedDataException(\"Error: file is corrupted. Failed to load data from file.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"oeggy03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"oeggy03"},"content":" String output \u003d \"File not found: \" + Dbops.FILENAME + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"oeggy03"},"content":" \"If this is your first day, welcome!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"oeggy03"},"content":" \"A new memory file, \" + Dbops.FILENAME + \" has been created.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"oeggy03"},"content":" Dbops.createMemoryFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"oeggy03"},"content":" } catch (DukeCorruptedDataException | DukeInvalidDateTimeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(e + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"oeggy03"},"content":" Dbops.deleteMemoryFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"oeggy03"},"content":" Dbops.createMemoryFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"oeggy03"},"content":" printBasicOutput(\"A new memory file, \" + Dbops.FILENAME + \" has been created.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"oeggy03"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"oeggy03"},"content":" * Saves all tasks to the memory file.","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"oeggy03"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"oeggy03"},"content":" * @param taskArray The TaskArray to load the tasks from.","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"oeggy03"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"oeggy03"},"content":" public static void saveTasksToFile(TaskArray taskArray) {","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"oeggy03"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(Dbops.FILEPATH + Dbops.FILENAME))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"oeggy03"},"content":" for (Task task : taskArray) {","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"oeggy03"},"content":" // Format and write each task to the file","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"oeggy03"},"content":" writer.write(task.getTaskDetails());","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"oeggy03"},"content":" writer.newLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"oeggy03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"oeggy03"},"content":" printErrorOutput(\"Error saving tasks to memory file: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":128}},{"path":"src/main/java/Ui/BasicOutputPrinter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public class BasicOutputPrinter {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":" public static void printBasicOutput(String output) {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" System.out.println(\"_______________________________ EGGBOT: _______________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":" output +","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":" \"\\n_______________________________________________________________________\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":9}},{"path":"src/main/java/Ui/ErrorOutputPrinter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"package Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"public class ErrorOutputPrinter {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":" public static void printErrorOutput(String output) {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":" System.err.println(\"_______________________________ ERROR!: _______________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":" output +","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":" \"\\n_______________________________________________________________________\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"oeggy03"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"oeggy03":9}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"oeggy03"},"content":"todo hello","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"oeggy03"},"content":"event Graduation / Monday 2pm / Tuesday 3pm","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"oeggy03"},"content":"deadline Finish EGGBOT / tmr 3pm","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"oeggy03"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"oeggy03"},"content":"mark 3","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"oeggy03"},"content":"unmark 3","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"event Swim/6pm","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"oeggy03"},"content":"delete 2","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"oeggy03":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"oeggy03"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"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":{"-":20,"oeggy03":1}}] diff --git a/oeggy03_ip_master/commits.json b/oeggy03_ip_master/commits.json index 06ed6e50..7b071577 100644 --- a/oeggy03_ip_master/commits.json +++ b/oeggy03_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"oeggy03":[{"date":"2023-08-24","commitResults":[{"hash":"f7738060af533ca23750a02ec2a63d4e33482b5c","isMergeCommit":false,"messageTitle":"Finished Level-0 Renamed the bot Implement an initial skeletal version of the it that simply greets the user and exits.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}}]},{"date":"2023-08-25","commitResults":[{"hash":"de597dca7c1729f40b9f38f39d00f621164042fa","isMergeCommit":false,"messageTitle":"Level 1 done: Improve the skeletal version of Duke so that it echos commands entered by the user, and exits when the user types the command bye.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":4}}},{"hash":"ffeb0be49f7bd6f1fc411b87a37f895f658c02b8","isMergeCommit":false,"messageTitle":"Level 2 done: Add the ability to store whatever text entered by the user and display them back to the user when requested.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":3}}}]},{"date":"2023-08-26","commitResults":[{"hash":"c679f7a82779738b93b93c38c8a0655d688a137c","isMergeCommit":false,"messageTitle":"Done Level 3: Add the ability to mark tasks as done, add the ability to change the status back to not done.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":10}}}]},{"date":"2023-08-27","commitResults":[{"hash":"b7f60fb8fa0cbc7e28d97b9e18e8bad37986535f","isMergeCommit":false,"messageTitle":"Added A-Classes - Task Class For Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":12}}},{"hash":"71f7a043af3966192042d26f2bf72bdbe1f6a7c1","isMergeCommit":false,"messageTitle":"Added classes for Deadline, Event, ToDo Added error handling for bad user input for deadline/event which might break program Finished Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":146,"deletions":8}}},{"hash":"67ee9cda22082b5cea357989e986a0be410fafcf","isMergeCommit":false,"messageTitle":"Done with: Use the input/output redirection technique to semi-automate the testing of Duke.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"92139887b6486f42f05ee8f0473d6d2cd249fb4d","isMergeCommit":false,"messageTitle":"Added a new exception: DukeInvalidFormatException, to handle cases of deadline/event not having proper inputs separated by \u0027/\u0027 Common errors handled Tests updated to accommodate changes Level 5: Error Handling done","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":25,"deletions":6}}},{"hash":"4efe206a4a4a259f6ebb3aa56541d203724547fb","isMergeCommit":false,"messageTitle":"Edited current code to use ArrayList\u003cTask\u003e instead","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":14}}},{"hash":"d30cbed93fc5afac4d59439bbb11def5590e9ea3","isMergeCommit":false,"messageTitle":"Done with level 6 Delete command works","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":0}}},{"hash":"b65955dd619749985838b36c4b27aff1d30855a8","isMergeCommit":false,"messageTitle":"Updated the Automated testing to accommodate changes for level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1}}},{"hash":"c95f6eddf1df7e49fd5489baa1fd9a95c3cb4fe4","isMergeCommit":false,"messageTitle":"Enum is not applicable as infinitely different inputs possible when deleting/marking/unmarking/adding tasks. I chose to use startswith() instead, easier, makes more sense","messageBody":"","tags":["A-enums"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"ed337da7b4c688894fea63a5badeca303a1593bf","isMergeCommit":false,"messageTitle":"Added memory.txt, to store taks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"650fdc72df104776d3accf733ecc185c45aa41a2","isMergeCommit":false,"messageTitle":"Added memory.txt as data storage for chatbot Created TaskArray object for array of tasks","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":152,"deletions":30}}}]},{"date":"2023-09-03","commitResults":[{"hash":"be92de5acba8e52c827e5bd590dfab7f4f3dd57f","isMergeCommit":false,"messageTitle":"Major restructuring of project: Created Database package and Dbops.java to handle all communication with database. Grouped all Exceptions into Exceptions package. Created Printers package and various printer classes to handle all output from the bot to ensure consistency in output. Grouped all Task Models and TaskArray into Models package. Improved exception handling for absence/corruption of memory.txt, the bot\u0027s memory file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":322,"deletions":216}}},{"hash":"86220432231254476978d7c67896f99a33e4e23f","isMergeCommit":false,"messageTitle":"Revamped Code Structure: Added Handlers Package, and separate handlers for each user command, including a handler for invalid input. Added a Central Command Handler to handle all user inputs, and then assign individual handlers to them.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":571,"deletions":190}}},{"hash":"d7bf1ee468305e02220d8275eb02effcc2628843","isMergeCommit":false,"messageTitle":"Added a \"help\" command to show a list of commands. Fixed minor output bugs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":24}}},{"hash":"0e87e0206e4e0c0b0b143a3169a6f20a53e54ebb","isMergeCommit":false,"messageTitle":"Fixed bug where first task will delete itself if program terminates unexpectedly. Added DateTime support, where Event and Deadline tasks take in dd-MM-yyyy Hmm format.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":94,"deletions":51}}},{"hash":"4e00babb7b68d5bdf90fcdfbff64405b4a22dc72","isMergeCommit":false,"messageTitle":"Edited the help command to also display information on the datetime format.","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":3}}},{"hash":"b299aebc538e93454690d30839de74ca070fcab4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8e4fa9ba34c5c6ea8248bd7e83c638cdb17fc9be","isMergeCommit":false,"messageTitle":"Updated Javadocs for DateTime Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"2087491d005e3cd8dbf544e61a20abfc8fd198b2","isMergeCommit":false,"messageTitle":"OOP has already been done prior to this increment. Renamed Printer package to Ui, and Database package to Storage","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":27}}},{"hash":"983ddc9c7f3c2989252699b0a8de2a7228ec4514","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-moreoop\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ae8485ee296a5d10c7f79bf2445afc2e23a229e6","isMergeCommit":false,"messageTitle":"All classes are already organised in appropriate packages.","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"oeggy03":{"java":1049,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":10}},"authorContributionVariance":{"oeggy03":143725.39},"authorDisplayNameMap":{"oeggy03":"CS2103T-T10-4 TRAN.. THU"}} +{"authorDailyContributionsMap":{"oeggy03":[{"date":"2023-08-24","commitResults":[{"hash":"f7738060af533ca23750a02ec2a63d4e33482b5c","isMergeCommit":false,"messageTitle":"Finished Level-0 Renamed the bot Implement an initial skeletal version of the it that simply greets the user and exits.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}}]},{"date":"2023-08-25","commitResults":[{"hash":"de597dca7c1729f40b9f38f39d00f621164042fa","isMergeCommit":false,"messageTitle":"Level 1 done: Improve the skeletal version of Duke so that it echos commands entered by the user, and exits when the user types the command bye.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":4}}},{"hash":"ffeb0be49f7bd6f1fc411b87a37f895f658c02b8","isMergeCommit":false,"messageTitle":"Level 2 done: Add the ability to store whatever text entered by the user and display them back to the user when requested.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":3}}}]},{"date":"2023-08-26","commitResults":[{"hash":"c679f7a82779738b93b93c38c8a0655d688a137c","isMergeCommit":false,"messageTitle":"Done Level 3: Add the ability to mark tasks as done, add the ability to change the status back to not done.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":10}}}]},{"date":"2023-08-27","commitResults":[{"hash":"b7f60fb8fa0cbc7e28d97b9e18e8bad37986535f","isMergeCommit":false,"messageTitle":"Added A-Classes - Task Class For Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":12}}},{"hash":"71f7a043af3966192042d26f2bf72bdbe1f6a7c1","isMergeCommit":false,"messageTitle":"Added classes for Deadline, Event, ToDo Added error handling for bad user input for deadline/event which might break program Finished Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":146,"deletions":8}}},{"hash":"67ee9cda22082b5cea357989e986a0be410fafcf","isMergeCommit":false,"messageTitle":"Done with: Use the input/output redirection technique to semi-automate the testing of Duke.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"92139887b6486f42f05ee8f0473d6d2cd249fb4d","isMergeCommit":false,"messageTitle":"Added a new exception: DukeInvalidFormatException, to handle cases of deadline/event not having proper inputs separated by \u0027/\u0027 Common errors handled Tests updated to accommodate changes Level 5: Error Handling done","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":25,"deletions":6}}},{"hash":"4efe206a4a4a259f6ebb3aa56541d203724547fb","isMergeCommit":false,"messageTitle":"Edited current code to use ArrayList\u003cTask\u003e instead","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":14}}},{"hash":"d30cbed93fc5afac4d59439bbb11def5590e9ea3","isMergeCommit":false,"messageTitle":"Done with level 6 Delete command works","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":0}}},{"hash":"b65955dd619749985838b36c4b27aff1d30855a8","isMergeCommit":false,"messageTitle":"Updated the Automated testing to accommodate changes for level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1}}},{"hash":"c95f6eddf1df7e49fd5489baa1fd9a95c3cb4fe4","isMergeCommit":false,"messageTitle":"Enum is not applicable as infinitely different inputs possible when deleting/marking/unmarking/adding tasks. I chose to use startswith() instead, easier, makes more sense","messageBody":"","tags":["A-enums"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"ed337da7b4c688894fea63a5badeca303a1593bf","isMergeCommit":false,"messageTitle":"Added memory.txt, to store taks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"650fdc72df104776d3accf733ecc185c45aa41a2","isMergeCommit":false,"messageTitle":"Added memory.txt as data storage for chatbot Created TaskArray object for array of tasks","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":152,"deletions":30}}}]},{"date":"2023-09-03","commitResults":[{"hash":"be92de5acba8e52c827e5bd590dfab7f4f3dd57f","isMergeCommit":false,"messageTitle":"Major restructuring of project: Created Database package and Dbops.java to handle all communication with database. Grouped all Exceptions into Exceptions package. Created Printers package and various printer classes to handle all output from the bot to ensure consistency in output. Grouped all Task Models and TaskArray into Models package. Improved exception handling for absence/corruption of memory.txt, the bot\u0027s memory file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":322,"deletions":216}}},{"hash":"86220432231254476978d7c67896f99a33e4e23f","isMergeCommit":false,"messageTitle":"Revamped Code Structure: Added Handlers Package, and separate handlers for each user command, including a handler for invalid input. Added a Central Command Handler to handle all user inputs, and then assign individual handlers to them.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":571,"deletions":190}}},{"hash":"d7bf1ee468305e02220d8275eb02effcc2628843","isMergeCommit":false,"messageTitle":"Added a \"help\" command to show a list of commands. Fixed minor output bugs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":24}}},{"hash":"0e87e0206e4e0c0b0b143a3169a6f20a53e54ebb","isMergeCommit":false,"messageTitle":"Fixed bug where first task will delete itself if program terminates unexpectedly. Added DateTime support, where Event and Deadline tasks take in dd-MM-yyyy Hmm format.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":94,"deletions":51}}},{"hash":"4e00babb7b68d5bdf90fcdfbff64405b4a22dc72","isMergeCommit":false,"messageTitle":"Edited the help command to also display information on the datetime format.","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":3}}},{"hash":"b299aebc538e93454690d30839de74ca070fcab4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8e4fa9ba34c5c6ea8248bd7e83c638cdb17fc9be","isMergeCommit":false,"messageTitle":"Updated Javadocs for DateTime Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"2087491d005e3cd8dbf544e61a20abfc8fd198b2","isMergeCommit":false,"messageTitle":"OOP has already been done prior to this increment. Renamed Printer package to Ui, and Database package to Storage","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":27}}},{"hash":"983ddc9c7f3c2989252699b0a8de2a7228ec4514","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-moreoop\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ae8485ee296a5d10c7f79bf2445afc2e23a229e6","isMergeCommit":false,"messageTitle":"All classes are already organised in appropriate packages.","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"1ebc072973e477f007006f59041cc115486092d3","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"6a0ed50b3ebc42066fad9d08cec13e678b5fa64d","isMergeCommit":false,"messageTitle":"Added build support for iP project with Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"7cbceb15fc437f7db2689da124e0f654dcfefe5d","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"oeggy03":{"java":1049,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":1,"txt":10}},"authorContributionVariance":{"oeggy03":124443.375},"authorDisplayNameMap":{"oeggy03":"CS2103T-T10-4 TRAN.. THU"}} diff --git a/owenyeo_ip_master/authorship.json b/owenyeo_ip_master/authorship.json index 098d741e..8b41bd5e 100644 --- a/owenyeo_ip_master/authorship.json +++ b/owenyeo_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/ChatBot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" * A chat bot that can be renamed, and responds to inputs from users","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" * Version Level-7","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":"public class ChatBot {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" //Name of the user\u0027s ChatBot.","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" private String name;","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" //Scanner used to see user input","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" private static final Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" //Check if the chat has ended.","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" private boolean hasEnded \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" //Array of Tasks to store in the list.","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" private ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" //String representing a border.","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" private static final String BORDER \u003d \"____________________________________________________________\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" //String representing the file directory.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" private static final String DATA_SAVE_PATH \u003d \"src/main/java/data/chatBot.txt\"; ","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" //Enum Command to make code cleaner and allow for the use of ","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" //switch case statements.","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" private static enum Command {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":" BYE(\"bye\"),","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":" DISPLAY_LIST(\"list\"),","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" MARK(\"mark\"),","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" UNMARK(\"unmark\"),","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" ADD_TODO(\"todo\"),","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" ADD_DEADLINE(\"deadline\"),","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":" ADD_EVENT(\"event\"),","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":" DELETE(\"delete\");","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"owenyeo"},"content":" private final String input;","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"owenyeo"},"content":" private Command(String input) {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"owenyeo"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"owenyeo"},"content":" * Parses the input and returns the appropriate command if the input is","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"owenyeo"},"content":" * valid.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"owenyeo"},"content":" * @param input User\u0027s input","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"owenyeo"},"content":" * @return Command that tells what the chatbot should do. ","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"owenyeo"},"content":" * @return null if the input in invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"owenyeo"},"content":" public static Command parseInput(String input) {","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"owenyeo"},"content":" for(Command command: Command.values()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"owenyeo"},"content":" if (command.input.equals(input)) {","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"owenyeo"},"content":" return command;","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"owenyeo"},"content":" return null;","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"owenyeo"},"content":" //Constructor that allows for the naming of your own bot.","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"owenyeo"},"content":" public ChatBot(String name) {","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"owenyeo"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"owenyeo"},"content":" /** ","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"owenyeo"},"content":" * Command to introduce the bot. Outputs an introduction with the bot\u0027s name.","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"owenyeo"},"content":" public void intro() {","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"owenyeo"},"content":" System.out.println(BORDER);","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"owenyeo"},"content":" System.out.println(\"Hello! I am \" + this.name + \".\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"owenyeo"},"content":" System.out.println(\"What can I do for you today?\\n\"); ","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"owenyeo"},"content":" System.out.println(BORDER);","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"owenyeo"},"content":" saveTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"owenyeo"},"content":" /** ","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"owenyeo"},"content":" * To exit chat and end the session.","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"owenyeo"},"content":" * @return void","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"owenyeo"},"content":" public void exitChat() {","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"owenyeo"},"content":" System.out.println(BORDER);","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"owenyeo"},"content":" System.out.println(\"Bye. Have a bad day you doofus.\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"owenyeo"},"content":" System.out.println(BORDER);","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"owenyeo"},"content":" hasEnded \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":98,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"owenyeo"},"content":" /** ","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"owenyeo"},"content":" * To exit chat and end the session.","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"owenyeo"},"content":" * @return boolean The hasEnded encapsulated in the chatbot.","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"owenyeo"},"content":" public boolean isEnded() {","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"owenyeo"},"content":" return this.hasEnded;","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"owenyeo"},"content":" * Adds the user input into a list, depending on the command.","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"owenyeo"},"content":" * If description is wrong, throws an exception.","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"owenyeo"},"content":" * @param taskString","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"owenyeo"},"content":" * @param command","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"owenyeo"},"content":" * @throws InvalidDescriptionException","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"owenyeo"},"content":" public void addToList(String taskString, Command command) ","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"owenyeo"},"content":" throws InvalidDescriptionException {","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"owenyeo"},"content":" switch(command) {","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"owenyeo"},"content":" case ADD_TODO:","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"owenyeo"},"content":" if (taskString.equals(\" \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"owenyeo"},"content":" throw new InvalidDescriptionException(\"What? Where\u0027s your label? Stop this.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"owenyeo"},"content":" list.add(new ToDo(taskString));","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"owenyeo"},"content":" saveTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"owenyeo"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"owenyeo"},"content":" case ADD_DEADLINE:","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"owenyeo"},"content":" String[] deadlineParts \u003d taskString.split(\"/by\");","lastModifiedDate":"2023-08-24"},{"lineNumber":130,"author":{"gitId":"owenyeo"},"content":" list.add(new Deadline(deadlineParts[0].trim(), deadlineParts[1].trim()));","lastModifiedDate":"2023-08-24"},{"lineNumber":131,"author":{"gitId":"owenyeo"},"content":" saveTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"owenyeo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"owenyeo"},"content":" throw new InvalidDescriptionException(\"Are you stupid? Can you follow instructions?\");","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"owenyeo"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":136,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"owenyeo"},"content":" case ADD_EVENT:","lastModifiedDate":"2023-08-24"},{"lineNumber":138,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":139,"author":{"gitId":"owenyeo"},"content":" String[] eventParts \u003d taskString.split(\"/from\");","lastModifiedDate":"2023-08-24"},{"lineNumber":140,"author":{"gitId":"owenyeo"},"content":" String eventLabel \u003d eventParts[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"owenyeo"},"content":" String[] eventParts2 \u003d eventParts[1].split(\"/to\");","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"owenyeo"},"content":" list.add(new Event(eventLabel.trim(), eventParts2[0].trim(), eventParts2[1].trim()));","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"owenyeo"},"content":" saveTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"owenyeo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"owenyeo"},"content":" throw new InvalidDescriptionException(\"Are you stupid? Can you follow instructions?\");","lastModifiedDate":"2023-08-24"},{"lineNumber":146,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":147,"author":{"gitId":"owenyeo"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":149,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":150,"author":{"gitId":"owenyeo"},"content":" System.out.println(BORDER);","lastModifiedDate":"2023-08-24"},{"lineNumber":151,"author":{"gitId":"owenyeo"},"content":" System.out.println(\"What? You ain\u0027t finishing it. Added: \\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":152,"author":{"gitId":"owenyeo"},"content":" System.out.println(list.get(list.size() - 1) + \"\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":153,"author":{"gitId":"owenyeo"},"content":" System.out.println(\"Now you have an overwhelming \" + list.size() + \" things to do.\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":154,"author":{"gitId":"owenyeo"},"content":" System.out.println(BORDER);","lastModifiedDate":"2023-08-24"},{"lineNumber":155,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":156,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":157,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"owenyeo"},"content":" * Prints the list that has been built so far.","lastModifiedDate":"2023-08-24"},{"lineNumber":159,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":160,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":161,"author":{"gitId":"owenyeo"},"content":" public void displayList() {","lastModifiedDate":"2023-08-24"},{"lineNumber":162,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":163,"author":{"gitId":"owenyeo"},"content":" System.out.println(BORDER);","lastModifiedDate":"2023-08-24"},{"lineNumber":164,"author":{"gitId":"owenyeo"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":165,"author":{"gitId":"owenyeo"},"content":" System.out.println((i+1) + \". \" + list.get(i));","lastModifiedDate":"2023-08-24"},{"lineNumber":166,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":167,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":168,"author":{"gitId":"owenyeo"},"content":" System.out.println(BORDER);","lastModifiedDate":"2023-08-24"},{"lineNumber":169,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":170,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":171,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"owenyeo"},"content":" * To mark tasks as done.","lastModifiedDate":"2023-08-24"},{"lineNumber":173,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":174,"author":{"gitId":"owenyeo"},"content":" * @param int listNum the item on the list to mark.","lastModifiedDate":"2023-08-24"},{"lineNumber":175,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":176,"author":{"gitId":"owenyeo"},"content":" public void mark(int listNum) {","lastModifiedDate":"2023-08-24"},{"lineNumber":177,"author":{"gitId":"owenyeo"},"content":" int index \u003d listNum - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":178,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":179,"author":{"gitId":"owenyeo"},"content":" Task task \u003d list.get(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":180,"author":{"gitId":"owenyeo"},"content":" task.done();","lastModifiedDate":"2023-08-24"},{"lineNumber":181,"author":{"gitId":"owenyeo"},"content":" System.out.println(BORDER);","lastModifiedDate":"2023-08-24"},{"lineNumber":182,"author":{"gitId":"owenyeo"},"content":" System.out.println(\"Took you long enough. I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":183,"author":{"gitId":"owenyeo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":184,"author":{"gitId":"owenyeo"},"content":" System.out.println(BORDER);","lastModifiedDate":"2023-08-24"},{"lineNumber":185,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"owenyeo"},"content":" saveTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":188,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":189,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"owenyeo"},"content":" * To unmark a list item as undone.","lastModifiedDate":"2023-08-24"},{"lineNumber":191,"author":{"gitId":"owenyeo"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":192,"author":{"gitId":"owenyeo"},"content":" * @param listNum Index of the item on the list to unmark.","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":194,"author":{"gitId":"owenyeo"},"content":" public void unmark(int listNum) {","lastModifiedDate":"2023-08-24"},{"lineNumber":195,"author":{"gitId":"owenyeo"},"content":" int index \u003d listNum - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":196,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":197,"author":{"gitId":"owenyeo"},"content":" Task task \u003d list.get(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":198,"author":{"gitId":"owenyeo"},"content":" task.undone();","lastModifiedDate":"2023-08-24"},{"lineNumber":199,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":200,"author":{"gitId":"owenyeo"},"content":" System.out.println(BORDER);","lastModifiedDate":"2023-08-24"},{"lineNumber":201,"author":{"gitId":"owenyeo"},"content":" System.out.println(\"You incompetent child. I\u0027ve unmarked the task. Please get it together.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":202,"author":{"gitId":"owenyeo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":203,"author":{"gitId":"owenyeo"},"content":" System.out.println(BORDER);","lastModifiedDate":"2023-08-24"},{"lineNumber":204,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":205,"author":{"gitId":"owenyeo"},"content":" saveTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":208,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":209,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"owenyeo"},"content":" * Deletes the item off the list and prints it out with a message.","lastModifiedDate":"2023-08-24"},{"lineNumber":211,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":212,"author":{"gitId":"owenyeo"},"content":" * @param listNum Index of the item of the list to delete.","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":214,"author":{"gitId":"owenyeo"},"content":" public void delete(int listNum) {","lastModifiedDate":"2023-08-24"},{"lineNumber":215,"author":{"gitId":"owenyeo"},"content":" int index \u003d listNum - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":216,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":217,"author":{"gitId":"owenyeo"},"content":" Task task \u003d list.get(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":218,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":219,"author":{"gitId":"owenyeo"},"content":" System.out.println(BORDER);","lastModifiedDate":"2023-08-24"},{"lineNumber":220,"author":{"gitId":"owenyeo"},"content":" System.out.println(\"I knew you couldn\u0027t finish it. Or maybe you did. I don\u0027t care. Deleted:\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":221,"author":{"gitId":"owenyeo"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":222,"author":{"gitId":"owenyeo"},"content":" System.out.println(\"Now you have an overwhelming \" + (list.size() - 1) + \" things to do.\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":223,"author":{"gitId":"owenyeo"},"content":" System.out.println(BORDER);","lastModifiedDate":"2023-08-24"},{"lineNumber":224,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":225,"author":{"gitId":"owenyeo"},"content":" list.remove(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":226,"author":{"gitId":"owenyeo"},"content":" saveTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":228,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":229,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"owenyeo"},"content":" * Saves the tasks into a text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":232,"author":{"gitId":"owenyeo"},"content":" private void saveTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"owenyeo"},"content":" BufferedWriter bw \u003d new BufferedWriter(new FileWriter","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"owenyeo"},"content":" (DATA_SAVE_PATH, false));","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"owenyeo"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"owenyeo"},"content":" bw.write(list.get(i).toSaveString());","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"owenyeo"},"content":" bw.newLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"owenyeo"},"content":" bw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":242,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"owenyeo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"owenyeo"},"content":" System.out.println(\"Error writing file:\" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"owenyeo"},"content":" * Reads the input of the user, and executes the commands accordingly.","lastModifiedDate":"2023-08-24"},{"lineNumber":250,"author":{"gitId":"owenyeo"},"content":" * If a command is unknown, throws an exception.","lastModifiedDate":"2023-08-24"},{"lineNumber":251,"author":{"gitId":"owenyeo"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":252,"author":{"gitId":"owenyeo"},"content":" * @param input","lastModifiedDate":"2023-08-31"},{"lineNumber":253,"author":{"gitId":"owenyeo"},"content":" * @throws InvalidDescriptionException","lastModifiedDate":"2023-08-31"},{"lineNumber":254,"author":{"gitId":"owenyeo"},"content":" * @throws InvalidCommandException","lastModifiedDate":"2023-08-31"},{"lineNumber":255,"author":{"gitId":"owenyeo"},"content":" * @throws InvalidIndexException","lastModifiedDate":"2023-08-31"},{"lineNumber":256,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":257,"author":{"gitId":"owenyeo"},"content":" public void readInput(String input) throws ","lastModifiedDate":"2023-08-24"},{"lineNumber":258,"author":{"gitId":"owenyeo"},"content":" InvalidDescriptionException, InvalidCommandException, InvalidIndexException {","lastModifiedDate":"2023-08-24"},{"lineNumber":259,"author":{"gitId":"owenyeo"},"content":" //Split the input so that we can read integers.","lastModifiedDate":"2023-08-24"},{"lineNumber":260,"author":{"gitId":"owenyeo"},"content":" String[] inputStrings \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":261,"author":{"gitId":"owenyeo"},"content":" Command command \u003d Command.parseInput(inputStrings[0]);","lastModifiedDate":"2023-08-24"},{"lineNumber":262,"author":{"gitId":"owenyeo"},"content":" if (command \u003d\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":263,"author":{"gitId":"owenyeo"},"content":" throw new InvalidCommandException(\"What are you saying? Try again.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":264,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":265,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":266,"author":{"gitId":"owenyeo"},"content":" switch(command) {","lastModifiedDate":"2023-08-24"},{"lineNumber":267,"author":{"gitId":"owenyeo"},"content":" case BYE:","lastModifiedDate":"2023-08-24"},{"lineNumber":268,"author":{"gitId":"owenyeo"},"content":" this.exitChat();","lastModifiedDate":"2023-08-24"},{"lineNumber":269,"author":{"gitId":"owenyeo"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":270,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":271,"author":{"gitId":"owenyeo"},"content":" case DISPLAY_LIST:","lastModifiedDate":"2023-08-24"},{"lineNumber":272,"author":{"gitId":"owenyeo"},"content":" this.displayList();","lastModifiedDate":"2023-08-24"},{"lineNumber":273,"author":{"gitId":"owenyeo"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":274,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":275,"author":{"gitId":"owenyeo"},"content":" case MARK:","lastModifiedDate":"2023-08-24"},{"lineNumber":276,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":277,"author":{"gitId":"owenyeo"},"content":" mark(Integer.parseInt(inputStrings[1]));","lastModifiedDate":"2023-08-24"},{"lineNumber":278,"author":{"gitId":"owenyeo"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":279,"author":{"gitId":"owenyeo"},"content":" throw new InvalidIndexException(\"Are you stupid? That\u0027s not a number.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":280,"author":{"gitId":"owenyeo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":281,"author":{"gitId":"owenyeo"},"content":" throw new InvalidIndexException(\"That\u0027s not even a number on the list, idiot.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":282,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":283,"author":{"gitId":"owenyeo"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":284,"author":{"gitId":"owenyeo"},"content":" case UNMARK:","lastModifiedDate":"2023-08-24"},{"lineNumber":285,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":286,"author":{"gitId":"owenyeo"},"content":" unmark(Integer.parseInt(inputStrings[1]));","lastModifiedDate":"2023-08-24"},{"lineNumber":287,"author":{"gitId":"owenyeo"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":288,"author":{"gitId":"owenyeo"},"content":" throw new InvalidIndexException(\"Are you stupid? That\u0027s not a number.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":289,"author":{"gitId":"owenyeo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":290,"author":{"gitId":"owenyeo"},"content":" throw new InvalidIndexException(\"That\u0027s not even a number on the list, idiot.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":291,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":292,"author":{"gitId":"owenyeo"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":293,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":294,"author":{"gitId":"owenyeo"},"content":" case ADD_TODO:","lastModifiedDate":"2023-08-24"},{"lineNumber":295,"author":{"gitId":"owenyeo"},"content":" addToList(inputStrings[1], command);","lastModifiedDate":"2023-08-24"},{"lineNumber":296,"author":{"gitId":"owenyeo"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":297,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":298,"author":{"gitId":"owenyeo"},"content":" case ADD_DEADLINE:","lastModifiedDate":"2023-08-24"},{"lineNumber":299,"author":{"gitId":"owenyeo"},"content":" addToList(inputStrings[1], command);","lastModifiedDate":"2023-08-24"},{"lineNumber":300,"author":{"gitId":"owenyeo"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":301,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":302,"author":{"gitId":"owenyeo"},"content":" case ADD_EVENT:","lastModifiedDate":"2023-08-24"},{"lineNumber":303,"author":{"gitId":"owenyeo"},"content":" addToList(inputStrings[1], command);","lastModifiedDate":"2023-08-24"},{"lineNumber":304,"author":{"gitId":"owenyeo"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":305,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":306,"author":{"gitId":"owenyeo"},"content":" case DELETE:","lastModifiedDate":"2023-08-24"},{"lineNumber":307,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":308,"author":{"gitId":"owenyeo"},"content":" delete(Integer.parseInt(inputStrings[1]));","lastModifiedDate":"2023-08-24"},{"lineNumber":309,"author":{"gitId":"owenyeo"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":310,"author":{"gitId":"owenyeo"},"content":" throw new InvalidIndexException(\"Are you stupid? That\u0027s not a number.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":311,"author":{"gitId":"owenyeo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":312,"author":{"gitId":"owenyeo"},"content":" throw new InvalidIndexException(\"That\u0027s not even a number on the list, idiot.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":313,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":314,"author":{"gitId":"owenyeo"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":315,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":316,"author":{"gitId":"owenyeo"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":317,"author":{"gitId":"owenyeo"},"content":" throw new InvalidCommandException(\"Don\u0027t be stupid, speak english.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":318,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":319,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":320,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":321,"author":{"gitId":"owenyeo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-23"},{"lineNumber":322,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":323,"author":{"gitId":"owenyeo"},"content":" //Test chatbot named \"Bobby Wasabi\".","lastModifiedDate":"2023-08-24"},{"lineNumber":324,"author":{"gitId":"owenyeo"},"content":" ChatBot chatbot \u003d new ChatBot(\"Bobby Wasabi\");","lastModifiedDate":"2023-08-23"},{"lineNumber":325,"author":{"gitId":"owenyeo"},"content":" chatbot.intro();","lastModifiedDate":"2023-08-23"},{"lineNumber":326,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":327,"author":{"gitId":"owenyeo"},"content":" //While chat has not ended, keep reading input.","lastModifiedDate":"2023-08-24"},{"lineNumber":328,"author":{"gitId":"owenyeo"},"content":" while(!chatbot.isEnded()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":329,"author":{"gitId":"owenyeo"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":330,"author":{"gitId":"owenyeo"},"content":" chatbot.readInput(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":331,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":332,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":333,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"owenyeo":333}},{"path":"src/main/java/ChatBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"/*","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":" * Class representing exceptions thrown by the chatbot.","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"public class ChatBotException extends RuntimeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" public ChatBotException(String e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" super(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"owenyeo":12}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"import java.sql.Date;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":" * Deadline class that inherits from Task.","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" * @var deadline Representing deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" * Constructor for a deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" * @param label Descriptor for the task with deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" * @param deadline String representing deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" Deadline(String label, String deadline) {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" super(label);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" this.deadline \u003d LocalDateTime.parse(deadline, DateTimeFormatter","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" .ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" return \"D \" + super.toSaveString() + \" | \" + deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" .format(DateTimeFormatter.ofPattern(\"MMM dd YYYY ha\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":" return \"[D]\" + super.toString() + \" (by: \" + deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"owenyeo"},"content":" .format(DateTimeFormatter.ofPattern(\"MMM dd YYYY ha\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"owenyeo":47}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":" * Event class that inherits from Task.","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" * @var from Representing start time","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" * @var to Representing end time","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" * Constructor for an event object.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" * @param label Descriptor for the event","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" * @param from Start time","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" * @param to End time","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" Event(String label, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" super(label);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" this.from \u003d LocalDateTime.parse(from, DateTimeFormatter","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" .ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" this.to \u003d LocalDateTime.parse(to, DateTimeFormatter","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" .ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":" return \"E \" + super.toSaveString() + \" | \" + from","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" .format(DateTimeFormatter.ofPattern(\"MMM dd YYYY ha\")) + \" - \" + to","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" .format(DateTimeFormatter.ofPattern(\"MMM dd YYYY ha\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"owenyeo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"owenyeo"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"owenyeo"},"content":" .format(DateTimeFormatter.ofPattern(\"MMM dd YYYY ha\")) + \" to: \" + to","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"owenyeo"},"content":" .format(DateTimeFormatter.ofPattern(\"MMM dd YYYY ha\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"owenyeo":51}},{"path":"src/main/java/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":" * Exception that is thrown when an invalid command is keyed into the chatbot.","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"public class InvalidCommandException extends ChatBotException{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" public InvalidCommandException(String e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" super(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"owenyeo":12}},{"path":"src/main/java/InvalidDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":" * Exception that is thrown when a command is correct but the description","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":" * is wrong.","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"public class InvalidDescriptionException extends ChatBotException {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" public InvalidDescriptionException(String e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" super(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"owenyeo":13}},{"path":"src/main/java/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":" * Exception thrown when the index given for mark, unmark, or delete is wrong.","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"public class InvalidIndexException extends ChatBotException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" public InvalidIndexException(String e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" super(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"owenyeo":11}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":" * Abstract class representing a task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":" * @version Level-7","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" private String label;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" * Constructor for a task object","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":" * @param label","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" Task(String label) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" this.label \u003d label;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" * sets isDone to true.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" public void done() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" * sets isDone to false.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" public void undone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":" * Returns a string to be saved in a file, representing a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" * @return String representing a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" return \"| \" + (isDone ? 1 : 0) + \" | \" + label;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"owenyeo"},"content":" * Represents whether a task has been done or not.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"owenyeo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"owenyeo"},"content":" if (isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"owenyeo"},"content":" return \"[X] \" + label;","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"owenyeo"},"content":" return \"[ ] \" + label;","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"owenyeo":56}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":" * Todo class that is a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" * Constructor for a ToDo instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" * @param label descriptor of the tas","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":" ToDo(String label) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" super(label);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" return \"T \" + super.toSaveString();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"owenyeo":33}},{"path":"src/main/java/data/chatBot.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"E | 0 | penis | May 05 1900 9AM - Oct 25 1957 8PM","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"owenyeo":1}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"plugins {","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"application {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" mainClass.set(\"chatbot.ChatBot\")","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":"dependencies {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":"test {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" testLogging {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" showExceptions true","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" showCauses true","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" showStackTraces true","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":"shadowJar {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" archiveFileName \u003d \u0027ChatBot.jar\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":"repositories {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" mavenCentral()","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":"run {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" standardInput \u003d System.in;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"owenyeo":40}},{"path":"settings.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"/*","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":" * This file was generated by the Gradle \u0027init\u0027 task.","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":" * The settings file is used to specify which projects to include in your build.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":" * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.3/userguide/building_swift_projects.html in the Gradle documentation.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"rootProject.name \u003d \"ip\"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"owenyeo":8}},{"path":"src/main/java/chatbot/ChatBot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import chatbot.exceptions.ChatBotException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"import chatbot.parser.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"import chatbot.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"import chatbot.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"import chatbot.commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" * A chat bot that can be renamed, and responds to inputs from users","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":" * Version Level-7","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":"public class ChatBot {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" //Constructor that allows for the naming of your own bot.","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" public ChatBot(String path) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" storage \u003d new Storage(path);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" } catch (ChatBotException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":" public void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" ui.intro();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" boolean hasEnded \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" while (!hasEnded) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" String fullCommand \u003d ui.readInput();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":" c.execute(tasks, storage, ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"owenyeo"},"content":" hasEnded \u003d c.isExit();","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"owenyeo"},"content":" } catch (ChatBotException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"owenyeo"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"owenyeo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"owenyeo"},"content":" //Test chatbot","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"owenyeo"},"content":" new ChatBot(\"src/main/java/data/chatBot.txt\").run();","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"owenyeo":55}},{"path":"src/main/java/chatbot/commands/AddDeadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import chatbot.exceptions.InvalidDescriptionException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"import chatbot.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.TaskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"import chatbot.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" * Adds a deadline task to the TaskList","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":"public class AddDeadline extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" * @param input","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" * @param commandType","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" public AddDeadline(String input, CommandType commandType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" super(input, commandType);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" * Adds a Deadline to the TaskList of the chatbot and saves it. ","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" * Prints a message on the UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" public void execute(TaskList tasks, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" tasks.addTask(input, TaskType.DEADLINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":" ui.print(new String[] {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":" \"What? You ain\u0027t finishing it. Added: \",","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" tasks.getTask(tasks.getLength()).toString(),","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" \"Now you have an overwhelming \" + tasks.getLength() + \" things to do.\"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":" } catch (InvalidDescriptionException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"owenyeo"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"owenyeo":47}},{"path":"src/main/java/chatbot/commands/AddEvent.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import chatbot.exceptions.InvalidDescriptionException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"import chatbot.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.TaskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"import chatbot.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" * Add an event task to the TaskList","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":"public class AddEvent extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" public AddEvent(String input, CommandType commandType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" super(input, commandType);","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" * Adds an Event to the TaskList of the chatbot and saves it. ","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" * Prints a message on the UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" public void execute(TaskList tasks, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" tasks.addTask(input, TaskType.EVENT);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" ui.print(new String[] {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" \"What? You ain\u0027t finishing it. Added: \",","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" tasks.getTask(tasks.getLength()).toString(),","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" \"Now you have an overwhelming \" + tasks.getLength() + \" things to do.\"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" } catch (InvalidDescriptionException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"owenyeo":42}},{"path":"src/main/java/chatbot/commands/AddToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import chatbot.exceptions.InvalidDescriptionException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"import chatbot.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.TaskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"import chatbot.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" * Adds a To Do task to the TaskList","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":"public class AddToDo extends Command{","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" public AddToDo(String input, CommandType commandType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" super(input, commandType);","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" * Adds a todo to the TaskList of the chatbot and saves it. ","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" * Prints a message on the UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" public void execute(TaskList tasks, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" tasks.addTask(input, TaskType.TODO);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" ui.print(new String[] {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" \"What? You ain\u0027t finishing it. Added: \",","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" tasks.getTask(tasks.getLength()).toString(),","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" \"Now you have an overwhelming \" + tasks.getLength() + \" things to do.\"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" } catch (InvalidDescriptionException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"owenyeo":42}},{"path":"src/main/java/chatbot/commands/Bye.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import chatbot.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"import chatbot.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" * Command that exits the chatbot and forces it close.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":"public class Bye extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" public Bye(String input, CommandType commandType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" super(input, commandType);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" * Asks UI to print a goodbye message.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" public void execute(TaskList tasks, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" ui.bye();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" * @return true.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"owenyeo":35}},{"path":"src/main/java/chatbot/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import chatbot.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"import chatbot.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" * Abstract class representing a command.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":" protected final String input;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" protected final CommandType commandType;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" * Constructs a Command instance with a given type and input.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" * @param input String containing task label and other info.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" * @param commandType type of command instance","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" public Command(String input, CommandType commandType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" this.input \u003d input;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" * Modifies the TaskList, Storage, and UI of the ChatBot.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" * @param storage Storage","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" * @param ui UI","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" public void execute(TaskList tasks, Storage storage, Ui ui) {}","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" * Checks if the current command will cause an exit.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" * @return false","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":" public boolean isExit() {return false;}","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"owenyeo"},"content":" * Getter for commandType. Mainly used for testing.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"owenyeo"},"content":" * @return CommandType of the command.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"owenyeo"},"content":" public CommandType getType() {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"owenyeo"},"content":" return this.commandType;","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"owenyeo":53}},{"path":"src/main/java/chatbot/commands/CommandType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":" * enum that represents the different command types.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"public enum CommandType {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" BYE(\"bye\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" DISPLAY_LIST(\"list\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" MARK(\"mark\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" UNMARK(\"unmark\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" ADD_TODO(\"todo\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":" ADD_DEADLINE(\"deadline\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" ADD_EVENT(\"event\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" DELETE(\"delete\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" FIND(\"find\");","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" private final String input;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" private CommandType(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" this.input \u003d input;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" * Parses the input and returns the appropriate command if the input is","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" * valid.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" * @param input User\u0027s input","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" * @return Command that tells what the chatbot should do. ","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" * @return null if the input in invalid","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" public static CommandType parseInput(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" String[] parts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":" for(CommandType commandType: CommandType.values()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":" if (commandType.input.equals(parts[0])) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" return commandType;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"owenyeo":43}},{"path":"src/main/java/chatbot/commands/DeleteItem.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import chatbot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"import chatbot.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"import chatbot.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" * Command that deletes an item from the TaskList, and prints a message.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":"public class DeleteItem extends Command{","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":" public DeleteItem(String input, CommandType commandType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" super(input, commandType);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" * Deletes item from the TaskList and saves it.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" * Prints a message on the UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" * @throws InvalidIndexEception Thrown when no tasks matches the index.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" public void execute(TaskList tasks, Storage storage, Ui ui) ","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" throws InvalidIndexException {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" int index \u003d Integer.parseInt(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" Task deletedTask \u003d tasks.getTask(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" ui.print(new String[] {\"I knew you couldn\u0027t finish it. Or maybe you did. I don\u0027t care. Deleted:\",","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" deletedTask.toString(),","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" \"Now you have an overwhelming \"+ (tasks.getLength() - 1) +","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" \" things to do\"});","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":" tasks.delete(Integer.parseInt(input));","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" throw new InvalidIndexException(\"Are you stupid? That\u0027s not a number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":" throw new InvalidIndexException(\"That\u0027s not even a number on the list, idiot.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"owenyeo":45}},{"path":"src/main/java/chatbot/commands/DisplayList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import chatbot.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"import chatbot.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" * Displays the existing list when executed","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":"public class DisplayList extends Command{","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":" public DisplayList(String input, CommandType commandType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" super(input, commandType);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" * Displays the current list on the UI when executed.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" public void execute(TaskList tasks, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" String[] taskStrings \u003d new String[100] ; ","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" for (int i \u003d 1; i \u003c tasks.getLength() + 1; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" String listString \u003d (i) + \". \" + tasks.getTask(i).toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" taskStrings[i - 1] \u003d listString;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" ui.print(taskStrings);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"owenyeo":34}},{"path":"src/main/java/chatbot/commands/FindTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.commands;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"import chatbot.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"import chatbot.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"public class FindTask extends Command{","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" public FindTask(String input, CommandType commandType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" super(input, commandType);","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" public void execute(TaskList tasks, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" String[] validStrings \u003d new String[100];","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" validStrings[0] \u003d \"Here are items that match your search:\";","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" int index \u003d 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" for (int i \u003d 1; i \u003c tasks.getLength() + 1; i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" String taskString \u003d tasks.getTask(i).toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" if (taskString.indexOf(input) !\u003d -1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" validStrings[index] \u003d index + \". \" + taskString;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" index++;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" ui.print(validStrings);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"owenyeo":32}},{"path":"src/main/java/chatbot/commands/MarkItem.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import chatbot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"import chatbot.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"import chatbot.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" * Marks item as completed in the list","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":"public class MarkItem extends Command{","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" public MarkItem(String input, CommandType commandType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" super(input, commandType);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" * Marks an item on the tasklist as done, and prints a message on the UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" * Saves the change on the text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" * @throws InvalidIndexEception Thrown when no tasks matches the index.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" public void execute(TaskList tasks, Storage storage, Ui ui) ","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" throws InvalidIndexException {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" int index \u003d Integer.parseInt(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" tasks.mark(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" ui.print(new String[] {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" \"Impossible! You must have cheated. Horrible.\",","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" tasks.getTask(index).toString()","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" throw new InvalidIndexException(\"Are you stupid? That\u0027s not a number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":" throw new InvalidIndexException(\"That\u0027s not even a number on the list, idiot.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"owenyeo":45}},{"path":"src/main/java/chatbot/commands/UnmarkItem.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import chatbot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"import chatbot.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"import chatbot.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" * Unmarks a completed item as undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":"public class UnmarkItem extends Command{","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" public UnmarkItem(String input, CommandType commandType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" super(input, commandType);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" * Unmarks a task on the TaskList as undone, and prints a message.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" * Saves the change on a data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" * @throws InvalidIndexEception Thrown when no tasks matches the index.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" public void execute(TaskList tasks, Storage storage, Ui ui) ","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" throws InvalidIndexException {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" int index \u003d Integer.parseInt(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" tasks.unmark(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" ui.print(new String[] {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" \"You incompetent child. I\u0027ve unmarked the task. Please get it together.\",","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" tasks.getTask(index).toString()","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" throw new InvalidIndexException(\"Are you stupid? That\u0027s not a number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":" throw new InvalidIndexException(\"That\u0027s not even a number on the list, idiot.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"owenyeo":45}},{"path":"src/main/java/chatbot/exceptions/ChatBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"/*","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":" * Class representing exceptions thrown by the chatbot.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"public class ChatBotException extends RuntimeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" public ChatBotException(String e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" super(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"owenyeo":14}},{"path":"src/main/java/chatbot/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":" * Exception that is thrown when an invalid command is keyed into the chatbot.","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"public class InvalidCommandException extends ChatBotException{","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" public InvalidCommandException(String e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" super(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"owenyeo":13}},{"path":"src/main/java/chatbot/exceptions/InvalidDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":" * Exception that is thrown when a command is correct but the description","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":" * is wrong.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"public class InvalidDescriptionException extends ChatBotException {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" public InvalidDescriptionException(String e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" super(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"owenyeo":14}},{"path":"src/main/java/chatbot/exceptions/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":" * Exception thrown when the index given for mark, unmark, or delete is wrong.","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"public class InvalidIndexException extends ChatBotException {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" public InvalidIndexException(String e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" super(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"owenyeo":12}},{"path":"src/main/java/chatbot/exceptions/SaveFileNotFound.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.exceptions;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"public class SaveFileNotFound extends ChatBotException{","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":" public SaveFileNotFound(String e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":" super(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"owenyeo":9}},{"path":"src/main/java/chatbot/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import chatbot.commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"import chatbot.commands.AddDeadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"import chatbot.commands.AddEvent;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"import chatbot.commands.AddToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"import chatbot.commands.Bye;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"import chatbot.commands.CommandType;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":"import chatbot.commands.DeleteItem;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":"import chatbot.commands.DisplayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":"import chatbot.commands.MarkItem;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":"import chatbot.commands.UnmarkItem;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":"import chatbot.commands.FindTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":"import chatbot.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":"import chatbot.exceptions.InvalidDescriptionException;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":"import chatbot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" * Parser that parses the inputs from the user and inteprets it.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" * Parses the input from the user and outputs a command for ","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" * the chatbot to execute.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" * @param input String input from user","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" * @return Command command depending on input.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" * @throws InvalidDescriptionException Exception thrown when an invalid command description is passed.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" * @throws InvalidCommandException Exception thrown when an invalid command is passed","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" * @throws InvalidIndexException Exception thrown when an invalid index is passed.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":" public static Command parse(String input) throws ","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":" InvalidDescriptionException, InvalidCommandException, InvalidIndexException {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" //Split the input so that we can read command and their description (if any).","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" String[] inputStrings \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" CommandType command \u003d CommandType.parseInput(inputStrings[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" if (command \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":" throw new InvalidCommandException(\"What are you saying? Try again.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"owenyeo"},"content":" switch(command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"owenyeo"},"content":" case BYE:","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"owenyeo"},"content":" return new Bye(\"\", CommandType.BYE);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"owenyeo"},"content":" case DISPLAY_LIST:","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"owenyeo"},"content":" return new DisplayList(\"\", CommandType.DISPLAY_LIST);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"owenyeo"},"content":" case MARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"owenyeo"},"content":" return new MarkItem(inputStrings[1], CommandType.MARK);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"owenyeo"},"content":" case UNMARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"owenyeo"},"content":" return new UnmarkItem(inputStrings[1], CommandType.UNMARK);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"owenyeo"},"content":" case ADD_TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"owenyeo"},"content":" return new AddToDo(inputStrings[1], CommandType.ADD_TODO);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"owenyeo"},"content":" case ADD_DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"owenyeo"},"content":" return new AddDeadline(inputStrings[1], CommandType.ADD_DEADLINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"owenyeo"},"content":" case ADD_EVENT:","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"owenyeo"},"content":" return new AddEvent(inputStrings[1], CommandType.ADD_EVENT);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"owenyeo"},"content":" case DELETE:","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"owenyeo"},"content":" return new DeleteItem(inputStrings[1], CommandType.DELETE);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"owenyeo"},"content":" case FIND:","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"owenyeo"},"content":" return new FindTask(inputStrings[1], CommandType.FIND);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"owenyeo"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"owenyeo"},"content":" throw new InvalidCommandException(\"Don\u0027t be stupid, speak english.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"owenyeo":77}},{"path":"src/main/java/chatbot/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":"import chatbot.exceptions.SaveFileNotFound;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":"import chatbot.task.TaskType;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" * Storage class that handles storing and loading saved lists.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" private String path;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" public Storage(String path) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" this.path \u003d path;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" * Saves tasks into a text file.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" * @param tasks TaskList","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":" public void saveTasks(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" BufferedWriter bw \u003d new BufferedWriter(new FileWriter","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" (path, false));","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" for (int i \u003d 1; i \u003c tasks.getLength() + 1; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":" bw.write(tasks.getTask(i).toSaveString());","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":" bw.newLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"owenyeo"},"content":" bw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"owenyeo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"owenyeo"},"content":" System.out.println(\"Error writing file:\" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"owenyeo"},"content":" * Loads the existing list found on the storage file into an ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"owenyeo"},"content":" * @return ArrayList containing all the tasks parsed from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"owenyeo"},"content":" public ArrayList\u003cTask\u003e load() {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"owenyeo"},"content":" ArrayList\u003cTask\u003e loadedList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"owenyeo"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"owenyeo"},"content":" if (file.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"owenyeo"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"owenyeo"},"content":" String line;","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"owenyeo"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"owenyeo"},"content":" String[] parts \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"owenyeo"},"content":" TaskType taskType \u003d TaskType.parseInput(parts[0].trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"owenyeo"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"owenyeo"},"content":" case TODO: ","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"owenyeo"},"content":" loadedList.add(new ToDo(parts[2].trim()));","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"owenyeo"},"content":" if (Integer.parseInt(parts[1].trim()) \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"owenyeo"},"content":" loadedList.get(loadedList.size() - 1).done();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"owenyeo"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"owenyeo"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"owenyeo"},"content":" loadedList.add(new Deadline(parts[2].trim(), parts[3].trim()));","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"owenyeo"},"content":" if (Integer.parseInt(parts[1].trim()) \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"owenyeo"},"content":" Task task \u003d loadedList.get(loadedList.size() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"owenyeo"},"content":" task.done();","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"owenyeo"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"owenyeo"},"content":" case EVENT:","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"owenyeo"},"content":" loadedList.add(new Event(parts[2].trim(), parts[3].trim(), parts[4].trim()));","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"owenyeo"},"content":" if (Integer.parseInt(parts[1].trim()) \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"owenyeo"},"content":" loadedList.get(loadedList.size() - 1).done();","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"owenyeo"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"owenyeo"},"content":" reader.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"owenyeo"},"content":" return loadedList;","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"owenyeo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"owenyeo"},"content":" throw new SaveFileNotFound(\"You forgot your file path, idiot.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"owenyeo"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"owenyeo":102}},{"path":"src/main/java/chatbot/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":" * Deadline class that inherits from Task.","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" * @var deadline Representing deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" private String originalString;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" * Constructor for a deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" * @param label Descriptor for the task with deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" * @param deadline String representing deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" public Deadline(String label, String deadline) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" super(label);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" this.deadline \u003d LocalDateTime.parse(deadline, DateTimeFormatter","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" .ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" this.originalString \u003d deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":" return \"D \" + super.toSaveString() + \" | \" + originalString;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"owenyeo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"owenyeo"},"content":" return \"[D]\" + super.toString() + \" (by: \" + deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"owenyeo"},"content":" .format(DateTimeFormatter.ofPattern(\"MMM dd YYYY ha\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"owenyeo":49}},{"path":"src/main/java/chatbot/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":" * Event class that inherits from Task.","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" * @var from Representing start time","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" * @var to Representing end time","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" private String fromString;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" private String toString;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" * Constructor for an event object.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" * @param label Descriptor for the event","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" * @param from Start time","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" * @param to End time","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" public Event(String label, String from, String to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" super(label);","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" this.from \u003d LocalDateTime.parse(from, DateTimeFormatter","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" .ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" this.fromString \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" this.to \u003d LocalDateTime.parse(to, DateTimeFormatter","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" .ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" this.toString \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":" return \"E \" + super.toSaveString() + \" | \" + fromString + \" | \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":" toString;","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"owenyeo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"owenyeo"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"owenyeo"},"content":" .format(DateTimeFormatter.ofPattern(\"MMM dd YYYY ha\")) + \" | to: \" + to","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"owenyeo"},"content":" .format(DateTimeFormatter.ofPattern(\"MMM dd YYYY ha\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"owenyeo":55}},{"path":"src/main/java/chatbot/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":" * Abstract class representing a task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":" * @version Level-7","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" private String label;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":" * Constructor for a task object","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" * @param label","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" Task(String label) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" this.label \u003d label;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" * sets isDone to true.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" public void done() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" * sets isDone to false.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" public void undone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" * Returns a string to be saved in a file, representing a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" * @return String representing a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":" return \"| \" + (isDone ? 1 : 0) + \" | \" + label;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"owenyeo"},"content":" * Represents whether a task has been done or not.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"owenyeo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"owenyeo"},"content":" if (isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"owenyeo"},"content":" return \"[X] \" + label;","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"owenyeo"},"content":" return \"[ ] \" + label;","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"owenyeo":58}},{"path":"src/main/java/chatbot/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"import chatbot.exceptions.InvalidDescriptionException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"import chatbot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" * Representation of a list that takes in tasks,","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" * and is able to modify their states","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" //ArrayList to store the tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" private ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" * Constructor for an isntance of TaskList","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" * @param tasks ArrayList for tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" * Empty constructor for a TaskList","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":" * Adds a task to the TaskList","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" * @param taskString representing the descriptor for the task","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" * @param taskType type of the task getting added","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" * @throws InvalidDescriptionException","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":" public void addTask(String taskString, TaskType taskType) ","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":" throws InvalidDescriptionException {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"owenyeo"},"content":" if (taskString \u003d\u003d \"\") {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"owenyeo"},"content":" throw new InvalidDescriptionException(","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"owenyeo"},"content":" \"What? Where\u0027s your label? Stop this.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"owenyeo"},"content":" switch(taskType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"owenyeo"},"content":" case TODO:","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"owenyeo"},"content":" tasks.add(new ToDo(taskString));","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"owenyeo"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"owenyeo"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"owenyeo"},"content":" String[] deadlineParts \u003d taskString.split(\"/by\");","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"owenyeo"},"content":" tasks.add(new Deadline(deadlineParts[0].trim(), deadlineParts[1].trim()));","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"owenyeo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"owenyeo"},"content":" throw new InvalidDescriptionException(","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"owenyeo"},"content":" \"Are you stupid? Can you follow instructions?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"owenyeo"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"owenyeo"},"content":" case EVENT:","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"owenyeo"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"owenyeo"},"content":" String[] eventParts \u003d taskString.split(\"/from\");","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"owenyeo"},"content":" String eventLabel \u003d eventParts[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"owenyeo"},"content":" String[] eventParts2 \u003d eventParts[1].split(\"/to\");","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"owenyeo"},"content":" tasks.add(new Event(eventLabel.trim(), eventParts2[0].trim(), eventParts2[1].trim()));","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"owenyeo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"owenyeo"},"content":" throw new InvalidDescriptionException(","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"owenyeo"},"content":" \"Are you stupid? Can you follow instructions?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"owenyeo"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"owenyeo"},"content":" * Deletes the item off the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"owenyeo"},"content":" * @param listNum Index of the item of the list to delete.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"owenyeo"},"content":" public void delete(int listNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"owenyeo"},"content":" int index \u003d listNum - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"owenyeo"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"owenyeo"},"content":" * To mark tasks as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"owenyeo"},"content":" * @param int listNum the item on the list to mark.","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"owenyeo"},"content":" public void mark(int listNum) throws InvalidIndexException {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"owenyeo"},"content":" Task task \u003d tasks.get(listNum - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"owenyeo"},"content":" task.done();","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"owenyeo"},"content":" * To unmark a list item as undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"owenyeo"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"owenyeo"},"content":" * @param listNum Index of the item on the list to unmark.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"owenyeo"},"content":" public void unmark(int listNum) throws InvalidIndexException {","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"owenyeo"},"content":" Task task \u003d tasks.get(listNum - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"owenyeo"},"content":" task.undone();","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"owenyeo"},"content":" public Task getTask(int listNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"owenyeo"},"content":" int index \u003d listNum - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"owenyeo"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"owenyeo"},"content":" public int getLength() {","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"owenyeo"},"content":" return tasks.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"owenyeo":116}},{"path":"src/main/java/chatbot/task/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":" * Enum representing the different types of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"public enum TaskType {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":" TODO(\"T\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" DEADLINE(\"D\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" EVENT(\"E\");","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" private String input;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" private TaskType(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":" this.input \u003d input;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" * Parses the input and returns the appropriate command if the input is","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" * valid.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" * @param input User\u0027s input","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" * @return Command that tells what the chatbot should do. ","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" * @return null if the input in invalid","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" public static TaskType parseInput(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" for(TaskType task: TaskType.values()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" if (task.input.equals(input)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"owenyeo":33}},{"path":"src/main/java/chatbot/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":" * Todo class that is a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" * Constructor for a ToDo instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" * @param label descriptor of the tas","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" public ToDo(String label) {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" super(label);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" return \"T \" + super.toSaveString();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"owenyeo":36}},{"path":"src/main/java/chatbot/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":" * Class representing a UI which reads inputs from users","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":" * and prints outputs depending on the command or error.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" //Scanner used to see user input","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":" private static final Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" //String representing a border.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" private static final String BORDER \u003d \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" * Prints the inputs out for the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" * @param inputs","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" public void print(String[] inputs) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":" System.out.println(BORDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" for (int i \u003d 0; i \u003c inputs.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" if (inputs[i] !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" System.out.println(inputs[i]);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" System.out.println(BORDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":" * Prints an introduction.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" public void intro() {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" print(new String[] {\"Hello! I am Bobby Wasabi\", ","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" \"What can I do for you today?\"});","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"owenyeo"},"content":" * Prints a goodbye message.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"owenyeo"},"content":" public void bye() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"owenyeo"},"content":" print(new String[] {\"Bye. Have a bad day you doofus.\"});","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"owenyeo"},"content":" * Reads the input from the users","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"owenyeo"},"content":" * @return String representing input","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"owenyeo"},"content":" public String readInput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"owenyeo"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"owenyeo"},"content":" * Prints error messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"owenyeo"},"content":" * @param e Exception instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"owenyeo"},"content":" public void showError(Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"owenyeo"},"content":" System.out.println(\"Error! \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"owenyeo":68}},{"path":"src/main/java/data/chatBot.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"E | 1 | cat | 1924-09-11 1900 | 2001-09-11 0900","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"D | 1 | chicken | 2400-03-30 0000","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"T | 0 | dog","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"D | 0 | die | 2050-01-01 0000","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"T | 0 | dog","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"T | 0 | dog chicken","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"owenyeo":6}},{"path":"src/test/java/chatbot/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"import chatbot.commands.*;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":"import chatbot.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" * Test class for Parser. Important as the parser is in charge of ","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" * giving commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":" * ","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" * @author Owen Yeo","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" * Tests if the parser can successfully take in valid commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" public void ParserInputSuccessTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" String[] validCommands \u003d { \"bye\", \"list\", \"todo yes\", \"deadline yes\", \"event yes\", \"mark 1\", \"unmark 1\", \"delete 1\" };","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" for (String commandString : validCommands) {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" assertEquals(CommandType.parseInput(commandString), Parser.parse(commandString).getType());","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":" * Tests if the parser correctly throws an error when a wrong input is given.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" public void ParserInputErrorTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":" String[] invalidCommands \u003d {\"lol\", \"gg\"};","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"owenyeo"},"content":" for (String commandString: invalidCommands) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"owenyeo"},"content":" assertThrows(InvalidCommandException.class, () -\u003e Parser.parse(commandString));","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"owenyeo":42}},{"path":"src/test/java/chatbot/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"owenyeo"},"content":"package chatbot.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"owenyeo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"owenyeo"},"content":"import chatbot.exceptions.InvalidDescriptionException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"owenyeo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"owenyeo"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"owenyeo"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"owenyeo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"owenyeo"},"content":" public void NoDescriptionTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"owenyeo"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"owenyeo"},"content":" assertThrows(InvalidDescriptionException.class, () -\u003e tasks.addTask(\"\", TaskType.TODO));","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"owenyeo"},"content":" ","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"owenyeo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"owenyeo"},"content":" public void WrongDescriptionTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"owenyeo"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"owenyeo"},"content":" assertThrows(InvalidDescriptionException.class, () -\u003e tasks.addTask(\"test /by\", TaskType.DEADLINE));","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"owenyeo"},"content":" assertThrows(InvalidDescriptionException.class, () -\u003e tasks.addTask(\"test /from /to\", TaskType.EVENT));","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"owenyeo"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"owenyeo"},"content":" public void AddSuccessTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"owenyeo"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"owenyeo"},"content":" tasks.addTask(\"chicken\", TaskType.TODO);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"owenyeo"},"content":" tasks.addTask(\"chicken /by 1900-01-01 1200\", TaskType.DEADLINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"owenyeo"},"content":" tasks.addTask(\"chicken /from 1900-01-01 1200 /to 1950-01-01 0000\", TaskType.EVENT);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"owenyeo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"owenyeo"},"content":" assertEquals(tasks.getTask(1).toString(), \"[T][ ] chicken\");","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"owenyeo"},"content":" assertEquals(tasks.getTask(2).toString(), \"[D][ ] chicken (by: Jan 01 1900 12PM)\");","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"owenyeo"},"content":" assertEquals(tasks.getTask(3).toString(), \"[E][ ] chicken (from: Jan 01 1900 12PM | to: Jan 01 1950 12AM)\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"owenyeo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"owenyeo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"owenyeo":37}}] diff --git a/owenyeo_ip_master/commits.json b/owenyeo_ip_master/commits.json index 21c7fbcf..a4fa0824 100644 --- a/owenyeo_ip_master/commits.json +++ b/owenyeo_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"owenyeo":[{"date":"2023-08-23","commitResults":[{"hash":"1795e0430b6c33dba0cb82273ae40571f2f92f21","isMergeCommit":false,"messageTitle":"Added Skeleton code that outputs the required output as per source website. Added functionality to rename chatbot.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":10}}}]},{"date":"2023-08-24","commitResults":[{"hash":"413012363b9ff5f4b878e0fe934155b5392d95c8","isMergeCommit":false,"messageTitle":"Added echoing functionality Added functionality to read User input Added ability to exit chat when User Input is \"bye\" Provided documentation. Removed Message subclass due to redundancy.","messageBody":"","tags":["Level-2","Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":20}}},{"hash":"6390de9ac5672c7423960d145b1ca21265680528","isMergeCommit":false,"messageTitle":"Added the functionality of listing Added functionality to add items into list","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":3}}},{"hash":"b9fcb6aabba3f071f5710b8bff430b9ddc29ccaa","isMergeCommit":false,"messageTitle":"Added functionality to unmark and mark tasks as done","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":20}}},{"hash":"61b2190d55e210f50404f6b850dabc4c1c2a1693","isMergeCommit":false,"messageTitle":"Added functionality to add ToDo, Event, and Deadline Added a Command Enum for cleaner code Added new classes Task, Event, Todo, Deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":180,"deletions":36}}},{"hash":"7dfe76ed136f59e8c4256810c851d76e130799af","isMergeCommit":false,"messageTitle":"Added ChatBotException, InvalidCommandException, and InvalidDescrptionException. Added error handling in ChatBot.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":15}}},{"hash":"85de7a8f6f042e289cf8a4d990108e937cdf4378","isMergeCommit":false,"messageTitle":"Added delete functionality Added InvalidIndexException for number errors in mark, unmark, and delete.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":6}}}]},{"date":"2023-08-31","commitResults":[{"hash":"4fe58216de9bbcc76259411f3863519d9b2329ec","isMergeCommit":false,"messageTitle":"Added InvalidIndexException Added saveTasks to save data on a text file. Added loadTasks for potential future use.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":79,"deletions":19}}},{"hash":"3201c1952093818854059a2e688edec9443204b3","isMergeCommit":false,"messageTitle":"Improved on documentation Improved formatting of toSaveString in ChatBot.java Fixed bug where type of task is not correctly shown. Removed loadFile due to redundancy.","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":128,"deletions":78}}},{"hash":"2c3b2455a594dae4e0061a093ae8ebc943652b0a","isMergeCommit":false,"messageTitle":"Added functionality to store DateTime objects Added functionality to reformat DateTime when printing.","messageBody":"","tags":["Level-8","A-Jar"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":33,"deletions":15}}}]}]},"authorFileTypeContributionMap":{"owenyeo":{"java":568,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":1}},"authorContributionVariance":{"owenyeo":30062.062},"authorDisplayNameMap":{"owenyeo":"CS2103T-W12-4 OWEN..YANG"}} +{"authorDailyContributionsMap":{"owenyeo":[{"date":"2023-08-23","commitResults":[{"hash":"1795e0430b6c33dba0cb82273ae40571f2f92f21","isMergeCommit":false,"messageTitle":"Added Skeleton code that outputs the required output as per source website. Added functionality to rename chatbot.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":10}}}]},{"date":"2023-08-24","commitResults":[{"hash":"413012363b9ff5f4b878e0fe934155b5392d95c8","isMergeCommit":false,"messageTitle":"Added echoing functionality Added functionality to read User input Added ability to exit chat when User Input is \"bye\" Provided documentation. Removed Message subclass due to redundancy.","messageBody":"","tags":["Level-2","Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":20}}},{"hash":"6390de9ac5672c7423960d145b1ca21265680528","isMergeCommit":false,"messageTitle":"Added the functionality of listing Added functionality to add items into list","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":3}}},{"hash":"b9fcb6aabba3f071f5710b8bff430b9ddc29ccaa","isMergeCommit":false,"messageTitle":"Added functionality to unmark and mark tasks as done","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":20}}},{"hash":"61b2190d55e210f50404f6b850dabc4c1c2a1693","isMergeCommit":false,"messageTitle":"Added functionality to add ToDo, Event, and Deadline Added a Command Enum for cleaner code Added new classes Task, Event, Todo, Deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":180,"deletions":36}}},{"hash":"7dfe76ed136f59e8c4256810c851d76e130799af","isMergeCommit":false,"messageTitle":"Added ChatBotException, InvalidCommandException, and InvalidDescrptionException. Added error handling in ChatBot.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":15}}},{"hash":"85de7a8f6f042e289cf8a4d990108e937cdf4378","isMergeCommit":false,"messageTitle":"Added delete functionality Added InvalidIndexException for number errors in mark, unmark, and delete.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":6}}}]},{"date":"2023-08-31","commitResults":[{"hash":"4fe58216de9bbcc76259411f3863519d9b2329ec","isMergeCommit":false,"messageTitle":"Added InvalidIndexException Added saveTasks to save data on a text file. Added loadTasks for potential future use.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":79,"deletions":19}}},{"hash":"3201c1952093818854059a2e688edec9443204b3","isMergeCommit":false,"messageTitle":"Improved on documentation Improved formatting of toSaveString in ChatBot.java Fixed bug where type of task is not correctly shown. Removed loadFile due to redundancy.","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":128,"deletions":78}}},{"hash":"2c3b2455a594dae4e0061a093ae8ebc943652b0a","isMergeCommit":false,"messageTitle":"Added functionality to store DateTime objects Added functionality to reformat DateTime when printing.","messageBody":"","tags":["Level-8","A-Jar"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":33,"deletions":15}}}]},{"date":"2023-09-01","commitResults":[{"hash":"88f8909ee2a0685220eab8ef03d4c47c803e47dc","isMergeCommit":false,"messageTitle":"Refactored code into different files for more OOP Added functionality for Storage to load previous lists. Added SaveFileNotFound exception","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":531,"deletions":318}}},{"hash":"2ed0b5e3d95c7f6c017d81a1705cc64cf1057ac6","isMergeCommit":false,"messageTitle":"Reorganised code into packages. Added documentation for all new classes. Fixed bug when marking tasks as done and reloading it in the next session.","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":312,"deletions":39}}}]},{"date":"2023-09-02","commitResults":[{"hash":"c311b414345deb936c1d10e8fca2571d9ba744e0","isMergeCommit":false,"messageTitle":"Add Gradle support for Chat Bot","messageBody":"Previous version of ChatBot did not have support for Gradle.\n\nSupport for gradle is required as we ramp up automated unit testing.\nGradle support is therefore added, with JUnit tests coming in the next commit.\nGradle is used for its ease of use and compatibility with JUnit.\n\nFixed bugs regarding error messages not printing out.\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":25,"deletions":0},"txt":{"insertions":2,"deletions":0},"java":{"insertions":29,"deletions":10}}}]},{"date":"2023-09-04","commitResults":[{"hash":"7c128665cbb29a153071b78e27e0c9a6b3d4bbc2","isMergeCommit":false,"messageTitle":"Add JUnit tests into IP","messageBody":"No automated unit testing was implemented in this project. This led to time inefficiency as I had to\nmanually test each component one by one.\n\nTherefore, JUnit tests are being implemented to test the various components in this project. Currently,\nI am implementing only tests for TaskList and Parser. More will be implemented as required.\n\nFixed a bug regarding InvalidDescriptionException not being thrown when an empty description is passed through.\n","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":19,"deletions":0},"txt":{"insertions":1,"deletions":1},"java":{"insertions":151,"deletions":55}}},{"hash":"e11eebb40ed120b45ff5fba54bbc2dd365925806","isMergeCommit":false,"messageTitle":"Follow coding convention","messageBody":"No coding convention was adhered to. This causes code to be less readable by others.\n\nThus, from now on the project will adhere to Java Coding Convention. Checkstyle will be implemented and\nconsistent checks from developer side will continue to ensure this.\n","fileTypesAndContributionMap":{"gradle":{"insertions":9,"deletions":0}}},{"hash":"d367c95115089ca39fa3c99429c9202c343cd981","isMergeCommit":false,"messageTitle":"Add Find command","messageBody":"There is no find command currently in the chatbot. This makes it hard to look for tasks that\nthe user may specifically is looking for.\n\nA find command is thus added and is currently working as per developer\u0027s testing.\n","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":5},"txt":{"insertions":2,"deletions":0},"java":{"insertions":91,"deletions":7}}}]}]},"authorFileTypeContributionMap":{"owenyeo":{"java":1253,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":48,"txt":6}},"authorContributionVariance":{"owenyeo":93353.914},"authorDisplayNameMap":{"owenyeo":"CS2103T-W12-4 OWEN..YANG"}} diff --git a/pangyyen_ip_master/authorship.json b/pangyyen_ip_master/authorship.json index 4ba9f90c..4b3afc56 100644 --- a/pangyyen_ip_master/authorship.json +++ b/pangyyen_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"# duke.main.Duke project template","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"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-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"pangyyen":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":"pangyyen"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"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":"pangyyen"},"content":"//checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":"// toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":"//}","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" mainClass.set(\"duke.main.Duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"pangyyen":6,"-":41}},{"path":"src/main/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"D | 1 | return book | 2023-01-01","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"E | 0 | supernova | 2023-12-01 | 2023-01-10","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"T | 0 | borrow","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"T | 0 | swimming","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"T | 0 | borrow","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"D | 0 | return | 2024-01-01","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"T | 1 | borrow books","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"T | 0 | borrow books","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"D | 0 | return books | 2024-01-01","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"E | 0 | super nova | 2023-01-01 | 2023-02-02","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":10}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":" * Represents a command to be executed.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"public class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" private final String commandType;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" private LocalDate deadlineDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" private LocalDate eventFromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" private LocalDate eventToDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" public Command(String commandType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" public Command(String commandType, String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" public Command(String commandType, int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" public Command(String commandType, String description, LocalDate deadlineDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" this.deadlineDate \u003d deadlineDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" public Command(String commandType, String description, LocalDate eventFromDate, LocalDate eventToDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" this.eventFromDate \u003d eventFromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" this.eventToDate \u003d eventToDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" public int getTaskIndex() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" return this.taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" public String getCommandType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" return this.commandType;","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" public LocalDate getDeadlineDate() {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" return this.deadlineDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" public LocalDate getEventFromDate() {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" return this.eventFromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"pangyyen"},"content":" public LocalDate getEventToDate() {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"pangyyen"},"content":" return this.eventToDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"pangyyen":65}},{"path":"src/main/java/duke/commands/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import duke.exception.DeadlineException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import duke.exception.EventException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" * Represents a parser that parses the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" private static final DateTimeFormatter dataFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" * Parses the user input and returns the corresponding command.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" * @param userInput The user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" * @return The corresponding command.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" * @throws DukeException If the user input is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" public static Command parse(String userInput) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" String commandType \u003d getCommandType(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" return new Command(commandType);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" return new Command(commandType, getTaskIndex(userInput)); // taskIndex is -1 if invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" return new Command(commandType, getDescription(userInput));","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" return new Command(commandType, getDeadlineDescription(userInput), getDeadlineDate(userInput));","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" LocalDate[] eventDates \u003d getEventDates(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":" LocalDate eventFromDate \u003d eventDates[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" LocalDate eventToDate \u003d eventDates[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" return new Command(commandType, getEventDescription(userInput), eventFromDate, eventToDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" throw new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" * Parses the data string from the storage file and returns the corresponding task.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":" * example of data string:","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"pangyyen"},"content":" * T | 1 | read book","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"pangyyen"},"content":" * D | 0 | return book | June 6th","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"pangyyen"},"content":" * E | 0 | project meeting | Aug 6th 2-4pm","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"pangyyen"},"content":" * File corruption is not handled.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"pangyyen"},"content":" * @return The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"pangyyen"},"content":" public static Task parseFileString(String taskData) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"pangyyen"},"content":" String[] parts \u003d taskData.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"pangyyen"},"content":" String type \u003d parts[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"pangyyen"},"content":" if (parts.length \u003c 3) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pangyyen"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"pangyyen"},"content":" String isDone \u003d parts[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"pangyyen"},"content":" String description \u003d parts[2].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"pangyyen"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"pangyyen"},"content":" switch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"pangyyen"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"pangyyen"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"pangyyen"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"pangyyen"},"content":" String by \u003d parts[3].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"pangyyen"},"content":" task \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"pangyyen"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"pangyyen"},"content":" String from \u003d parts[3].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"pangyyen"},"content":" String to \u003d parts[4].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"pangyyen"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"pangyyen"},"content":" if (isDone.equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"pangyyen"},"content":" assert task !\u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"pangyyen"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"pangyyen"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"pangyyen"},"content":" * reads the task and returns the corresponding data string to be written to the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"pangyyen"},"content":" * @param task The task to be read.","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"pangyyen"},"content":" * @return String to be written to the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"pangyyen"},"content":" public static String readTaskToFile(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"pangyyen"},"content":" StringBuilder data \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"pangyyen"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"pangyyen"},"content":" data.append(\"T\");","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"pangyyen"},"content":" data.append(\" | \").append(task.isDone() ? \"1\" : \"0\");","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"pangyyen"},"content":" data.append(\" | \").append(task.getDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"pangyyen"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"pangyyen"},"content":" data.append(\"D\");","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"pangyyen"},"content":" data.append(\" | \").append(task.isDone() ? \"1\" : \"0\");","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"pangyyen"},"content":" data.append(\" | \").append(task.getDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"pangyyen"},"content":" data.append(\" | \").append(((Deadline) task).getBy());","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"pangyyen"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"pangyyen"},"content":" data.append(\"E\");","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"pangyyen"},"content":" data.append(\" | \").append(task.isDone() ? \"1\" : \"0\");","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"pangyyen"},"content":" data.append(\" | \").append(task.getDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"pangyyen"},"content":" data.append(\" | \").append(((Event) task).getFrom()).append(\" | \").append(((Event) task).getTo());","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"pangyyen"},"content":" return data.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"pangyyen"},"content":" private static String getCommandType(String userInput) {","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"pangyyen"},"content":" String[] parts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"pangyyen"},"content":" return parts.length \u003e 0 ? parts[0] : \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"pangyyen"},"content":" public static String getDescription(String userInput) {","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"pangyyen"},"content":" String[] parts \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"pangyyen"},"content":" return parts.length \u003e 1 ? parts[1] : \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"pangyyen"},"content":" public static String getDeadlineDescription(String userInput) {","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"pangyyen"},"content":" String[] parts \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"pangyyen"},"content":" return parts.length \u003e 1 ? parts[1].split(\"/by\", 2)[0].trim() : \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"pangyyen"},"content":" public static String getEventDescription(String userInput) {","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"pangyyen"},"content":" String[] parts \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"pangyyen"},"content":" return parts.length \u003e 1 ? parts[1].split(\"/from\", 2)[0].trim() : \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"pangyyen"},"content":" * Returns the task index from the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"pangyyen"},"content":" * @param userInput The user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"pangyyen"},"content":" * @return The task index.","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"pangyyen"},"content":" * @throws DukeException If the task index is not numeric.","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"pangyyen"},"content":" public static int getTaskIndex(String userInput) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"pangyyen"},"content":" String[] parts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"pangyyen"},"content":" if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"pangyyen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"pangyyen"},"content":" return Integer.parseInt(parts[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"pangyyen"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"pangyyen"},"content":" throw new DukeException(\"Error, please enter a number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"pangyyen"},"content":" throw new DukeException(\"Error, please enter a number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"pangyyen"},"content":" * Returns the deadline date from the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"pangyyen"},"content":" * example of deadline date: 2020-02-02","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"pangyyen"},"content":" * @param userInput The user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"pangyyen"},"content":" * @return The deadline date.","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"pangyyen"},"content":" * @throws DeadlineException If the deadline date is empty or invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"pangyyen"},"content":" private static LocalDate getDeadlineDate(String userInput) throws DeadlineException {","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"pangyyen"},"content":" String[] parts \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"pangyyen"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"pangyyen"},"content":" throw new DeadlineException(\"detail: Description or deadline date is empty\");","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"pangyyen"},"content":" String description \u003d parts[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"pangyyen"},"content":" // Check if /by exists in the description","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"pangyyen"},"content":" if (!description.contains(\"/by\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"pangyyen"},"content":" throw new DeadlineException(\"detail: Description does not contain /by\");","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"pangyyen"},"content":" String[] desArray \u003d description.split(\"/by\", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"pangyyen"},"content":" String taskDescription \u003d desArray[0].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"pangyyen"},"content":" String deadlineDate \u003d desArray[1].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"pangyyen"},"content":" if (taskDescription.isEmpty() || deadlineDate.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"pangyyen"},"content":" throw new DeadlineException(\"detail: Description or deadline date is empty\");","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"pangyyen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"pangyyen"},"content":" // Validate date format and return LocalDate object","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"pangyyen"},"content":" return LocalDate.parse(deadlineDate, dataFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"pangyyen"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"pangyyen"},"content":" throw new DeadlineException(\"detail: Invalid date format. Please use yyyy-MM-dd\");","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"pangyyen"},"content":" * Returns the event dates from the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"pangyyen"},"content":" * example of event dates: 2020-02-02 2020-02-03","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"pangyyen"},"content":" * @param userInput The user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"pangyyen"},"content":" * @return The event dates.","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"pangyyen"},"content":" * @throws EventException If the event dates are empty or invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"pangyyen"},"content":" private static LocalDate[] getEventDates(String userInput) throws EventException {","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"pangyyen"},"content":" String[] parts \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"pangyyen"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"pangyyen"},"content":" throw new EventException(\"details: Description or event dates are empty\");","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"pangyyen"},"content":" String description \u003d parts[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"pangyyen"},"content":" // Check if both /from and /to exist in the description","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"pangyyen"},"content":" if (!description.contains(\"/from\") || !description.contains(\"/to\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"pangyyen"},"content":" throw new EventException(\"details: Description does not contain /from or /to\");","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"pangyyen"},"content":" String[] desArray \u003d description.split(\"/from\", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"pangyyen"},"content":" String taskDescription \u003d desArray[0].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"pangyyen"},"content":" // Split the timing description further using /to","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"pangyyen"},"content":" String[] timingArr \u003d desArray[1].split(\"/to\", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"pangyyen"},"content":" String eventFrom \u003d timingArr[0].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"pangyyen"},"content":" String eventTo \u003d timingArr[1].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"pangyyen"},"content":" if (taskDescription.isEmpty() || eventFrom.isEmpty() || eventTo.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"pangyyen"},"content":" throw new EventException(\"details: Description or event dates are empty\");","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"pangyyen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"pangyyen"},"content":" LocalDate eventFromDate \u003d LocalDate.parse(eventFrom, dataFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":240,"author":{"gitId":"pangyyen"},"content":" LocalDate eventToDate \u003d LocalDate.parse(eventTo, dataFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":241,"author":{"gitId":"pangyyen"},"content":" return new LocalDate[]{eventFromDate, eventToDate};","lastModifiedDate":"2023-09-01"},{"lineNumber":242,"author":{"gitId":"pangyyen"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"pangyyen"},"content":" throw new EventException(\"details: Invalid date format. Please use yyyy-MM-dd\");","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"pangyyen":246}},{"path":"src/main/java/duke/exception/DeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":" * Represents an exception that occurs when the format for adding a deadline is incorrect.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"public class DeadlineException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" public DeadlineException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" super(\"The format for adding a deadline is incorrect. Please use: \u0027deadline [description] /by [yyyy-MM-dd]\u0027\");","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" public DeadlineException(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" super(\"The format for adding a deadline is incorrect. Please use: \u0027deadline [description] /by [yyyy-MM-dd]\u0027\"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" + \"\\n\" + s);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":15}},{"path":"src/main/java/duke/exception/DeleteException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":" * Represents an exception that occurs when the format for deleting a task is incorrect.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"public class DeleteException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" public DeleteException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" super(\"The format for deleting a task is incorrect. Please use: \u0027delete [index of task]\u0027\");","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" public DeleteException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" super(\"The format for deleting a task is incorrect. Please use: \u0027delete [index of task]\u0027\"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" + \"\\n\" + message);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":15}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":" * Represents an exception that occurs when the format for a command is incorrect.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":10}},{"path":"src/main/java/duke/exception/EventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":" * Represents an exception that occurs when the format for adding an event is incorrect.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"public class EventException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" public EventException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" super(\"The format for adding an event is incorrect. Please use: \u0027event [description] /from [yyyy-MM-dd] /to [yyyy-MM-dd]\u0027\");","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" public EventException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" super(\"The format for adding an event is incorrect. Please use: \u0027event [description] /from [yyyy-MM-dd] /to [yyyy-MM-dd]\u0027\"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" + \"\\n\" + message);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":15}},{"path":"src/main/java/duke/exception/TodoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":" * Represents an exception that occurs when the format for a command is incorrect.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"public class TodoException extends DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" public TodoException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" super(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":10}},{"path":"src/main/java/duke/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.main;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"import duke.task.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import duke.exception.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"import duke.commands.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" * The main class that initiates the chatbot application.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" private final String FILE_PATH \u003d \"./src/main/data/duke.txt\";","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" private final Storage storage \u003d new Storage(FILE_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" * Initializes the Chatbot with an empty task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" public Duke() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" * Marks a task as done and provides user feedback","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" * @param taskIndex Index of the task to be marked as done, starts from \u00271\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" public void markTaskByBot(int taskIndex) throws DeleteException {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" if (!taskList.isValidListIndex(taskIndex - 1)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" throw new DeleteException(\"Invalid Index of task!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" taskList.markTaskAsDone(taskIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" saveTasksToFile(this.taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(taskList.getTaskDetails(taskIndex - 1));","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" * Marks a task as not done and provides user feedback.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" * @param taskIndex Index of the task to be marked as not done, starts from \u00271\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":" public void unmarkTaskByBot(int taskIndex) throws DeleteException {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" if (!taskList.isValidListIndex(taskIndex - 1)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" throw new DeleteException(\"detail: Invalid Index of task!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" taskList.markTaskAsNotDone(taskIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" saveTasksToFile(this.taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(\" OK, I\u0027ve marked this task as not done yet:\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" taskList.getTaskDetails(taskIndex - 1));","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"pangyyen"},"content":" * Deletes a task from the task list based on the provided input.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"pangyyen"},"content":" * @param taskIndex The index of the task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"pangyyen"},"content":" * @throws DeleteException If the input string is not numeric or if the task index is out of valid range.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"pangyyen"},"content":" public void deleteTaskByBot(int taskIndex) throws DeleteException {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"pangyyen"},"content":" if (taskIndex \u003c 1 || taskIndex \u003e taskList.getTaskCount()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"pangyyen"},"content":" throw new DeleteException(\"Invalid Index of task!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"pangyyen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(\" Noted. I\u0027ve removed this task:\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"pangyyen"},"content":" this.taskList.getTaskDetails(taskIndex - 1) +","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pangyyen"},"content":" \"\\n Now you have \" + (taskList.getTaskCount() - 1) + \" tasks in the list.\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"pangyyen"},"content":" taskList.deleteTask(taskIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"pangyyen"},"content":" * Adds a todo task to the task list and provides user feedback","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"pangyyen"},"content":" * @param description The description of the todo task","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"pangyyen"},"content":" * @throws TodoException If the description is empty","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"pangyyen"},"content":" public void addTodo(String description) throws TodoException {","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"pangyyen"},"content":" Task newTask;","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"pangyyen"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"pangyyen"},"content":" throw new TodoException();","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"pangyyen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"pangyyen"},"content":" newTask \u003d new Todo(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"pangyyen"},"content":" \" Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"pangyyen"},"content":" newTask +","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"pangyyen"},"content":" \"\\n Now you have \" + taskList.getTaskCount() + \" tasks in the list.\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"pangyyen"},"content":" * Adds a deadline task to the task list and provides user feedback","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"pangyyen"},"content":" * @param description The description of the deadline task","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"pangyyen"},"content":" * @param deadlineDate The deadline date of the deadline task","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"pangyyen"},"content":" * @throws DeadlineException If the description or deadline date is empty","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"pangyyen"},"content":" public void addDeadline(String description, LocalDate deadlineDate) throws DeadlineException {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"pangyyen"},"content":" if (description.isEmpty() || deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"pangyyen"},"content":" System.out.println(\"Error in addDeadline\");","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"pangyyen"},"content":" throw new DeadlineException();","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"pangyyen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"pangyyen"},"content":" Task newTask \u003d new Deadline(description, deadlineDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"pangyyen"},"content":" \" Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"pangyyen"},"content":" newTask +","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"pangyyen"},"content":" \"\\n Now you have \" + taskList.getTaskCount() + \" tasks in the list.\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"pangyyen"},"content":" * Adds an event task to the task list and provides user feedback","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"pangyyen"},"content":" * @param description The description of the event task","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"pangyyen"},"content":" * @param eventFromDate The start date of the event task","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"pangyyen"},"content":" * @param eventToDate The end date of the event task","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"pangyyen"},"content":" * @throws EventException If the description, start date or end date is empty","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"pangyyen"},"content":" public void addEvent(String description, LocalDate eventFromDate, LocalDate eventToDate) throws EventException {","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"pangyyen"},"content":" if (description.isEmpty() || eventFromDate \u003d\u003d null || eventToDate \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"pangyyen"},"content":" throw new EventException();","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"pangyyen"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"pangyyen"},"content":" Task newTask \u003d new Event(description, eventFromDate, eventToDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"pangyyen"},"content":" \" Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"pangyyen"},"content":" newTask +","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"pangyyen"},"content":" \"\\n Now you have \" + taskList.getTaskCount() + \" tasks in the list.\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"pangyyen"},"content":" * Loads the tasks from the storage file","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"pangyyen"},"content":" private void loadTasksFromFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"pangyyen"},"content":" for (Task taskData : storage.loadTasks()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"pangyyen"},"content":" this.taskList.addTask(taskData);","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"pangyyen"},"content":" if (!this.taskList.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"pangyyen"},"content":" System.out.println(this.taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"pangyyen"},"content":" * Saves the tasks to the storage file","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"pangyyen"},"content":" private void saveTasksToFile(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"pangyyen"},"content":" this.storage.saveTasks(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"pangyyen"},"content":" * Finds tasks containing the given keyword and displays them.","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"pangyyen"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"pangyyen"},"content":" public void findTasksByKeyword(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"pangyyen"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d taskList.findTasksByKeyword(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"pangyyen"},"content":" if (matchingTasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(\"No matching tasks found.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"pangyyen"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"pangyyen"},"content":" StringBuilder matchingTasksString \u003d new StringBuilder();","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"pangyyen"},"content":" matchingTasksString.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"pangyyen"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"pangyyen"},"content":" for (Task task : matchingTasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"pangyyen"},"content":" matchingTasksString.append(count).append(\".\").append(task).append(\"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"pangyyen"},"content":" count++;","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(matchingTasksString.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"pangyyen"},"content":" * Handles the command based on the command type","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"pangyyen"},"content":" * @param command The command to be handled","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"pangyyen"},"content":" * @return True if the command is not \"bye\", false otherwise","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"pangyyen"},"content":" * @throws DukeException If the command type is not recognized","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"pangyyen"},"content":" public boolean handleCommand(Command command) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"pangyyen"},"content":" String commandType \u003d command.getCommandType();","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"pangyyen"},"content":" String description \u003d command.getDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"pangyyen"},"content":" int taskIndex \u003d command.getTaskIndex();","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"pangyyen"},"content":" LocalDate deadlineDate \u003d command.getDeadlineDate();","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"pangyyen"},"content":" LocalDate eventFromDate \u003d command.getEventFromDate();","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"pangyyen"},"content":" LocalDate eventToDate \u003d command.getEventToDate();","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"pangyyen"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"pangyyen"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"pangyyen"},"content":" this.markTaskByBot(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"pangyyen"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"pangyyen"},"content":" this.unmarkTaskByBot(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"pangyyen"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"pangyyen"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"pangyyen"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(this.taskList.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"pangyyen"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"pangyyen"},"content":" this.findTasksByKeyword(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"pangyyen"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"pangyyen"},"content":" this.addTodo(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"pangyyen"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"pangyyen"},"content":" this.addDeadline(description, deadlineDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"pangyyen"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"pangyyen"},"content":" this.addEvent(description, eventFromDate, eventToDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"pangyyen"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"pangyyen"},"content":" this.deleteTaskByBot(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"pangyyen"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"pangyyen"},"content":" throw new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"pangyyen"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"pangyyen"},"content":" * Starts the chatbot application","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"pangyyen"},"content":" public void start() {","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"pangyyen"},"content":" Ui.showWelcomeMessage();","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"pangyyen"},"content":" String userInput;","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"pangyyen"},"content":" Command parsedCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":237,"author":{"gitId":"pangyyen"},"content":" this.loadTasksFromFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":239,"author":{"gitId":"pangyyen"},"content":" boolean isContinuing \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":240,"author":{"gitId":"pangyyen"},"content":" while (isContinuing) {","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"pangyyen"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"pangyyen"},"content":" userInput \u003d Ui.getUserInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"pangyyen"},"content":" parsedCommand \u003d Parser.parse(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"pangyyen"},"content":" isContinuing \u003d handleCommand(parsedCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"pangyyen"},"content":" this.saveTasksToFile(this.taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":246,"author":{"gitId":"pangyyen"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":247,"author":{"gitId":"pangyyen"},"content":" Ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":249,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":250,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":251,"author":{"gitId":"pangyyen"},"content":" Ui.showGoodByeMessage();","lastModifiedDate":"2023-08-31"},{"lineNumber":252,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":255,"author":{"gitId":"pangyyen"},"content":" Duke duke \u003d new Duke();","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"pangyyen"},"content":" duke.start();","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":258,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"pangyyen":254,"-":4}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"import duke.commands.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" * Represents a storage for tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" private final String filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" * Loads tasks from the file path","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" * @return An ArrayList of tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" public ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" try (Scanner scanner \u003d new Scanner(new File(filePath))) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" task \u003d Parser.parseFileString(scanner.nextLine());","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(\"Data file not found, starting with an empty task list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" * Saves tasks to the file path","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" * @param tasks The task list to be saved","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" public void saveTasks(TaskList tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" try (PrintWriter writer \u003d new PrintWriter(new FileWriter(filePath))) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" for (int i \u003d 0; i \u003c tasks.getTaskCount(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" writer.println(Parser.readTaskToFile(tasks.getTask(i)));","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":" Ui.showErrorMessage(\"Error saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"pangyyen":60}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" * Represents a deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" public LocalDate getBy() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" return this.by;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" * Returns a string representation of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" * example: [D][X] return book (by: Aug 6 2021)","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" * @return String representation of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" + by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":38}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" * Represents an event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":" protected LocalDate from;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" protected LocalDate to;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" public Event(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" public LocalDate getFrom() {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" return this.from;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" public LocalDate getTo() {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" return this.to;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" * Returns a string representation of the event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" * The string representation is formatted as follows:","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" * example: [E][X] project meeting (at: Aug 6 2021)","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" * @return String representation of the event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" return String.format(\"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" super.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")),","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":47}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":" * Represents a generic task with a description and completion status","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" * Gets the status icon representing the completion status of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" * @return \"X\" if the task is done, \" \" (space) if not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" return (this.isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" * Gets the description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" return (this.description);","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" * Marks the task as done by setting the completion status to true.","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" * Marks the task as not done by setting the completion status to false.","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" return this.isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" * example: [T][X] return book","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"pangyyen"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"pangyyen"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"pangyyen"},"content":" return String.format(\"[\" + this.getStatusIcon() + \"] \" + this.getDescription());","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":66}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" * Represents a list of tasks and provides methods to manipulate them","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"public class TaskList {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" private int taskCount;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" * Initializes a dynamic empty task list with a maximum capacity.","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" public TaskList() {","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" tasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" taskCount \u003d 0;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" * Checks if the given task index is valid within the task list.","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" * @param taskListIndex The index of the task to be checked.","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" * @return True if the task index is valid, otherwise false.","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" public boolean isValidListIndex(int taskListIndex) {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" return (taskListIndex \u003e\u003d 0 \u0026\u0026 taskListIndex \u003c taskCount);","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" * Retrieves details of a specific task within the task list.","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" * @param taskListIndex The index of the task in the task list.","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" * @return Details of the task as a formatted string, or null if the index is invalid.","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" public String getTaskDetails(int taskListIndex) {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" if (isValidListIndex(taskListIndex)) {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" Task task \u003d tasks.get(taskListIndex);","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" return task.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(\"Invalid Index of task!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" return null;","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" * Retrieves a specific task within the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" * @param taskListIndex The index of the task in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" * @return The task, or null if the index is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" public Task getTask(int taskListIndex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" if (isValidListIndex(taskListIndex)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":" return tasks.get(taskListIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(\"Invalid Index of task!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"pangyyen"},"content":" * Gets the current count of tasks in the task list.","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"pangyyen"},"content":" * @return The count of tasks in the task list.","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"pangyyen"},"content":" public int getTaskCount() {","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"pangyyen"},"content":" return this.taskCount;","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"pangyyen"},"content":" * Adds a task to the task list if space is available.","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"pangyyen"},"content":" * @param task The task to be added to the task list.","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"pangyyen"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"pangyyen"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"pangyyen"},"content":" this.taskCount++;","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"pangyyen"},"content":" * Deletes a task from the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"pangyyen"},"content":" * @param taskListIndex The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"pangyyen"},"content":" public void deleteTask(int taskListIndex) {","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"pangyyen"},"content":" this.tasks.remove(taskListIndex);","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"pangyyen"},"content":" this.taskCount--;","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":93,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"pangyyen"},"content":" * Marks a task in the task list as done.","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"pangyyen"},"content":" * @param taskListIndex The index of the task to be marked as done.","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":98,"author":{"gitId":"pangyyen"},"content":" public void markTaskAsDone(int taskListIndex) {","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"pangyyen"},"content":" if (isValidListIndex(taskListIndex)) {","lastModifiedDate":"2023-08-23"},{"lineNumber":100,"author":{"gitId":"pangyyen"},"content":" this.tasks.get(taskListIndex).markAsDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":102,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":103,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":104,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":105,"author":{"gitId":"pangyyen"},"content":" * Marks a task in the task list as not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"pangyyen"},"content":" * @param taskListIndex The index of the task to be marked as not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":108,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":109,"author":{"gitId":"pangyyen"},"content":" public void markTaskAsNotDone(int taskListIndex) {","lastModifiedDate":"2023-08-23"},{"lineNumber":110,"author":{"gitId":"pangyyen"},"content":" if (isValidListIndex(taskListIndex)) {","lastModifiedDate":"2023-08-23"},{"lineNumber":111,"author":{"gitId":"pangyyen"},"content":" this.tasks.get(taskListIndex).markAsNotDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":112,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":113,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":114,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":115,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"pangyyen"},"content":" * Searches for tasks containing the given keyword and returns a list of matching tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"pangyyen"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"pangyyen"},"content":" * @return A list of matching tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"pangyyen"},"content":" public ArrayList\u003cTask\u003e findTasksByKeyword(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"pangyyen"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"pangyyen"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"pangyyen"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"pangyyen"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"pangyyen"},"content":" return matchingTasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":132,"author":{"gitId":"pangyyen"},"content":" * Displays the tasks in the task list with their details.","lastModifiedDate":"2023-08-23"},{"lineNumber":133,"author":{"gitId":"pangyyen"},"content":" * example: [T][X] return book","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"pangyyen"},"content":" * @return String representation of the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":137,"author":{"gitId":"pangyyen"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"pangyyen"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"pangyyen"},"content":" if (taskCount \u003d\u003d 0) {","lastModifiedDate":"2023-08-23"},{"lineNumber":140,"author":{"gitId":"pangyyen"},"content":" return \"Horray!! No tasks in the task list!\";","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"pangyyen"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":142,"author":{"gitId":"pangyyen"},"content":" StringBuilder taskListString \u003d new StringBuilder(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"pangyyen"},"content":" for (int i \u003d 0; i \u003c taskCount; i++) {","lastModifiedDate":"2023-08-23"},{"lineNumber":144,"author":{"gitId":"pangyyen"},"content":" taskListString.append((i + 1)).append(\". \").append(this.getTaskDetails(i)).append(\"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":146,"author":{"gitId":"pangyyen"},"content":" return taskListString.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":148,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":149,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"pangyyen"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"pangyyen"},"content":" return (taskCount \u003d\u003d 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":153}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":" * Represents a todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" * Returns a string representation of the todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" * example: [T][X] return book","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" * @return String representation of the todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":21}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":" * Represents the user interface of the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" private static final Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" * Prints the welcome message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" public static void showWelcomeMessage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" System.out.println(\" Hello! I\u0027m duke.main.Duke\\n What can I do for you?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" * Prints the goodbye message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" public static void showGoodByeMessage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" * Prints a message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" public static void showMessage(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" * Prints an error message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" * @param error The error message to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" public static void showErrorMessage(String error) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" showMessage(\"☹ OOPS!!! \" + error);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" * Retrieves the next line of user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" * @return The next line of user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" public static String getUserInput() {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"pangyyen":57}},{"path":"src/test/data/dukeTest.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":2}},{"path":"src/test/java/commands/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import duke.commands.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import duke.exception.DeadlineException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"import duke.exception.EventException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" public void parseTodoTest() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" String userInput \u003d \"todo Sample\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" Command command \u003d Parser.parse(userInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" assertEquals(command.getCommandType(), \"todo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample\", command.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" public void parseDeadlineTest() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" String userInput \u003d \"deadline Sample /by 2023-12-31\";","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" Command command \u003d Parser.parse(userInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" assertEquals(command.getCommandType(), \"deadline\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample\", command.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" assertEquals(LocalDate.parse(\"2023-12-31\"), command.getDeadlineDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" public void parseEventTest() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" String userInput \u003d \"event Sample /from 2023-12-31 /to 2024-01-01\";","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" Command command \u003d Parser.parse(userInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" assertEquals(command.getCommandType(), \"event\");","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample\", command.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" assertEquals(LocalDate.parse(\"2023-12-31\"), command.getEventFromDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" assertEquals(LocalDate.parse(\"2024-01-01\"), command.getEventToDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" public void parseInvalidCommandTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" String userInput \u003d \"invalidCommand\";","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" assertThrows(DukeException.class, () -\u003e Parser.parse(userInput));","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":" public void parseFileStringTodoTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" String taskData \u003d \"T | 1 | Sample Todo\";","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" Task task \u003d Parser.parseFileString(taskData);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"pangyyen"},"content":" assertTrue(task instanceof Todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample Todo\", task.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"pangyyen"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"pangyyen"},"content":" public void parseFileStringDeadlineTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"pangyyen"},"content":" String taskData \u003d \"D | 0 | Sample Deadline | 2023-12-31\";","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"pangyyen"},"content":" Task task \u003d Parser.parseFileString(taskData);","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"pangyyen"},"content":" assertTrue(task instanceof Deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample Deadline\", task.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":74}},{"path":"src/test/java/duke/commands/CommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"public class CommandTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" public void constructorWithTypeOnlyTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" Command command \u003d new Command(\"bye\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"bye\", command.getCommandType());","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" assertEquals(0, command.getTaskIndex());","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getDeadlineDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getEventFromDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getEventToDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" public void constructorWithTypeAndDescriptionTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" Command command \u003d new Command(\"todo\", \"Sample Todo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"todo\", command.getCommandType());","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample Todo\", command.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" assertEquals(0, command.getTaskIndex());","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getDeadlineDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getEventFromDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getEventToDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" public void constructorWithTypeAndTaskIndexTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" Command command \u003d new Command(\"delete\", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"delete\", command.getCommandType());","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" assertEquals(2, command.getTaskIndex());","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getDeadlineDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getEventFromDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getEventToDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" public void constructorWithTypeDescriptionAndDeadlineDateTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" LocalDate deadlineDate \u003d LocalDate.parse(\"2023-12-31\");","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":" Command command \u003d new Command(\"deadline\", \"Sample Deadline\", deadlineDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"deadline\", command.getCommandType());","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample Deadline\", command.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" assertEquals(0, command.getTaskIndex());","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" assertEquals(deadlineDate, command.getDeadlineDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getEventFromDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getEventToDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" public void constructorWithTypeDescriptionAndEventDatesTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" LocalDate eventFromDate \u003d LocalDate.parse(\"2023-12-31\");","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":" LocalDate eventToDate \u003d LocalDate.parse(\"2024-01-01\");","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"pangyyen"},"content":" Command command \u003d new Command(\"event\", \"Sample Event\", eventFromDate, eventToDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"event\", command.getCommandType());","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample Event\", command.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"pangyyen"},"content":" assertEquals(0, command.getTaskIndex());","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getDeadlineDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"pangyyen"},"content":" assertEquals(eventFromDate, command.getEventFromDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"pangyyen"},"content":" assertEquals(eventToDate, command.getEventToDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":69}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"class DeadlineTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" void getByTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" LocalDate date \u003d LocalDate.now();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" Deadline deadline \u003d new Deadline(\"Sample Deadline\", date);","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" assertEquals(date, deadline.getBy());","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" void testToStringTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" LocalDate date \u003d LocalDate.now();","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" Deadline deadline \u003d new Deadline(\"Sample Deadline\", date);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[D][ ] Sample Deadline (by: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" + date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" + \")\", deadline.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[D][X] Sample Deadline (by: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" + date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" + \")\", deadline.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":32}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"class EventTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" void getFromAndToTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" LocalDate fromDate \u003d LocalDate.now();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" LocalDate toDate \u003d fromDate.plusDays(2);","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" Event event \u003d new Event(\"Sample Event\", fromDate, toDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" assertEquals(fromDate, event.getFrom());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" assertEquals(toDate, event.getTo());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" void toStringTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" LocalDate fromDate \u003d LocalDate.now();","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" LocalDate toDate \u003d fromDate.plusDays(2);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" Event event \u003d new Event(\"Sample Event\", fromDate, toDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[E][ ] Sample Event (from: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" + fromDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" + \" to: \" + toDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\", event.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[E][X] Sample Event (from: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" + fromDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" + \" to: \" + toDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\", event.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":37}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertNull;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertSame;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" @BeforeEach","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" public void setUp() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" void getTaskDetails() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" Task task1 \u003d new Task(\"Sample Task 1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" Task task2 \u003d new Task(\"Sample Task 2\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task1);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task2);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[ ] Sample Task 1\", taskList.getTaskDetails(0));","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[ ] Sample Task 2\", taskList.getTaskDetails(1));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" void addTaskTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" Task task \u003d new Task(\"Sample Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" assertEquals(1, taskList.getTaskCount());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" assertSame(taskList.getTask(0), task);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" void deleteTaskTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" Task task \u003d new Task(\"Sample Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" assertEquals(1, taskList.getTaskCount());","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":" assertEquals(0, taskList.getTaskCount());","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" assertNull(taskList.getTask(0));","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" void markTaskAsDoneTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" Task task \u003d new Task(\"Sample Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" taskList.markTaskAsDone(0);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"pangyyen"},"content":" void markTaskAsNotDoneTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"pangyyen"},"content":" Task task \u003d new Task(\"Sample Task\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"pangyyen"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"pangyyen"},"content":" taskList.markTaskAsNotDone(0);","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"pangyyen"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"pangyyen"},"content":" public void testIsEmpty() {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"pangyyen"},"content":" assertTrue(taskList.isEmpty());","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"pangyyen"},"content":" Task task \u003d new Task(\"Sample Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"pangyyen"},"content":" assertFalse(taskList.isEmpty());","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"pangyyen"},"content":" void toStringTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Horray!! No tasks in the task list!\", taskList.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"pangyyen"},"content":" Task task1 \u003d new Task(\"Sample Task 1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"pangyyen"},"content":" Task task2 \u003d new Task(\"Sample Task 2\");","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task1);","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task2);","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"pangyyen"},"content":" String expected \u003d \"Here are the tasks in your list:\\n1. [ ] Sample Task 1\\n2. [ ] Sample Task 2\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"pangyyen"},"content":" assertEquals(expected, taskList.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":93}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"class TaskTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":" void getStatusIconTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" Task task1 \u003d new Task(\"Sample Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" assertFalse(task1.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" assertEquals(\" \", task1.getStatusIcon());","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" Task task2 \u003d new Task(\"Completed Task\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" assertTrue(task2.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"X\", task2.getStatusIcon());","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" void getDescriptionTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" Task task1 \u003d new Task(\"Sample Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample Task\", task1.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" Task task2 \u003d new Task(\"Another Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Another Task\", task2.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" void markAsDoneTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" Task task \u003d new Task(\"Sample Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" void markAsNotDoneTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" Task task \u003d new Task(\"Sample Task\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" Task task \u003d new Task(\"Sample Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[ ] Sample Task\", task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[X] Sample Task\", task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":55}},{"path":"src/test/java/duke/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"class TodoTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":" void toStringTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[T][ ] Sample Todo\", todo.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[T][X] Sample Todo\", todo.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":17}},{"path":"src/test/java/duke/ui/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.ui; //same package as the class being tested","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"public class UiTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" public void dummyTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" public void anotherDummyTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":17}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"event student life fair /from Mon /to Sun","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"todo eat dinner","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"delete 4","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"delete 5","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"delete","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":"deadline","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":"blah","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":"deadline go fairprice","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":"deadlien go fairprice /by","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":"deadline go fairprice /by","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":"event go fairprice","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":"event go fairprice /to /ftrom","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":"event go fairprice /to sun /from mon","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":"event go fair price /from sun","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":"event go fair price /to sun","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":25}},{"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":"pangyyen"},"content":"java -classpath ..\\bin duke.main.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"pangyyen":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"# duke.main.Duke project template","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"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-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"pangyyen":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":"pangyyen"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"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":"pangyyen"},"content":"//checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":"// toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":"//}","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" mainClass.set(\"duke.main.Duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"pangyyen":6,"-":41}},{"path":"src/main/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"D | 1 | return book | 2023-01-01","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"E | 0 | supernova | 2023-12-01 | 2023-01-10","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"T | 0 | borrow","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"T | 0 | swimming","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"T | 0 | borrow","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"D | 0 | return | 2024-01-01","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"T | 1 | borrow books","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"T | 0 | borrow books","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"D | 0 | return books | 2024-01-01","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"E | 0 | super nova | 2023-01-01 | 2023-02-02","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":10}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":" * Represents a command to be executed.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"public class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" private final String commandType;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" private LocalDate deadlineDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" private LocalDate eventFromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" private LocalDate eventToDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" public Command(String commandType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" * Initializes a command with the given command type and description.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" * @param commandType The command type.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" * @param description The description.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" public Command(String commandType, String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" * Initializes a command with the given command type and task index.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" * @param commandType The command type.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" * @param taskIndex The task index.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" public Command(String commandType, int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" * Initializes a command with the given command type, description and deadline date.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" * @param commandType The command type.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" * @param description The description.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" * @param deadlineDate The deadline date.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" public Command(String commandType, String description, LocalDate deadlineDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" this.deadlineDate \u003d deadlineDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" * Initializes a command with the given command type, description and event dates.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" * @param commandType The command type.","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" * @param description The description.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":" * @param eventFromDate The event from date.","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"pangyyen"},"content":" * @param eventToDate The event to date.","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"pangyyen"},"content":" public Command(String commandType, String description, LocalDate eventFromDate, LocalDate eventToDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"pangyyen"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"pangyyen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"pangyyen"},"content":" this.eventFromDate \u003d eventFromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"pangyyen"},"content":" this.eventToDate \u003d eventToDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"pangyyen"},"content":" public int getTaskIndex() {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"pangyyen"},"content":" return this.taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"pangyyen"},"content":" public String getCommandType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"pangyyen"},"content":" return this.commandType;","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"pangyyen"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"pangyyen"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"pangyyen"},"content":" public LocalDate getDeadlineDate() {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"pangyyen"},"content":" return this.deadlineDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"pangyyen"},"content":" public LocalDate getEventFromDate() {","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"pangyyen"},"content":" return this.eventFromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"pangyyen"},"content":" public LocalDate getEventToDate() {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"pangyyen"},"content":" return this.eventToDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"pangyyen":92}},{"path":"src/main/java/duke/commands/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"import duke.exception.DeadlineException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"import duke.exception.EventException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" * Represents a parser that parses the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" private static final DateTimeFormatter dataFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" * Parses the user input and returns the corresponding command.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" * @param userInput The user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" * @return The corresponding command.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" * @throws DukeException If the user input is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" public static Command parse(String userInput) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" String commandType \u003d getCommandType(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" return new Command(commandType);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" return new Command(commandType, getTaskIndex(userInput)); // taskIndex is -1 if invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" return new Command(commandType, getDescription(userInput));","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" return new Command(commandType, getDeadlineDescription(userInput), getDeadlineDate(userInput));","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" LocalDate[] eventDates \u003d getEventDates(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":" LocalDate eventFromDate \u003d eventDates[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" LocalDate eventToDate \u003d eventDates[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" return new Command(commandType, getEventDescription(userInput), eventFromDate, eventToDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" throw new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" * Parses the data string from the storage file and returns the corresponding task.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":" * example of data string:","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"pangyyen"},"content":" * T | 1 | read book","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"pangyyen"},"content":" * D | 0 | return book | June 6th","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"pangyyen"},"content":" * E | 0 | project meeting | Aug 6th 2-4pm","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"pangyyen"},"content":" * File corruption is not handled.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"pangyyen"},"content":" * @return The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"pangyyen"},"content":" public static Task parseFileString(String taskData) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"pangyyen"},"content":" String[] parts \u003d taskData.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"pangyyen"},"content":" String type \u003d parts[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"pangyyen"},"content":" if (parts.length \u003c 3) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pangyyen"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"pangyyen"},"content":" String isDone \u003d parts[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"pangyyen"},"content":" String description \u003d parts[2].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"pangyyen"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"pangyyen"},"content":" switch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"pangyyen"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"pangyyen"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"pangyyen"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"pangyyen"},"content":" String by \u003d parts[3].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"pangyyen"},"content":" task \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"pangyyen"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"pangyyen"},"content":" String from \u003d parts[3].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"pangyyen"},"content":" String to \u003d parts[4].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"pangyyen"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"pangyyen"},"content":" default:","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"pangyyen"},"content":" if (isDone.equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"pangyyen"},"content":" assert task !\u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"pangyyen"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"pangyyen"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"pangyyen"},"content":" * reads the task and returns the corresponding data string to be written to the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"pangyyen"},"content":" * @param task The task to be read.","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"pangyyen"},"content":" * @return String to be written to the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"pangyyen"},"content":" public static String readTaskToFile(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"pangyyen"},"content":" StringBuilder data \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"pangyyen"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"pangyyen"},"content":" data.append(\"T\");","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"pangyyen"},"content":" data.append(\" | \").append(task.isDone() ? \"1\" : \"0\");","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"pangyyen"},"content":" data.append(\" | \").append(task.getDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"pangyyen"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"pangyyen"},"content":" data.append(\"D\");","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"pangyyen"},"content":" data.append(\" | \").append(task.isDone() ? \"1\" : \"0\");","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"pangyyen"},"content":" data.append(\" | \").append(task.getDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"pangyyen"},"content":" data.append(\" | \").append(((Deadline) task).getBy());","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"pangyyen"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"pangyyen"},"content":" data.append(\"E\");","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"pangyyen"},"content":" data.append(\" | \").append(task.isDone() ? \"1\" : \"0\");","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"pangyyen"},"content":" data.append(\" | \").append(task.getDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"pangyyen"},"content":" data.append(\" | \").append(((Event) task).getFrom()).append(\" | \").append(((Event) task).getTo());","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"pangyyen"},"content":" return data.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"pangyyen"},"content":" private static String getCommandType(String userInput) {","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"pangyyen"},"content":" String[] parts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"pangyyen"},"content":" return parts.length \u003e 0 ? parts[0] : \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"pangyyen"},"content":" public static String getDescription(String userInput) {","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"pangyyen"},"content":" String[] parts \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"pangyyen"},"content":" return parts.length \u003e 1 ? parts[1] : \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"pangyyen"},"content":" public static String getDeadlineDescription(String userInput) {","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"pangyyen"},"content":" String[] parts \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"pangyyen"},"content":" return parts.length \u003e 1 ? parts[1].split(\"/by\", 2)[0].trim() : \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"pangyyen"},"content":" public static String getEventDescription(String userInput) {","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"pangyyen"},"content":" String[] parts \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"pangyyen"},"content":" return parts.length \u003e 1 ? parts[1].split(\"/from\", 2)[0].trim() : \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"pangyyen"},"content":" * Returns the task index from the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"pangyyen"},"content":" * @param userInput The user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"pangyyen"},"content":" * @return The task index.","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"pangyyen"},"content":" * @throws DukeException If the task index is not numeric.","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"pangyyen"},"content":" public static int getTaskIndex(String userInput) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"pangyyen"},"content":" String[] parts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"pangyyen"},"content":" if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"pangyyen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"pangyyen"},"content":" return Integer.parseInt(parts[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"pangyyen"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"pangyyen"},"content":" throw new DukeException(\"Error, please enter a number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"pangyyen"},"content":" throw new DukeException(\"Error, please enter a number.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"pangyyen"},"content":" * Returns the deadline date from the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"pangyyen"},"content":" * example of deadline date: 2020-02-02","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"pangyyen"},"content":" * @param userInput The user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"pangyyen"},"content":" * @return The deadline date.","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"pangyyen"},"content":" * @throws DeadlineException If the deadline date is empty or invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"pangyyen"},"content":" private static LocalDate getDeadlineDate(String userInput) throws DeadlineException {","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"pangyyen"},"content":" String[] parts \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"pangyyen"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"pangyyen"},"content":" throw new DeadlineException(\"detail: Description or deadline date is empty\");","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"pangyyen"},"content":" String description \u003d parts[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"pangyyen"},"content":" // Check if /by exists in the description","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"pangyyen"},"content":" if (!description.contains(\"/by\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"pangyyen"},"content":" throw new DeadlineException(\"detail: Description does not contain /by\");","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"pangyyen"},"content":" String[] desArray \u003d description.split(\"/by\", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"pangyyen"},"content":" String taskDescription \u003d desArray[0].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"pangyyen"},"content":" String deadlineDate \u003d desArray[1].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"pangyyen"},"content":" if (taskDescription.isEmpty() || deadlineDate.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"pangyyen"},"content":" throw new DeadlineException(\"detail: Description or deadline date is empty\");","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"pangyyen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"pangyyen"},"content":" // Validate date format and return LocalDate object","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"pangyyen"},"content":" return LocalDate.parse(deadlineDate, dataFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"pangyyen"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"pangyyen"},"content":" throw new DeadlineException(\"detail: Invalid date format. Please use yyyy-MM-dd\");","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"pangyyen"},"content":" * Returns the event dates from the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"pangyyen"},"content":" * example of event dates: 2020-02-02 2020-02-03","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"pangyyen"},"content":" * @param userInput The user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"pangyyen"},"content":" * @return The event dates.","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"pangyyen"},"content":" * @throws EventException If the event dates are empty or invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"pangyyen"},"content":" private static LocalDate[] getEventDates(String userInput) throws EventException {","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"pangyyen"},"content":" String[] parts \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"pangyyen"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"pangyyen"},"content":" throw new EventException(\"details: Description or event dates are empty\");","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"pangyyen"},"content":" String description \u003d parts[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"pangyyen"},"content":" // Check if both /from and /to exist in the description","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"pangyyen"},"content":" if (!description.contains(\"/from\") || !description.contains(\"/to\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"pangyyen"},"content":" throw new EventException(\"details: Description does not contain /from or /to\");","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"pangyyen"},"content":" String[] desArray \u003d description.split(\"/from\", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"pangyyen"},"content":" String taskDescription \u003d desArray[0].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"pangyyen"},"content":" // Split the timing description further using /to","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"pangyyen"},"content":" String[] timingArr \u003d desArray[1].split(\"/to\", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"pangyyen"},"content":" String eventFrom \u003d timingArr[0].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":234,"author":{"gitId":"pangyyen"},"content":" String eventTo \u003d timingArr[1].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"pangyyen"},"content":" if (taskDescription.isEmpty() || eventFrom.isEmpty() || eventTo.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"pangyyen"},"content":" throw new EventException(\"details: Description or event dates are empty\");","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"pangyyen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"pangyyen"},"content":" LocalDate eventFromDate \u003d LocalDate.parse(eventFrom, dataFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":242,"author":{"gitId":"pangyyen"},"content":" LocalDate eventToDate \u003d LocalDate.parse(eventTo, dataFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"pangyyen"},"content":" return new LocalDate[]{eventFromDate, eventToDate};","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"pangyyen"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"pangyyen"},"content":" throw new EventException(\"details: Invalid date format. Please use yyyy-MM-dd\");","lastModifiedDate":"2023-09-01"},{"lineNumber":246,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"pangyyen":248}},{"path":"src/main/java/duke/exception/DeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":" * Represents an exception that occurs when the format for adding a deadline is incorrect.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"public class DeadlineException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" public DeadlineException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" super(\"The format for adding a deadline is incorrect. Please use: \u0027deadline [description] /by [yyyy-MM-dd]\u0027\");","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" * Constructs a DeadlineException with a specified detail message.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" * @param s The specified detail message.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" public DeadlineException(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" super(\"The format for adding a deadline is incorrect. Please use: \u0027deadline [description] /by [yyyy-MM-dd]\u0027\"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" + \"\\n\" + s);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":20}},{"path":"src/main/java/duke/exception/DeleteException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":" * Represents an exception that occurs when the format for deleting a task is incorrect.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"public class DeleteException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" public DeleteException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" super(\"The format for deleting a task is incorrect. Please use: \u0027delete [index of task]\u0027\");","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" * Constructs a DeleteException with a specified detail message.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" * @param message The specified detail message.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" public DeleteException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" super(\"The format for deleting a task is incorrect. Please use: \u0027delete [index of task]\u0027\"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" + \"\\n\" + message);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":20}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":" * Represents an exception that occurs when the format for a command is incorrect.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" * Constructs a DukeException with a specified detail message.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" * @param message The specified detail message.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":16}},{"path":"src/main/java/duke/exception/EventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":" * Represents an exception that occurs when the format for adding an event is incorrect.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"public class EventException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" * Constructs an EventException.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":" public EventException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" super(\"The format for adding an event is incorrect. \"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" + \"Please use: \u0027event [description] /from [yyyy-MM-dd] /to [yyyy-MM-dd]\u0027\");","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" * Constructs an EventException with the specified detail message.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" * @param message The detail message.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" public EventException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" super(\"The format for adding an event is incorrect. \"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" + \"Please use: \u0027event [description] /from [yyyy-MM-dd] /to [yyyy-MM-dd]\u0027\"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" + \"\\n\" + message);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":25}},{"path":"src/main/java/duke/exception/TodoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":" * Represents an exception that occurs when the format for a command is incorrect.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"public class TodoException extends DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" * Constructs a TodoException with a specified detail message.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" public TodoException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" super(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":14}},{"path":"src/main/java/duke/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.main;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"import duke.commands.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"import duke.exception.DeadlineException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"import duke.exception.DeleteException;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"import duke.exception.EventException;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"import duke.exception.TodoException;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" * The main class that initiates the chatbot application.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" private final String filePath \u003d \"./src/main/data/duke.txt\";","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" private final Storage storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" * Initializes the Chatbot with an empty task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" public Duke() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" duke.start();","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" * Marks a task as done and provides user feedback","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" * @param taskIndex Index of the task to be marked as done, starts from \u00271\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" public void markTaskByBot(int taskIndex) throws DeleteException {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" if (!taskList.isValidListIndex(taskIndex - 1)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" throw new DeleteException(\"Invalid Index of task!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" taskList.markTaskAsDone(taskIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" saveTasksToFile(this.taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(taskList.getTaskDetails(taskIndex - 1));","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" * Marks a task as not done and provides user feedback.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"pangyyen"},"content":" * @param taskIndex Index of the task to be marked as not done, starts from \u00271\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"pangyyen"},"content":" public void unmarkTaskByBot(int taskIndex) throws DeleteException {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"pangyyen"},"content":" if (!taskList.isValidListIndex(taskIndex - 1)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"pangyyen"},"content":" throw new DeleteException(\"detail: Invalid Index of task!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"pangyyen"},"content":" taskList.markTaskAsNotDone(taskIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"pangyyen"},"content":" saveTasksToFile(this.taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(\" OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"pangyyen"},"content":" + taskList.getTaskDetails(taskIndex - 1));","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"pangyyen"},"content":" * Deletes a task from the task list based on the provided input.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"pangyyen"},"content":" * @param taskIndex The index of the task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"pangyyen"},"content":" * @throws DeleteException If the input string is not numeric or if the task index is out of valid range.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"pangyyen"},"content":" public void deleteTaskByBot(int taskIndex) throws DeleteException {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"pangyyen"},"content":" if (taskIndex \u003c 1 || taskIndex \u003e taskList.getTaskCount()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"pangyyen"},"content":" throw new DeleteException(\"Invalid Index of task!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"pangyyen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(\" Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"pangyyen"},"content":" + this.taskList.getTaskDetails(taskIndex - 1)","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"pangyyen"},"content":" + \"\\n Now you have \" + (taskList.getTaskCount() - 1) + \" tasks in the list.\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"pangyyen"},"content":" taskList.deleteTask(taskIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"pangyyen"},"content":" * Adds a todo task to the task list and provides user feedback","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"pangyyen"},"content":" * @param description The description of the todo task","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"pangyyen"},"content":" * @throws TodoException If the description is empty","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"pangyyen"},"content":" public void addTodo(String description) throws TodoException {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"pangyyen"},"content":" Task newTask;","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"pangyyen"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"pangyyen"},"content":" throw new TodoException();","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"pangyyen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"pangyyen"},"content":" newTask \u003d new Todo(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"pangyyen"},"content":" \" Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"pangyyen"},"content":" + newTask","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"pangyyen"},"content":" + \"\\n Now you have \" + taskList.getTaskCount() + \" tasks in the list.\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"pangyyen"},"content":" * Adds a deadline task to the task list and provides user feedback","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"pangyyen"},"content":" * @param description The description of the deadline task","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"pangyyen"},"content":" * @param deadlineDate The deadline date of the deadline task","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"pangyyen"},"content":" * @throws DeadlineException If the description or deadline date is empty","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"pangyyen"},"content":" public void addDeadline(String description, LocalDate deadlineDate) throws DeadlineException {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"pangyyen"},"content":" if (description.isEmpty() || deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"pangyyen"},"content":" System.out.println(\"Error in addDeadline\");","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"pangyyen"},"content":" throw new DeadlineException();","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"pangyyen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"pangyyen"},"content":" Task newTask \u003d new Deadline(description, deadlineDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"pangyyen"},"content":" \" Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"pangyyen"},"content":" + newTask","lastModifiedDate":"2023-09-06"},{"lineNumber":128,"author":{"gitId":"pangyyen"},"content":" + \"\\n Now you have \" + taskList.getTaskCount() + \" tasks in the list.\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":129,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"pangyyen"},"content":" * Adds an event task to the task list and provides user feedback","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"pangyyen"},"content":" * @param description The description of the event task","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"pangyyen"},"content":" * @param eventFromDate The start date of the event task","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"pangyyen"},"content":" * @param eventToDate The end date of the event task","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"pangyyen"},"content":" * @throws EventException If the description, start date or end date is empty","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"pangyyen"},"content":" public void addEvent(String description, LocalDate eventFromDate, LocalDate eventToDate) throws EventException {","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"pangyyen"},"content":" if (description.isEmpty() || eventFromDate \u003d\u003d null || eventToDate \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"pangyyen"},"content":" throw new EventException();","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"pangyyen"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"pangyyen"},"content":" Task newTask \u003d new Event(description, eventFromDate, eventToDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"pangyyen"},"content":" \" Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":148,"author":{"gitId":"pangyyen"},"content":" + newTask","lastModifiedDate":"2023-09-06"},{"lineNumber":149,"author":{"gitId":"pangyyen"},"content":" + \"\\n Now you have \" + taskList.getTaskCount() + \" tasks in the list.\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":150,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"pangyyen"},"content":" * Loads the tasks from the storage file","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"pangyyen"},"content":" private void loadTasksFromFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"pangyyen"},"content":" for (Task taskData : storage.loadTasks()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"pangyyen"},"content":" this.taskList.addTask(taskData);","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"pangyyen"},"content":" if (!this.taskList.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"pangyyen"},"content":" System.out.println(this.taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"pangyyen"},"content":" * Saves the tasks to the storage file","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"pangyyen"},"content":" private void saveTasksToFile(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"pangyyen"},"content":" this.storage.saveTasks(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"pangyyen"},"content":" * Finds tasks containing the given keyword and displays them.","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"pangyyen"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"pangyyen"},"content":" public void findTasksByKeyword(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"pangyyen"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d taskList.findTasksByKeyword(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"pangyyen"},"content":" if (matchingTasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(\"No matching tasks found.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"pangyyen"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"pangyyen"},"content":" StringBuilder matchingTasksString \u003d new StringBuilder();","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"pangyyen"},"content":" matchingTasksString.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"pangyyen"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"pangyyen"},"content":" for (Task task : matchingTasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"pangyyen"},"content":" matchingTasksString.append(count).append(\".\").append(task).append(\"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"pangyyen"},"content":" count++;","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(matchingTasksString.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"pangyyen"},"content":" * Handles the command based on the command type","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"pangyyen"},"content":" * @param command The command to be handled","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"pangyyen"},"content":" * @return True if the command is not \"bye\", false otherwise","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"pangyyen"},"content":" * @throws DukeException If the command type is not recognized","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"pangyyen"},"content":" public boolean handleCommand(Command command) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"pangyyen"},"content":" String commandType \u003d command.getCommandType();","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"pangyyen"},"content":" String description \u003d command.getDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"pangyyen"},"content":" int taskIndex \u003d command.getTaskIndex();","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"pangyyen"},"content":" LocalDate deadlineDate \u003d command.getDeadlineDate();","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"pangyyen"},"content":" LocalDate eventFromDate \u003d command.getEventFromDate();","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"pangyyen"},"content":" LocalDate eventToDate \u003d command.getEventToDate();","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"pangyyen"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"pangyyen"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"pangyyen"},"content":" this.markTaskByBot(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"pangyyen"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"pangyyen"},"content":" this.unmarkTaskByBot(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"pangyyen"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"pangyyen"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"pangyyen"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(this.taskList.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"pangyyen"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"pangyyen"},"content":" this.findTasksByKeyword(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"pangyyen"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"pangyyen"},"content":" this.addTodo(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"pangyyen"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"pangyyen"},"content":" this.addDeadline(description, deadlineDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"pangyyen"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"pangyyen"},"content":" this.addEvent(description, eventFromDate, eventToDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"pangyyen"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"pangyyen"},"content":" this.deleteTaskByBot(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"pangyyen"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"pangyyen"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"pangyyen"},"content":" throw new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":238,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":239,"author":{"gitId":"pangyyen"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":240,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"pangyyen"},"content":" * Starts the chatbot application","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"pangyyen"},"content":" public void start() {","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"pangyyen"},"content":" Ui.showWelcomeMessage();","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"pangyyen"},"content":" String userInput;","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"pangyyen"},"content":" Command parsedCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":249,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":250,"author":{"gitId":"pangyyen"},"content":" this.loadTasksFromFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":251,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"pangyyen"},"content":" boolean isContinuing \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"pangyyen"},"content":" while (isContinuing) {","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"pangyyen"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"pangyyen"},"content":" userInput \u003d Ui.getUserInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":256,"author":{"gitId":"pangyyen"},"content":" parsedCommand \u003d Parser.parse(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":257,"author":{"gitId":"pangyyen"},"content":" isContinuing \u003d handleCommand(parsedCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":258,"author":{"gitId":"pangyyen"},"content":" this.saveTasksToFile(this.taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":259,"author":{"gitId":"pangyyen"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":260,"author":{"gitId":"pangyyen"},"content":" Ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":261,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":262,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":263,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":264,"author":{"gitId":"pangyyen"},"content":" Ui.showGoodByeMessage();","lastModifiedDate":"2023-08-31"},{"lineNumber":265,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"pangyyen":264,"-":2}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"import duke.commands.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" * Represents a storage for tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" private final String filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" * Loads tasks from the file path","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" * @return An ArrayList of tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" public ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" try (Scanner scanner \u003d new Scanner(new File(filePath))) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" task \u003d Parser.parseFileString(scanner.nextLine());","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(\"Data file not found, starting with an empty task list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" * Saves tasks to the file path","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" * @param tasks The task list to be saved","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" public void saveTasks(TaskList tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" try (PrintWriter writer \u003d new PrintWriter(new FileWriter(filePath))) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" for (int i \u003d 0; i \u003c tasks.getTaskCount(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" writer.println(Parser.readTaskToFile(tasks.getTask(i)));","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":" Ui.showErrorMessage(\"Error saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"pangyyen":60}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" * Represents a deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" * Initializes a deadline task with the given description and date in String.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" * @param description Description of the deadline task.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" * @param by Due date of the deadline task.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" * Initializes a deadline task with the given description and date in LocalDate.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" * @param description Description of the deadline task.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" * @param by Due date of the deadline task.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" public LocalDate getBy() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" return this.by;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" * Returns a string representation of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" * example: [D][X] return book (by: Aug 6 2021)","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" * @return String representation of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":" + by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":50}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" * Represents an event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":" protected LocalDate from;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" protected LocalDate to;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" * Initializes an event task with the given description and date in String.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" * @param description Description of the event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" * @param from Starting date of the event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" * @param to Ending date of the event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" * Initializes an event task with the given description and date in LocalDate.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" * @param description Description of the event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" * @param from Starting date of the event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" * @param to Ending date of the event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" public Event(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" public LocalDate getFrom() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" return this.from;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" public LocalDate getTo() {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" return this.to;","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":" * Returns a string representation of the event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" * The string representation is formatted as follows:","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" * example: [E][X] project meeting (at: Aug 6 2021)","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" * @return String representation of the event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" return String.format(\"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":" super.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")),","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":61}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":" * Represents a generic task with a description and completion status","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" * Initializes a task with the given description and sets the completion status to false.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" * Initializes a task with the given description and completion status.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" * @param isDone Completion status of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" * Gets the status icon representing the completion status of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" * @return \"X\" if the task is done, \" \" (space) if not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" return (this.isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" * Gets the description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" return (this.description);","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" * Marks the task as done by setting the completion status to true.","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":" * Marks the task as not done by setting the completion status to false.","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"pangyyen"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"pangyyen"},"content":" return this.isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"pangyyen"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"pangyyen"},"content":" * example: [T][X] return book","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"pangyyen"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"pangyyen"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"pangyyen"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"pangyyen"},"content":" return String.format(\"[\" + this.getStatusIcon() + \"] \" + this.getDescription());","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":77}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" * Represents a list of tasks and provides methods to manipulate them","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"public class TaskList {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" private int taskCount;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" * Initializes a dynamic empty task list with a maximum capacity.","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" public TaskList() {","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" tasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" taskCount \u003d 0;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" * Checks if the given task index is valid within the task list.","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" * @param taskListIndex The index of the task to be checked.","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" * @return True if the task index is valid, otherwise false.","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" public boolean isValidListIndex(int taskListIndex) {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" return (taskListIndex \u003e\u003d 0 \u0026\u0026 taskListIndex \u003c taskCount);","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" * Retrieves details of a specific task within the task list.","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" * @param taskListIndex The index of the task in the task list.","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" * @return Details of the task as a formatted string, or null if the index is invalid.","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" public String getTaskDetails(int taskListIndex) {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" if (isValidListIndex(taskListIndex)) {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" Task task \u003d tasks.get(taskListIndex);","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" return task.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(\"Invalid Index of task!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" return null;","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" * Retrieves a specific task within the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" * @param taskListIndex The index of the task in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" * @return The task, or null if the index is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" public Task getTask(int taskListIndex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" if (isValidListIndex(taskListIndex)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":" return tasks.get(taskListIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" Ui.showMessage(\"Invalid Index of task!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"pangyyen"},"content":" * Gets the current count of tasks in the task list.","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"pangyyen"},"content":" * @return The count of tasks in the task list.","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"pangyyen"},"content":" public int getTaskCount() {","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"pangyyen"},"content":" return this.taskCount;","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"pangyyen"},"content":" * Adds a task to the task list if space is available.","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"pangyyen"},"content":" * @param task The task to be added to the task list.","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"pangyyen"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"pangyyen"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"pangyyen"},"content":" this.taskCount++;","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"pangyyen"},"content":" * Deletes a task from the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"pangyyen"},"content":" * @param taskListIndex The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"pangyyen"},"content":" public void deleteTask(int taskListIndex) {","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"pangyyen"},"content":" this.tasks.remove(taskListIndex);","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"pangyyen"},"content":" this.taskCount--;","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":93,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"pangyyen"},"content":" * Marks a task in the task list as done.","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"pangyyen"},"content":" * @param taskListIndex The index of the task to be marked as done.","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":98,"author":{"gitId":"pangyyen"},"content":" public void markTaskAsDone(int taskListIndex) {","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"pangyyen"},"content":" if (isValidListIndex(taskListIndex)) {","lastModifiedDate":"2023-08-23"},{"lineNumber":100,"author":{"gitId":"pangyyen"},"content":" this.tasks.get(taskListIndex).markAsDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":102,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":103,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":104,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":105,"author":{"gitId":"pangyyen"},"content":" * Marks a task in the task list as not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"pangyyen"},"content":" * @param taskListIndex The index of the task to be marked as not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":108,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":109,"author":{"gitId":"pangyyen"},"content":" public void markTaskAsNotDone(int taskListIndex) {","lastModifiedDate":"2023-08-23"},{"lineNumber":110,"author":{"gitId":"pangyyen"},"content":" if (isValidListIndex(taskListIndex)) {","lastModifiedDate":"2023-08-23"},{"lineNumber":111,"author":{"gitId":"pangyyen"},"content":" this.tasks.get(taskListIndex).markAsNotDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":112,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":113,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":114,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":115,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"pangyyen"},"content":" * Searches for tasks containing the given keyword and returns a list of matching tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"pangyyen"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"pangyyen"},"content":" * @return A list of matching tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"pangyyen"},"content":" public ArrayList\u003cTask\u003e findTasksByKeyword(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"pangyyen"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"pangyyen"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"pangyyen"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"pangyyen"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"pangyyen"},"content":" return matchingTasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":132,"author":{"gitId":"pangyyen"},"content":" * Displays the tasks in the task list with their details.","lastModifiedDate":"2023-08-23"},{"lineNumber":133,"author":{"gitId":"pangyyen"},"content":" * example: [T][X] return book","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"pangyyen"},"content":" * @return String representation of the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":137,"author":{"gitId":"pangyyen"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"pangyyen"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"pangyyen"},"content":" if (taskCount \u003d\u003d 0) {","lastModifiedDate":"2023-08-23"},{"lineNumber":140,"author":{"gitId":"pangyyen"},"content":" return \"Horray!! No tasks in the task list!\";","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"pangyyen"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":142,"author":{"gitId":"pangyyen"},"content":" StringBuilder taskListString \u003d new StringBuilder(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"pangyyen"},"content":" for (int i \u003d 0; i \u003c taskCount; i++) {","lastModifiedDate":"2023-08-23"},{"lineNumber":144,"author":{"gitId":"pangyyen"},"content":" taskListString.append((i + 1)).append(\". \").append(this.getTaskDetails(i)).append(\"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":146,"author":{"gitId":"pangyyen"},"content":" return taskListString.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":148,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":149,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"pangyyen"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"pangyyen"},"content":" return (taskCount \u003d\u003d 0);","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":153}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":" * Represents a todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" * Returns a string representation of the todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" * example: [T][X] return book","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" * @return String representation of the todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":21}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":" * Represents the user interface of the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" private static final Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" * Prints the welcome message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" public static void showWelcomeMessage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" System.out.println(\" Hello! I\u0027m duke.main.Duke\\n What can I do for you?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" * Prints the goodbye message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" public static void showGoodByeMessage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" * Prints a message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" public static void showMessage(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" * Prints an error message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" * @param error The error message to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" public static void showErrorMessage(String error) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" showMessage(\"☹ OOPS!!! \" + error);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" * Retrieves the next line of user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" * @return The next line of user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" public static String getUserInput() {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"pangyyen":57}},{"path":"src/test/data/dukeTest.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":2}},{"path":"src/test/java/commands/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"import duke.commands.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" public void parseTodoTest() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" String userInput \u003d \"todo Sample\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" Command command \u003d Parser.parse(userInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" assertEquals(command.getCommandType(), \"todo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample\", command.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" public void parseDeadlineTest() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" String userInput \u003d \"deadline Sample /by 2023-12-31\";","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" Command command \u003d Parser.parse(userInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" assertEquals(command.getCommandType(), \"deadline\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample\", command.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" assertEquals(LocalDate.parse(\"2023-12-31\"), command.getDeadlineDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" public void parseEventTest() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" String userInput \u003d \"event Sample /from 2023-12-31 /to 2024-01-01\";","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" Command command \u003d Parser.parse(userInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":" assertEquals(command.getCommandType(), \"event\");","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample\", command.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" assertEquals(LocalDate.parse(\"2023-12-31\"), command.getEventFromDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" assertEquals(LocalDate.parse(\"2024-01-01\"), command.getEventToDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" public void parseInvalidCommandTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" String userInput \u003d \"invalidCommand\";","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" assertThrows(DukeException.class, () -\u003e Parser.parse(userInput));","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":" public void parseFileStringTodoTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" String taskData \u003d \"T | 1 | Sample Todo\";","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" Task task \u003d Parser.parseFileString(taskData);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"pangyyen"},"content":" assertTrue(task instanceof Todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample Todo\", task.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"pangyyen"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"pangyyen"},"content":" public void parseFileStringDeadlineTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"pangyyen"},"content":" String taskData \u003d \"D | 0 | Sample Deadline | 2023-12-31\";","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"pangyyen"},"content":" Task task \u003d Parser.parseFileString(taskData);","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"pangyyen"},"content":" assertTrue(task instanceof Deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample Deadline\", task.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":74}},{"path":"src/test/java/duke/commands/CommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertNull;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"public class CommandTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" public void constructorWithTypeOnlyTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" Command command \u003d new Command(\"bye\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"bye\", command.getCommandType());","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" assertEquals(0, command.getTaskIndex());","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getDeadlineDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getEventFromDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getEventToDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" public void constructorWithTypeAndDescriptionTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" Command command \u003d new Command(\"todo\", \"Sample Todo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"todo\", command.getCommandType());","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample Todo\", command.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" assertEquals(0, command.getTaskIndex());","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getDeadlineDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getEventFromDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getEventToDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" public void constructorWithTypeAndTaskIndexTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" Command command \u003d new Command(\"delete\", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"delete\", command.getCommandType());","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":" assertEquals(2, command.getTaskIndex());","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getDeadlineDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getEventFromDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getEventToDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" public void constructorWithTypeDescriptionAndDeadlineDateTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" LocalDate deadlineDate \u003d LocalDate.parse(\"2023-12-31\");","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":" Command command \u003d new Command(\"deadline\", \"Sample Deadline\", deadlineDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"deadline\", command.getCommandType());","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample Deadline\", command.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" assertEquals(0, command.getTaskIndex());","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" assertEquals(deadlineDate, command.getDeadlineDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getEventFromDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getEventToDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" public void constructorWithTypeDescriptionAndEventDatesTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" LocalDate eventFromDate \u003d LocalDate.parse(\"2023-12-31\");","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":" LocalDate eventToDate \u003d LocalDate.parse(\"2024-01-01\");","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"pangyyen"},"content":" Command command \u003d new Command(\"event\", \"Sample Event\", eventFromDate, eventToDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"event\", command.getCommandType());","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample Event\", command.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"pangyyen"},"content":" assertEquals(0, command.getTaskIndex());","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"pangyyen"},"content":" assertNull(command.getDeadlineDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"pangyyen"},"content":" assertEquals(eventFromDate, command.getEventFromDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"pangyyen"},"content":" assertEquals(eventToDate, command.getEventToDate());","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":69}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"class DeadlineTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" void getByTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" LocalDate date \u003d LocalDate.now();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" Deadline deadline \u003d new Deadline(\"Sample Deadline\", date);","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" assertEquals(date, deadline.getBy());","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" void testToStringTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" LocalDate date \u003d LocalDate.now();","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" Deadline deadline \u003d new Deadline(\"Sample Deadline\", date);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[D][ ] Sample Deadline (by: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" + date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" + \")\", deadline.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[D][X] Sample Deadline (by: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" + date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" + \")\", deadline.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":32}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"class EventTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" void getFromAndToTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" LocalDate fromDate \u003d LocalDate.now();","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" LocalDate toDate \u003d fromDate.plusDays(2);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" Event event \u003d new Event(\"Sample Event\", fromDate, toDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" assertEquals(fromDate, event.getFrom());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" assertEquals(toDate, event.getTo());","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" void toStringTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" LocalDate fromDate \u003d LocalDate.now();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":" LocalDate toDate \u003d fromDate.plusDays(2);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" Event event \u003d new Event(\"Sample Event\", fromDate, toDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[E][ ] Sample Event (from: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":" + fromDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" + \" to: \" + toDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\", event.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[E][X] Sample Event (from: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":" + fromDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" + \" to: \" + toDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\", event.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":38}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertNull;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertSame;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" @BeforeEach","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" public void setUp() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":" void getTaskDetails() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" Task task1 \u003d new Task(\"Sample Task 1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" Task task2 \u003d new Task(\"Sample Task 2\");","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task1);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task2);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[ ] Sample Task 1\", taskList.getTaskDetails(0));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[ ] Sample Task 2\", taskList.getTaskDetails(1));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" void addTaskTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" Task task \u003d new Task(\"Sample Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" assertEquals(1, taskList.getTaskCount());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" assertSame(taskList.getTask(0), task);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" void deleteTaskTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" Task task \u003d new Task(\"Sample Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" assertEquals(1, taskList.getTaskCount());","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" assertEquals(0, taskList.getTaskCount());","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" assertNull(taskList.getTask(0));","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" void markTaskAsDoneTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" Task task \u003d new Task(\"Sample Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pangyyen"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"pangyyen"},"content":" taskList.markTaskAsDone(0);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pangyyen"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"pangyyen"},"content":" void markTaskAsNotDoneTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"pangyyen"},"content":" Task task \u003d new Task(\"Sample Task\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"pangyyen"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"pangyyen"},"content":" taskList.markTaskAsNotDone(0);","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"pangyyen"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"pangyyen"},"content":" public void testIsEmpty() {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"pangyyen"},"content":" assertTrue(taskList.isEmpty());","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"pangyyen"},"content":" Task task \u003d new Task(\"Sample Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"pangyyen"},"content":" assertFalse(taskList.isEmpty());","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"pangyyen"},"content":" void toStringTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Horray!! No tasks in the task list!\", taskList.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"pangyyen"},"content":" Task task1 \u003d new Task(\"Sample Task 1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"pangyyen"},"content":" Task task2 \u003d new Task(\"Sample Task 2\");","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task1);","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"pangyyen"},"content":" taskList.addTask(task2);","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"pangyyen"},"content":" String expected \u003d \"Here are the tasks in your list:\\n1. [ ] Sample Task 1\\n2. [ ] Sample Task 2\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"pangyyen"},"content":" assertEquals(expected, taskList.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":94}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"class TaskTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" void getStatusIconTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" Task task1 \u003d new Task(\"Sample Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" assertFalse(task1.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" assertEquals(\" \", task1.getStatusIcon());","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":" Task task2 \u003d new Task(\"Completed Task\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":" assertTrue(task2.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"X\", task2.getStatusIcon());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":" void getDescriptionTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":" Task task1 \u003d new Task(\"Sample Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Sample Task\", task1.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pangyyen"},"content":" Task task2 \u003d new Task(\"Another Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"Another Task\", task2.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pangyyen"},"content":" void markAsDoneTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pangyyen"},"content":" Task task \u003d new Task(\"Sample Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pangyyen"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pangyyen"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pangyyen"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pangyyen"},"content":" void markAsNotDoneTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pangyyen"},"content":" Task task \u003d new Task(\"Sample Task\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pangyyen"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pangyyen"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pangyyen"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pangyyen"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pangyyen"},"content":" Task task \u003d new Task(\"Sample Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[ ] Sample Task\", task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pangyyen"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[X] Sample Task\", task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":57}},{"path":"src/test/java/duke/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"class TodoTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":" void toStringTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[T][ ] Sample Todo\", todo.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" assertEquals(\"[T][X] Sample Todo\", todo.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":17}},{"path":"src/test/java/duke/ui/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"package duke.ui; //same package as the class being tested","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"public class UiTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":" public void dummyTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":" public void anotherDummyTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pangyyen":17}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"pangyyen"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"pangyyen"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"pangyyen"},"content":"event student life fair /from Mon /to Sun","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"pangyyen"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"pangyyen"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"pangyyen"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pangyyen"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pangyyen"},"content":"todo eat dinner","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"pangyyen"},"content":"delete 4","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"pangyyen"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"pangyyen"},"content":"delete 5","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"pangyyen"},"content":"delete","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"pangyyen"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"pangyyen"},"content":"deadline","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"pangyyen"},"content":"blah","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"pangyyen"},"content":"deadline go fairprice","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"pangyyen"},"content":"deadlien go fairprice /by","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"pangyyen"},"content":"deadline go fairprice /by","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"pangyyen"},"content":"event go fairprice","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"pangyyen"},"content":"event go fairprice /to /ftrom","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"pangyyen"},"content":"event go fairprice /to sun /from mon","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"pangyyen"},"content":"event go fair price /from sun","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"pangyyen"},"content":"event go fair price /to sun","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"pangyyen"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"pangyyen"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pangyyen":25}},{"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":"pangyyen"},"content":"java -classpath ..\\bin duke.main.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"pangyyen":1,"-":20}}] diff --git a/pangyyen_ip_master/commits.json b/pangyyen_ip_master/commits.json index 61239407..c74ccac0 100644 --- a/pangyyen_ip_master/commits.json +++ b/pangyyen_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"pangyyen":[{"date":"2023-08-23","commitResults":[{"hash":"9ed4f3ed5f7ade36d849415638de291941605855","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"(a) Give your chatbot a new name\n(b) Implement an initial skeletal version\n","tags":["level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"deb402c77969d4771b0bb22832ceae2c99d77e9f","isMergeCommit":false,"messageTitle":"Echo","messageBody":"echos commands entered by the user, and exits when the user types the command bye\n","tags":["level-1"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"2dc7e8bba6b9fb88e0b3421a60ca05a62baa6e1e","isMergeCommit":false,"messageTitle":"level-2 Add List","messageBody":"create Chatbot and TaskList\n","tags":["level-2"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":29}}},{"hash":"3e196a6b18dcb402ed0ffa8774e67e33906fafd5","isMergeCommit":false,"messageTitle":"level-3 Mark as Done","messageBody":"it could unmark as not done as well\n","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":6}}},{"hash":"2418dd39d176d2f44dbb33c937f706efa1a49dce","isMergeCommit":false,"messageTitle":"level-4 ToDos, Events, Deadlines","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":9}}},{"hash":"1b7d7647c8b52137d1d94342a43d0e1e683e71a4","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"Automated Text UI Testing\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0}}},{"hash":"e698ee67348f33d5574d9077892a9ca242bd9099","isMergeCommit":false,"messageTitle":"level-5 handle errors","messageBody":"DukeException is created, and extended to DeadlineException, EventException\n","tags":["level-5"],"fileTypesAndContributionMap":{"java":{"insertions":186,"deletions":55}}},{"hash":"2b5beefb15caa9ec33e4d2915def42da1320ffe4","isMergeCommit":false,"messageTitle":"level-6 Delete","messageBody":"TaskList is modified as dynamic list which allows dynamic delete, deleteException is also introduced\n","tags":["level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":21,"deletions":7},"java":{"insertions":67,"deletions":17}}}]},{"date":"2023-08-30","commitResults":[{"hash":"c3b5152eaf0a4d139b06cc50d9e927f1226e862c","isMergeCommit":false,"messageTitle":"level-7 Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":164,"deletions":18}}},{"hash":"a075f4dd629971ab7f1a87f49a30b5b92a102416","isMergeCommit":false,"messageTitle":"Add javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"e629e2cae0df70b357740685cdf2c82805301546","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"Javadoc are added to the newly created public method\n","tags":["level-7"],"fileTypesAndContributionMap":{}},{"hash":"ef86d151af7ce598d6b7cb055c1f54bc950e0592","isMergeCommit":false,"messageTitle":"Change date format from String to java.time.LocalDate","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":26}}},{"hash":"4241358767b360dc1da47c88566f82eb85845a8a","isMergeCommit":false,"messageTitle":"level-8 Fix format for input and output date","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":69,"deletions":45}}},{"hash":"4b39a051a4fd8162ff97b4cc3401cd5f6ae3d094","isMergeCommit":false,"messageTitle":"Exstraction of user-input handling out of main method \u0027start()\u0027","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":37}}},{"hash":"d8ebd982731ce5685f32acc5ee3ec08d070ecb28","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"Handle date as java.time.LocalDate instead of String\n","tags":["level-8"],"fileTypesAndContributionMap":{}},{"hash":"f6e3d538160f545504fdb4c85be78093add4e628","isMergeCommit":false,"messageTitle":"Move Chatbot to Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":276,"deletions":279}}}]},{"date":"2023-08-31","commitResults":[{"hash":"9ec368f465b1b66e56b178463e0a35538f1d488e","isMergeCommit":false,"messageTitle":"Clear error in Command.java and Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":373,"deletions":63}}},{"hash":"56bed3b377150afc88dfbf5e7cd16bdf060d4ace","isMergeCommit":false,"messageTitle":"Clear all existing errors in Storage.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":160,"deletions":97}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d30b55335b89c9d9b63f8439d72d225858fb0ac3","isMergeCommit":false,"messageTitle":"A-MoreOOP: abstract Ui, Storage, Parser","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":132,"deletions":327}}},{"hash":"032994dbe8c7b2c6e45befce552db4e82169039d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"Abstract out Ui, Storage and Parser class\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"9af8641e833bfe305b3d59fac880af6b4fce89e1","isMergeCommit":false,"messageTitle":"A-Packages: Organize files into Packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":70,"deletions":10},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"5ef6bc4671fc8f2050cda63090352c7f33313671","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"Organize the java files into duke, duke.commands, duke.task, duke.storage, duke.ui, duke.exceptions\"\n","fileTypesAndContributionMap":{}},{"hash":"374568776da41423d6dc8a3a1454cd3db4409d07","isMergeCommit":false,"messageTitle":"Move Duke.java into package duke.main","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"eced4171eb65dd890a7c3798f7b3eba10d475df4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch\u0027","messageBody":"Add add-gradle-support to project directory\n","fileTypesAndContributionMap":{}},{"hash":"ff0eb5d68bd90a6c19b3a26b3c89d97368d696d7","isMergeCommit":false,"messageTitle":"Build Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"82f595b6d1c0ed83bcda8c138698a27a85bc7d8c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"Build gradle and set mainClass to duke.main.Duke\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"e9c3e0f7e547ce7b058ff20e2cccd3eafe9d7599","isMergeCommit":false,"messageTitle":"Build JUnit tests","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":402,"deletions":5}}},{"hash":"c7d054e2aa2bd167254bb861233b409116f39e01","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"Build JUnit test for commands, Task and Ui packages\n","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"11b6c5eaaa79cdd3d51c4188397bbd9d8e3bbdde","isMergeCommit":false,"messageTitle":"Javadoc","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":159,"deletions":12}}},{"hash":"c126d9b0c07043035d202b36af9f9ddfa72b516f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"Add in javadoc for non-trivial methods\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"75f562bdd7da555e40ea19e30859700b07917053","isMergeCommit":false,"messageTitle":"Add checkstyles","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":30,"deletions":22}}},{"hash":"ace32d67cb519ff61de75ef3dbd63ec28a6aad0b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-CodingStandard\u0027","messageBody":"Add checkstyle in Gradle\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"442ca70dab7286651be1715072e580157dd53feb","isMergeCommit":false,"messageTitle":"find tasks in list","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":3},"txt":{"insertions":6,"deletions":0},"java":{"insertions":55,"deletions":3}}},{"hash":"772eb2fad59cf888db99b62b5c996e42727b61d4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-find\u0027","messageBody":"Create find function to look for task containing certain description\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"pangyyen":{"java":1466,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":6,"txt":37}},"authorContributionVariance":{"pangyyen":182377.28},"authorDisplayNameMap":{"pangyyen":"CS2103T-F08-1 GAN .. YEN"}} +{"authorDailyContributionsMap":{"pangyyen":[{"date":"2023-08-23","commitResults":[{"hash":"9ed4f3ed5f7ade36d849415638de291941605855","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"(a) Give your chatbot a new name\n(b) Implement an initial skeletal version\n","tags":["level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"deb402c77969d4771b0bb22832ceae2c99d77e9f","isMergeCommit":false,"messageTitle":"Echo","messageBody":"echos commands entered by the user, and exits when the user types the command bye\n","tags":["level-1"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"2dc7e8bba6b9fb88e0b3421a60ca05a62baa6e1e","isMergeCommit":false,"messageTitle":"level-2 Add List","messageBody":"create Chatbot and TaskList\n","tags":["level-2"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":29}}},{"hash":"3e196a6b18dcb402ed0ffa8774e67e33906fafd5","isMergeCommit":false,"messageTitle":"level-3 Mark as Done","messageBody":"it could unmark as not done as well\n","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":6}}},{"hash":"2418dd39d176d2f44dbb33c937f706efa1a49dce","isMergeCommit":false,"messageTitle":"level-4 ToDos, Events, Deadlines","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":9}}},{"hash":"1b7d7647c8b52137d1d94342a43d0e1e683e71a4","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"Automated Text UI Testing\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0}}},{"hash":"e698ee67348f33d5574d9077892a9ca242bd9099","isMergeCommit":false,"messageTitle":"level-5 handle errors","messageBody":"DukeException is created, and extended to DeadlineException, EventException\n","tags":["level-5"],"fileTypesAndContributionMap":{"java":{"insertions":186,"deletions":55}}},{"hash":"2b5beefb15caa9ec33e4d2915def42da1320ffe4","isMergeCommit":false,"messageTitle":"level-6 Delete","messageBody":"TaskList is modified as dynamic list which allows dynamic delete, deleteException is also introduced\n","tags":["level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":21,"deletions":7},"java":{"insertions":67,"deletions":17}}}]},{"date":"2023-08-30","commitResults":[{"hash":"c3b5152eaf0a4d139b06cc50d9e927f1226e862c","isMergeCommit":false,"messageTitle":"level-7 Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":164,"deletions":18}}},{"hash":"a075f4dd629971ab7f1a87f49a30b5b92a102416","isMergeCommit":false,"messageTitle":"Add javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"e629e2cae0df70b357740685cdf2c82805301546","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"Javadoc are added to the newly created public method\n","tags":["level-7"],"fileTypesAndContributionMap":{}},{"hash":"ef86d151af7ce598d6b7cb055c1f54bc950e0592","isMergeCommit":false,"messageTitle":"Change date format from String to java.time.LocalDate","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":26}}},{"hash":"4241358767b360dc1da47c88566f82eb85845a8a","isMergeCommit":false,"messageTitle":"level-8 Fix format for input and output date","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":69,"deletions":45}}},{"hash":"4b39a051a4fd8162ff97b4cc3401cd5f6ae3d094","isMergeCommit":false,"messageTitle":"Exstraction of user-input handling out of main method \u0027start()\u0027","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":37}}},{"hash":"d8ebd982731ce5685f32acc5ee3ec08d070ecb28","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"Handle date as java.time.LocalDate instead of String\n","tags":["level-8"],"fileTypesAndContributionMap":{}},{"hash":"f6e3d538160f545504fdb4c85be78093add4e628","isMergeCommit":false,"messageTitle":"Move Chatbot to Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":276,"deletions":279}}}]},{"date":"2023-08-31","commitResults":[{"hash":"9ec368f465b1b66e56b178463e0a35538f1d488e","isMergeCommit":false,"messageTitle":"Clear error in Command.java and Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":373,"deletions":63}}},{"hash":"56bed3b377150afc88dfbf5e7cd16bdf060d4ace","isMergeCommit":false,"messageTitle":"Clear all existing errors in Storage.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":160,"deletions":97}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d30b55335b89c9d9b63f8439d72d225858fb0ac3","isMergeCommit":false,"messageTitle":"A-MoreOOP: abstract Ui, Storage, Parser","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":132,"deletions":327}}},{"hash":"032994dbe8c7b2c6e45befce552db4e82169039d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"Abstract out Ui, Storage and Parser class\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"9af8641e833bfe305b3d59fac880af6b4fce89e1","isMergeCommit":false,"messageTitle":"A-Packages: Organize files into Packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":70,"deletions":10},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"5ef6bc4671fc8f2050cda63090352c7f33313671","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"Organize the java files into duke, duke.commands, duke.task, duke.storage, duke.ui, duke.exceptions\"\n","fileTypesAndContributionMap":{}},{"hash":"374568776da41423d6dc8a3a1454cd3db4409d07","isMergeCommit":false,"messageTitle":"Move Duke.java into package duke.main","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"eced4171eb65dd890a7c3798f7b3eba10d475df4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch\u0027","messageBody":"Add add-gradle-support to project directory\n","fileTypesAndContributionMap":{}},{"hash":"ff0eb5d68bd90a6c19b3a26b3c89d97368d696d7","isMergeCommit":false,"messageTitle":"Build Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"82f595b6d1c0ed83bcda8c138698a27a85bc7d8c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"Build gradle and set mainClass to duke.main.Duke\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"e9c3e0f7e547ce7b058ff20e2cccd3eafe9d7599","isMergeCommit":false,"messageTitle":"Build JUnit tests","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":402,"deletions":5}}},{"hash":"c7d054e2aa2bd167254bb861233b409116f39e01","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"Build JUnit test for commands, Task and Ui packages\n","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"11b6c5eaaa79cdd3d51c4188397bbd9d8e3bbdde","isMergeCommit":false,"messageTitle":"Javadoc","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":159,"deletions":12}}},{"hash":"c126d9b0c07043035d202b36af9f9ddfa72b516f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"Add in javadoc for non-trivial methods\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"75f562bdd7da555e40ea19e30859700b07917053","isMergeCommit":false,"messageTitle":"Add checkstyles","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":30,"deletions":22}}},{"hash":"ace32d67cb519ff61de75ef3dbd63ec28a6aad0b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-CodingStandard\u0027","messageBody":"Add checkstyle in Gradle\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"442ca70dab7286651be1715072e580157dd53feb","isMergeCommit":false,"messageTitle":"find tasks in list","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":3},"txt":{"insertions":6,"deletions":0},"java":{"insertions":55,"deletions":3}}},{"hash":"772eb2fad59cf888db99b62b5c996e42727b61d4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-find\u0027","messageBody":"Create find function to look for task containing certain description\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"06fbaa95c7a097b88dab79538280f67997c92fb8","isMergeCommit":false,"messageTitle":"Fix Duke.java and Exception classes styling errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":32}}},{"hash":"7555065c59c8d450a937b43e82ca422d9cb8ec68","isMergeCommit":false,"messageTitle":"Fix stlying errors in commands, task packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":8}}},{"hash":"ed113e5c9275d51f94c8aef2516d9852c802fb6e","isMergeCommit":false,"messageTitle":"Fix all checkstyles error in Test Packages","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":28}}}]}]},"authorFileTypeContributionMap":{"pangyyen":{"java":1576,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":6,"txt":37}},"authorContributionVariance":{"pangyyen":146505.23},"authorDisplayNameMap":{"pangyyen":"CS2103T-F08-1 GAN .. YEN"}} diff --git a/papataco14_ip_master/authorship.json b/papataco14_ip_master/authorship.json index afc075db..91fb2311 100644 --- a/papataco14_ip_master/authorship.json +++ b/papataco14_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"# Main project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":"3. After that, locate the `src/main/java/Main.java` file, right-click it, and choose `Run Main.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"papataco14":2,"-":22}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"D | 0 | sleep | 2023-03-03 12:00","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"E | 0 | meeting | 2021-01-01 00:00 | 2022-01-02 12:00","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"papataco14":2}},{"path":"src/main/java/chad/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import chad.chatengine.ChatEngine;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"public class Main {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" ChatEngine chatEngine \u003d new ChatEngine(\"./data/tasks.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" chatEngine.start();","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":10}},{"path":"src/main/java/chad/chatengine/ChadException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.chatengine;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"public class ChadException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":" public ChadException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" public static class InvalidCommandException extends ChadException {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" public static class InvalidArgumentException extends ChadException {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" public InvalidArgumentException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" public static class InvalidFormatException extends ChadException {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" public InvalidFormatException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":25}},{"path":"src/main/java/chad/chatengine/ChatEngine.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.chatengine;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import chad.io.IOHandler;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import chad.io.ConsoleIO;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"import chad.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"import java.nio.file.NoSuchFileException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":"public class ChatEngine {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" private final IOHandler ioHandler;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" private TaskList taskList; // stores list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" private static final String DATE_FORMAT \u003d \"yyyy-MM-dd HH:mm\";","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" public ChatEngine(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" this.ioHandler \u003d new ConsoleIO();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" this.taskList \u003d new TaskList(storage.loadTasks()); // load tasks from storage","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" public void start() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" ioHandler.greet();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" boolean canContinueChat \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" while(canContinueChat) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" String input \u003d ioHandler.readInput();;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" String[] parsedInput \u003d Parser.parseInput(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" canContinueChat \u003d commandHandler(parsedInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" } catch (ChadException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Error: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" ioHandler.sayGoodbye();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" private boolean commandHandler(String[] parsedInput) throws ChadException {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" Parser.CommandType command \u003d Parser.parseCommandType(parsedInput[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" switch (command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" case MARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" handleMark(parsedInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" case UNMARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":" handleUnmark(parsedInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":" case LIST:","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":" handleList();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"papataco14"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"papataco14"},"content":" handleTodo(parsedInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"papataco14"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"papataco14"},"content":" handleDeadline(parsedInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"papataco14"},"content":" case EVENT:","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"papataco14"},"content":" handleEvent(parsedInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"papataco14"},"content":" case DELETE:","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"papataco14"},"content":" handleDelete(parsedInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"papataco14"},"content":" case BYE:","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"papataco14"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"papataco14"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidCommandException(\"Unknown command: \" + parsedInput[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"papataco14"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"papataco14"},"content":" private void handleMark(String[] parsedInput) throws ChadException {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"papataco14"},"content":" int index \u003d Integer.parseInt(parsedInput[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"papataco14"},"content":" String response \u003d taskList.markTaskAsDone(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(response);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"papataco14"},"content":" private void handleUnmark(String[] parsedInput) throws ChadException {","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"papataco14"},"content":" int index \u003d Integer.parseInt(parsedInput[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"papataco14"},"content":" String response \u003d taskList.markTaskAsNotDone(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(response);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"papataco14"},"content":" private void handleList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(taskList.displayTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"papataco14"},"content":" private void handleTodo(String[] parts) {","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"papataco14"},"content":" taskList.addTodo(parts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Added new ToDo: \" + parts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"papataco14"},"content":" private void handleDeadline(String[] parts) throws ChadException {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"papataco14"},"content":" String[] deadlineParts \u003d parts[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"papataco14"},"content":" LocalDateTime dueDate \u003d LocalDateTime.parse(deadlineParts[1], DateTimeFormatter.ofPattern(DATE_FORMAT));","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"papataco14"},"content":" taskList.addDeadline(deadlineParts[0], dueDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Added new Deadline: \" + deadlineParts[0] + \" by \" + dueDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"papataco14"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidFormatException(\"Invalid date format. Please use \" + DATE_FORMAT);","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"papataco14"},"content":" private void handleEvent(String[] parts) throws ChadException {","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"papataco14"},"content":" String[] eventParts \u003d parts[1].split(\" /from | /to \", 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"papataco14"},"content":" LocalDateTime start \u003d LocalDateTime.parse(eventParts[1], DateTimeFormatter.ofPattern(DATE_FORMAT));","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"papataco14"},"content":" LocalDateTime end \u003d LocalDateTime.parse(eventParts[2], DateTimeFormatter.ofPattern(DATE_FORMAT));","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"papataco14"},"content":" taskList.addEvent(eventParts[0], start, end);","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Added new Event: \" + eventParts[0] + \" from \" + start + \" to \" + end);","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"papataco14"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidFormatException(\"Invalid date format. Please use \" + DATE_FORMAT);","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"papataco14"},"content":" private void handleDelete(String[] parts) {","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"papataco14"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"papataco14"},"content":" String response \u003d taskList.deleteTask(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(response);","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"papataco14"},"content":" private void saveTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"papataco14"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"papataco14"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Error: File not found. \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"papataco14"},"content":" } catch (NoSuchFileException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Error: Directory not found. \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"papataco14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":146}},{"path":"src/main/java/chad/chatengine/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.chatengine;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":" public enum CommandType {","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":" BYE, MARK, UNMARK, LIST, TODO, DEADLINE, EVENT, DELETE, UNKNOWN","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" public static CommandType parseCommandType(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" return CommandType.valueOf(command.toUpperCase());","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" return CommandType.UNKNOWN;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" public static String[] parseInput(String input) throws ChadException {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" if (input.trim().isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Input cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" String[] parts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" CommandType command \u003d parseCommandType(parts[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" switch (command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" case MARK:","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" case UNMARK:","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" case DELETE:","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Missing index for \" + command);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" case TODO:","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Missing task description for ToDo.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2 || !parts[1].contains(\" /by \")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Invalid format for Deadline. Use: deadline {task} /by {date}\");","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" case EVENT:","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2 || !parts[1].contains(\" /from \") || !parts[1].contains(\" /to \")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Invalid format for Event. Use: event {task} /from {start} /to {end}\");","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" case LIST:","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" case BYE:","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" case UNKNOWN:","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidCommandException(\"Unknown command: \" + parts[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":" return parts;","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"papataco14":57}},{"path":"src/main/java/chad/chatengine/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.chatengine;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import chad.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import chad.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" private Path filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" this.filePath \u003d Paths.get(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" ensureFileExists();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" private void ensureFileExists() {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" if (Files.notExists(filePath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" Path parentDir \u003d filePath.getParent();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" if (Files.notExists(parentDir)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" Files.createDirectories(parentDir);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" System.out.println(\"An error occurred while creating the file or directory: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" public void saveTasks(TaskList taskList) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" try (BufferedWriter writer \u003d Files.newBufferedWriter(filePath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" for (Task task : taskList.getTasks()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" writer.write(task.toFileFormat(formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" writer.newLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" public ArrayList\u003cTask\u003e loadTasks() throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" try (BufferedReader reader \u003d Files.newBufferedReader(filePath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" String line;","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":" Task task \u003d Task.fromFileFormat(line, formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"papataco14"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"papataco14":63}},{"path":"src/main/java/chad/io/ConsoleIO.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.io;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"public class ConsoleIO implements IOHandler{","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" private Scanner sc;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" public ConsoleIO() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" public void greet() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" System.out.println(\"Hello! I\u0027m Chad!\\nWhat do you want?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" System.out.println(\"______________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" public void sayGoodbye() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" public String readInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" public void writeOutput(String output) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" System.out.println(output);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":32}},{"path":"src/main/java/chad/io/IOHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.io;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"public interface IOHandler {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":" String readInput();","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":" void writeOutput(String output);","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" void greet();","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" void sayGoodbye();","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":8}},{"path":"src/main/java/chad/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" private LocalDateTime dueDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" public Deadline(String description, LocalDateTime dueDate) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy, h:mm a\");","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" return String.format(\"[D][%s] %s (by: %s)\", super.getStatusIcon(), description, dueDate.format(formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" public String toFileFormat(DateTimeFormatter formatter) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" return String.format(\"D | %s | %s | %s\", super.isDoneString(), description, dueDate.format(formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":22}},{"path":"src/main/java/chad/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" private LocalDateTime start;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" private LocalDateTime end;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" public Event(String description, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy, h:mm a\");","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" return String.format(\"[E][%s] %s (from: %s to: %s)\", super.getStatusIcon(),","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" description, start.format(formatter), end.format(formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" public String toFileFormat(DateTimeFormatter formatter) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" return String.format(\"E | %s | %s | %s | %s\", super.isDoneString(), description, start.format(formatter),","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" end.format(formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":26}},{"path":"src/main/java/chad/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" protected String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" return (isDone ? \"X\" : \"\"); // mark done task with X","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" public String isDoneString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" return isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" public void mark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" public void unMark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" public abstract String toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" public abstract String toFileFormat(DateTimeFormatter formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" public static Task fromFileFormat(String line, DateTimeFormatter formatter) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" switch (type) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" case \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" task \u003d new ToDo(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" case \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" LocalDateTime dueDate \u003d LocalDateTime.parse(parts[3], formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" task \u003d new Deadline(description, dueDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" case \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" LocalDateTime start \u003d LocalDateTime.parse(parts[3], formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" LocalDateTime end \u003d LocalDateTime.parse(parts[4], formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" task \u003d new Event(description, start, end);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":" if (task !\u003d null \u0026\u0026 isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":" task.mark();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"papataco14"},"content":" return task;","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":65}},{"path":"src/main/java/chad/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" public void addTodo(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" tasks.add(new ToDo(description));","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" public void addDeadline(String description, LocalDateTime dueDate) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" tasks.add(new Deadline(description, dueDate));","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" public void addEvent(String description, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" tasks.add(new Event(description, start, end));","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" public String markTaskAsDone(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" task.mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" return \"Yessir! This task is marked as done:\\n\" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" return \"Invalid task index.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" public String markTaskAsNotDone(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" task.unMark();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" return \"Aite, I\u0027ve marked this task as not done yet:\\n\" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" return \"Invalid task index.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" public String displayTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" StringBuilder sb \u003d new StringBuilder(\"Here\u0027s your tasks m8:\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" sb.append((i + 1) + \".\" + tasks.get(i).toString()).append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" sb.append(\"Now you have \" + tasks.size() + \" tasks in your list\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" return sb.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":" public String deleteTask(int taskIndex) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"papataco14"},"content":" tasks.remove(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"papataco14"},"content":" return \"Aite, this task is gone bro: \" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"papataco14"},"content":" return \"Invalid task index.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"papataco14"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"papataco14"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"papataco14"},"content":" public void setTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"papataco14"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":72}},{"path":"src/main/java/chad/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"public class ToDo extends Task{","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" return String.format(\"[T][%s] %s\", super.getStatusIcon(), description);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" public String toFileFormat(DateTimeFormatter formatter) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" return String.format(\"T | %s | %s\", super.isDoneString(), description);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"toDo one","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"deadline two /by Friday","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"Event three /from saturday /to sun","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"bye","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":5}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":"java -classpath ..\\bin Main \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"papataco14":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"# Main project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":"3. After that, locate the `src/main/java/Main.java` file, right-click it, and choose `Run Main.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"papataco14":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"/* Gradle commands to run in project root dir:","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":" ./gradlew build","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":" ./gradlew run","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"*/","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" testImplementation group: \u0027org.mockito\u0027, name: \u0027mockito-core\u0027, version: \u00275.5.0\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" mainClass.set(\"chad.Main\")","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" archiveBaseName \u003d \"chad\"","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"papataco14":8,"-":40}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"D | 0 | sleep | 2023-03-03 12:00","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"E | 0 | meeting | 2021-01-01 00:00 | 2022-01-02 12:00","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"T | 0 | sleep","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"papataco14":3}},{"path":"src/main/java/chad/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import chad.chatengine.ChatEngine;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" * The entry point for the Chad application.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"public class Main {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" * The main method that starts the ChatEngine.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" * @param args the command-line arguments.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" ChatEngine chatEngine \u003d new ChatEngine(\"./data/tasks.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" chatEngine.start();","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":17}},{"path":"src/main/java/chad/chatengine/ChadException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.chatengine;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":" * Represents exceptions specific to the Chad chatbot application.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"public class ChadException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" * Constructs a new ChadException with a specific message.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" * @param message the detail message for the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" public ChadException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" * Exception thrown when an invalid command is encountered.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" public static class InvalidCommandException extends ChadException {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" * Constructs a new InvalidCommandException with a specific message.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" * @param message the detail message for the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" * Exception thrown when an invalid argument is encountered.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" public static class InvalidArgumentException extends ChadException {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" * Constructs a new InvalidArgumentException with a specific message.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" * @param message the detail message for the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" public InvalidArgumentException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" * Exception thrown when an invalid format is encountered.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" public static class InvalidFormatException extends ChadException {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" * Constructs a new InvalidFormatException with a specific message.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" * @param message the detail message for the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" public InvalidFormatException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":57}},{"path":"src/main/java/chad/chatengine/ChatEngine.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.chatengine;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import chad.io.IOHandler;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import chad.io.ConsoleIO;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"import chad.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"import java.nio.file.NoSuchFileException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" * Core engine for handling chat interactions and tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":"public class ChatEngine {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" final IOHandler ioHandler;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" TaskList taskList; // stores list of tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" final Storage storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" static final String DATE_FORMAT \u003d \"yyyy-MM-dd HH:mm\";","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" * Constructs a new ChatEngine.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" * ","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" * @param filePath the path where tasks are stored.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" public ChatEngine(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" this.ioHandler \u003d new ConsoleIO();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" this.taskList \u003d new TaskList(storage.loadTasks()); // load tasks from storage","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" * Constructs a new ChatEngine for testing.","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" * ","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" * @param ioHandler mock io handler for testing.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" * @param taskList mock task list for testing.","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" * @param filePath mock file path for testing.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" ChatEngine(IOHandler ioHandler, TaskList taskList, String filePath) {","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" this.ioHandler \u003d ioHandler;","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":" * Starts the chat interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":" public void start() {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":" ioHandler.greet();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":" boolean canContinueChat \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"papataco14"},"content":" while (canContinueChat) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"papataco14"},"content":" String input \u003d ioHandler.readInput();","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"papataco14"},"content":" String[] parsedInput \u003d Parser.parseInput(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"papataco14"},"content":" canContinueChat \u003d commandHandler(parsedInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"papataco14"},"content":" } catch (ChadException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Error: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"papataco14"},"content":" ioHandler.sayGoodbye();","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"papataco14"},"content":" * Handles various commands parsed from the input.","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"papataco14"},"content":" * ","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"papataco14"},"content":" * @param parsedInput the parsed input array.","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"papataco14"},"content":" * @return true if chat should continue, false otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"papataco14"},"content":" * @throws ChadException if an invalid command or argument is encountered.","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"papataco14"},"content":" boolean commandHandler(String[] parsedInput) throws ChadException {","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"papataco14"},"content":" Parser.CommandType command \u003d Parser.parseCommandType(parsedInput[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"papataco14"},"content":" switch (command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"papataco14"},"content":" case MARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"papataco14"},"content":" handleMark(parsedInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"papataco14"},"content":" case UNMARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"papataco14"},"content":" handleUnmark(parsedInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"papataco14"},"content":" case LIST:","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"papataco14"},"content":" handleList();","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"papataco14"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"papataco14"},"content":" handleTodo(parsedInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"papataco14"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"papataco14"},"content":" handleDeadline(parsedInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"papataco14"},"content":" case EVENT:","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"papataco14"},"content":" handleEvent(parsedInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"papataco14"},"content":" case DELETE:","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"papataco14"},"content":" handleDelete(parsedInput);","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"papataco14"},"content":" case FIND:","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"papataco14"},"content":" handleFind(parsedInput);","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"papataco14"},"content":" case BYE:","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"papataco14"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"papataco14"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidCommandException(\"Unknown command: \" + parsedInput[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"papataco14"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"papataco14"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"papataco14"},"content":" * ","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"papataco14"},"content":" * @param parsedInput the parsed input array.","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"papataco14"},"content":" void handleMark(String[] parsedInput) {","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"papataco14"},"content":" int index \u003d Integer.parseInt(parsedInput[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"papataco14"},"content":" String response \u003d taskList.markTaskAsDone(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(response);","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"papataco14"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"papataco14"},"content":" * ","lastModifiedDate":"2023-09-06"},{"lineNumber":128,"author":{"gitId":"papataco14"},"content":" * @param parsedInput the parsed input array.","lastModifiedDate":"2023-09-06"},{"lineNumber":129,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"papataco14"},"content":" void handleUnmark(String[] parsedInput){","lastModifiedDate":"2023-09-06"},{"lineNumber":131,"author":{"gitId":"papataco14"},"content":" int index \u003d Integer.parseInt(parsedInput[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"papataco14"},"content":" String response \u003d taskList.markTaskAsNotDone(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(response);","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"papataco14"},"content":" * Lists all the tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":140,"author":{"gitId":"papataco14"},"content":" void handleList() {","lastModifiedDate":"2023-09-06"},{"lineNumber":141,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(taskList.displayTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":145,"author":{"gitId":"papataco14"},"content":" * Adds a new ToDo task.","lastModifiedDate":"2023-09-06"},{"lineNumber":146,"author":{"gitId":"papataco14"},"content":" * ","lastModifiedDate":"2023-09-06"},{"lineNumber":147,"author":{"gitId":"papataco14"},"content":" * @param parts the parsed input array containing the task description.","lastModifiedDate":"2023-09-06"},{"lineNumber":148,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":149,"author":{"gitId":"papataco14"},"content":" void handleTodo(String[] parts) {","lastModifiedDate":"2023-09-06"},{"lineNumber":150,"author":{"gitId":"papataco14"},"content":" taskList.addTodo(parts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Added new ToDo: \" + parts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":156,"author":{"gitId":"papataco14"},"content":" * Adds a new Deadline task.","lastModifiedDate":"2023-09-06"},{"lineNumber":157,"author":{"gitId":"papataco14"},"content":" * ","lastModifiedDate":"2023-09-06"},{"lineNumber":158,"author":{"gitId":"papataco14"},"content":" * @param parts the parsed input array containing the task and deadline details.","lastModifiedDate":"2023-09-06"},{"lineNumber":159,"author":{"gitId":"papataco14"},"content":" * @throws ChadException if the date format is incorrect.","lastModifiedDate":"2023-09-06"},{"lineNumber":160,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":161,"author":{"gitId":"papataco14"},"content":" void handleDeadline(String[] parts) throws ChadException {","lastModifiedDate":"2023-09-06"},{"lineNumber":162,"author":{"gitId":"papataco14"},"content":" String[] deadlineParts \u003d parts[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"papataco14"},"content":" LocalDateTime dueDate \u003d LocalDateTime.parse(deadlineParts[1], DateTimeFormatter.ofPattern(DATE_FORMAT));","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"papataco14"},"content":" taskList.addDeadline(deadlineParts[0], dueDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Added new Deadline: \" + deadlineParts[0] + \" by \" + dueDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"papataco14"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidFormatException(\"Invalid date format. Please use \" + DATE_FORMAT);","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":174,"author":{"gitId":"papataco14"},"content":" * Adds a new Event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":175,"author":{"gitId":"papataco14"},"content":" * ","lastModifiedDate":"2023-09-06"},{"lineNumber":176,"author":{"gitId":"papataco14"},"content":" * @param parts the parsed input array containing the event and time details.","lastModifiedDate":"2023-09-06"},{"lineNumber":177,"author":{"gitId":"papataco14"},"content":" * @throws ChadException if the date format is incorrect.","lastModifiedDate":"2023-09-06"},{"lineNumber":178,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":179,"author":{"gitId":"papataco14"},"content":" void handleEvent(String[] parts) throws ChadException {","lastModifiedDate":"2023-09-06"},{"lineNumber":180,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"papataco14"},"content":" String[] eventParts \u003d parts[1].split(\" /from | /to \", 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"papataco14"},"content":" LocalDateTime start \u003d LocalDateTime.parse(eventParts[1], DateTimeFormatter.ofPattern(DATE_FORMAT));","lastModifiedDate":"2023-09-05"},{"lineNumber":183,"author":{"gitId":"papataco14"},"content":" LocalDateTime end \u003d LocalDateTime.parse(eventParts[2], DateTimeFormatter.ofPattern(DATE_FORMAT));","lastModifiedDate":"2023-09-05"},{"lineNumber":184,"author":{"gitId":"papataco14"},"content":" taskList.addEvent(eventParts[0], start, end);","lastModifiedDate":"2023-09-05"},{"lineNumber":185,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Added new Event: \" + eventParts[0] + \" from \" + start + \" to \" + end);","lastModifiedDate":"2023-09-05"},{"lineNumber":186,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":187,"author":{"gitId":"papataco14"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":188,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidFormatException(\"Invalid date format. Please use \" + DATE_FORMAT);","lastModifiedDate":"2023-09-05"},{"lineNumber":189,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":190,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":193,"author":{"gitId":"papataco14"},"content":" * Deletes a task.","lastModifiedDate":"2023-09-06"},{"lineNumber":194,"author":{"gitId":"papataco14"},"content":" * ","lastModifiedDate":"2023-09-06"},{"lineNumber":195,"author":{"gitId":"papataco14"},"content":" * @param parts the parsed input array containing the index of the task to be","lastModifiedDate":"2023-09-06"},{"lineNumber":196,"author":{"gitId":"papataco14"},"content":" * deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":197,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":198,"author":{"gitId":"papataco14"},"content":" void handleDelete(String[] parts) {","lastModifiedDate":"2023-09-06"},{"lineNumber":199,"author":{"gitId":"papataco14"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"papataco14"},"content":" String response \u003d taskList.deleteTask(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(response);","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"papataco14"},"content":" saveTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":203,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":204,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":205,"author":{"gitId":"papataco14"},"content":" void handleFind(String[] parsedInput) {","lastModifiedDate":"2023-09-06"},{"lineNumber":206,"author":{"gitId":"papataco14"},"content":" String keyword \u003d parsedInput[1];","lastModifiedDate":"2023-09-06"},{"lineNumber":207,"author":{"gitId":"papataco14"},"content":" String matchingTasks \u003d taskList.findTasks(keyword);","lastModifiedDate":"2023-09-06"},{"lineNumber":208,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(matchingTasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":209,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":210,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":211,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":212,"author":{"gitId":"papataco14"},"content":" * Saves the current state of tasks to the storage.","lastModifiedDate":"2023-09-06"},{"lineNumber":213,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":214,"author":{"gitId":"papataco14"},"content":" void saveTasks() {","lastModifiedDate":"2023-09-06"},{"lineNumber":215,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":216,"author":{"gitId":"papataco14"},"content":" storage.saveTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":217,"author":{"gitId":"papataco14"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":218,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Error: File not found. \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":219,"author":{"gitId":"papataco14"},"content":" } catch (NoSuchFileException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":220,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Error: Directory not found. \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":221,"author":{"gitId":"papataco14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":222,"author":{"gitId":"papataco14"},"content":" ioHandler.writeOutput(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":223,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":224,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":226}},{"path":"src/main/java/chad/chatengine/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.chatengine;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":" * Utility class for parsing chat commands and input.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" * Enumeration of possible command types.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" public enum CommandType {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" BYE, MARK, UNMARK, LIST, TODO, DEADLINE, EVENT, DELETE, FIND, UNKNOWN","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" * Parses the type of command.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" * ","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" * @param command the command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" * @return the type of command.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" public static CommandType parseCommandType(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" return CommandType.valueOf(command.toUpperCase());","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" return CommandType.UNKNOWN;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" * Parses the input string into command and arguments.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" * ","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" * @param input the user\u0027s input string.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" * @return a String array containing the command and its arguments.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" * @throws ChadException if the input is invalid or incomplete.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" public static String[] parseInput(String input) throws ChadException {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" if (input.trim().isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Input cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" String[] parts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" CommandType command \u003d parseCommandType(parts[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" switch (command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" case MARK:","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" case UNMARK:","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" case DELETE:","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Missing index for \" + command);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" case TODO:","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Missing task description for ToDo.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2 || !parts[1].contains(\" /by \")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"papataco14"},"content":" \"Invalid format for Deadline. Use: deadline {task} /by {date}\");","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"papataco14"},"content":" case EVENT:","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2 || !parts[1].contains(\" /from \") || !parts[1].contains(\" /to \")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"papataco14"},"content":" \"Invalid format for Event. Use: event {task} /from {start} /to {end}\");","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"papataco14"},"content":" case LIST:","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"papataco14"},"content":" case BYE:","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"papataco14"},"content":" case FIND:","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"papataco14"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidArgumentException(\"Missing keyword for find.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"papataco14"},"content":" case UNKNOWN:","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"papataco14"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"papataco14"},"content":" throw new ChadException.InvalidCommandException(\"Unknown command: \" + parts[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"papataco14"},"content":" return parts;","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"papataco14":84}},{"path":"src/main/java/chad/chatengine/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.chatengine;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import chad.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import chad.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" * Manages storage operations for tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" private Path filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" * Constructs a new Storage instance.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" * @param filePath the path to the file for storing tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" this.filePath \u003d Paths.get(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" ensureFileExists();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" * Ensures the file for storage exists.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" private void ensureFileExists() {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" if (Files.notExists(filePath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" Path parentDir \u003d filePath.getParent();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" if (Files.notExists(parentDir)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" Files.createDirectories(parentDir);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" System.out.println(\"An error occurred while creating the file or directory: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" * Saves the tasks to the file.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" * @param taskList the list of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" * @throws IOException if an I/O error occurs.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" public void saveTasks(TaskList taskList) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":" try (BufferedWriter writer \u003d Files.newBufferedWriter(filePath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":" for (Task task : taskList.getTasks()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":" writer.write(task.toFileFormat(formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":" writer.newLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"papataco14"},"content":" * Loads tasks from the storage file.","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"papataco14"},"content":" * @return an ArrayList of Task objects loaded from the storage file.","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"papataco14"},"content":" * @throws IOException if an I/O error occurs.","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"papataco14"},"content":" public ArrayList\u003cTask\u003e loadTasks() throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"papataco14"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"papataco14"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"papataco14"},"content":" try (BufferedReader reader \u003d Files.newBufferedReader(filePath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"papataco14"},"content":" String line;","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"papataco14"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"papataco14"},"content":" Task task \u003d Task.fromFileFormat(line, formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"papataco14"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"papataco14"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"papataco14":82}},{"path":"src/main/java/chad/io/ConsoleIO.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.io;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" * Implements the IOHandler interface for console-based input and output.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"public class ConsoleIO implements IOHandler {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" private Scanner sc;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" * Initializes a new Scanner for console input.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" public ConsoleIO() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" * Greets the user upon program startup.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" public void greet() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" System.out.println(\"Hello! I\u0027m Chad!\\nWhat do you want?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" System.out.println(\"______________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" * Bids farewell to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" public void sayGoodbye() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" * Reads a line of input from the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" * @return the line as a string.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" public String readInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" * Writes a line of output to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" * @param output the string to be outputted.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" public void writeOutput(String output) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" System.out.println(output);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":53}},{"path":"src/main/java/chad/io/IOHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.io;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":" * Interface for handling input and output operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"public interface IOHandler {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" * Reads input from the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" * @return the user\u0027s input as a string.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" String readInput();","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" * Writes output to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" * @param output the string to be outputted.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" void writeOutput(String output);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" * Greets the user upon startup.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" void greet();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" * Bids farewell to the user upon exiting.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" void sayGoodbye();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":28}},{"path":"src/main/java/chad/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" * Represents a deadline task with a due date.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" private LocalDateTime dueDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" * Constructs a new Deadline instance.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" * @param dueDate the due date for the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" public Deadline(String description, LocalDateTime dueDate) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" * Returns a string representation of the deadline task.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" * @return the string format of the deadline task.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy, h:mm a\");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" return String.format(\"[D][%s] %s (by: %s)\", super.getStatusIcon(), description, dueDate.format(formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" * Returns the deadline task in a format suitable for file storage.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" * @param formatter the DateTimeFormatter to use for the due date.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" * @return the string format of the deadline task for file storage.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" public String toFileFormat(DateTimeFormatter formatter) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" return String.format(\"D | %s | %s | %s\", super.isDoneString(), description, dueDate.format(formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" * Gets the due date of the deadline task.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" * @return the due date as a LocalDateTime object.","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" public LocalDateTime getDueDate() {","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" return dueDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":49}},{"path":"src/main/java/chad/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" * Represents an event task with a start and end time.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" private LocalDateTime start;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" private LocalDateTime end;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" * Constructs a new Event instance.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" * @param start the start time for the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" * @param end the end time for the event.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" public Event(String description, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" * Returns a string representation of the event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" * @return the string format of the event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy, h:mm a\");","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" return String.format(\"[E][%s] %s (from: %s to: %s)\", super.getStatusIcon(),","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" description, start.format(formatter), end.format(formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" * Returns the event task in a format suitable for file storage.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" * @param formatter the DateTimeFormatter to use for the start and end times.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" * @return the string format of the event task for file storage.","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" public String toFileFormat(DateTimeFormatter formatter) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" return String.format(\"E | %s | %s | %s | %s\", super.isDoneString(), description, start.format(formatter),","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":" end.format(formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" * Gets the start time of the event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" * @return the start time as a LocalDateTime object.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" public LocalDateTime getStart() {","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" return start;","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":" * Gets the end time of the event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":" * @return the end time as a LocalDateTime object.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"papataco14"},"content":" public LocalDateTime getEnd() {","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"papataco14"},"content":" return end;","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":62}},{"path":"src/main/java/chad/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" * Represents a Task that the user wants to keep track off.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" protected String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" * Constructs a new Task instance.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" * Gets the status icon representing the task\u0027s completion status.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" * @return \"X\" if the task is done, empty string otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" return (isDone ? \"X\" : \"\");","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" * Gets the completion status of the task as a string.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" * @return \"1\" if the task is done, \"0\" otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" public String isDoneString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" return isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" public void mark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" * Unmarks the task, setting its status to not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" public void unMark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":" * @return the string format of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":" public abstract String toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"papataco14"},"content":" * Returns the task in a format suitable for file storage.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"papataco14"},"content":" * @param formatter the DateTimeFormatter to use for date and time representation.","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"papataco14"},"content":" * @return the string format of the task for file storage.","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"papataco14"},"content":" public abstract String toFileFormat(DateTimeFormatter formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"papataco14"},"content":" * Creates a Task object from a string representation in a file.","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"papataco14"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"papataco14"},"content":" * @param line The string representation of the task read from a file.","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"papataco14"},"content":" * @param formatter The DateTimeFormatter to use for parsing any LocalDateTime objects.","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"papataco14"},"content":" * @return A Task object corresponding to the provided string.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"papataco14"},"content":" public static Task fromFileFormat(String line, DateTimeFormatter formatter) {","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"papataco14"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"papataco14"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"papataco14"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"papataco14"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"papataco14"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"papataco14"},"content":" switch (type) {","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"papataco14"},"content":" case \"T\":","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"papataco14"},"content":" task \u003d new ToDo(description);","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"papataco14"},"content":" case \"D\":","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"papataco14"},"content":" LocalDateTime dueDate \u003d LocalDateTime.parse(parts[3], formatter);","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"papataco14"},"content":" task \u003d new Deadline(description, dueDate);","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"papataco14"},"content":" case \"E\":","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"papataco14"},"content":" LocalDateTime start \u003d LocalDateTime.parse(parts[3], formatter);","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"papataco14"},"content":" LocalDateTime end \u003d LocalDateTime.parse(parts[4], formatter);","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"papataco14"},"content":" task \u003d new Event(description, start, end);","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"papataco14"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"papataco14"},"content":" if (task !\u003d null \u0026\u0026 isDone) {","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"papataco14"},"content":" task.mark();","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"papataco14"},"content":" return task;","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"papataco14"},"content":" String getDescription() {","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"papataco14"},"content":" return description;","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"papataco14"},"content":" boolean isDone() {","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"papataco14"},"content":" return isDone;","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":109}},{"path":"src/main/java/chad/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":" * Represents a list of tasks, providing methods to manipulate the tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" * Constructs a new empty TaskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" * Constructs a new TaskList with existing tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" * @param tasks an ArrayList of existing tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" * Adds a new ToDo task to the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" * @param description the description of the ToDo task.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" public void addTodo(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" tasks.add(new ToDo(description));","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" * Adds a new Deadline task to the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" * @param description the description of the Deadline task.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" * @param dueDate the due date of the Deadline task.","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" public void addDeadline(String description, LocalDateTime dueDate) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":" tasks.add(new Deadline(description, dueDate));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"papataco14"},"content":" * Adds a new Event task to the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"papataco14"},"content":" * @param description the description of the Event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"papataco14"},"content":" * @param start the start date and time of the Event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"papataco14"},"content":" * @param end the end date and time of the Event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"papataco14"},"content":" public void addEvent(String description, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"papataco14"},"content":" tasks.add(new Event(description, start, end));","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"papataco14"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"papataco14"},"content":" * @param index the index of the task to be marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"papataco14"},"content":" * @return a status message indicating success or failure.","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"papataco14"},"content":" public String markTaskAsDone(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"papataco14"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"papataco14"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"papataco14"},"content":" task.mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"papataco14"},"content":" return \"Yessir! This task is marked as done:\\n\" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"papataco14"},"content":" return \"Invalid task index.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"papataco14"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"papataco14"},"content":" * @param index the index of the task to be marked as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"papataco14"},"content":" * @return a status message indicating success or failure.","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"papataco14"},"content":" public String markTaskAsNotDone(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"papataco14"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"papataco14"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"papataco14"},"content":" task.unMark();","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"papataco14"},"content":" return \"Aite, I\u0027ve marked this task as not done yet:\\n\" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"papataco14"},"content":" return \"Invalid task index.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"papataco14"},"content":" * Returns a string representation of all tasks in the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"papataco14"},"content":" * @return a string containing all tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"papataco14"},"content":" public String displayTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"papataco14"},"content":" StringBuilder sb \u003d new StringBuilder(\"Here\u0027s your tasks m8:\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"papataco14"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"papataco14"},"content":" sb.append((i + 1) + \".\" + tasks.get(i).toString()).append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"papataco14"},"content":" sb.append(\"Now you have \" + tasks.size() + \" tasks in your list\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"papataco14"},"content":" return sb.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"papataco14"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"papataco14"},"content":" * @param taskIndex the index of the task to be deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"papataco14"},"content":" * @return a status message indicating success or failure.","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"papataco14"},"content":" public String deleteTask(int taskIndex) {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"papataco14"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"papataco14"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"papataco14"},"content":" tasks.remove(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"papataco14"},"content":" return \"Aite, this task is gone bro: \" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"papataco14"},"content":" return \"Invalid task index.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"papataco14"},"content":" * Returns the ArrayList of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"papataco14"},"content":" * @return an ArrayList containing all tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"papataco14"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"papataco14"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"papataco14"},"content":" * Sets the ArrayList of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"papataco14"},"content":" * @param tasks the new ArrayList of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"papataco14"},"content":" public void setTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"papataco14"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"papataco14"},"content":" public String findTasks(String keyword) {","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"papataco14"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d (ArrayList\u003cTask\u003e) tasks.stream()","lastModifiedDate":"2023-09-06"},{"lineNumber":128,"author":{"gitId":"papataco14"},"content":" .filter(task -\u003e task.getDescription().toLowerCase().contains(keyword.toLowerCase()))","lastModifiedDate":"2023-09-06"},{"lineNumber":129,"author":{"gitId":"papataco14"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":131,"author":{"gitId":"papataco14"},"content":" if (matchingTasks.isEmpty()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":132,"author":{"gitId":"papataco14"},"content":" return \"No tasks found with that keyword.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":133,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":134,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":135,"author":{"gitId":"papataco14"},"content":" StringBuilder sb \u003d new StringBuilder(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":136,"author":{"gitId":"papataco14"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":137,"author":{"gitId":"papataco14"},"content":" sb.append((i + 1) + \".\" + matchingTasks.get(i).toString()).append(\"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"papataco14"},"content":" return sb.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":140,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":141,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":142,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":142}},{"path":"src/main/java/chad/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" * Constructs a new ToDo task.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" * @param description the description of the ToDo task.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" * Returns a string representation of the ToDo task.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" * @return the string format of the ToDo task.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" return String.format(\"[T][%s] %s\", super.getStatusIcon(), description);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" * Returns the ToDo task in a format suitable for file storage.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" * @param formatter the DateTimeFormatter to use for date and time representation.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" * @return the string format of the ToDo task for file storage.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" public String toFileFormat(DateTimeFormatter formatter) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" return String.format(\"T | %s | %s\", super.isDoneString(), description);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":35}},{"path":"src/test/java/chad/chatengine/ChatEngineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.chatengine;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"import static org.mockito.Mockito.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"import chad.io.IOHandler;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":"import chad.task.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":"public class ChatEngineTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" private ChatEngine chatEngine;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":" private IOHandler ioHandler;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" @BeforeEach","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" public void setUp() {","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":" ioHandler \u003d mock(IOHandler.class);","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" taskList \u003d mock(TaskList.class);","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" chatEngine \u003d new ChatEngine(ioHandler, taskList, \"some/file/path\");","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" public void handleEvent_validInput_addsEvent() throws ChadException {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" String[] parsedInput \u003d new String[]{\"EVENT\", \"Meeting /from 2023-12-01 14:00 /to 2023-12-01 16:00\"};","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" chatEngine.handleEvent(parsedInput);","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" verify(taskList).addEvent(\"Meeting\", LocalDateTime.of(2023, 12, 1, 14, 0), LocalDateTime.of(2023, 12, 1, 16, 0));","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":" verify(ioHandler).writeOutput(\"Added new Event: Meeting from 2023-12-01T14:00 to 2023-12-01T16:00\");","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" public void handleEvent_invalidDateFormat_throwsException() {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":" String[] parsedInput \u003d new String[]{\"EVENT\", \"Meeting /from 2023-12-01 14:00 /to 2023-12-01\"};","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" Exception exception \u003d assertThrows(ChadException.class, () -\u003e chatEngine.handleEvent(parsedInput));","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" assertEquals(\"Invalid date format. Please use yyyy-MM-dd HH:mm\", exception.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"papataco14":41}},{"path":"src/test/java/chad/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"package chad.task;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"papataco14"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"papataco14"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"papataco14"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"papataco14"},"content":" public void testFromFileFormatForToDo() {","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"papataco14"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"papataco14"},"content":" Task task \u003d Task.fromFileFormat(\"T | 1 | Read book\", formatter);","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"papataco14"},"content":" assertTrue(task instanceof ToDo);","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"papataco14"},"content":" assertEquals(\"Read book\", task.getDescription());","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"papataco14"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"papataco14"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"papataco14"},"content":" public void testFromFileFormatForDeadline() {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"papataco14"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"papataco14"},"content":" Task task \u003d Task.fromFileFormat(\"D | 0 | Submit Assignment | 2023-12-01 23:59\", formatter);","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"papataco14"},"content":" assertTrue(task instanceof Deadline);","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"papataco14"},"content":" assertEquals(\"Submit Assignment\", task.getDescription());","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"papataco14"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"papataco14"},"content":" assertEquals(LocalDateTime.of(2023, 12, 1, 23, 59), ((Deadline) task).getDueDate());","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"papataco14"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"papataco14"},"content":" public void testFromFileFormatForEvent() {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"papataco14"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"papataco14"},"content":" Task task \u003d Task.fromFileFormat(\"E | 1 | Team Meeting | 2023-12-01 14:00 | 2023-12-01 16:00\", formatter);","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"papataco14"},"content":" assertTrue(task instanceof Event);","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"papataco14"},"content":" assertEquals(\"Team Meeting\", task.getDescription());","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"papataco14"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"papataco14"},"content":" assertEquals(LocalDateTime.of(2023, 12, 1, 14, 0), ((Event) task).getStart());","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"papataco14"},"content":" assertEquals(LocalDateTime.of(2023, 12, 1, 16, 0), ((Event) task).getEnd());","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"papataco14"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"papataco14"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"papataco14"},"content":"","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"papataco14":43}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"papataco14"},"content":"toDo one","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"papataco14"},"content":"deadline two /by Friday","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"papataco14"},"content":"Event three /from saturday /to sun","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"papataco14"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"papataco14"},"content":"bye","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"papataco14":5}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"papataco14"},"content":"java -classpath ..\\bin Main \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"papataco14":1,"-":20}}] diff --git a/papataco14_ip_master/commits.json b/papataco14_ip_master/commits.json index b7f9887d..3c4553fa 100644 --- a/papataco14_ip_master/commits.json +++ b/papataco14_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"papataco14":[{"date":"2023-08-30","commitResults":[{"hash":"f4ef71591f4fad985bd4c14371234fd46f3065ba","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"- Gave chatbot a new name\n- Implement an initial skeletal version that greets and exits\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"a17a1d326c537394a220d5294b712dc39d43189f","isMergeCommit":false,"messageTitle":"Echo","messageBody":"- refactored code\n- Added io \u0026 chatengine packages\n- Added IOHandler interface and ConsoleIO class\n- Added ChatEngine class\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":11},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"fd178f80ca63a698d2ec7d44580275bca239b7a7","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"- added ability to store texts by user\n- users can retrieve list of text inputs stored\n","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":5}}},{"hash":"0d9d4e13f4345c0376643fccfe48323b49d23c42","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"- added option to mark and unmark tasks\n- added Task class to store task info\n- added TaskList class to store list of tasks\n","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":18}}},{"hash":"51574dcdbb0c4fb5b3ce9f17881fca996c04f838","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"- added support for tracking ToDos, Events \u0026 Deadlines\n- changed Task to abstract class\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":18}}},{"hash":"02819b95e0503a6c2c071ca2bacf36c3ebecd807","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"- Added test cases for testing of basic event adding and querying\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0}}},{"hash":"745a5f1c50b05a5156100ca6c632ae834605815d","isMergeCommit":false,"messageTitle":"Added error handling","messageBody":"- refactored code to allow for better error handling\n- added three types of exceptions common for chadbot: invalid commands, arguments, and format\n","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":28}}}]},{"date":"2023-09-01","commitResults":[{"hash":"0704afb7cd768da9e7ce1c3436a63e0ec3a53b18","isMergeCommit":false,"messageTitle":"Add delete operation","messageBody":"The task manager does not offer delete task functionality.\n\nUsers might want to delete tasks they have completed already or for any other reason.\n\nLet\u0027s remove tasks stored in the taskList class and offer the user commands to delete tasks by their index shown to the user.\n","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"765f4adf23179828f92e6e3907bc56ce3ad39404","isMergeCommit":false,"messageTitle":"Refactor ChatEngine command handling and use enums","messageBody":"Hardcoding of commands may lead to more problems in the future.\n\nHandling all command logic in processInput is not maintainable.\n\nLets use enums for the commands that Chad can accept for improved Readability and Type Safety.\n\nBy abstracting out the logic for handling each of the commands into separate functions, commandHandler will now only need to be concerned with deciding which handler function to choose, leading to better separation of concerns.\n","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":52}}}]},{"date":"2023-09-03","commitResults":[{"hash":"e610e44eb599b8ae4796d593c4af5c43957d7a1a","isMergeCommit":false,"messageTitle":"Implement Save feature","messageBody":"Users couldn\u0027t save their list of tasks\n\nLet\u0027s allow them to save their current tasks and retrieve it when they load the app again.\n","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":152,"deletions":12}}}]},{"date":"2023-09-05","commitResults":[{"hash":"2fe90f0202acd6fd73de16ffc5807851665cffc8","isMergeCommit":false,"messageTitle":"Add date time parsing","messageBody":"added data time parsing and storage for deadlines and event start and end.\n","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":3},"java":{"insertions":60,"deletions":25}}},{"hash":"6d05e7867058d513f886854c777dbaa7fb2ce5d4","isMergeCommit":false,"messageTitle":"More OOP","messageBody":"Add more classes to follow OOP paradigmn\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":112,"deletions":76}}},{"hash":"6cc82a10effb81eac13f8bc7314162dfa7761f44","isMergeCommit":false,"messageTitle":"Add packages","messageBody":"Added packages\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":17}}},{"hash":"1061e01799709b1310dc9758c65e35943bc2c10f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"papataco14":{"java":545,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":7}},"authorContributionVariance":{"papataco14":15564.459},"authorDisplayNameMap":{"papataco14":"CS2103T-T17-2 RAMU..IJAY"}} +{"authorDailyContributionsMap":{"papataco14":[{"date":"2023-08-30","commitResults":[{"hash":"f4ef71591f4fad985bd4c14371234fd46f3065ba","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"- Gave chatbot a new name\n- Implement an initial skeletal version that greets and exits\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"a17a1d326c537394a220d5294b712dc39d43189f","isMergeCommit":false,"messageTitle":"Echo","messageBody":"- refactored code\n- Added io \u0026 chatengine packages\n- Added IOHandler interface and ConsoleIO class\n- Added ChatEngine class\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":11},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"fd178f80ca63a698d2ec7d44580275bca239b7a7","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"- added ability to store texts by user\n- users can retrieve list of text inputs stored\n","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":5}}},{"hash":"0d9d4e13f4345c0376643fccfe48323b49d23c42","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"- added option to mark and unmark tasks\n- added Task class to store task info\n- added TaskList class to store list of tasks\n","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":18}}},{"hash":"51574dcdbb0c4fb5b3ce9f17881fca996c04f838","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"- added support for tracking ToDos, Events \u0026 Deadlines\n- changed Task to abstract class\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":18}}},{"hash":"02819b95e0503a6c2c071ca2bacf36c3ebecd807","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"- Added test cases for testing of basic event adding and querying\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0}}},{"hash":"745a5f1c50b05a5156100ca6c632ae834605815d","isMergeCommit":false,"messageTitle":"Added error handling","messageBody":"- refactored code to allow for better error handling\n- added three types of exceptions common for chadbot: invalid commands, arguments, and format\n","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":28}}}]},{"date":"2023-09-01","commitResults":[{"hash":"0704afb7cd768da9e7ce1c3436a63e0ec3a53b18","isMergeCommit":false,"messageTitle":"Add delete operation","messageBody":"The task manager does not offer delete task functionality.\n\nUsers might want to delete tasks they have completed already or for any other reason.\n\nLet\u0027s remove tasks stored in the taskList class and offer the user commands to delete tasks by their index shown to the user.\n","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"765f4adf23179828f92e6e3907bc56ce3ad39404","isMergeCommit":false,"messageTitle":"Refactor ChatEngine command handling and use enums","messageBody":"Hardcoding of commands may lead to more problems in the future.\n\nHandling all command logic in processInput is not maintainable.\n\nLets use enums for the commands that Chad can accept for improved Readability and Type Safety.\n\nBy abstracting out the logic for handling each of the commands into separate functions, commandHandler will now only need to be concerned with deciding which handler function to choose, leading to better separation of concerns.\n","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":52}}}]},{"date":"2023-09-03","commitResults":[{"hash":"e610e44eb599b8ae4796d593c4af5c43957d7a1a","isMergeCommit":false,"messageTitle":"Implement Save feature","messageBody":"Users couldn\u0027t save their list of tasks\n\nLet\u0027s allow them to save their current tasks and retrieve it when they load the app again.\n","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":152,"deletions":12}}}]},{"date":"2023-09-05","commitResults":[{"hash":"2fe90f0202acd6fd73de16ffc5807851665cffc8","isMergeCommit":false,"messageTitle":"Add date time parsing","messageBody":"added data time parsing and storage for deadlines and event start and end.\n","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":3},"java":{"insertions":60,"deletions":25}}},{"hash":"6d05e7867058d513f886854c777dbaa7fb2ce5d4","isMergeCommit":false,"messageTitle":"More OOP","messageBody":"Add more classes to follow OOP paradigmn\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":112,"deletions":76}}},{"hash":"6cc82a10effb81eac13f8bc7314162dfa7761f44","isMergeCommit":false,"messageTitle":"Add packages","messageBody":"Added packages\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":17}}},{"hash":"1061e01799709b1310dc9758c65e35943bc2c10f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"4c33b43baaf4abc5af30e9a464687906580f680f","isMergeCommit":false,"messageTitle":"Config Junit","messageBody":"Configured and added junit test cases\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":2},"txt":{"insertions":1,"deletions":0},"java":{"insertions":123,"deletions":14}}},{"hash":"aa5d37e9e6c75dcace7bf874bf34b54ba0c9cb16","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"added javadocs for all non-public methods/classes\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":334,"deletions":47}}},{"hash":"7bafbd81ed3dff96ce49353fa20030857a241566","isMergeCommit":false,"messageTitle":"Add find feature","messageBody":"allow users to find tasks by keyword\n","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":1}}},{"hash":"7b55ecafcedd2269c1a36a9777eeddf97acb8f20","isMergeCommit":false,"messageTitle":"Follow Java Coding Standard","messageBody":"fixed indentation for switch statements\n","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":53}}},{"hash":"91e800f228716b277084ca6829ec893045459e5c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"87fc40a2c89a6a86ba44381df09ef75b2f69ef2b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"8f15b48b6afba8eb74d5f5cf8fd9915264de4541","isMergeCommit":false,"messageTitle":"fixed formatting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":63}}},{"hash":"4b4f2c576d7e9c4202a1c3fd78624a8a463c4079","isMergeCommit":false,"messageTitle":"Bug fixes","messageBody":"fixed bugs\n","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":6}}}]}]},"authorFileTypeContributionMap":{"papataco14":{"java":1028,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":8,"txt":8}},"authorContributionVariance":{"papataco14":44470.5},"authorDisplayNameMap":{"papataco14":"CS2103T-T17-2 RAMU..IJAY"}} diff --git a/raynertjx_ip_master/authorship.json b/raynertjx_ip_master/authorship.json index 860fac1d..3cd5947c 100644 --- a/raynertjx_ip_master/authorship.json +++ b/raynertjx_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"# Bongo project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"3. After that, locate the `src/main/java/bongo.Bongo.java` file, right-click it, and choose `Run bongo.Bongo.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"raynertjx":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":"raynertjx"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" mainClass.set(\"bongo.Bongo\")","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"raynertjx":6,"-":41}},{"path":"src/main/java/bongo/Bongo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" * The Bongo class, the class for the BongoBot.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":"public class Bongo {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" * Initializes Bongo object with filepath.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" * @param filepath","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" public Bongo(String filepath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" this.storage \u003d new Storage(filepath);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" this.tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" storage.checkIfFilesExist();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" } catch (BongoException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" * Runs the Bongo bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" String command \u003d ui.readCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" Command c \u003d Parser.parse(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" c.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" } catch (BongoException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"raynertjx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"raynertjx"},"content":" Bongo bongo \u003d new Bongo(\"data/bongo.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"raynertjx"},"content":" bongo.run();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":65}},{"path":"src/main/java/bongo/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.DateHelper;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" * A class for a AddCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" private final String[] command;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" private Task newTask;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" * A constructor for a AddCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" * @param command Array of strings from user command.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If there is a problem when initializing task.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" public AddCommand(String[] command) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" this.initialiseTask();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" * Processes user input and initializes the respective task (Todo, Event or Deadline).","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" * Checks if user input to create task is valid.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If task is not initialized properly.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" private void initialiseTask() throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" String taskInput \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003e 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" taskInput \u003d String.join(\" \", command).substring(command[0].length() + 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" switch (this.command[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the description of your todo.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" this.newTask \u003d new Todo(taskInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the description and datetime of your deadline.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003c\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the datetime of your deadline.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":" int index \u003d taskInput.indexOf(\"/by\");","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":" if (index \u003d\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the datetime of your deadline.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"raynertjx"},"content":" String deadlineDesc \u003d taskInput.substring(0, index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"raynertjx"},"content":" String deadlineStr \u003d taskInput.substring(index + 4);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"raynertjx"},"content":" LocalDateTime deadline \u003d DateHelper.convertStringToDateTime(deadlineStr);","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"raynertjx"},"content":" this.newTask \u003d new Deadline(deadlineDesc, deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"raynertjx"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"raynertjx"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the description and datetime of your event.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003c\u003d 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the datetime of your event.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"raynertjx"},"content":" int fromIndex \u003d taskInput.indexOf(\"/from\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"raynertjx"},"content":" int toIndex \u003d taskInput.indexOf(\"/to\");","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"raynertjx"},"content":" if (fromIndex \u003d\u003d -1 || toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the to and from datetime of the event.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"raynertjx"},"content":" String eventDesc \u003d taskInput.substring(0, fromIndex - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"raynertjx"},"content":" String eventFrom \u003d taskInput.substring(fromIndex + 6, toIndex - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"raynertjx"},"content":" String eventTo \u003d taskInput.substring(toIndex + 4);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"raynertjx"},"content":" LocalDateTime from \u003d DateHelper.convertStringToDateTime(eventFrom);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"raynertjx"},"content":" LocalDateTime to \u003d DateHelper.convertStringToDateTime(eventTo);","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"raynertjx"},"content":" this.newTask \u003d new Event(eventDesc, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"raynertjx"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"raynertjx"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"raynertjx"},"content":" throw new BongoException();","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"raynertjx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"raynertjx"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"raynertjx"},"content":" ui.showAddedTask(newTask, tasks.getTotalTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"raynertjx"},"content":" storage.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":97}},{"path":"src/main/java/bongo/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" * A class for a Command.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" * Execute the respective details of the Command.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" * @param tasks TaskList instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" * @param ui Ui instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" * @param storage Storage instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If command is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws BongoException;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" * Returns whether Command is an ExitCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" * @return Whether Command is an ExitCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":32}},{"path":"src/main/java/bongo/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" * A class for a DeleteCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" private final int taskIndex;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" * A constructor for a DeleteCommand, with a taskIndex.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" * @param command Array of strings from user command.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If task index is missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" public DeleteCommand(String[] command) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the task index.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" this.taskIndex \u003d Integer.parseInt(command[1]) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" if (tasks.getTotalTasks() \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"There are currently no tasks.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.getTotalTasks()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Task does not exist.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" Task taskToBeDeleted \u003d tasks.getTask(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" ui.showDeleteTask(taskToBeDeleted, tasks.getTotalTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" storage.edit(Storage.FileAction.DELETE_TASK, this.taskIndex + 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":41}},{"path":"src/main/java/bongo/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":" * A class for a ExitCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" ui.showGoodbye();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":21}},{"path":"src/main/java/bongo/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" * A class for a FindCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" private final String[] searchInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" private String searchParam;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" * A constructor for a FindCommand, with a searchInput.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" * @param searchInput","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" public FindCommand(String[] searchInput) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" this.searchInput \u003d searchInput;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" this.validateSearchInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" private void validateSearchInput() throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" if (this.searchInput.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Search parameter cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" for (int i \u003d 1; i \u003c searchInput.length; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" sb.append(searchInput[i]);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" this.searchParam \u003d sb.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" ArrayList\u003cTask\u003e filteredTaskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" ArrayList\u003cTask\u003e allTasks \u003d tasks.getAllTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" for (Task currentTask : allTasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" if (currentTask.getDescription().contains(searchParam)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" filteredTaskList.add(currentTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" ui.showSearchedTasks(filteredTaskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":49}},{"path":"src/main/java/bongo/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":" * A class for a ListCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" ui.showAllTasks(tasks.getAllTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":16}},{"path":"src/main/java/bongo/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" * A class for a MarkCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" private final int taskIndex;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" * A constructor for a MarkCommand, with a taskIndex.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" * @param command Array of strings from user command.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If task index is missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" public MarkCommand(String[] command) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the task index.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" this.taskIndex \u003d Integer.parseInt(command[1]) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" if (tasks.getTotalTasks() \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"There are currently no tasks.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.getTotalTasks()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Task does not exist.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" tasks.markTaskDone(this.taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" ui.showTaskIsDone(tasks.getTask(this.taskIndex));","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" storage.edit(Storage.FileAction.MARK_TASK, this.taskIndex + 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":39}},{"path":"src/main/java/bongo/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" * A class for a UnmarkCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" private final int taskIndex;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" * A constructor for a UnmarkCommand, with a taskIndex.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" * @param command Array of strings from user command.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If task index is missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" public UnmarkCommand(String[] command) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the task index.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" this.taskIndex \u003d Integer.parseInt(command[1]) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" if (tasks.getTotalTasks() \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"There are currently no tasks.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.getTotalTasks()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Task does not exist.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" tasks.markTaskUndone(this.taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" ui.showTaskIsUndone(tasks.getTask(this.taskIndex));","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" storage.edit(Storage.FileAction.UNMARK_TASK, this.taskIndex + 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":39}},{"path":"src/main/java/bongo/helper/BongoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.helper;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":" * A class for a BongoException.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"public class BongoException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":" * A constructor for a BongoException.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" public BongoException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" super(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" public BongoException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":17}},{"path":"src/main/java/bongo/helper/DateHelper.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.helper;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":" * A utility class to help parse and format dates.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"public class DateHelper {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" private static final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" public static boolean hasTaskExpired(LocalDateTime datetime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" return datetime.isBefore(LocalDateTime.now());","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" * Helper method to convert LocalDateTime object into a datetime string.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" * @param datetime Datetime string.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" * @return A foramtted datetime string.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If LocalDateTime object is invalid.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" public static String convertDateTimeToString(LocalDateTime datetime) throws BongoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" return formatter.format(datetime);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"There was an error converting the datetime to a string.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" * Helper method to convert datetime string into a LocalDateTime object.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" * @param datetime Datetime string.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" * @return A LocalDateTime object.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If datetime string has an invalid format.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" public static LocalDateTime convertStringToDateTime(String datetime) throws BongoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" return LocalDateTime.parse(datetime, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(String.format(\"Please enter a valid datetime in the format of %s\",","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" \"DD/MM/YYYY HHMM.\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":46}},{"path":"src/main/java/bongo/helper/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.helper;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"import bongo.command.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import bongo.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"import bongo.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"import bongo.command.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" * A class for a Parser.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" * Parses command that user inputs into the bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" * Returns the Command that matches the user\u0027s input.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" * Throws a BongoException if user enters unknown command.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" * @param command Command from user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" * @return A Command which corresponds to user\u0027s input.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If user gives an unknown command.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" public static Command parse(String command) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" String[] input \u003d command.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" switch (input[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" case \"bye\":","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" case \"list\":","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" return new MarkCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" return new UnmarkCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" return new DeleteCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" return new AddCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" return new FindCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" throw new BongoException();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":49}},{"path":"src/main/java/bongo/helper/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.helper;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"import java.lang.reflect.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"import java.time.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" * A class for a Storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" * Different types of actions we can take to modify the text file.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" public enum FileAction {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" MARK_TASK,","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" UNMARK_TASK,","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" DELETE_TASK","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" private final String pathname;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Storage, with a pathname.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" * @param pathname Pathname of file.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" public Storage(String pathname) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" this.pathname \u003d pathname;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" * Loads tasks into the TaskList, if there is an existing text file found.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" * If no file is found, throws a FileNotFound Exception.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" * @return An ArrayList of preloaded tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" * @throws FileNotFoundException If file is not found.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If datetime string has an invalid format.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" public ArrayList\u003cTask\u003e load() throws FileNotFoundException, BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":" File file \u003d new File(this.pathname);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" Scanner fileScanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":" ArrayList\u003cInteger\u003e expiredTaskNumbers \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" int numOfTasks \u003d 0;","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":" while (fileScanner.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":" numOfTasks++;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"raynertjx"},"content":" String line \u003d fileScanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"raynertjx"},"content":" String[] arr \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"raynertjx"},"content":" for (int i \u003d 0; i \u003c arr.length; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"raynertjx"},"content":" arr[i] \u003d arr[i].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"raynertjx"},"content":" boolean isTaskMarkedDone \u003d arr[1].equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"raynertjx"},"content":" LocalDateTime datetime;","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"raynertjx"},"content":" switch (arr[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"raynertjx"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"raynertjx"},"content":" loadedTasks.add(new Todo(arr[2], isTaskMarkedDone));","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"raynertjx"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"raynertjx"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"raynertjx"},"content":" datetime \u003d DateHelper.convertStringToDateTime(arr[3]);","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"raynertjx"},"content":" if (DateHelper.hasTaskExpired(datetime)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"raynertjx"},"content":" expiredTaskNumbers.add(numOfTasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"raynertjx"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"raynertjx"},"content":" loadedTasks.add(new Deadline(arr[2], isTaskMarkedDone, DateHelper.convertStringToDateTime(arr[3])));","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"raynertjx"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"raynertjx"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"raynertjx"},"content":" datetime \u003d DateHelper.convertStringToDateTime(arr[4]);","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"raynertjx"},"content":" if (DateHelper.hasTaskExpired(datetime)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"raynertjx"},"content":" expiredTaskNumbers.add(numOfTasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"raynertjx"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"raynertjx"},"content":" loadedTasks.add(new Event(arr[2], isTaskMarkedDone, DateHelper.convertStringToDateTime(arr[3]),","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"raynertjx"},"content":" DateHelper.convertStringToDateTime(arr[4])));","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"raynertjx"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"raynertjx"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Error reading the text file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"raynertjx"},"content":" deleteExpiredTasks(expiredTaskNumbers);","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"raynertjx"},"content":" fileScanner.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"raynertjx"},"content":" return loadedTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"raynertjx"},"content":" * Check if the data directory and text file is present.","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"raynertjx"},"content":" * If either is not present, create it.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"raynertjx"},"content":" public void checkIfFilesExist() {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"raynertjx"},"content":" File file \u003d new File(this.pathname);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"raynertjx"},"content":" String directoryPath \u003d file.getParent();","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"raynertjx"},"content":" File directory \u003d new File(directoryPath);","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"raynertjx"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"raynertjx"},"content":" boolean isDirectoryCreated \u003d directory.mkdirs();","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"raynertjx"},"content":" if (isDirectoryCreated) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"raynertjx"},"content":" System.out.println(\"Directory created: \" + directoryPath);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"raynertjx"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"raynertjx"},"content":" boolean isFileCreated \u003d file.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"raynertjx"},"content":" if (isFileCreated) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"raynertjx"},"content":" System.out.println(\"File created: \" + this.pathname);","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"raynertjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"raynertjx"},"content":" System.out.println(\"An error occurred while creating the file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"raynertjx"},"content":" * Appends task on a new line in the text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"raynertjx"},"content":" * @param newTask New Task to add.","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"raynertjx"},"content":" public void add(Task newTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"raynertjx"},"content":" File file \u003d new File(this.pathname);","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"raynertjx"},"content":" FileWriter fw \u003d new FileWriter(this.pathname, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"raynertjx"},"content":" String newLine \u003d newTask.generateStringForTextFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"raynertjx"},"content":" if (file.length() !\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"raynertjx"},"content":" fw.write(String.format(\"\\n%s\", newLine));","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"raynertjx"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"raynertjx"},"content":" fw.write(newLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"raynertjx"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"raynertjx"},"content":" } catch (IOException ioe) {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"raynertjx"},"content":" System.err.println(\"IOException: \" + ioe.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"raynertjx"},"content":" } catch (BongoException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"raynertjx"},"content":" throw new RuntimeException(\"There was an error adding the task.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"raynertjx"},"content":" public void deleteExpiredTasks(ArrayList\u003cInteger\u003e expiredTaskNumbers) {","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"raynertjx"},"content":" File file \u003d new File(this.pathname);","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"raynertjx"},"content":" BufferedReader fileReader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"raynertjx"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"raynertjx"},"content":" String line;","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"raynertjx"},"content":" int currentLine \u003d 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"raynertjx"},"content":" while ((line \u003d fileReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"raynertjx"},"content":" if (expiredTaskNumbers.contains(currentLine)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"raynertjx"},"content":" currentLine++;","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"raynertjx"},"content":" continue;","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"raynertjx"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"raynertjx"},"content":" stringBuilder.append(line).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"raynertjx"},"content":" currentLine++;","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"raynertjx"},"content":" fileReader.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"raynertjx"},"content":" FileWriter fileWriter \u003d new FileWriter(file);","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"raynertjx"},"content":" fileWriter.write(stringBuilder.toString().trim());","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"raynertjx"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"raynertjx"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"raynertjx"},"content":" System.out.println(\"Problem editing the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"raynertjx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"raynertjx"},"content":" * Edit the text that corresponds to a certain task in the text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"raynertjx"},"content":" * @param action Type of FileAction.","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"raynertjx"},"content":" * @param taskNumber Number of task to delete.","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"raynertjx"},"content":" public void edit(FileAction action, int taskNumber) {","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"raynertjx"},"content":" File file \u003d new File(this.pathname);","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"raynertjx"},"content":" BufferedReader fileReader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"raynertjx"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"raynertjx"},"content":" String line;","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"raynertjx"},"content":" int currentLine \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"raynertjx"},"content":" while ((line \u003d fileReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"raynertjx"},"content":" if (currentLine \u003d\u003d taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"raynertjx"},"content":" String[] lineWordsArr \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"raynertjx"},"content":" for (int i \u003d 0; i \u003c lineWordsArr.length; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"raynertjx"},"content":" lineWordsArr[i] \u003d lineWordsArr[i].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"raynertjx"},"content":" switch (action) {","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"raynertjx"},"content":" case MARK_TASK:","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"raynertjx"},"content":" lineWordsArr[1] \u003d \"1\";","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"raynertjx"},"content":" stringBuilder.append(String.join(\" | \", lineWordsArr)).append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"raynertjx"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"raynertjx"},"content":" case UNMARK_TASK:","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"raynertjx"},"content":" lineWordsArr[1] \u003d \"0\";","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"raynertjx"},"content":" stringBuilder.append(String.join(\" | \", lineWordsArr)).append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"raynertjx"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"raynertjx"},"content":" case DELETE_TASK:","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"raynertjx"},"content":" currentLine++;","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"raynertjx"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"raynertjx"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":205,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Error modifying the text file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":206,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"raynertjx"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"raynertjx"},"content":" stringBuilder.append(line).append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"raynertjx"},"content":" currentLine++;","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"raynertjx"},"content":" fileReader.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"raynertjx"},"content":" FileWriter fileWriter \u003d new FileWriter(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"raynertjx"},"content":" fileWriter.write(stringBuilder.toString().trim());","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"raynertjx"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"raynertjx"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"raynertjx"},"content":" System.out.println(\"Problem editing the file.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"raynertjx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":223}},{"path":"src/main/java/bongo/helper/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.helper;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" * A class for a Ui.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" private final Scanner inputScanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Ui.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" this.inputScanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" * Returns the current line of the user\u0027s input.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" * @return Current line of user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" return this.inputScanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" * Adds lines to top and bottom of message.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" * @param message User message.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" * @return A message sandwiched between two lines.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" private String insertLines(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" return \"____________________________________________________________\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" + message","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" + \"____________________________________________________________\";","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" * Prints a line.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" public void showLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":" * Shows welcome message.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" String welcomeMessage \u003d \" Hello! I\u0027m Bongo!\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":" + \" What can I do for you?\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":" System.out.println(insertLines(welcomeMessage));","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"raynertjx"},"content":" * Shows goodbye message.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"raynertjx"},"content":" public void showGoodbye() {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"raynertjx"},"content":" String goodbyeMessage \u003d \" Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"raynertjx"},"content":" System.out.println(goodbyeMessage);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"raynertjx"},"content":" this.inputScanner.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"raynertjx"},"content":" * Shows all tasks to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"raynertjx"},"content":" * @param tasks All user tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"raynertjx"},"content":" public void showAllTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"raynertjx"},"content":" StringBuilder allTasks \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"raynertjx"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"raynertjx"},"content":" allTasks.append(String.format(\" %d. %s\\n\", i + 1, tasks.get(i)));","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"raynertjx"},"content":" String tasksList \u003d \" Here are the tasks in your list:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"raynertjx"},"content":" + allTasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"raynertjx"},"content":" System.out.println(tasksList.trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"raynertjx"},"content":" * Shows list of tasks that user searched for.","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"raynertjx"},"content":" * @param tasks All user tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"raynertjx"},"content":" public void showSearchedTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"raynertjx"},"content":" StringBuilder allTasks \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"raynertjx"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"raynertjx"},"content":" allTasks.append(String.format(\" %d. %s\\n\", i + 1, tasks.get(i)));","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"raynertjx"},"content":" String tasksList \u003d \" Here are the matching tasks in your list:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"raynertjx"},"content":" + allTasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"raynertjx"},"content":" System.out.println(tasksList.trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"raynertjx"},"content":" * Shows user the recently added task.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"raynertjx"},"content":" * @param newTask New Task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"raynertjx"},"content":" * @param totalTasks Number of total tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"raynertjx"},"content":" public void showAddedTask(Task newTask, int totalTasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"raynertjx"},"content":" String addedTaskMessage \u003d \" Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"raynertjx"},"content":" + String.format(\" %s\\n\", newTask)","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"raynertjx"},"content":" + String.format(\" Now you have %d tasks in the list.\", totalTasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"raynertjx"},"content":" System.out.println(addedTaskMessage);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"raynertjx"},"content":" * Shows user the task that was recently marked done.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"raynertjx"},"content":" * @param task Recently marked done task.","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"raynertjx"},"content":" public void showTaskIsDone(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"raynertjx"},"content":" String taskStatusMessage \u003d \" Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"raynertjx"},"content":" + task;","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"raynertjx"},"content":" System.out.println(taskStatusMessage.trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"raynertjx"},"content":" * Shows user the task that was recently marked undone.","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"raynertjx"},"content":" * @param task Recently marked undone task.","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"raynertjx"},"content":" public void showTaskIsUndone(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"raynertjx"},"content":" String taskStatusMessage \u003d \" OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"raynertjx"},"content":" + task;","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"raynertjx"},"content":" System.out.println(taskStatusMessage.trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"raynertjx"},"content":" * Shows user the recently deleted task.","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"raynertjx"},"content":" * @param task Task that was recently deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"raynertjx"},"content":" * @param tasksLeft Number of tasks left.","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"raynertjx"},"content":" public void showDeleteTask(Task task, int tasksLeft) {","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"raynertjx"},"content":" String taskDeleteMessage \u003d \" Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"raynertjx"},"content":" + String.format(\" %s\\n\", task)","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"raynertjx"},"content":" + String.format(\" Now you have %d tasks in the list.\", tasksLeft);","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"raynertjx"},"content":" System.out.println(taskDeleteMessage);","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"raynertjx"},"content":" * Shows user an error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"raynertjx"},"content":" * @param errorMessage Error message that BongoException throws.","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"raynertjx"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"raynertjx"},"content":" String finalErrorMessage \u003d \" Oh no! Bongo ran into an error :(\\n\" + String.format(\" %s\", errorMessage);","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"raynertjx"},"content":" System.out.println(finalErrorMessage);","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"raynertjx"},"content":" * Shows user the loading files error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"raynertjx"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"raynertjx"},"content":" String loadingErrorMessage \u003d \"Oh no! Bongo couldn\u0027t find the files, so the following files were created:\";","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"raynertjx"},"content":" System.out.println(loadingErrorMessage);","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":163}},{"path":"src/main/java/bongo/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.DateHelper;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" * A class for a Deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" private final LocalDateTime deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" * @param description Deadline description.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" * @param deadline Deadline datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If deadline datetime is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" public Deadline(String description, LocalDateTime deadline) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" this.validateDeadline(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Deadline, specifying whether it is done.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" * @param description Deadline description.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" * @param isDone Deadline is marked done or undone.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" * @param deadline Deadline datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If deadline datetime is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" public Deadline(String description, boolean isDone, LocalDateTime deadline) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" this.validateDeadline(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" * Check if deadline provided is valid.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" * @param deadline Deadline datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If deadline is in the past.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" private void validateDeadline(LocalDateTime deadline) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" if (deadline.isBefore(LocalDateTime.now())) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Deadline must be in the future.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":" public String generateStringForTextFile() throws BongoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":" String isTaskMarkedDone \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" return String.join(\" | \", \"D\", isTaskMarkedDone, this.description,","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":" DateHelper.convertDateTimeToString(this.deadline));","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"raynertjx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"raynertjx"},"content":" return \"[D]\" + super.toString() + String.format(\" (by: %s)\", super.generateDateString(this.deadline));","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"raynertjx":65}},{"path":"src/main/java/bongo/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.DateHelper;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" * A class for an Event.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Event.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" * @param description Event description.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" * @param from Event from datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" * @param to Event to datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If either Event from or to datetime is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" this.validateEventDuration(from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Event, specifying whether it is done.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" * @param description Event description.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" * @param isDone Event marked done or undone.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" * @param from Event from datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" * @param to Event to datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If either Event from or to datetime is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" public Event(String description, boolean isDone, LocalDateTime from, LocalDateTime to) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" this.validateEventDuration(from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" * Check if event to and from datetime provided is valid.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" * @param from Event from datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":" * @param to Event to datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If Event from/to datetime is in the past or if Event","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":" * from datetime is after it\u0027s to datetime.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":" private void validateEventDuration(LocalDateTime from, LocalDateTime to) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":" if (from.isBefore(LocalDateTime.now()) || to.isBefore(LocalDateTime.now())) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Start and end of event must be in the future.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":" if (from.isAfter(to)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"End of event must be after start of event.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"raynertjx"},"content":" public String generateStringForTextFile() throws BongoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"raynertjx"},"content":" String isTaskMarkedDone \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"raynertjx"},"content":" return String.join(\" | \", \"E\", isTaskMarkedDone, this.description,","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"raynertjx"},"content":" DateHelper.convertDateTimeToString(this.from), DateHelper.convertDateTimeToString(this.to));","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"raynertjx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"raynertjx"},"content":" return \"[E]\" + super.toString() + String.format(\" (from: %s to: %s)\",","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"raynertjx"},"content":" super.generateDateString(from), super.generateDateString(to));","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"raynertjx":76}},{"path":"src/main/java/bongo/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":" * A class for a Task.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" * @param description Task description.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" * Returns status icon of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" * @return Status icon of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" * Converts datetime into formatted string.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" * @param datetime Datetime of Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" * @return Returns formatted datetime string.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":" public String generateDateString(LocalDateTime datetime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"EEEE, MMM d, yyyy hh:mm a\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":" return formatter.format(datetime);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" * Returns string to save in text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":" * @return String to save in text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"raynertjx"},"content":" public abstract String generateStringForTextFile() throws BongoException;","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"raynertjx"},"content":" * Returns string representation of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"raynertjx"},"content":" * @return String representation of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"raynertjx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"raynertjx"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"raynertjx":72}},{"path":"src/main/java/bongo/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":" * A class for holding the list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" * A constructor for a TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" * A constructor for a TaskList, with preloaded tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" * @param loadedTasks ArrayList of preloaded tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" public TaskList(ArrayList\u003cTask\u003e loadedTasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" this.tasks \u003d loadedTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" public Task getTask(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" return this.tasks.get(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" public void addTask(Task newTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" * Deletes a specific task from the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" * @param taskIndex Index of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" public void deleteTask(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" tasks.remove(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" public int getTotalTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" return this.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" public void markTaskDone(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":" tasks.get(taskIndex).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":" public void markTaskUndone(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" tasks.get(taskIndex).markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":59}},{"path":"src/main/java/bongo/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":" * A class for a Todo.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Todo.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" * @param description Todo description.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Todo, specifying whether it is done.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" * @param description Todo description.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" * @param isDone Todo marked done or undone.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" public String generateStringForTextFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" String isTaskMarkedDone \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" return String.join(\" | \", \"T\", isTaskMarkedDone, this.description);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"raynertjx":38}},{"path":"src/test/java/bongo/BongoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"public class BongoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":" public void dummyTest(){","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" public void anotherDummyTest(){","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":15}},{"path":"src/test/java/bongo/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.DateHelper;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" public void testDeadlineString() throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" Deadline sampleDeadline \u003d new Deadline(\"homework\", DateHelper.convertStringToDateTime(\"14/6/2030 1200\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" String expectedOutput \u003d \"[D][ ] homework (by: Friday, Jun 14, 2030 12:00 PM)\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedOutput, sampleDeadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" public void testEmptyDeadline_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" Exception exception \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"deadline\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"Please include the description and datetime of your deadline.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" public void testInvalidDeadline_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" Exception exception \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"deadline homework /by 14/6/2001 1200\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"Deadline must be in the future.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" public void testEmptyDeadlineDateTime_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" Exception exception1 \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"deadline homework\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" Exception exception2 \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"deadline homework /by\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"Please include the datetime of your deadline.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception1.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception2.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":48}},{"path":"src/test/java/bongo/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.DateHelper;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" public void testEventString() throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" Event sampleEvent \u003d new Event(\"party\", DateHelper.convertStringToDateTime(\"14/6/2030 1200\"), DateHelper.convertStringToDateTime(\"14/6/2030 1500\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" String expectedOutput \u003d \"[E][ ] party (from: Friday, Jun 14, 2030 12:00 PM to: Friday, Jun 14, 2030 03:00 PM)\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedOutput, sampleEvent.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" public void testEmptyEvent_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" Exception exception \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"Please include the description and datetime of your event.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" public void testInvalidEvent_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" Exception exception1 \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"event party /from 14/6/2030 1200\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" Exception exception2 \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"event party /to 14/6/2030 1200\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"Please include the to and from datetime of the event.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception1.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception2.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" public void testEmptyEventDateTime_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" Exception exception \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"event party\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"Please include the datetime of your event.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" public void testFromIsBeforeCurrentTime_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" Exception exception \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"event party /from 30/8/2023 1200 /to 30/8/2030 1200\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"Start and end of event must be in the future.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":" public void testFromIsAfterTo_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":" Exception exception \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"event party /from 30/8/2031 1200 /to 30/8/2030 1200\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"End of event must be after start of event.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":65}},{"path":"src/test/java/bongo/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" public void testTodoString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" Todo sampleTodo \u003d new Todo(\"make coffee\");","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" String expectedOutput \u003d \"[T][ ] make coffee\";","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedOutput, sampleTodo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" public void testEmptyTodoDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" Exception exception \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"Please include the description of your todo.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":25}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"mark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"raynertjx":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":"java -classpath ..\\bin bongo.Bongo \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":{"raynertjx":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"# Bongo project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"3. After that, locate the `src/main/java/bongo.Bongo.java` file, right-click it, and choose `Run bongo.Bongo.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"raynertjx":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":"raynertjx"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" mainClass.set(\"bongo.Bongo\")","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"raynertjx":20,"-":41}},{"path":"src/main/java/bongo/Bongo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.gui.DialogBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":"import bongo.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" * The Bongo class, the class for the BongoBot.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":"public class Bongo {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" private Image bongo \u003d new Image(this.getClass().getResourceAsStream(\"/images/bongo.jpeg\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" private static final String FILEPATH \u003d \"data/bongo.txt\";","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" * Initializes Bongo object with filepath.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" * @param filepath Filepath of text file.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" public Bongo(String filepath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" this.storage \u003d new Storage(filepath);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" this.tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" storage.checkIfFilesExist();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" } catch (BongoException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":" * Empty constructor for Bongo.","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":" public Bongo() {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"raynertjx"},"content":" this.storage \u003d new Storage(FILEPATH);","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"raynertjx"},"content":" this.tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"raynertjx"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"raynertjx"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"raynertjx"},"content":" storage.checkIfFilesExist();","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"raynertjx"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"raynertjx"},"content":" } catch (BongoException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"raynertjx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"raynertjx"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"raynertjx"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"raynertjx"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"raynertjx"},"content":" String response \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"raynertjx"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"raynertjx"},"content":" response \u003d c.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"raynertjx"},"content":" } catch (BongoException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"raynertjx"},"content":" response \u003d e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"raynertjx"},"content":" return response;","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"raynertjx"},"content":" * Runs the Bongo bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"raynertjx"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"raynertjx"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"raynertjx"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"raynertjx"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"raynertjx"},"content":" String command \u003d ui.readCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"raynertjx"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"raynertjx"},"content":" Command c \u003d Parser.parse(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"raynertjx"},"content":" c.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"raynertjx"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"raynertjx"},"content":" } catch (BongoException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"raynertjx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"raynertjx"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"raynertjx"},"content":" ui.showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"raynertjx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"raynertjx"},"content":" Bongo bongo \u003d new Bongo(FILEPATH);","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"raynertjx"},"content":" bongo.run();","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":113}},{"path":"src/main/java/bongo/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"raynertjx":12}},{"path":"src/main/java/bongo/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.gui.MainWindow;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" private Bongo bongo \u003d new Bongo();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setBongo(bongo);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"raynertjx":32}},{"path":"src/main/java/bongo/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.DateHelper;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" * A class for a AddCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" private final String[] command;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" private Task newTask;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" * A constructor for a AddCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" * @param command Array of strings from user command.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If there is a problem when initializing task.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" public AddCommand(String[] command) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" this.initialiseTask();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" * Processes user input and initializes the respective task (Todo, Event or Deadline).","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" * Checks if user input to create task is valid.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If task is not initialized properly.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" private void initialiseTask() throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" String taskInput \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003e 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" taskInput \u003d String.join(\" \", command).substring(command[0].length() + 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" switch (this.command[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the description of your todo.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" this.newTask \u003d new Todo(taskInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the description and datetime of your deadline.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003c\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the datetime of your deadline.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":" int index \u003d taskInput.indexOf(\"/by\");","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":" if (index \u003d\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the datetime of your deadline.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"raynertjx"},"content":" String deadlineDesc \u003d taskInput.substring(0, index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"raynertjx"},"content":" String deadlineStr \u003d taskInput.substring(index + 4);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"raynertjx"},"content":" LocalDateTime deadline \u003d DateHelper.convertStringToDateTime(deadlineStr);","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"raynertjx"},"content":" this.newTask \u003d new Deadline(deadlineDesc, deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"raynertjx"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"raynertjx"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the description and datetime of your event.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003c\u003d 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the datetime of your event.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"raynertjx"},"content":" int fromIndex \u003d taskInput.indexOf(\"/from\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"raynertjx"},"content":" int toIndex \u003d taskInput.indexOf(\"/to\");","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"raynertjx"},"content":" if (fromIndex \u003d\u003d -1 || toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the to and from datetime of the event.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"raynertjx"},"content":" String eventDesc \u003d taskInput.substring(0, fromIndex - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"raynertjx"},"content":" String eventFrom \u003d taskInput.substring(fromIndex + 6, toIndex - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"raynertjx"},"content":" String eventTo \u003d taskInput.substring(toIndex + 4);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"raynertjx"},"content":" LocalDateTime from \u003d DateHelper.convertStringToDateTime(eventFrom);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"raynertjx"},"content":" LocalDateTime to \u003d DateHelper.convertStringToDateTime(eventTo);","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"raynertjx"},"content":" this.newTask \u003d new Event(eventDesc, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"raynertjx"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"raynertjx"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"raynertjx"},"content":" throw new BongoException();","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"raynertjx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"raynertjx"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"raynertjx"},"content":" storage.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"raynertjx"},"content":" return ui.showAddedTask(newTask, tasks.getTotalTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":97}},{"path":"src/main/java/bongo/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" * A class for a Command.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" * Execute the respective details of the Command.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" * @param tasks TaskList instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" * @param ui Ui instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" * @param storage Storage instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" * @return String representation after execution of command.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If command is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws BongoException;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" * Returns whether Command is an ExitCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" * @return Whether Command is an ExitCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":33}},{"path":"src/main/java/bongo/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" * A class for a DeleteCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" private final int taskIndex;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" * A constructor for a DeleteCommand, with a taskIndex.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" * @param command Array of strings from user command.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If task index is missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" public DeleteCommand(String[] command) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the task index.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" this.taskIndex \u003d Integer.parseInt(command[1]) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws BongoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" if (tasks.getTotalTasks() \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"There are currently no tasks.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.getTotalTasks()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Task does not exist.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" Task taskToBeDeleted \u003d tasks.getTask(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" storage.edit(Storage.FileAction.DELETE_TASK, this.taskIndex + 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" return ui.showDeleteTask(taskToBeDeleted, tasks.getTotalTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":41}},{"path":"src/main/java/bongo/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":" * A class for a ExitCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" return ui.showGoodbye();","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":21}},{"path":"src/main/java/bongo/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" * A class for a FindCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" private final String[] searchInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" private String searchParam;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" * A constructor for a FindCommand, with a searchInput.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" * @param searchInput","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" public FindCommand(String[] searchInput) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" this.searchInput \u003d searchInput;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" this.validateSearchInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" private void validateSearchInput() throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" if (this.searchInput.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Search parameter cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" for (int i \u003d 1; i \u003c searchInput.length; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" sb.append(searchInput[i]);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" this.searchParam \u003d sb.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws BongoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" ArrayList\u003cTask\u003e filteredTaskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" ArrayList\u003cTask\u003e allTasks \u003d tasks.getAllTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" for (Task currentTask : allTasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" if (currentTask.getDescription().contains(searchParam)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" filteredTaskList.add(currentTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" return ui.showSearchedTasks(filteredTaskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":49}},{"path":"src/main/java/bongo/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":" * A class for a ListCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" return ui.showAllTasks(tasks.getAllTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":16}},{"path":"src/main/java/bongo/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" * A class for a MarkCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" private final int taskIndex;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" * A constructor for a MarkCommand, with a taskIndex.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" * @param command Array of strings from user command.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If task index is missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" public MarkCommand(String[] command) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the task index.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" this.taskIndex \u003d Integer.parseInt(command[1]) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws BongoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" if (tasks.getTotalTasks() \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"There are currently no tasks.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.getTotalTasks()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Task does not exist.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" tasks.markTaskDone(this.taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" storage.edit(Storage.FileAction.MARK_TASK, this.taskIndex + 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" return ui.showTaskIsDone(tasks.getTask(this.taskIndex));","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":39}},{"path":"src/main/java/bongo/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" * A class for a UnmarkCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" private final int taskIndex;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" * A constructor for a UnmarkCommand, with a taskIndex.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" * @param command Array of strings from user command.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If task index is missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" public UnmarkCommand(String[] command) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" if (command.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Please include the task index.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" this.taskIndex \u003d Integer.parseInt(command[1]) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws BongoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" if (tasks.getTotalTasks() \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"There are currently no tasks.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.getTotalTasks()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Task does not exist.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" tasks.markTaskUndone(this.taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" storage.edit(Storage.FileAction.UNMARK_TASK, this.taskIndex + 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" return ui.showTaskIsUndone(tasks.getTask(this.taskIndex));","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":39}},{"path":"src/main/java/bongo/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.gui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":" public static DialogBox getBongoDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"raynertjx":62}},{"path":"src/main/java/bongo/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.gui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.Bongo;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.control.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.image.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" private Bongo bongo;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" private Image bongoImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/bongo.jpeg\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" public void setBongo(Bongo d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" bongo \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" String response \u003d bongo.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" DialogBox.getBongoDialog(response, bongoImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"raynertjx":51}},{"path":"src/main/java/bongo/helper/BongoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.helper;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":" * A class for a BongoException.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"public class BongoException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":" * A constructor for a BongoException.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" public BongoException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" super(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" public BongoException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":17}},{"path":"src/main/java/bongo/helper/DateHelper.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.helper;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":" * A utility class to help parse and format dates.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"public class DateHelper {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" private static final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" public static boolean hasTaskExpired(LocalDateTime datetime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" return datetime.isBefore(LocalDateTime.now());","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" * Helper method to convert LocalDateTime object into a datetime string.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" * @param datetime Datetime string.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" * @return A foramtted datetime string.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If LocalDateTime object is invalid.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" public static String convertDateTimeToString(LocalDateTime datetime) throws BongoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" return formatter.format(datetime);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"There was an error converting the datetime to a string.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" * Helper method to convert datetime string into a LocalDateTime object.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" * @param datetime Datetime string.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" * @return A LocalDateTime object.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If datetime string has an invalid format.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" public static LocalDateTime convertStringToDateTime(String datetime) throws BongoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" return LocalDateTime.parse(datetime, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(String.format(\"Please enter a valid datetime in the format of %s\",","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" \"DD/MM/YYYY HHMM.\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":46}},{"path":"src/main/java/bongo/helper/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.helper;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"import bongo.command.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import bongo.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"import bongo.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"import bongo.command.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" * A class for a Parser.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" * Parses command that user inputs into the bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" * Returns the Command that matches the user\u0027s input.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" * Throws a BongoException if user enters unknown command.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" * @param command Command from user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" * @return A Command which corresponds to user\u0027s input.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If user gives an unknown command.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" public static Command parse(String command) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" String[] input \u003d command.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" switch (input[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" case \"bye\":","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" case \"list\":","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" return new MarkCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" return new UnmarkCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" return new DeleteCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" return new AddCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" return new FindCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" throw new BongoException();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":49}},{"path":"src/main/java/bongo/helper/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.helper;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"import java.lang.reflect.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"import java.time.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" * A class for a Storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" * Different types of actions we can take to modify the text file.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" public enum FileAction {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" MARK_TASK,","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" UNMARK_TASK,","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" DELETE_TASK","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" private final String pathname;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Storage, with a pathname.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" * @param pathname Pathname of file.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" public Storage(String pathname) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" this.pathname \u003d pathname;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" * Loads tasks into the TaskList, if there is an existing text file found.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" * If no file is found, throws a FileNotFound Exception.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" * @return An ArrayList of preloaded tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" * @throws FileNotFoundException If file is not found.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If datetime string has an invalid format.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" public ArrayList\u003cTask\u003e load() throws FileNotFoundException, BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":" File file \u003d new File(this.pathname);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" Scanner fileScanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":" ArrayList\u003cInteger\u003e expiredTaskNumbers \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" int numOfTasks \u003d 0;","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":" while (fileScanner.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":" numOfTasks++;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"raynertjx"},"content":" String line \u003d fileScanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"raynertjx"},"content":" String[] arr \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"raynertjx"},"content":" for (int i \u003d 0; i \u003c arr.length; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"raynertjx"},"content":" arr[i] \u003d arr[i].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"raynertjx"},"content":" boolean isTaskMarkedDone \u003d arr[1].equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"raynertjx"},"content":" LocalDateTime datetime;","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"raynertjx"},"content":" switch (arr[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"raynertjx"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"raynertjx"},"content":" loadedTasks.add(new Todo(arr[2], isTaskMarkedDone));","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"raynertjx"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"raynertjx"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"raynertjx"},"content":" datetime \u003d DateHelper.convertStringToDateTime(arr[3]);","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"raynertjx"},"content":" if (DateHelper.hasTaskExpired(datetime)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"raynertjx"},"content":" expiredTaskNumbers.add(numOfTasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"raynertjx"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"raynertjx"},"content":" loadedTasks.add(new Deadline(arr[2], isTaskMarkedDone, DateHelper.convertStringToDateTime(arr[3])));","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"raynertjx"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"raynertjx"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"raynertjx"},"content":" datetime \u003d DateHelper.convertStringToDateTime(arr[4]);","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"raynertjx"},"content":" if (DateHelper.hasTaskExpired(datetime)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"raynertjx"},"content":" expiredTaskNumbers.add(numOfTasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"raynertjx"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"raynertjx"},"content":" loadedTasks.add(new Event(arr[2], isTaskMarkedDone, DateHelper.convertStringToDateTime(arr[3]),","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"raynertjx"},"content":" DateHelper.convertStringToDateTime(arr[4])));","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"raynertjx"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"raynertjx"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Error reading the text file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"raynertjx"},"content":" deleteExpiredTasks(expiredTaskNumbers);","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"raynertjx"},"content":" fileScanner.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"raynertjx"},"content":" return loadedTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"raynertjx"},"content":" * Check if the data directory and text file is present.","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"raynertjx"},"content":" * If either is not present, create it.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"raynertjx"},"content":" public void checkIfFilesExist() {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"raynertjx"},"content":" File file \u003d new File(this.pathname);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"raynertjx"},"content":" String directoryPath \u003d file.getParent();","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"raynertjx"},"content":" File directory \u003d new File(directoryPath);","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"raynertjx"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"raynertjx"},"content":" boolean isDirectoryCreated \u003d directory.mkdirs();","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"raynertjx"},"content":" if (isDirectoryCreated) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"raynertjx"},"content":" System.out.println(\"Directory created: \" + directoryPath);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"raynertjx"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"raynertjx"},"content":" boolean isFileCreated \u003d file.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"raynertjx"},"content":" if (isFileCreated) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"raynertjx"},"content":" System.out.println(\"File created: \" + this.pathname);","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"raynertjx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"raynertjx"},"content":" System.out.println(\"An error occurred while creating the file: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"raynertjx"},"content":" * Appends task on a new line in the text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"raynertjx"},"content":" * @param newTask New Task to add.","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"raynertjx"},"content":" public void add(Task newTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"raynertjx"},"content":" File file \u003d new File(this.pathname);","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"raynertjx"},"content":" FileWriter fw \u003d new FileWriter(this.pathname, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"raynertjx"},"content":" String newLine \u003d newTask.generateStringForTextFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"raynertjx"},"content":" if (file.length() !\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"raynertjx"},"content":" fw.write(String.format(\"\\n%s\", newLine));","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"raynertjx"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"raynertjx"},"content":" fw.write(newLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"raynertjx"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"raynertjx"},"content":" } catch (IOException ioe) {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"raynertjx"},"content":" System.err.println(\"IOException: \" + ioe.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"raynertjx"},"content":" } catch (BongoException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"raynertjx"},"content":" throw new RuntimeException(\"There was an error adding the task.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"raynertjx"},"content":" public void deleteExpiredTasks(ArrayList\u003cInteger\u003e expiredTaskNumbers) {","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"raynertjx"},"content":" File file \u003d new File(this.pathname);","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"raynertjx"},"content":" BufferedReader fileReader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"raynertjx"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"raynertjx"},"content":" String line;","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"raynertjx"},"content":" int currentLine \u003d 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"raynertjx"},"content":" while ((line \u003d fileReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"raynertjx"},"content":" if (expiredTaskNumbers.contains(currentLine)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"raynertjx"},"content":" currentLine++;","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"raynertjx"},"content":" continue;","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"raynertjx"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"raynertjx"},"content":" stringBuilder.append(line).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"raynertjx"},"content":" currentLine++;","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"raynertjx"},"content":" fileReader.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"raynertjx"},"content":" FileWriter fileWriter \u003d new FileWriter(file);","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"raynertjx"},"content":" fileWriter.write(stringBuilder.toString().trim());","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"raynertjx"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"raynertjx"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"raynertjx"},"content":" System.out.println(\"Problem editing the file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"raynertjx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"raynertjx"},"content":" * Edit the text that corresponds to a certain task in the text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"raynertjx"},"content":" * @param action Type of FileAction.","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"raynertjx"},"content":" * @param taskNumber Number of task to delete.","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"raynertjx"},"content":" public void edit(FileAction action, int taskNumber) {","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"raynertjx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"raynertjx"},"content":" File file \u003d new File(this.pathname);","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"raynertjx"},"content":" BufferedReader fileReader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"raynertjx"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"raynertjx"},"content":" String line;","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"raynertjx"},"content":" int currentLine \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"raynertjx"},"content":" while ((line \u003d fileReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"raynertjx"},"content":" if (currentLine \u003d\u003d taskNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"raynertjx"},"content":" String[] lineWordsArr \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"raynertjx"},"content":" for (int i \u003d 0; i \u003c lineWordsArr.length; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"raynertjx"},"content":" lineWordsArr[i] \u003d lineWordsArr[i].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"raynertjx"},"content":" switch (action) {","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"raynertjx"},"content":" case MARK_TASK:","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"raynertjx"},"content":" lineWordsArr[1] \u003d \"1\";","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"raynertjx"},"content":" stringBuilder.append(String.join(\" | \", lineWordsArr)).append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"raynertjx"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"raynertjx"},"content":" case UNMARK_TASK:","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"raynertjx"},"content":" lineWordsArr[1] \u003d \"0\";","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"raynertjx"},"content":" stringBuilder.append(String.join(\" | \", lineWordsArr)).append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"raynertjx"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"raynertjx"},"content":" case DELETE_TASK:","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"raynertjx"},"content":" currentLine++;","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"raynertjx"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"raynertjx"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":205,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Error modifying the text file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":206,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"raynertjx"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"raynertjx"},"content":" stringBuilder.append(line).append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"raynertjx"},"content":" currentLine++;","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"raynertjx"},"content":" fileReader.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"raynertjx"},"content":" FileWriter fileWriter \u003d new FileWriter(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"raynertjx"},"content":" fileWriter.write(stringBuilder.toString().trim());","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"raynertjx"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"raynertjx"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"raynertjx"},"content":" System.out.println(\"Problem editing the file.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"raynertjx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":223}},{"path":"src/main/java/bongo/helper/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.helper;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" * A class for a Ui.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" private final Scanner inputScanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Ui.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" this.inputScanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" * Returns the current line of the user\u0027s input.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" * @return Current line of user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" return this.inputScanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" * Adds lines to top and bottom of message.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" * @param message User message.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" * @return A message sandwiched between two lines.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" private String insertLines(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" return \"____________________________________________________________\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" + message","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" + \"____________________________________________________________\";","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" * Prints a line.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" public void showLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":" * Shows welcome message.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" String welcomeMessage \u003d \" Hello! I\u0027m Bongo!\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":" + \" What can I do for you?\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":" System.out.println(insertLines(welcomeMessage));","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"raynertjx"},"content":" * Shows goodbye message.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"raynertjx"},"content":" public String showGoodbye() {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"raynertjx"},"content":" this.inputScanner.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"raynertjx"},"content":" return \" Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"raynertjx"},"content":" * Shows all tasks to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"raynertjx"},"content":" * @param tasks All user tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"raynertjx"},"content":" public String showAllTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"raynertjx"},"content":" StringBuilder allTasks \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"raynertjx"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"raynertjx"},"content":" allTasks.append(String.format(\" %d. %s\\n\", i + 1, tasks.get(i)));","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"raynertjx"},"content":" String tasksList \u003d \" Here are the tasks in your list:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"raynertjx"},"content":" + allTasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"raynertjx"},"content":" return tasksList.trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"raynertjx"},"content":" * Shows list of tasks that user searched for.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"raynertjx"},"content":" * @param tasks All user tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"raynertjx"},"content":" public String showSearchedTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"raynertjx"},"content":" StringBuilder allTasks \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"raynertjx"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"raynertjx"},"content":" allTasks.append(String.format(\" %d. %s\\n\", i + 1, tasks.get(i)));","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"raynertjx"},"content":" String tasksList \u003d \" Here are the matching tasks in your list:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"raynertjx"},"content":" + allTasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"raynertjx"},"content":" return tasksList.trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"raynertjx"},"content":" * Shows user the recently added task.","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"raynertjx"},"content":" * @param newTask New Task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"raynertjx"},"content":" * @param totalTasks Number of total tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"raynertjx"},"content":" public String showAddedTask(Task newTask, int totalTasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"raynertjx"},"content":" return \" Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"raynertjx"},"content":" + String.format(\" %s\\n\", newTask)","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"raynertjx"},"content":" + String.format(\" Now you have %d tasks in the list.\", totalTasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"raynertjx"},"content":" * Shows user the task that was recently marked done.","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"raynertjx"},"content":" * @param task Recently marked done task.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"raynertjx"},"content":" public String showTaskIsDone(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"raynertjx"},"content":" String taskStatusMessage \u003d \" Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"raynertjx"},"content":" + task;","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"raynertjx"},"content":" return taskStatusMessage.trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"raynertjx"},"content":" * Shows user the task that was recently marked undone.","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"raynertjx"},"content":" * @param task Recently marked undone task.","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"raynertjx"},"content":" public String showTaskIsUndone(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"raynertjx"},"content":" String taskStatusMessage \u003d \" OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"raynertjx"},"content":" + task;","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"raynertjx"},"content":" return taskStatusMessage.trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"raynertjx"},"content":" * Shows user the recently deleted task.","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"raynertjx"},"content":" * @param task Task that was recently deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"raynertjx"},"content":" * @param tasksLeft Number of tasks left.","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"raynertjx"},"content":" public String showDeleteTask(Task task, int tasksLeft) {","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"raynertjx"},"content":" return \" Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"raynertjx"},"content":" + String.format(\" %s\\n\", task)","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"raynertjx"},"content":" + String.format(\" Now you have %d tasks in the list.\", tasksLeft);","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"raynertjx"},"content":" * Shows user an error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"raynertjx"},"content":" * @param errorMessage Error message that BongoException throws.","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"raynertjx"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"raynertjx"},"content":" String finalErrorMessage \u003d \" Oh no! Bongo ran into an error :(\\n\" + String.format(\" %s\", errorMessage);","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"raynertjx"},"content":" System.out.println(finalErrorMessage);","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"raynertjx"},"content":" * Shows user the loading files error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"raynertjx"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"raynertjx"},"content":" String loadingErrorMessage \u003d \"Oh no! Bongo couldn\u0027t find the files, so the following files were created:\";","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"raynertjx"},"content":" System.out.println(loadingErrorMessage);","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":160}},{"path":"src/main/java/bongo/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.DateHelper;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" * A class for a Deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" private final LocalDateTime deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" * @param description Deadline description.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" * @param deadline Deadline datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If deadline datetime is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" public Deadline(String description, LocalDateTime deadline) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" this.validateDeadline(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Deadline, specifying whether it is done.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" * @param description Deadline description.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" * @param isDone Deadline is marked done or undone.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" * @param deadline Deadline datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If deadline datetime is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" public Deadline(String description, boolean isDone, LocalDateTime deadline) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" this.validateDeadline(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" * Check if deadline provided is valid.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" * @param deadline Deadline datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If deadline is in the past.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" private void validateDeadline(LocalDateTime deadline) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" if (deadline.isBefore(LocalDateTime.now())) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Deadline must be in the future.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":" public String generateStringForTextFile() throws BongoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":" String isTaskMarkedDone \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" return String.join(\" | \", \"D\", isTaskMarkedDone, this.description,","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":" DateHelper.convertDateTimeToString(this.deadline));","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"raynertjx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"raynertjx"},"content":" return \"[D]\" + super.toString() + String.format(\" (by: %s)\", super.generateDateString(this.deadline));","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"raynertjx":65}},{"path":"src/main/java/bongo/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.DateHelper;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" * A class for an Event.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Event.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" * @param description Event description.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" * @param from Event from datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" * @param to Event to datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If either Event from or to datetime is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" this.validateEventDuration(from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Event, specifying whether it is done.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" * @param description Event description.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" * @param isDone Event marked done or undone.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" * @param from Event from datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" * @param to Event to datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If either Event from or to datetime is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" public Event(String description, boolean isDone, LocalDateTime from, LocalDateTime to) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" this.validateEventDuration(from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" * Check if event to and from datetime provided is valid.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" * @param from Event from datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":" * @param to Event to datetime.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" * @throws BongoException If Event from/to datetime is in the past or if Event","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":" * from datetime is after it\u0027s to datetime.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":" private void validateEventDuration(LocalDateTime from, LocalDateTime to) throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":" if (from.isBefore(LocalDateTime.now()) || to.isBefore(LocalDateTime.now())) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"Start and end of event must be in the future.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":" if (from.isAfter(to)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"raynertjx"},"content":" throw new BongoException(\"End of event must be after start of event.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"raynertjx"},"content":" public String generateStringForTextFile() throws BongoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"raynertjx"},"content":" String isTaskMarkedDone \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"raynertjx"},"content":" return String.join(\" | \", \"E\", isTaskMarkedDone, this.description,","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"raynertjx"},"content":" DateHelper.convertDateTimeToString(this.from), DateHelper.convertDateTimeToString(this.to));","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"raynertjx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"raynertjx"},"content":" return \"[E]\" + super.toString() + String.format(\" (from: %s to: %s)\",","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"raynertjx"},"content":" super.generateDateString(from), super.generateDateString(to));","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"raynertjx":76}},{"path":"src/main/java/bongo/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":" * A class for a Task.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" * @param description Task description.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" * Returns status icon of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" * @return Status icon of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" * Converts datetime into formatted string.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" * @param datetime Datetime of Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" * @return Returns formatted datetime string.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":" public String generateDateString(LocalDateTime datetime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"EEEE, MMM d, yyyy hh:mm a\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":" return formatter.format(datetime);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" * Returns string to save in text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":" * @return String to save in text file.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"raynertjx"},"content":" public abstract String generateStringForTextFile() throws BongoException;","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"raynertjx"},"content":" * Returns string representation of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"raynertjx"},"content":" * @return String representation of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"raynertjx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"raynertjx"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"raynertjx":72}},{"path":"src/main/java/bongo/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":" * A class for holding the list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" * A constructor for a TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" * A constructor for a TaskList, with preloaded tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" * @param loadedTasks ArrayList of preloaded tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" public TaskList(ArrayList\u003cTask\u003e loadedTasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" this.tasks \u003d loadedTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" public Task getTask(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" return this.tasks.get(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" public void addTask(Task newTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" * Deletes a specific task from the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" * @param taskIndex Index of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" public void deleteTask(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" tasks.remove(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" public int getTotalTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" return this.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" public void markTaskDone(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":" tasks.get(taskIndex).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":" public void markTaskUndone(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" tasks.get(taskIndex).markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"raynertjx":59}},{"path":"src/main/java/bongo/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":" * A class for a Todo.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Todo.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" * @param description Todo description.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" * A constructor for a Todo, specifying whether it is done.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" * @param description Todo description.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" * @param isDone Todo marked done or undone.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" public String generateStringForTextFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" String isTaskMarkedDone \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" return String.join(\" | \", \"T\", isTaskMarkedDone, this.description);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"raynertjx":38}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" \u003cLabel fx:id\u003d\"dialog\" alignment\u003d\"CENTER\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" \u003copaqueInsets\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" \u003c/opaqueInsets\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" \u003c/HBox.margin\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"90.0\" fitWidth\u003d\"94.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"raynertjx":22}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"bongo.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"raynertjx":19}},{"path":"src/test/java/bongo/BongoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"public class BongoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":" public void dummyTest(){","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" public void anotherDummyTest(){","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":15}},{"path":"src/test/java/bongo/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.DateHelper;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" public void testDeadlineString() throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" Deadline sampleDeadline \u003d new Deadline(\"homework\", DateHelper.convertStringToDateTime(\"14/6/2030 1200\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" String expectedOutput \u003d \"[D][ ] homework (by: Friday, Jun 14, 2030 12:00 PM)\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedOutput, sampleDeadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" public void testEmptyDeadline_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" Exception exception \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"deadline\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"Please include the description and datetime of your deadline.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" public void testInvalidDeadline_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" Exception exception \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"deadline homework /by 14/6/2001 1200\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"Deadline must be in the future.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" public void testEmptyDeadlineDateTime_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" Exception exception1 \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"deadline homework\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" Exception exception2 \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"deadline homework /by\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"Please include the datetime of your deadline.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception1.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception2.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":48}},{"path":"src/test/java/bongo/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.DateHelper;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" public void testEventString() throws BongoException {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" Event sampleEvent \u003d new Event(\"party\", DateHelper.convertStringToDateTime(\"14/6/2030 1200\"), DateHelper.convertStringToDateTime(\"14/6/2030 1500\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" String expectedOutput \u003d \"[E][ ] party (from: Friday, Jun 14, 2030 12:00 PM to: Friday, Jun 14, 2030 03:00 PM)\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedOutput, sampleEvent.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" public void testEmptyEvent_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" Exception exception \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"Please include the description and datetime of your event.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"raynertjx"},"content":" public void testInvalidEvent_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"raynertjx"},"content":" Exception exception1 \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"event party /from 14/6/2030 1200\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"raynertjx"},"content":" Exception exception2 \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"event party /to 14/6/2030 1200\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"Please include the to and from datetime of the event.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception1.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception2.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"raynertjx"},"content":" public void testEmptyEventDateTime_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"raynertjx"},"content":" Exception exception \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"event party\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"Please include the datetime of your event.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"raynertjx"},"content":" public void testFromIsBeforeCurrentTime_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"raynertjx"},"content":" Exception exception \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"event party /from 30/8/2023 1200 /to 30/8/2030 1200\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"Start and end of event must be in the future.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"raynertjx"},"content":" public void testFromIsAfterTo_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"raynertjx"},"content":" Exception exception \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"event party /from 30/8/2031 1200 /to 30/8/2030 1200\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"End of event must be after start of event.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":65}},{"path":"src/test/java/bongo/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"package bongo.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.BongoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"import bongo.helper.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"raynertjx"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"raynertjx"},"content":" public void testTodoString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"raynertjx"},"content":" Todo sampleTodo \u003d new Todo(\"make coffee\");","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"raynertjx"},"content":" String expectedOutput \u003d \"[T][ ] make coffee\";","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedOutput, sampleTodo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"raynertjx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"raynertjx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":" public void testEmptyTodoDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"raynertjx"},"content":" Exception exception \u003d assertThrows(BongoException.class, () -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"raynertjx"},"content":" Parser.parse(\"todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"raynertjx"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"raynertjx"},"content":" String expectedMessage \u003d \"Please include the description of your todo.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"raynertjx"},"content":" assertEquals(expectedMessage, exception.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"raynertjx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"raynertjx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"raynertjx":25}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"raynertjx"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"raynertjx"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"raynertjx"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"raynertjx"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"raynertjx"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"raynertjx"},"content":"mark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"raynertjx"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"raynertjx"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"raynertjx":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"raynertjx"},"content":"java -classpath ..\\bin bongo.Bongo \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":{"raynertjx":1,"-":20}}] diff --git a/raynertjx_ip_master/commits.json b/raynertjx_ip_master/commits.json index cf685948..eb95b09f 100644 --- a/raynertjx_ip_master/commits.json +++ b/raynertjx_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"raynertjx":[{"date":"2023-08-21","commitResults":[{"hash":"1b8a90c4ed63f314145b6a7c225445d0fe600cfe","isMergeCommit":false,"messageTitle":"added rename, greet, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"63aabfc0a86b67a32dd31e90aa952288ee2b56a4","isMergeCommit":false,"messageTitle":"added echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"59351714df0d478b7ec09cfc629f250864bef226","isMergeCommit":false,"messageTitle":"added add, list for tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":1}}}]},{"date":"2023-08-22","commitResults":[{"hash":"ab44ef8ac3483d7bb7f1f996d18507d6845e8cf7","isMergeCommit":false,"messageTitle":"added mark as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":7}}},{"hash":"b772abf0ae886b4c29992770868ea80ca7b2a1ef","isMergeCommit":false,"messageTitle":"added todos, events, deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":4}}},{"hash":"12185afbdfda133a8cf23b981230cbac5786127b","isMergeCommit":false,"messageTitle":"added automated text ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":5,"deletions":5},"sh":{"insertions":0,"deletions":0}}},{"hash":"8f17cccb362dd4ad63a897729a5b5e4ea227642f","isMergeCommit":false,"messageTitle":"added error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":60}}},{"hash":"e41e6cc5747b910630e33e3f31804a0796d333c4","isMergeCommit":false,"messageTitle":"added delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":14}}},{"hash":"7d861022241afaeae7dc471ef9b40fe36ae90c8a","isMergeCommit":false,"messageTitle":"changed to switch statement","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":69}}}]},{"date":"2023-08-30","commitResults":[{"hash":"c450e72272b8ec712e01c8d8d8c8e883703b3828","isMergeCommit":false,"messageTitle":"Rename files from Duke to Bongo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":131}}},{"hash":"c353fa0adafa4e2d215ec090934d85f846dd4ec3","isMergeCommit":false,"messageTitle":"Add initial tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}},{"hash":"8d998f9c67bde7b34aa3f9699b8adfeced225e84","isMergeCommit":false,"messageTitle":"Rename duke.txt to bongo.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"01d3569743571da6c4f26c604a0d8a02705f72ef","isMergeCommit":false,"messageTitle":"Add additional constructor for respective tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}},{"hash":"b19b3fffb003c19538c0b5d0d8ab9b9fc7effaa0","isMergeCommit":false,"messageTitle":"Abstract main method into helper methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":209,"deletions":0}}},{"hash":"4473ba5e2cb09d44df50d8209bf209e048a145f0","isMergeCommit":false,"messageTitle":"Change access modifiers to default","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"51db8c59b1d49ff7c03696ace6211e2b5a5ff136","isMergeCommit":false,"messageTitle":"Add saving of tasks when task list changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":13}}},{"hash":"ec3179c29a0bef3baeb1806c7a02d13941d30202","isMergeCommit":false,"messageTitle":"Add error handling if directory or file does not exist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"fa9a215e9ad4e8fa42233dd9cb54c3206d4bf53f","isMergeCommit":false,"messageTitle":"Edit files to use new name Bongo","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"8121670f460f50b3830b8c0b5b54a37a35484780","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"30cf25174af700c7df6ced78ec3b07f54ec308d5","isMergeCommit":false,"messageTitle":"Add generateDateString helper method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"ef45d3a1a91b9df508dd1ece2cec6ab02de54d1d","isMergeCommit":false,"messageTitle":"Store date and times in LocalDateTime format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":9}}},{"hash":"91f9a41eea5d8899645cf7356ba110f8827fda8e","isMergeCommit":false,"messageTitle":"Add error handling for invalid datetimes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":9}}},{"hash":"d52c0d9e9a356d8880123811efeda007e74016cc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"1211425732ce798ffc26d82e518ab694d2951f8a","isMergeCommit":false,"messageTitle":"Add Ui class and its methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":0}}},{"hash":"6ecc25982d1fc93070a99ed84a4c88fa32807644","isMergeCommit":false,"messageTitle":"Add Ui constructor and readCommand method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"0cbf78c41abdb9e04c625763038322ee8551cf06","isMergeCommit":false,"messageTitle":"Add Storage class and its methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":1}}},{"hash":"ec5d9bc0d6ea25e88434b9e85068de28801849cc","isMergeCommit":false,"messageTitle":"Add TaskList class and its methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":1}}},{"hash":"5cd81186fb80c6e4243b346ebb5b74e09badf0f9","isMergeCommit":false,"messageTitle":"Add Parser class and its methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":1}}},{"hash":"46c694112a94512744943251f20a35da6ebcfee8","isMergeCommit":false,"messageTitle":"Initialise Command classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"c6947149d6b28f5944a4d91d722814be234748e3","isMergeCommit":false,"messageTitle":"Add implementations for abstract execute method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":6}}},{"hash":"965dd1d7557516d2a797425c486bb25a61ad1e97","isMergeCommit":false,"messageTitle":"Add isExit boolean field","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"90478da2a04293f69db32e47e46ab685222199c9","isMergeCommit":false,"messageTitle":"Add utility class for date formatting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"7a4d6bb3ffdf5764cfd6f165cca2aab5ae6ae84b","isMergeCommit":false,"messageTitle":"Edit default error message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"0d9fc79265307934cdda7fb71d22f6061bac52a0","isMergeCommit":false,"messageTitle":"Change methods to throw BongoException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":10}}},{"hash":"7c97a0df738ed81e269e70bf93f25197cf362383","isMergeCommit":false,"messageTitle":"Adjust line spacing and add loading error messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":19}}},{"hash":"331668e3c6543cf6229b5d7e486a51071df4d0ab","isMergeCommit":false,"messageTitle":"Change access modifiers to protected","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":38}}},{"hash":"7103eab25f361ef647ee3c48e93a1950fe6ea269","isMergeCommit":false,"messageTitle":"Add method to handle case where files not found","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":13}}},{"hash":"aa5525f6b5b502d76b727919a0845076e68722f0","isMergeCommit":false,"messageTitle":"Remove error handling and shift it to Command instances","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":44}}},{"hash":"aff9ab85172ad264f5cc53e4bd6eff305c276b00","isMergeCommit":false,"messageTitle":"Change to use extracted classes and its abstracted methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":296}}},{"hash":"a16496e63ba3c3b70df32a83462ed3e212adb958","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"d784ccf71f8400522ea0eca505aea141c161adc7","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":190,"deletions":94}}},{"hash":"e9a3945764655112437ba3b2a8469409b5182c58","isMergeCommit":false,"messageTitle":"Fix typo in generateStringForTextFile method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"c97f3dad59366c0e16824e09234548055b57532a","isMergeCommit":false,"messageTitle":"Edit error message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"38215cf06add3c4eecddf4078ebac290f7e696a9","isMergeCommit":false,"messageTitle":"Edit import statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":13}}},{"hash":"2c58263fdba0996a820f890b2973e60c46e270c5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"8f0adf71279802e5c79eef500310178090f6052a","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3123d080aa88b99f5ccf8b3fb637978e6576f75d","isMergeCommit":false,"messageTitle":"Add Gradle build","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"5a92f7b21bd898a5abc907f14b4a5150cdc7588b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"38d7c29f2a5c43edf41a9d1aab4a5b08148226d3","isMergeCommit":false,"messageTitle":"Shift Bongo class to under bongo package","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":4,"deletions":2},"bat":{"insertions":1,"deletions":1},"md":{"insertions":1,"deletions":1}}},{"hash":"00d23c927c98cb864d54c506e20221c6c1da36c4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6991d19ffd66eddf12c34bd7e47df5c66cf4d67b","isMergeCommit":false,"messageTitle":"Initialise BongoTest","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"62befec7a1ff4d80a6f2902dd5f0ea2fb5c7ab86","isMergeCommit":false,"messageTitle":"Change Parser class to static","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"ee3bce87f2dff1b77f46646d28cd028bd062335e","isMergeCommit":false,"messageTitle":"Edit error messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}},{"hash":"494f05b9dfcf8fc4d24f538ca0142048b2f5d239","isMergeCommit":false,"messageTitle":"Modify exception handling and error message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"f8f8d3e5cb6396173ebcf3abedf073a5ebecb460","isMergeCommit":false,"messageTitle":"Add tests for deadlines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":3}}},{"hash":"75d134db34b90f1280256b1eb4f2f10c19ab05b6","isMergeCommit":false,"messageTitle":"Edit error handling and shift into switch block","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":8}}},{"hash":"b58066e22ac6289cea0096e78fbf62ace8a32cb7","isMergeCommit":false,"messageTitle":"Edit deadline unit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}},{"hash":"7ba99f61c96f508b77d4b946a9025364e7be3d67","isMergeCommit":false,"messageTitle":"Add unit tests for events","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":1}}},{"hash":"296a79468fe03014fb863e6a330678278275b0e6","isMergeCommit":false,"messageTitle":"Add unit tests for todos","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"c0c88580ab3bc2237496ede6292398c74b2c3576","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"a1bb3b9feb2529e15afa383d44aa97e6b6c46990","isMergeCommit":false,"messageTitle":"Add Javadoc comments for task package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":1}}},{"hash":"0ce130c0c8c767a2d65f7def5abe6447094ebe76","isMergeCommit":false,"messageTitle":"Add Javadoc comments for Bongo class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"d652706bc79df0a993fb5dcc831bf2b7178b38b6","isMergeCommit":false,"messageTitle":"Add Javadoc comments for helper package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":95,"deletions":4}}},{"hash":"0ebab95819d7a5939d9c4fe57fd63d55826f32e2","isMergeCommit":false,"messageTitle":"Add Javadoc comments for command package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":0}}},{"hash":"adf2a0aaff5f42b93b61e61f8cce6eff7ca61dfa","isMergeCommit":false,"messageTitle":"Change code to follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":150,"deletions":100}}},{"hash":"9e4d04918fc8794efb6ed2517dda983b2c41838d","isMergeCommit":false,"messageTitle":"Add find task functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":23}}},{"hash":"836de7a4d632c4fe186570b5c7bc1108367e872a","isMergeCommit":false,"messageTitle":"Fix bug when searchInput is null","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"f4d3cc58b2d9b9bd4286c0bdbeaff7e4fad981bf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"005e0338810dab39c85fd48cfd901ad0d6b207a0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"c6f572a47308771e09a8d25ad6c98e1e27a5af2a","isMergeCommit":false,"messageTitle":"Add more Javadocs comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":64}}},{"hash":"e26285d45ab2e6a5ecd407520f8c0adcb15ef1a7","isMergeCommit":false,"messageTitle":"Edit parsing and exception handling of mark, unmark and delete","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":20}}},{"hash":"77049a5327c498d989eb1ea110dcca848215c90d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"8350aa9482a6e3ea0d6a7facda03e5badf8e55a5","isMergeCommit":false,"messageTitle":"Remove merge conflict comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":4}}}]},{"date":"2023-09-05","commitResults":[{"hash":"8700a838c6e77df3d450cc646b743de65c93e24f","isMergeCommit":false,"messageTitle":"Add checkstyle config to gradle build file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"193b4bef081df84b4b428d2823307db549699927","isMergeCommit":false,"messageTitle":"Prevent loading of expired tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":20}}},{"hash":"7b2760f824cbb33640c15d14bc56842f45c89030","isMergeCommit":false,"messageTitle":"Resolve style violations generated by checkstyleMain","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":74}}},{"hash":"515e35e3820933f4c9faec0a855ca9fa285aeaf2","isMergeCommit":false,"messageTitle":"Delete expired tasks from text file upon loading","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":2}}},{"hash":"f67428f35a5ba5df1b99dc45bf53ff646ce17bb4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"raynertjx":{"java":1360,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":6,"txt":8}},"authorContributionVariance":{"raynertjx":248098.81},"authorDisplayNameMap":{"raynertjx":"CS2103T-T10-1 RAYN..IANG"}} +{"authorDailyContributionsMap":{"raynertjx":[{"date":"2023-08-21","commitResults":[{"hash":"1b8a90c4ed63f314145b6a7c225445d0fe600cfe","isMergeCommit":false,"messageTitle":"added rename, greet, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"63aabfc0a86b67a32dd31e90aa952288ee2b56a4","isMergeCommit":false,"messageTitle":"added echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"59351714df0d478b7ec09cfc629f250864bef226","isMergeCommit":false,"messageTitle":"added add, list for tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":1}}}]},{"date":"2023-08-22","commitResults":[{"hash":"ab44ef8ac3483d7bb7f1f996d18507d6845e8cf7","isMergeCommit":false,"messageTitle":"added mark as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":7}}},{"hash":"b772abf0ae886b4c29992770868ea80ca7b2a1ef","isMergeCommit":false,"messageTitle":"added todos, events, deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":4}}},{"hash":"12185afbdfda133a8cf23b981230cbac5786127b","isMergeCommit":false,"messageTitle":"added automated text ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":5,"deletions":5},"sh":{"insertions":0,"deletions":0}}},{"hash":"8f17cccb362dd4ad63a897729a5b5e4ea227642f","isMergeCommit":false,"messageTitle":"added error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":60}}},{"hash":"e41e6cc5747b910630e33e3f31804a0796d333c4","isMergeCommit":false,"messageTitle":"added delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":14}}},{"hash":"7d861022241afaeae7dc471ef9b40fe36ae90c8a","isMergeCommit":false,"messageTitle":"changed to switch statement","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":69}}}]},{"date":"2023-08-30","commitResults":[{"hash":"c450e72272b8ec712e01c8d8d8c8e883703b3828","isMergeCommit":false,"messageTitle":"Rename files from Duke to Bongo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":131}}},{"hash":"c353fa0adafa4e2d215ec090934d85f846dd4ec3","isMergeCommit":false,"messageTitle":"Add initial tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}},{"hash":"8d998f9c67bde7b34aa3f9699b8adfeced225e84","isMergeCommit":false,"messageTitle":"Rename duke.txt to bongo.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"01d3569743571da6c4f26c604a0d8a02705f72ef","isMergeCommit":false,"messageTitle":"Add additional constructor for respective tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}},{"hash":"b19b3fffb003c19538c0b5d0d8ab9b9fc7effaa0","isMergeCommit":false,"messageTitle":"Abstract main method into helper methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":209,"deletions":0}}},{"hash":"4473ba5e2cb09d44df50d8209bf209e048a145f0","isMergeCommit":false,"messageTitle":"Change access modifiers to default","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"51db8c59b1d49ff7c03696ace6211e2b5a5ff136","isMergeCommit":false,"messageTitle":"Add saving of tasks when task list changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":13}}},{"hash":"ec3179c29a0bef3baeb1806c7a02d13941d30202","isMergeCommit":false,"messageTitle":"Add error handling if directory or file does not exist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"fa9a215e9ad4e8fa42233dd9cb54c3206d4bf53f","isMergeCommit":false,"messageTitle":"Edit files to use new name Bongo","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"8121670f460f50b3830b8c0b5b54a37a35484780","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"30cf25174af700c7df6ced78ec3b07f54ec308d5","isMergeCommit":false,"messageTitle":"Add generateDateString helper method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"ef45d3a1a91b9df508dd1ece2cec6ab02de54d1d","isMergeCommit":false,"messageTitle":"Store date and times in LocalDateTime format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":9}}},{"hash":"91f9a41eea5d8899645cf7356ba110f8827fda8e","isMergeCommit":false,"messageTitle":"Add error handling for invalid datetimes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":9}}},{"hash":"d52c0d9e9a356d8880123811efeda007e74016cc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"1211425732ce798ffc26d82e518ab694d2951f8a","isMergeCommit":false,"messageTitle":"Add Ui class and its methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":0}}},{"hash":"6ecc25982d1fc93070a99ed84a4c88fa32807644","isMergeCommit":false,"messageTitle":"Add Ui constructor and readCommand method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"0cbf78c41abdb9e04c625763038322ee8551cf06","isMergeCommit":false,"messageTitle":"Add Storage class and its methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":1}}},{"hash":"ec5d9bc0d6ea25e88434b9e85068de28801849cc","isMergeCommit":false,"messageTitle":"Add TaskList class and its methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":1}}},{"hash":"5cd81186fb80c6e4243b346ebb5b74e09badf0f9","isMergeCommit":false,"messageTitle":"Add Parser class and its methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":1}}},{"hash":"46c694112a94512744943251f20a35da6ebcfee8","isMergeCommit":false,"messageTitle":"Initialise Command classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"c6947149d6b28f5944a4d91d722814be234748e3","isMergeCommit":false,"messageTitle":"Add implementations for abstract execute method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":6}}},{"hash":"965dd1d7557516d2a797425c486bb25a61ad1e97","isMergeCommit":false,"messageTitle":"Add isExit boolean field","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"90478da2a04293f69db32e47e46ab685222199c9","isMergeCommit":false,"messageTitle":"Add utility class for date formatting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"7a4d6bb3ffdf5764cfd6f165cca2aab5ae6ae84b","isMergeCommit":false,"messageTitle":"Edit default error message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"0d9fc79265307934cdda7fb71d22f6061bac52a0","isMergeCommit":false,"messageTitle":"Change methods to throw BongoException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":10}}},{"hash":"7c97a0df738ed81e269e70bf93f25197cf362383","isMergeCommit":false,"messageTitle":"Adjust line spacing and add loading error messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":19}}},{"hash":"331668e3c6543cf6229b5d7e486a51071df4d0ab","isMergeCommit":false,"messageTitle":"Change access modifiers to protected","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":38}}},{"hash":"7103eab25f361ef647ee3c48e93a1950fe6ea269","isMergeCommit":false,"messageTitle":"Add method to handle case where files not found","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":13}}},{"hash":"aa5525f6b5b502d76b727919a0845076e68722f0","isMergeCommit":false,"messageTitle":"Remove error handling and shift it to Command instances","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":44}}},{"hash":"aff9ab85172ad264f5cc53e4bd6eff305c276b00","isMergeCommit":false,"messageTitle":"Change to use extracted classes and its abstracted methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":296}}},{"hash":"a16496e63ba3c3b70df32a83462ed3e212adb958","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"d784ccf71f8400522ea0eca505aea141c161adc7","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":190,"deletions":94}}},{"hash":"e9a3945764655112437ba3b2a8469409b5182c58","isMergeCommit":false,"messageTitle":"Fix typo in generateStringForTextFile method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"c97f3dad59366c0e16824e09234548055b57532a","isMergeCommit":false,"messageTitle":"Edit error message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"38215cf06add3c4eecddf4078ebac290f7e696a9","isMergeCommit":false,"messageTitle":"Edit import statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":13}}},{"hash":"2c58263fdba0996a820f890b2973e60c46e270c5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"8f0adf71279802e5c79eef500310178090f6052a","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3123d080aa88b99f5ccf8b3fb637978e6576f75d","isMergeCommit":false,"messageTitle":"Add Gradle build","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"5a92f7b21bd898a5abc907f14b4a5150cdc7588b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"38d7c29f2a5c43edf41a9d1aab4a5b08148226d3","isMergeCommit":false,"messageTitle":"Shift Bongo class to under bongo package","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":4,"deletions":2},"bat":{"insertions":1,"deletions":1},"md":{"insertions":1,"deletions":1}}},{"hash":"00d23c927c98cb864d54c506e20221c6c1da36c4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6991d19ffd66eddf12c34bd7e47df5c66cf4d67b","isMergeCommit":false,"messageTitle":"Initialise BongoTest","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"62befec7a1ff4d80a6f2902dd5f0ea2fb5c7ab86","isMergeCommit":false,"messageTitle":"Change Parser class to static","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"ee3bce87f2dff1b77f46646d28cd028bd062335e","isMergeCommit":false,"messageTitle":"Edit error messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}},{"hash":"494f05b9dfcf8fc4d24f538ca0142048b2f5d239","isMergeCommit":false,"messageTitle":"Modify exception handling and error message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"f8f8d3e5cb6396173ebcf3abedf073a5ebecb460","isMergeCommit":false,"messageTitle":"Add tests for deadlines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":3}}},{"hash":"75d134db34b90f1280256b1eb4f2f10c19ab05b6","isMergeCommit":false,"messageTitle":"Edit error handling and shift into switch block","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":8}}},{"hash":"b58066e22ac6289cea0096e78fbf62ace8a32cb7","isMergeCommit":false,"messageTitle":"Edit deadline unit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}},{"hash":"7ba99f61c96f508b77d4b946a9025364e7be3d67","isMergeCommit":false,"messageTitle":"Add unit tests for events","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":1}}},{"hash":"296a79468fe03014fb863e6a330678278275b0e6","isMergeCommit":false,"messageTitle":"Add unit tests for todos","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"c0c88580ab3bc2237496ede6292398c74b2c3576","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"a1bb3b9feb2529e15afa383d44aa97e6b6c46990","isMergeCommit":false,"messageTitle":"Add Javadoc comments for task package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":1}}},{"hash":"0ce130c0c8c767a2d65f7def5abe6447094ebe76","isMergeCommit":false,"messageTitle":"Add Javadoc comments for Bongo class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"d652706bc79df0a993fb5dcc831bf2b7178b38b6","isMergeCommit":false,"messageTitle":"Add Javadoc comments for helper package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":95,"deletions":4}}},{"hash":"0ebab95819d7a5939d9c4fe57fd63d55826f32e2","isMergeCommit":false,"messageTitle":"Add Javadoc comments for command package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":0}}},{"hash":"adf2a0aaff5f42b93b61e61f8cce6eff7ca61dfa","isMergeCommit":false,"messageTitle":"Change code to follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":150,"deletions":100}}},{"hash":"9e4d04918fc8794efb6ed2517dda983b2c41838d","isMergeCommit":false,"messageTitle":"Add find task functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":23}}},{"hash":"836de7a4d632c4fe186570b5c7bc1108367e872a","isMergeCommit":false,"messageTitle":"Fix bug when searchInput is null","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"f4d3cc58b2d9b9bd4286c0bdbeaff7e4fad981bf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"005e0338810dab39c85fd48cfd901ad0d6b207a0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"c6f572a47308771e09a8d25ad6c98e1e27a5af2a","isMergeCommit":false,"messageTitle":"Add more Javadocs comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":64}}},{"hash":"e26285d45ab2e6a5ecd407520f8c0adcb15ef1a7","isMergeCommit":false,"messageTitle":"Edit parsing and exception handling of mark, unmark and delete","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":20}}},{"hash":"77049a5327c498d989eb1ea110dcca848215c90d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"8350aa9482a6e3ea0d6a7facda03e5badf8e55a5","isMergeCommit":false,"messageTitle":"Remove merge conflict comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":4}}}]},{"date":"2023-09-05","commitResults":[{"hash":"8700a838c6e77df3d450cc646b743de65c93e24f","isMergeCommit":false,"messageTitle":"Add checkstyle config to gradle build file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"193b4bef081df84b4b428d2823307db549699927","isMergeCommit":false,"messageTitle":"Prevent loading of expired tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":20}}},{"hash":"7b2760f824cbb33640c15d14bc56842f45c89030","isMergeCommit":false,"messageTitle":"Resolve style violations generated by checkstyleMain","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":74}}},{"hash":"515e35e3820933f4c9faec0a855ca9fa285aeaf2","isMergeCommit":false,"messageTitle":"Delete expired tasks from text file upon loading","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":2}}},{"hash":"f67428f35a5ba5df1b99dc45bf53ff646ce17bb4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"2757f5fec99ff7238579aef96a94493f48702682","isMergeCommit":false,"messageTitle":"Set up Java FX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0}}},{"hash":"f33236a2ce3eb258ca9665e05ce63f29e2586eb7","isMergeCommit":false,"messageTitle":"Finish Iteration 1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":141,"deletions":3}}},{"hash":"124ba2a3f33976fbf10be864b2ac880c86e96d7b","isMergeCommit":false,"messageTitle":"Finish Iteration 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":0}}},{"hash":"2298b31a6c427e8c37effd91e772a4d4c1052dc5","isMergeCommit":false,"messageTitle":"Finish Iteration 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":3}}},{"hash":"5ecbdbc0c3beb6e68b0ca44b32ddbc8ffc0fa309","isMergeCommit":false,"messageTitle":"Add FXML support in application","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":158,"deletions":158}}},{"hash":"f1fda096349a6bc0194f7bafbfb0ebcde28a3f44","isMergeCommit":false,"messageTitle":"Change method signature of execute in Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":33}}},{"hash":"4174635bc452946216bac6b21f633a7b0808d36c","isMergeCommit":false,"messageTitle":"Add custom GUI","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":9,"deletions":3}}},{"hash":"8113732f02d16973af8523749bf5b0f3d76ecc6b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"raynertjx":{"java":1563,"md":2,"fxml":41,"sh":0,"bat":1,"gradle":20,"txt":8}},"authorContributionVariance":{"raynertjx":278421.47},"authorDisplayNameMap":{"raynertjx":"CS2103T-T10-1 RAYN..IANG"}} diff --git a/reposense-logs/reposense.log.0 b/reposense-logs/reposense.log.0 index c0494d6c..1e8924a1 100644 --- a/reposense-logs/reposense.log.0 +++ b/reposense-logs/reposense.log.0 @@ -1,58 +1,58 @@ -Sep 05, 2023 2:28:42 PM reposense.system.LogsManager addFileHandler +Sep 06, 2023 1:12:37 AM reposense.system.LogsManager addFileHandler INFO: Log temp folder has been successfully created -Sep 05, 2023 2:28:42 PM reposense.parser.CsvParser validateHeader +Sep 06, 2023 1:12:37 AM reposense.parser.CsvParser validateHeader INFO: Parsed header of CSV file, repo-config.csv, and recognized columns: Ignore Standalone Config, Repository's Location, Branch, Shallow Cloning, File formats, Ignore Glob List, Ignore Authors List, Find Previous Authors, Ignore Commits List -Sep 05, 2023 2:28:43 PM reposense.parser.CsvParser validateHeader +Sep 06, 2023 1:12:39 AM reposense.parser.CsvParser validateHeader INFO: Parsed header of CSV file, author-config.csv, and recognized columns: Author's Emails, Repository's Location, Author's GitHub ID, Branch, Author's Display Name, Ignore Glob List, Author's Git Author Name -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias scarletblanks found. The alias will belong to the last author - ScarletBlanks -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kb-tay found. The alias will belong to the last author - Kb-Tay -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias ryam found. The alias will belong to the last author - ryamgoh -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias h1410101 found. The alias will belong to the last author - H1410101 -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias shashahchk found. The alias will belong to the last author - shashahchk -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yucongkoo found. The alias will belong to the last author - yucongkoo -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kokseng1 found. The alias will belong to the last author - Kokseng1 -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias vanessamae23 found. The alias will belong to the last author - Vanessamae23 -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias singa-pirate found. The alias will belong to the last author - Singa-pirate -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nicholastng010601 found. The alias will belong to the last author - nicholastng010601 -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias weiennn found. The alias will belong to the last author - Weiennn -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias adammangzijun found. The alias will belong to the last author - adammangzijun -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias scarletblanks found. The alias will belong to the last author - ScarletBlanks -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kb-tay found. The alias will belong to the last author - Kb-Tay -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias ryam found. The alias will belong to the last author - ryamgoh -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias h1410101 found. The alias will belong to the last author - H1410101 -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias shashahchk found. The alias will belong to the last author - shashahchk -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yucongkoo found. The alias will belong to the last author - yucongkoo -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kokseng1 found. The alias will belong to the last author - Kokseng1 -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias vanessamae23 found. The alias will belong to the last author - Vanessamae23 -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias singa-pirate found. The alias will belong to the last author - Singa-pirate -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nicholastng010601 found. The alias will belong to the last author - nicholastng010601 -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias weiennn found. The alias will belong to the last author - Weiennn -Sep 05, 2023 2:28:43 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 06, 2023 1:12:39 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias adammangzijun found. The alias will belong to the last author - adammangzijun -Sep 05, 2023 2:28:43 PM reposense.git.GitConfig getGlobalGitLfsConfig +Sep 06, 2023 1:12:39 AM reposense.git.GitConfig getGlobalGitLfsConfig WARNING: Could not get global git lfs config java.lang.RuntimeException: reposense.system.CommandRunnerProcessException: Error returned from command git config --global --list on path . : fatal: unable to read config file '/home/runner/.gitconfig': No such file or directory @@ -68,8647 +68,8647 @@ fatal: unable to read config file '/home/runner/.gitconfig': No such file or dir at reposense.system.CommandRunner.runCommand(CommandRunner.java:21) ... 3 more -Sep 05, 2023 2:28:43 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/siqirua/ip.git... -Sep 05, 2023 2:28:43 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/emzm2023/ip.git... -Sep 05, 2023 2:28:43 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/CJ-Lee01/ip.git... -Sep 05, 2023 2:28:43 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/emzm2023/ip.git... +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/thaddeusong/ip.git... -Sep 05, 2023 2:28:43 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/siqirua/ip.git to complete... +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/thaddeusong/ip.git to complete... -Sep 05, 2023 2:28:43 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/emzm2023/ip.git to complete... -Sep 05, 2023 2:28:43 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/CJ-Lee01/ip.git to complete... -Sep 05, 2023 2:28:43 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/siqirua/ip.git to complete... -Sep 05, 2023 2:28:43 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/emzm2023/ip.git completed! -Sep 05, 2023 2:28:43 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/CJ-Lee01/ip.git completed! +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tanteckfang/ip.git... -Sep 05, 2023 2:28:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [1/480] Analyzing https://github.com/emzm2023/ip.git (master)... -Sep 05, 2023 2:28:43 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:39 AM reposense.report.ReportGenerator analyzeRepos +INFO: [1/480] Analyzing https://github.com/CJ-Lee01/ip.git (master)... +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tanteckfang/ip.git to complete... -Sep 05, 2023 2:28:43 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/emzm2023/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:43 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/CJ-Lee01/ip.git completed! -Sep 05, 2023 2:28:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/emzm2023/ip.git (master)... -Sep 05, 2023 2:28:43 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/emzm2023/ip.git completed! +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/siqirua/ip.git completed! +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/thaddeusong/ip.git completed! -Sep 05, 2023 2:28:43 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ph-nathan/ip.git... -Sep 05, 2023 2:28:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [2/480] Analyzing https://github.com/thaddeusong/ip.git (master)... -Sep 05, 2023 2:28:43 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ph-nathan/ip.git to complete... -Sep 05, 2023 2:28:43 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/butteredyakiimo/ip.git... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/butteredyakiimo/ip.git to complete... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/siqirua/ip.git completed! -Sep 05, 2023 2:28:44 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/thaddeusong/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/thaddeusong/ip.git (master)... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/CJ-Lee01/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:39 AM reposense.report.ReportGenerator analyzeRepos +INFO: [2/480] Analyzing https://github.com/siqirua/ip.git (master)... +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ph-nathan/ip.git to complete... +Sep 06, 2023 1:12:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/CJ-Lee01/ip.git (master)... +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yuxunn/ip.git... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/butteredyakiimo/ip.git to complete... +Sep 06, 2023 1:12:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yuxunn/ip.git to complete... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ph-nathan/ip.git completed! -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/siqirua/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/siqirua/ip.git (master)... +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tanteckfang/ip.git completed! -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/RB9823/ip.git... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/TyrusLye/ip.git... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ph-nathan/ip.git completed! +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/RB9823/ip.git to complete... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/TyrusLye/ip.git... +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/TyrusLye/ip.git to complete... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/butteredyakiimo/ip.git completed! -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/yuxunn/ip.git completed! -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/butteredyakiimo/ip.git completed! +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/cxo05/ip.git... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/shyanyong/ip.git... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/cxo05/ip.git to complete... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/shyanyong/ip.git... +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/shyanyong/ip.git to complete... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/CJ-Lee01/ip.git (master)... +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/TyrusLye/ip.git completed! +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/RB9823/ip.git completed! -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/howenc/ip.git... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/howenc/ip.git to complete... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/cxo05/ip.git completed! -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/shyanyong/ip.git completed! -Sep 05, 2023 2:28:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/emzm2023/ip.git (master)... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/cxo05/ip.git completed! +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/howenc/ip.git... +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Kurtyjlee/ip.git... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Kurtyjlee/ip.git to complete... -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/TyrusLye/ip.git completed! -Sep 05, 2023 2:28:44 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/josepholim/ip.git... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/howenc/ip.git to complete... +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/geoffong11/ip.git... -Sep 05, 2023 2:28:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/emzm2023/ip.git (master)... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/josepholim/ip.git to complete... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Kurtyjlee/ip.git to complete... +Sep 06, 2023 1:12:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/CJ-Lee01/ip.git (master)... +Sep 06, 2023 1:12:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/geoffong11/ip.git to complete... -Sep 05, 2023 2:28:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/thaddeusong/ip.git (master)... -Sep 05, 2023 2:28:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/thaddeusong/ip.git (master)... -Sep 05, 2023 2:28:45 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/emzm2023/ip.git (master) completed! -Sep 05, 2023 2:28:45 PM reposense.report.ReportGenerator analyzeRepos -INFO: [3/480] Analyzing https://github.com/CJ-Lee01/ip.git (master)... -Sep 05, 2023 2:28:45 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/thaddeusong/ip.git (master) completed! -Sep 05, 2023 2:28:45 PM reposense.report.ReportGenerator analyzeRepos -INFO: [4/480] Analyzing https://github.com/siqirua/ip.git (master)... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:41 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/CJ-Lee01/ip.git (master) completed! +Sep 06, 2023 1:12:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [3/480] Analyzing https://github.com/emzm2023/ip.git (master)... +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/howenc/ip.git completed! -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/siqirua/ip.git (master)... +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jianrong7/ip.git... -Sep 05, 2023 2:28:45 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/CJ-Lee01/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/CJ-Lee01/ip.git (master)... -Sep 05, 2023 2:28:45 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/siqirua/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/siqirua/ip.git (master)... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jianrong7/ip.git to complete... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:41 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/emzm2023/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/emzm2023/ip.git (master)... +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/josepholim/ip.git completed! -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/geoffong11/ip.git completed! -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jianrong7/ip.git to complete... +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/A1WAYSD/ip.git... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Kurtyjlee/ip.git completed! +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/NgChunMan/ip.git... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/geoffong11/ip.git completed! +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/A1WAYSD/ip.git to complete... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Kurtyjlee/ip.git completed! -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/limjunxian1/ip.git... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/NgChunMan/ip.git to complete... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/siqirua/ip.git (master)... +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/limjunxian1/ip.git... +Sep 06, 2023 1:12:41 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/siqirua/ip.git (master) completed! +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/limjunxian1/ip.git to complete... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [4/480] Analyzing https://github.com/thaddeusong/ip.git (master)... +Sep 06, 2023 1:12:41 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/thaddeusong/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/thaddeusong/ip.git (master)... +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jianrong7/ip.git completed! -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jack1e0/ip.git... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jack1e0/ip.git to complete... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/A1WAYSD/ip.git completed! +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/NgChunMan/ip.git completed! -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/hjoneweek/ip.git... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/A1WAYSD/ip.git completed! -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/hjoneweek/ip.git to complete... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/limjunxian1/ip.git completed! -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/hjoneweek/ip.git to complete... +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/dishenggg/ip.git... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/dishenggg/ip.git to complete... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/zhyuhan/ip.git... -Sep 05, 2023 2:28:45 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/zhyuhan/ip.git to complete... -Sep 05, 2023 2:28:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/CJ-Lee01/ip.git (master)... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jack1e0/ip.git completed! -Sep 05, 2023 2:28:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/CJ-Lee01/ip.git (master)... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Dioclei/ip.git... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/emzm2023/ip.git (master)... +Sep 06, 2023 1:12:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/emzm2023/ip.git (master)... +Sep 06, 2023 1:12:42 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/emzm2023/ip.git (master) completed! +Sep 06, 2023 1:12:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [5/480] Analyzing https://github.com/tanteckfang/ip.git (master)... +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/hjoneweek/ip.git completed! -Sep 05, 2023 2:28:46 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/CJ-Lee01/ip.git (master) completed! -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Dioclei/ip.git to complete... -Sep 05, 2023 2:28:46 PM reposense.report.ReportGenerator analyzeRepos -INFO: [5/480] Analyzing https://github.com/ph-nathan/ip.git (master)... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dishenggg/ip.git completed! +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Dioclei/ip.git... +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Daphne789/ip.git... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Dioclei/ip.git to complete... +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zhyuhan/ip.git completed! +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jack1e0/ip.git completed! +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Daphne789/ip.git to complete... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dishenggg/ip.git completed! -Sep 05, 2023 2:28:46 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ph-nathan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ph-nathan/ip.git (master)... -Sep 05, 2023 2:28:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/siqirua/ip.git (master)... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:42 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tanteckfang/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tanteckfang/ip.git (master)... +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/peiran18/ip.git... +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/WinstonLeonard/ip.git... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/WinstonLeonard/ip.git to complete... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zhyuhan/ip.git completed! -Sep 05, 2023 2:28:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/siqirua/ip.git (master)... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/peiran18/ip.git... -Sep 05, 2023 2:28:46 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/siqirua/ip.git (master) completed! -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/peiran18/ip.git to complete... -Sep 05, 2023 2:28:46 PM reposense.report.ReportGenerator analyzeRepos -INFO: [6/480] Analyzing https://github.com/tanteckfang/ip.git (master)... -Sep 05, 2023 2:28:46 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tanteckfang/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tanteckfang/ip.git (master)... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/thaddeusong/ip.git (master)... +Sep 06, 2023 1:12:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/thaddeusong/ip.git (master)... +Sep 06, 2023 1:12:42 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/thaddeusong/ip.git (master) completed! +Sep 06, 2023 1:12:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [6/480] Analyzing https://github.com/ph-nathan/ip.git (master)... +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Daphne789/ip.git completed! +Sep 06, 2023 1:12:42 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ph-nathan/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ph-nathan/ip.git (master)... +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Dioclei/ip.git completed! -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AriellaCallista/ip.git... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Daphne789/ip.git completed! -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AriellaCallista/ip.git to complete... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/migfoo02/ip.git... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/migfoo02/ip.git to complete... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/WinstonLeonard/ip.git completed! -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/peiran18/ip.git completed! -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/WinstonLeonard/ip.git completed! +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Jonyxzx/ip.git... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/migfoo02/ip.git to complete... +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AriellaCallista/ip.git to complete... +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Jonyxzx/ip.git to complete... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/SynapseProgramming/ip.git... -Sep 05, 2023 2:28:46 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:42 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/SynapseProgramming/ip.git to complete... -Sep 05, 2023 2:28:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ph-nathan/ip.git (master)... -Sep 05, 2023 2:28:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ph-nathan/ip.git (master)... -Sep 05, 2023 2:28:47 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ph-nathan/ip.git (master) completed! -Sep 05, 2023 2:28:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [7/480] Analyzing https://github.com/butteredyakiimo/ip.git (master)... -Sep 05, 2023 2:28:47 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/butteredyakiimo/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/butteredyakiimo/ip.git (master)... -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/migfoo02/ip.git completed! -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Darren159/ip.git... -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AriellaCallista/ip.git completed! -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Darren159/ip.git... +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Jonyxzx/ip.git completed! +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/imkwokyong/ip.git... -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Darren159/ip.git to complete... -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/imkwokyong/ip.git to complete... -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Jonyxzx/ip.git completed! -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/joeng03/ip.git... -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/SynapseProgramming/ip.git completed! +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/vijay-shankaranand/ip.git... +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/joeng03/ip.git to complete... -Sep 05, 2023 2:28:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/vijay-shankaranand/ip.git to complete... +Sep 06, 2023 1:12:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tanteckfang/ip.git (master)... -Sep 05, 2023 2:28:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:12:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tanteckfang/ip.git (master)... -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Darren159/ip.git completed! -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/vijay-shankaranand/ip.git... -Sep 05, 2023 2:28:47 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:12:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ph-nathan/ip.git (master)... +Sep 06, 2023 1:12:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ph-nathan/ip.git (master)... +Sep 06, 2023 1:12:43 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tanteckfang/ip.git (master) completed! -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/vijay-shankaranand/ip.git to complete... -Sep 05, 2023 2:28:47 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:12:43 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ph-nathan/ip.git (master) completed! +Sep 06, 2023 1:12:43 AM reposense.report.ReportGenerator analyzeRepos +INFO: [7/480] Analyzing https://github.com/butteredyakiimo/ip.git (master)... +Sep 06, 2023 1:12:43 AM reposense.report.ReportGenerator analyzeRepos INFO: [8/480] Analyzing https://github.com/yuxunn/ip.git (master)... -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/imkwokyong/ip.git completed! -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/SelwynAng/ip.git... -Sep 05, 2023 2:28:47 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:12:43 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/butteredyakiimo/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/butteredyakiimo/ip.git (master)... +Sep 06, 2023 1:12:43 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/yuxunn/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:12:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/yuxunn/ip.git (master)... -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Darren159/ip.git completed! +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/SelwynAng/ip.git... +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/SelwynAng/ip.git to complete... -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/imkwokyong/ip.git completed! +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/joeng03/ip.git completed! -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jeffrey-jian/ip.git... -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/vijay-shankaranand/ip.git completed! +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tanyyyming/ip.git... +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jeffrey-jian/ip.git to complete... -Sep 05, 2023 2:28:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/butteredyakiimo/ip.git (master)... -Sep 05, 2023 2:28:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/butteredyakiimo/ip.git (master)... -Sep 05, 2023 2:28:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tanyyyming/ip.git to complete... +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/JCSnap/ip.git... +Sep 06, 2023 1:12:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/JCSnap/ip.git to complete... +Sep 06, 2023 1:12:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yuxunn/ip.git (master)... -Sep 05, 2023 2:28:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:12:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yuxunn/ip.git (master)... -Sep 05, 2023 2:28:47 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/butteredyakiimo/ip.git (master) completed! -Sep 05, 2023 2:28:47 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:12:43 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yuxunn/ip.git (master) completed! -Sep 05, 2023 2:28:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [9/480] Analyzing https://github.com/RB9823/ip.git (master)... -Sep 05, 2023 2:28:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [10/480] Analyzing https://github.com/cxo05/ip.git (master)... -Sep 05, 2023 2:28:47 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/RB9823/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/RB9823/ip.git (master)... -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/vijay-shankaranand/ip.git completed! -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tanyyyming/ip.git... -Sep 05, 2023 2:28:47 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:43 AM reposense.report.ReportGenerator analyzeRepos +INFO: [9/480] Analyzing https://github.com/shyanyong/ip.git (master)... +Sep 06, 2023 1:12:44 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/shyanyong/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/shyanyong/ip.git (master)... +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/SelwynAng/ip.git completed! -Sep 05, 2023 2:28:47 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/cxo05/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/cxo05/ip.git (master)... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/JCSnap/ip.git... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tanyyyming/ip.git to complete... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/JCSnap/ip.git to complete... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jeffrey-jian/ip.git completed! -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AprupKale/ip.git... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jeffrey-jian/ip.git completed! +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tanyyyming/ip.git completed! +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AprupKale/ip.git to complete... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/SynapseProgramming/ip.git completed! -Sep 05, 2023 2:28:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/RB9823/ip.git (master)... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/woojiahao/ip.git... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/woojiahao/ip.git to complete... -Sep 05, 2023 2:28:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/RB9823/ip.git (master)... -Sep 05, 2023 2:28:48 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/RB9823/ip.git (master) completed! -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tanyyyming/ip.git completed! -Sep 05, 2023 2:28:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [11/480] Analyzing https://github.com/shyanyong/ip.git (master)... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/PetrichorPrecipice/ip.git... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/JCSnap/ip.git completed! -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/PetrichorPrecipice/ip.git to complete... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/PetrichorPrecipice/ip.git... +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/syamfarh/ip.git... -Sep 05, 2023 2:28:48 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/shyanyong/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/shyanyong/ip.git (master)... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AprupKale/ip.git completed! -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/woojiahao/ip.git to complete... +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/syamfarh/ip.git to complete... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/butteredyakiimo/ip.git (master)... +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/PetrichorPrecipice/ip.git to complete... +Sep 06, 2023 1:12:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/butteredyakiimo/ip.git (master)... +Sep 06, 2023 1:12:44 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/butteredyakiimo/ip.git (master) completed! +Sep 06, 2023 1:12:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [10/480] Analyzing https://github.com/RB9823/ip.git (master)... +Sep 06, 2023 1:12:44 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/RB9823/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/RB9823/ip.git (master)... +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AprupKale/ip.git completed! +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/D-Limiter/ip.git... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/D-Limiter/ip.git to complete... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/PetrichorPrecipice/ip.git completed! +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/woojiahao/ip.git completed! -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/coderhuang559/ip.git... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/coderhuang559/ip.git to complete... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/PetrichorPrecipice/ip.git completed! -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LINCHENYU2030S/ip.git... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/syamfarh/ip.git completed! -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LINCHENYU2030S/ip.git to complete... -Sep 05, 2023 2:28:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/cxo05/ip.git (master)... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/D-Limiter/ip.git completed! -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/coderhuang559/ip.git to complete... +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/pra-navi/ip.git... -Sep 05, 2023 2:28:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/cxo05/ip.git (master)... -Sep 05, 2023 2:28:48 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/cxo05/ip.git (master) completed! -Sep 05, 2023 2:28:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [12/480] Analyzing https://github.com/TyrusLye/ip.git (master)... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/pra-navi/ip.git to complete... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/phiphi-tan/ip.git... -Sep 05, 2023 2:28:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/phiphi-tan/ip.git to complete... -Sep 05, 2023 2:28:48 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:12:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/shyanyong/ip.git (master)... +Sep 06, 2023 1:12:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/shyanyong/ip.git (master)... +Sep 06, 2023 1:12:44 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/shyanyong/ip.git (master) completed! +Sep 06, 2023 1:12:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [11/480] Analyzing https://github.com/TyrusLye/ip.git (master)... +Sep 06, 2023 1:12:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/TyrusLye/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:12:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/TyrusLye/ip.git (master)... -Sep 05, 2023 2:28:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:12:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/RB9823/ip.git (master)... +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/D-Limiter/ip.git completed! +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/phiphi-tan/ip.git... +Sep 06, 2023 1:12:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/phiphi-tan/ip.git to complete... +Sep 06, 2023 1:12:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/RB9823/ip.git (master)... +Sep 06, 2023 1:12:44 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/RB9823/ip.git (master) completed! +Sep 06, 2023 1:12:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [12/480] Analyzing https://github.com/cxo05/ip.git (master)... +Sep 06, 2023 1:12:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/TyrusLye/ip.git (master)... -Sep 05, 2023 2:28:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:12:45 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/cxo05/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/cxo05/ip.git (master)... +Sep 06, 2023 1:12:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/TyrusLye/ip.git (master)... -Sep 05, 2023 2:28:49 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:12:45 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/TyrusLye/ip.git (master) completed! -Sep 05, 2023 2:28:49 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:12:45 AM reposense.report.ReportGenerator analyzeRepos INFO: [13/480] Analyzing https://github.com/howenc/ip.git (master)... -Sep 05, 2023 2:28:49 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/howenc/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/howenc/ip.git (master)... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LINCHENYU2030S/ip.git completed! -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/coderhuang559/ip.git completed! -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ktzy0305/ip.git... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LordSaumya/ip.git... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/howenc/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/howenc/ip.git (master)... +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ktzy0305/ip.git to complete... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LordSaumya/ip.git to complete... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LINCHENYU2030S/ip.git completed! +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/pra-navi/ip.git completed! -Sep 05, 2023 2:28:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/shyanyong/ip.git (master)... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LordSaumya/ip.git... +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Chen1x/ip.git... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Chen1x/ip.git to complete... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LordSaumya/ip.git to complete... +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/phiphi-tan/ip.git completed! -Sep 05, 2023 2:28:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/shyanyong/ip.git (master)... -Sep 05, 2023 2:28:49 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/shyanyong/ip.git (master) completed! -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ktzy0305/ip.git completed! +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yanghengtang/ip.git... -Sep 05, 2023 2:28:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [14/480] Analyzing https://github.com/geoffong11/ip.git (master)... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yanghengtang/ip.git to complete... -Sep 05, 2023 2:28:49 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/geoffong11/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/geoffong11/ip.git (master)... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ktzy0305/ip.git completed! -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/johnnythesnake12/ip.git... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/johnnythesnake12/ip.git to complete... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Chen1x/ip.git completed! +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/LordSaumya/ip.git completed! -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/oeggy03/ip.git... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/oeggy03/ip.git to complete... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Chen1x/ip.git completed! -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/p-xp/ip.git... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/p-xp/ip.git to complete... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/oeggy03/ip.git to complete... +Sep 06, 2023 1:12:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/cxo05/ip.git (master)... +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/yanghengtang/ip.git completed! -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/cxo05/ip.git (master)... +Sep 06, 2023 1:12:45 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/cxo05/ip.git (master) completed! +Sep 06, 2023 1:12:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [14/480] Analyzing https://github.com/josepholim/ip.git (master)... +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/matochichap/ip.git... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/matochichap/ip.git to complete... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/johnnythesnake12/ip.git completed! -Sep 05, 2023 2:28:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:12:45 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/josepholim/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/josepholim/ip.git (master)... +Sep 06, 2023 1:12:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/howenc/ip.git (master)... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/oeggy03/ip.git completed! +Sep 06, 2023 1:12:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/howenc/ip.git (master)... +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/applepiofmyeye/ip.git... -Sep 05, 2023 2:28:49 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/applepiofmyeye/ip.git to complete... -Sep 05, 2023 2:28:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/howenc/ip.git (master)... -Sep 05, 2023 2:28:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/geoffong11/ip.git (master)... -Sep 05, 2023 2:28:49 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:12:46 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/howenc/ip.git (master) completed! -Sep 05, 2023 2:28:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [15/480] Analyzing https://github.com/josepholim/ip.git (master)... -Sep 05, 2023 2:28:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/geoffong11/ip.git (master)... -Sep 05, 2023 2:28:50 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/josepholim/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/josepholim/ip.git (master)... -Sep 05, 2023 2:28:50 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/geoffong11/ip.git (master) completed! -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/oeggy03/ip.git completed! -Sep 05, 2023 2:28:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [16/480] Analyzing https://github.com/Kurtyjlee/ip.git (master)... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/TiwKangXu/ip.git... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/johnnythesnake12/ip.git completed! +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/p-xp/ip.git completed! -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/TiwKangXu/ip.git to complete... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [15/480] Analyzing https://github.com/Kurtyjlee/ip.git (master)... +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/TiwKangXu/ip.git... +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ScarletBlanks/ip.git... -Sep 05, 2023 2:28:50 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/TiwKangXu/ip.git to complete... +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ScarletBlanks/ip.git to complete... +Sep 06, 2023 1:12:46 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Kurtyjlee/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:12:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Kurtyjlee/ip.git (master)... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/matochichap/ip.git completed! -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ScarletBlanks/ip.git to complete... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/chiayunrong/ip.git... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/chiayunrong/ip.git to complete... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/applepiofmyeye/ip.git completed! -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/devanshubisht/ip.git... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/devanshubisht/ip.git to complete... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ScarletBlanks/ip.git completed! -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/TiwKangXu/ip.git completed! -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/devanshubisht/ip.git... +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jx124/ip.git... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ScarletBlanks/ip.git completed! +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Clin-lyx/ip.git... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jx124/ip.git to complete... -Sep 05, 2023 2:28:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/devanshubisht/ip.git to complete... +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Clin-lyx/ip.git to complete... +Sep 06, 2023 1:12:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/josepholim/ip.git (master)... -Sep 05, 2023 2:28:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:12:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/josepholim/ip.git (master)... -Sep 05, 2023 2:28:50 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:12:46 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/josepholim/ip.git (master) completed! -Sep 05, 2023 2:28:50 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:12:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [16/480] Analyzing https://github.com/geoffong11/ip.git (master)... +Sep 06, 2023 1:12:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Kurtyjlee/ip.git (master)... +Sep 06, 2023 1:12:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Kurtyjlee/ip.git (master)... +Sep 06, 2023 1:12:46 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Kurtyjlee/ip.git (master) completed! +Sep 06, 2023 1:12:46 AM reposense.report.ReportGenerator analyzeRepos INFO: [17/480] Analyzing https://github.com/jianrong7/ip.git (master)... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Clin-lyx/ip.git to complete... -Sep 05, 2023 2:28:50 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jianrong7/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jianrong7/ip.git (master)... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/devanshubisht/ip.git completed! -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/geoffong11/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/geoffong11/ip.git (master)... +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/chiayunrong/ip.git completed! -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AryanG01/ip.git... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jianrong7/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jianrong7/ip.git (master)... +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AryanG01/ip.git to complete... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/devanshubisht/ip.git completed! +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/kayabuttertoastt/ip.git... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/kayabuttertoastt/ip.git to complete... -Sep 05, 2023 2:28:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Kurtyjlee/ip.git (master)... -Sep 05, 2023 2:28:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Kurtyjlee/ip.git (master)... -Sep 05, 2023 2:28:50 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Kurtyjlee/ip.git (master) completed! -Sep 05, 2023 2:28:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [18/480] Analyzing https://github.com/NgChunMan/ip.git (master)... -Sep 05, 2023 2:28:50 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/NgChunMan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/NgChunMan/ip.git (master)... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Clin-lyx/ip.git completed! -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/sheryew/ip.git... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sheryew/ip.git to complete... -Sep 05, 2023 2:28:50 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:46 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jx124/ip.git completed! -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/sheryew/ip.git... +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jonasongg/ip.git... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sheryew/ip.git to complete... +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jonasongg/ip.git to complete... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AryanG01/ip.git completed! -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kayabuttertoastt/ip.git completed! -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yiwen101/ip.git... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tiongMax/ip.git... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tiongMax/ip.git to complete... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yiwen101/ip.git to complete... -Sep 05, 2023 2:28:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:12:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jianrong7/ip.git (master)... -Sep 05, 2023 2:28:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kayabuttertoastt/ip.git completed! +Sep 06, 2023 1:12:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/geoffong11/ip.git (master)... +Sep 06, 2023 1:12:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jianrong7/ip.git (master)... -Sep 05, 2023 2:28:51 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tiongMax/ip.git... +Sep 06, 2023 1:12:47 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jianrong7/ip.git (master) completed! -Sep 05, 2023 2:28:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [19/480] Analyzing https://github.com/A1WAYSD/ip.git (master)... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sheryew/ip.git completed! -Sep 05, 2023 2:28:51 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:12:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [18/480] Analyzing https://github.com/A1WAYSD/ip.git (master)... +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tiongMax/ip.git to complete... +Sep 06, 2023 1:12:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/geoffong11/ip.git (master)... +Sep 06, 2023 1:12:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/geoffong11/ip.git (master) completed! +Sep 06, 2023 1:12:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [19/480] Analyzing https://github.com/NgChunMan/ip.git (master)... +Sep 06, 2023 1:12:47 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/A1WAYSD/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:12:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/A1WAYSD/ip.git (master)... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sheryew/ip.git completed! +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/chuababyy/ip.git... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/NgChunMan/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/NgChunMan/ip.git (master)... +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/chuababyy/ip.git to complete... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jonasongg/ip.git completed! -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yiwen101/ip.git completed! +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/supermii2/ip.git... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tiongMax/ip.git completed! -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/supermii2/ip.git to complete... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yiwen101/ip.git completed! -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/remuslum/ip.git... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/remuslum/ip.git to complete... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tiongMax/ip.git completed! +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/kanna-1/ip.git... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/kanna-1/ip.git to complete... -Sep 05, 2023 2:28:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/NgChunMan/ip.git (master)... -Sep 05, 2023 2:28:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/A1WAYSD/ip.git (master)... -Sep 05, 2023 2:28:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/NgChunMan/ip.git (master)... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/chuababyy/ip.git completed! -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/supermii2/ip.git completed! +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nicolengk/ip.git... -Sep 05, 2023 2:28:51 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/NgChunMan/ip.git (master) completed! -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/newway1814/ip.git... +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/nicolengk/ip.git to complete... -Sep 05, 2023 2:28:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [20/480] Analyzing https://github.com/limjunxian1/ip.git (master)... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/supermii2/ip.git completed! -Sep 05, 2023 2:28:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:12:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/A1WAYSD/ip.git (master)... +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/newway1814/ip.git to complete... +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/remuslum/ip.git completed! +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/glenngnng/ip.git... +Sep 06, 2023 1:12:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/glenngnng/ip.git to complete... +Sep 06, 2023 1:12:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/A1WAYSD/ip.git (master)... -Sep 05, 2023 2:28:51 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:12:47 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/A1WAYSD/ip.git (master) completed! -Sep 05, 2023 2:28:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [21/480] Analyzing https://github.com/jack1e0/ip.git (master)... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/newway1814/ip.git... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/newway1814/ip.git to complete... -Sep 05, 2023 2:28:51 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:12:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [20/480] Analyzing https://github.com/limjunxian1/ip.git (master)... +Sep 06, 2023 1:12:47 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/limjunxian1/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:12:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/limjunxian1/ip.git (master)... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/kanna-1/ip.git completed! -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/remuslum/ip.git completed! -Sep 05, 2023 2:28:51 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jack1e0/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jack1e0/ip.git (master)... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/glenngnng/ip.git... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/zsh-eng/ip.git... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/glenngnng/ip.git to complete... -Sep 05, 2023 2:28:51 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/zsh-eng/ip.git to complete... -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/nicolengk/ip.git completed! -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/newway1814/ip.git completed! +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/mingyuanc/ip.git... -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LamJiuFong/ip.git... +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LamJiuFong/ip.git to complete... +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/mingyuanc/ip.git to complete... -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/newway1814/ip.git completed! -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zsh-eng/ip.git completed! -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/glenngnng/ip.git completed! -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LamJiuFong/ip.git... -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/GlendaChong/ip.git... -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/GlendaChong/ip.git to complete... +Sep 06, 2023 1:12:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/NgChunMan/ip.git (master)... +Sep 06, 2023 1:12:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/NgChunMan/ip.git (master)... +Sep 06, 2023 1:12:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/NgChunMan/ip.git (master) completed! +Sep 06, 2023 1:12:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [21/480] Analyzing https://github.com/dishenggg/ip.git (master)... +Sep 06, 2023 1:12:48 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dishenggg/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dishenggg/ip.git (master)... +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zsh-eng/ip.git completed! +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/starrylight99/ip.git... -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LamJiuFong/ip.git to complete... -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/starrylight99/ip.git to complete... -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/GlendaChong/ip.git to complete... -Sep 05, 2023 2:28:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LamJiuFong/ip.git completed! +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AustinHuang1203/ip.git... +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AustinHuang1203/ip.git to complete... +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/GlendaChong/ip.git completed! +Sep 06, 2023 1:12:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/limjunxian1/ip.git (master)... -Sep 05, 2023 2:28:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/mingyuanc/ip.git completed! +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/seewhyjay/ip.git... +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ruth-lim/ip.git... +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/seewhyjay/ip.git to complete... +Sep 06, 2023 1:12:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/limjunxian1/ip.git (master)... -Sep 05, 2023 2:28:52 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ruth-lim/ip.git to complete... +Sep 06, 2023 1:12:48 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/limjunxian1/ip.git (master) completed! -Sep 05, 2023 2:28:52 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:12:48 AM reposense.report.ReportGenerator analyzeRepos INFO: [22/480] Analyzing https://github.com/hjoneweek/ip.git (master)... -Sep 05, 2023 2:28:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jack1e0/ip.git (master)... -Sep 05, 2023 2:28:52 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/hjoneweek/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/hjoneweek/ip.git (master)... -Sep 05, 2023 2:28:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jack1e0/ip.git (master)... -Sep 05, 2023 2:28:52 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jack1e0/ip.git (master) completed! -Sep 05, 2023 2:28:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [23/480] Analyzing https://github.com/dishenggg/ip.git (master)... -Sep 05, 2023 2:28:52 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dishenggg/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dishenggg/ip.git (master)... -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/mingyuanc/ip.git completed! -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/GlendaChong/ip.git completed! -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AustinHuang1203/ip.git... -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/seewhyjay/ip.git... -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/starrylight99/ip.git completed! -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LamJiuFong/ip.git completed! -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AustinHuang1203/ip.git to complete... -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/seewhyjay/ip.git to complete... -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ruth-lim/ip.git... -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/limzhenwy/ip.git... -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ruth-lim/ip.git to complete... -Sep 05, 2023 2:28:52 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:48 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/hjoneweek/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/hjoneweek/ip.git (master)... +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/limzhenwy/ip.git to complete... -Sep 05, 2023 2:28:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/hjoneweek/ip.git (master)... -Sep 05, 2023 2:28:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/hjoneweek/ip.git (master)... -Sep 05, 2023 2:28:52 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/hjoneweek/ip.git (master) completed! -Sep 05, 2023 2:28:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [24/480] Analyzing https://github.com/zhyuhan/ip.git (master)... -Sep 05, 2023 2:28:52 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/zhyuhan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/zhyuhan/ip.git (master)... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/limzhenwy/ip.git completed! -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/xCOLOURx/ip.git... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AustinHuang1203/ip.git completed! -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/xCOLOURx/ip.git... +Sep 06, 2023 1:12:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/xCOLOURx/ip.git to complete... +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ruth-lim/ip.git completed! -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/seewhyjay/ip.git completed! -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/zacwong2151/ip.git... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/xCOLOURx/ip.git to complete... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Zjinnnn/ip.git... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/zacwong2151/ip.git to complete... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/seewhyjay/ip.git completed! +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Zjinnnn/ip.git... +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Zjinnnn/ip.git to complete... +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/limzhenwy/ip.git completed! +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/awhb/ip.git... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/awhb/ip.git to complete... -Sep 05, 2023 2:28:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:12:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/dishenggg/ip.git (master)... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Zjinnnn/ip.git to complete... -Sep 05, 2023 2:28:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/xCOLOURx/ip.git completed! +Sep 06, 2023 1:12:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/hjoneweek/ip.git (master)... +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/teoks0199/ip.git... +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/teoks0199/ip.git to complete... +Sep 06, 2023 1:12:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/hjoneweek/ip.git (master)... +Sep 06, 2023 1:12:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/dishenggg/ip.git (master)... -Sep 05, 2023 2:28:53 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:12:49 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/hjoneweek/ip.git (master) completed! +Sep 06, 2023 1:12:49 AM reposense.report.ReportGenerator analyzeRepos +INFO: [23/480] Analyzing https://github.com/zhyuhan/ip.git (master)... +Sep 06, 2023 1:12:49 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dishenggg/ip.git (master) completed! -Sep 05, 2023 2:28:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [25/480] Analyzing https://github.com/Dioclei/ip.git (master)... -Sep 05, 2023 2:28:53 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Dioclei/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Dioclei/ip.git (master)... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/awhb/ip.git completed! -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:49 AM reposense.report.ReportGenerator analyzeRepos +INFO: [24/480] Analyzing https://github.com/jack1e0/ip.git (master)... +Sep 06, 2023 1:12:49 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/zhyuhan/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/zhyuhan/ip.git (master)... +Sep 06, 2023 1:12:49 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jack1e0/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jack1e0/ip.git (master)... +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/zacwong2151/ip.git completed! -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/xCOLOURx/ip.git completed! -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/teoks0199/ip.git... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/qz1004/ip.git... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/teoks0199/ip.git to complete... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Zjinnnn/ip.git completed! -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/pangyyen/ip.git... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/qz1004/ip.git to complete... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Mahidharah/ip.git... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/awhb/ip.git completed! +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/pangyyen/ip.git... +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/pangyyen/ip.git to complete... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Mahidharah/ip.git... +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Mahidharah/ip.git to complete... -Sep 05, 2023 2:28:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Dioclei/ip.git (master)... -Sep 05, 2023 2:28:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Dioclei/ip.git (master)... -Sep 05, 2023 2:28:53 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Dioclei/ip.git (master) completed! -Sep 05, 2023 2:28:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [26/480] Analyzing https://github.com/Daphne789/ip.git (master)... -Sep 05, 2023 2:28:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zhyuhan/ip.git (master)... -Sep 05, 2023 2:28:53 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Daphne789/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Daphne789/ip.git (master)... -Sep 05, 2023 2:28:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zhyuhan/ip.git (master)... -Sep 05, 2023 2:28:53 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zhyuhan/ip.git (master) completed! -Sep 05, 2023 2:28:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [27/480] Analyzing https://github.com/WinstonLeonard/ip.git (master)... -Sep 05, 2023 2:28:53 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/WinstonLeonard/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/WinstonLeonard/ip.git (master)... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/teoks0199/ip.git completed! -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jason-raiin/ip.git... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jason-raiin/ip.git to complete... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/pangyyen/ip.git completed! -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ravern/ip.git... -Sep 05, 2023 2:28:53 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/qz1004/ip.git completed! -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Mahidharah/ip.git completed! -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ravern/ip.git... +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ravern/ip.git to complete... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Mahidharah/ip.git completed! +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/pangyyen/ip.git completed! +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/bobscodedump/ip.git... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:49 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nixonwidjaja/ip.git... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/bobscodedump/ip.git to complete... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/nixonwidjaja/ip.git to complete... -Sep 05, 2023 2:28:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Daphne789/ip.git (master)... -Sep 05, 2023 2:28:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Daphne789/ip.git (master)... -Sep 05, 2023 2:28:54 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Daphne789/ip.git (master) completed! -Sep 05, 2023 2:28:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [28/480] Analyzing https://github.com/peiran18/ip.git (master)... -Sep 05, 2023 2:28:54 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/peiran18/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/peiran18/ip.git (master)... -Sep 05, 2023 2:28:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/WinstonLeonard/ip.git (master)... -Sep 05, 2023 2:28:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/WinstonLeonard/ip.git (master)... -Sep 05, 2023 2:28:54 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/WinstonLeonard/ip.git (master) completed! -Sep 05, 2023 2:28:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [29/480] Analyzing https://github.com/migfoo02/ip.git (master)... -Sep 05, 2023 2:28:54 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/migfoo02/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/migfoo02/ip.git (master)... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nixonwidjaja/ip.git completed! -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jason-raiin/ip.git completed! +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/techjay-c/ip.git... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ravern/ip.git completed! -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/techjay-c/ip.git to complete... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zhyuhan/ip.git (master)... +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ravern/ip.git completed! +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ryanozx/ip.git... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/bobscodedump/ip.git completed! -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zhyuhan/ip.git (master)... +Sep 06, 2023 1:12:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zhyuhan/ip.git (master) completed! +Sep 06, 2023 1:12:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [25/480] Analyzing https://github.com/Daphne789/ip.git (master)... +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ryanozx/ip.git to complete... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jack1e0/ip.git (master)... +Sep 06, 2023 1:12:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Daphne789/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Daphne789/ip.git (master)... +Sep 06, 2023 1:12:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jack1e0/ip.git (master)... +Sep 06, 2023 1:12:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jack1e0/ip.git (master) completed! +Sep 06, 2023 1:12:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [26/480] Analyzing https://github.com/Dioclei/ip.git (master)... +Sep 06, 2023 1:12:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Dioclei/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Dioclei/ip.git (master)... +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nixonwidjaja/ip.git completed! +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LuahJunYang/ip.git... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LuahJunYang/ip.git to complete... -Sep 05, 2023 2:28:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/peiran18/ip.git (master)... -Sep 05, 2023 2:28:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/peiran18/ip.git (master)... -Sep 05, 2023 2:28:54 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/peiran18/ip.git (master) completed! -Sep 05, 2023 2:28:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [30/480] Analyzing https://github.com/AriellaCallista/ip.git (master)... -Sep 05, 2023 2:28:54 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AriellaCallista/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AriellaCallista/ip.git (master)... -Sep 05, 2023 2:28:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/migfoo02/ip.git (master)... -Sep 05, 2023 2:28:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/migfoo02/ip.git (master)... -Sep 05, 2023 2:28:54 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/migfoo02/ip.git (master) completed! -Sep 05, 2023 2:28:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [31/480] Analyzing https://github.com/Jonyxzx/ip.git (master)... -Sep 05, 2023 2:28:54 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Jonyxzx/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Jonyxzx/ip.git (master)... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jason-raiin/ip.git completed! -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LuahJunYang/ip.git completed! -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/techjay-c/ip.git completed! +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/HEEaZ/ip.git... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/HEEaZ/ip.git to complete... +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/bobscodedump/ip.git completed! +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ryanozx/ip.git completed! -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/techjay-c/ip.git completed! -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/dom-buri/ip.git... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/HEEaZ/ip.git to complete... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AlainS87/ip.git... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tiongjjyi/ip.git... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/dom-buri/ip.git to complete... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tiongjjyi/ip.git to complete... -Sep 05, 2023 2:28:54 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AlainS87/ip.git to complete... -Sep 05, 2023 2:28:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AriellaCallista/ip.git (master)... -Sep 05, 2023 2:28:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AriellaCallista/ip.git (master)... -Sep 05, 2023 2:28:55 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AriellaCallista/ip.git (master) completed! -Sep 05, 2023 2:28:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [32/480] Analyzing https://github.com/Darren159/ip.git (master)... -Sep 05, 2023 2:28:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Darren159/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Darren159/ip.git (master)... -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LuahJunYang/ip.git completed! +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tiongjjyi/ip.git... +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tiongjjyi/ip.git to complete... +Sep 06, 2023 1:12:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Daphne789/ip.git (master)... +Sep 06, 2023 1:12:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Dioclei/ip.git (master)... +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/HEEaZ/ip.git completed! -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Vanessamae23/ip.git... -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tiongjjyi/ip.git completed! -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Dioclei/ip.git (master)... +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Vanessamae23/ip.git to complete... -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Daphne789/ip.git (master)... +Sep 06, 2023 1:12:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Dioclei/ip.git (master) completed! +Sep 06, 2023 1:12:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Daphne789/ip.git (master) completed! +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/dom-buri/ip.git completed! -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [27/480] Analyzing https://github.com/peiran18/ip.git (master)... +Sep 06, 2023 1:12:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [28/480] Analyzing https://github.com/WinstonLeonard/ip.git (master)... +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/fuyiqiao/ip.git... -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:50 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/fuyiqiao/ip.git to complete... -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/WinstonLeonard/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/WinstonLeonard/ip.git (master)... +Sep 06, 2023 1:12:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/peiran18/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/peiran18/ip.git (master)... +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tiongjjyi/ip.git completed! +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/spatuly/ip.git... -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/spatuly/ip.git to complete... -Sep 05, 2023 2:28:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Jonyxzx/ip.git (master)... -Sep 05, 2023 2:28:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Jonyxzx/ip.git (master)... -Sep 05, 2023 2:28:55 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Jonyxzx/ip.git (master) completed! -Sep 05, 2023 2:28:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [33/480] Analyzing https://github.com/imkwokyong/ip.git (master)... -Sep 05, 2023 2:28:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/imkwokyong/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/imkwokyong/ip.git (master)... -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/spatuly/ip.git completed! -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Vanessamae23/ip.git completed! -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/fuyiqiao/ip.git completed! -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tanshiyu1999/ip.git... -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tanshiyu1999/ip.git to complete... +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/fuyiqiao/ip.git completed! +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Kb-Tay/ip.git... -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Kb-Tay/ip.git to complete... +Sep 06, 2023 1:12:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/peiran18/ip.git (master)... +Sep 06, 2023 1:12:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/peiran18/ip.git (master)... +Sep 06, 2023 1:12:51 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/peiran18/ip.git (master) completed! +Sep 06, 2023 1:12:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [29/480] Analyzing https://github.com/migfoo02/ip.git (master)... +Sep 06, 2023 1:12:51 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/migfoo02/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/migfoo02/ip.git (master)... +Sep 06, 2023 1:12:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/WinstonLeonard/ip.git (master)... +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/spatuly/ip.git completed! +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/beatricecst/ip.git... -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tanshiyu1999/ip.git to complete... -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/beatricecst/ip.git to complete... -Sep 05, 2023 2:28:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Kb-Tay/ip.git to complete... -Sep 05, 2023 2:28:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Darren159/ip.git (master)... -Sep 05, 2023 2:28:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Darren159/ip.git (master)... -Sep 05, 2023 2:28:55 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Darren159/ip.git (master) completed! -Sep 05, 2023 2:28:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [34/480] Analyzing https://github.com/joeng03/ip.git (master)... -Sep 05, 2023 2:28:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/joeng03/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/joeng03/ip.git (master)... -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Kb-Tay/ip.git completed! -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/WinstonLeonard/ip.git (master)... +Sep 06, 2023 1:12:51 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/WinstonLeonard/ip.git (master) completed! +Sep 06, 2023 1:12:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [30/480] Analyzing https://github.com/AriellaCallista/ip.git (master)... +Sep 06, 2023 1:12:51 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AriellaCallista/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AriellaCallista/ip.git (master)... +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tanshiyu1999/ip.git completed! +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tanveersingh10/ip.git... -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/beatricecst/ip.git completed! -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/thienmy0/ip.git... -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Kb-Tay/ip.git completed! +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tanveersingh10/ip.git to complete... -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tanshiyu1999/ip.git completed! -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/thienmy0/ip.git... +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/thienmy0/ip.git to complete... -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/migfoo02/ip.git (master)... +Sep 06, 2023 1:12:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/migfoo02/ip.git (master)... +Sep 06, 2023 1:12:51 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/migfoo02/ip.git (master) completed! +Sep 06, 2023 1:12:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [31/480] Analyzing https://github.com/Jonyxzx/ip.git (master)... +Sep 06, 2023 1:12:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/beatricecst/ip.git completed! +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/s0ngyang/ip.git... -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:52 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Jonyxzx/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Jonyxzx/ip.git (master)... +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/s0ngyang/ip.git to complete... -Sep 05, 2023 2:28:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/imkwokyong/ip.git (master)... -Sep 05, 2023 2:28:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/imkwokyong/ip.git (master)... -Sep 05, 2023 2:28:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/imkwokyong/ip.git (master) completed! -Sep 05, 2023 2:28:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [35/480] Analyzing https://github.com/vijay-shankaranand/ip.git (master)... -Sep 05, 2023 2:28:56 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/vijay-shankaranand/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/vijay-shankaranand/ip.git (master)... -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tanveersingh10/ip.git completed! -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/thienmy0/ip.git completed! -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ldinghan/ip.git... -Sep 05, 2023 2:28:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/joeng03/ip.git (master)... -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tanveersingh10/ip.git completed! +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ldinghan/ip.git to complete... -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/feifeiraindrops/ip.git... -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/feifeiraindrops/ip.git to complete... +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/s0ngyang/ip.git completed! -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AriellaCallista/ip.git (master)... +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ryanongwx/ip.git... -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/feifeiraindrops/ip.git to complete... -Sep 05, 2023 2:28:56 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ryanongwx/ip.git to complete... -Sep 05, 2023 2:28:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/joeng03/ip.git (master)... -Sep 05, 2023 2:28:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/joeng03/ip.git (master) completed! -Sep 05, 2023 2:28:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [36/480] Analyzing https://github.com/SelwynAng/ip.git (master)... -Sep 05, 2023 2:28:56 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/SelwynAng/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/SelwynAng/ip.git (master)... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ldinghan/ip.git completed! -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/feifeiraindrops/ip.git completed! +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ryanongwx/ip.git to complete... +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/kwangthiag/ip.git... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/elhy1999/ip.git... +Sep 06, 2023 1:12:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AriellaCallista/ip.git (master)... +Sep 06, 2023 1:12:52 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AriellaCallista/ip.git (master) completed! +Sep 06, 2023 1:12:52 AM reposense.report.ReportGenerator analyzeRepos +INFO: [32/480] Analyzing https://github.com/SynapseProgramming/ip.git (master)... +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/elhy1999/ip.git to complete... +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/kwangthiag/ip.git to complete... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:52 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/SynapseProgramming/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/SynapseProgramming/ip.git (master)... +Sep 06, 2023 1:12:52 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ryanongwx/ip.git completed! -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/feifeiraindrops/ip.git completed! -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/elhy1999/ip.git... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Jonyxzx/ip.git (master)... +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kwangthiag/ip.git completed! +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/songgthu/ip.git... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/songgthu/ip.git to complete... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/elhy1999/ip.git to complete... -Sep 05, 2023 2:28:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/vijay-shankaranand/ip.git (master)... -Sep 05, 2023 2:28:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/vijay-shankaranand/ip.git (master)... -Sep 05, 2023 2:28:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/vijay-shankaranand/ip.git (master) completed! -Sep 05, 2023 2:28:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [37/480] Analyzing https://github.com/jeffrey-jian/ip.git (master)... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AlainS87/ip.git completed! -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/elhy1999/ip.git completed! +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/GohTengFong/ip.git... -Sep 05, 2023 2:28:57 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jeffrey-jian/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jeffrey-jian/ip.git (master)... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/GohTengFong/ip.git to complete... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kwangthiag/ip.git completed! -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/simbayippy/ip.git... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/songgthu/ip.git to complete... +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/simbayippy/ip.git to complete... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/songgthu/ip.git completed! -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Jonyxzx/ip.git (master)... +Sep 06, 2023 1:12:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Jonyxzx/ip.git (master) completed! +Sep 06, 2023 1:12:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [33/480] Analyzing https://github.com/Darren159/ip.git (master)... +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AlainS87/ip.git completed! +Sep 06, 2023 1:12:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Darren159/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Darren159/ip.git (master)... +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Khaleelur-Rahman/ip.git... -Sep 05, 2023 2:28:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/SelwynAng/ip.git (master)... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Khaleelur-Rahman/ip.git to complete... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/elhy1999/ip.git completed! -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/SynapseProgramming/ip.git (master)... +Sep 06, 2023 1:12:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/SynapseProgramming/ip.git (master)... +Sep 06, 2023 1:12:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/SynapseProgramming/ip.git (master) completed! +Sep 06, 2023 1:12:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [34/480] Analyzing https://github.com/imkwokyong/ip.git (master)... +Sep 06, 2023 1:12:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/imkwokyong/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/imkwokyong/ip.git (master)... +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/songgthu/ip.git completed! +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/proto-aiken-13/ip.git... -Sep 05, 2023 2:28:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/SelwynAng/ip.git (master)... -Sep 05, 2023 2:28:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/SelwynAng/ip.git (master) completed! -Sep 05, 2023 2:28:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [38/480] Analyzing https://github.com/SynapseProgramming/ip.git (master)... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/proto-aiken-13/ip.git to complete... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/GohTengFong/ip.git completed! -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/simbayippy/ip.git completed! +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/bwangpj/ip.git... -Sep 05, 2023 2:28:57 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/SynapseProgramming/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/SynapseProgramming/ip.git (master)... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/bwangpj/ip.git to complete... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/simbayippy/ip.git completed! -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/weeweh/ip.git... -Sep 05, 2023 2:28:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jeffrey-jian/ip.git (master)... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/weeweh/ip.git to complete... -Sep 05, 2023 2:28:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jeffrey-jian/ip.git (master)... -Sep 05, 2023 2:28:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jeffrey-jian/ip.git (master) completed! -Sep 05, 2023 2:28:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [39/480] Analyzing https://github.com/tanyyyming/ip.git (master)... -Sep 05, 2023 2:28:57 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Khaleelur-Rahman/ip.git completed! -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/s-peiran/ip.git... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/proto-aiken-13/ip.git completed! -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/s-peiran/ip.git to complete... -Sep 05, 2023 2:28:58 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tanyyyming/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tanyyyming/ip.git (master)... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Darren159/ip.git (master)... +Sep 06, 2023 1:12:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Darren159/ip.git (master)... +Sep 06, 2023 1:12:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Darren159/ip.git (master) completed! +Sep 06, 2023 1:12:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [35/480] Analyzing https://github.com/joeng03/ip.git (master)... +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/proto-aiken-13/ip.git completed! +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jylow/ip.git... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jylow/ip.git to complete... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/joeng03/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/joeng03/ip.git (master)... +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/bwangpj/ip.git completed! -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jylow/ip.git to complete... +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/weeweh/ip.git completed! +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lawruixi/ip.git... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lawruixi/ip.git to complete... -Sep 05, 2023 2:28:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/SynapseProgramming/ip.git (master)... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/weeweh/ip.git completed! -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/JeremyYong128/ip.git... -Sep 05, 2023 2:28:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/SynapseProgramming/ip.git (master)... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/JeremyYong128/ip.git to complete... -Sep 05, 2023 2:28:58 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/SynapseProgramming/ip.git (master) completed! -Sep 05, 2023 2:28:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [40/480] Analyzing https://github.com/JCSnap/ip.git (master)... -Sep 05, 2023 2:28:58 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/JCSnap/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/JCSnap/ip.git (master)... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/s-peiran/ip.git completed! -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/JeremyYong128/ip.git... +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/brandon-nam/ip.git... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/brandon-nam/ip.git to complete... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/JeremyYong128/ip.git to complete... +Sep 06, 2023 1:12:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/imkwokyong/ip.git (master)... +Sep 06, 2023 1:12:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/imkwokyong/ip.git (master)... +Sep 06, 2023 1:12:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/imkwokyong/ip.git (master) completed! +Sep 06, 2023 1:12:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [36/480] Analyzing https://github.com/vijay-shankaranand/ip.git (master)... +Sep 06, 2023 1:12:54 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/vijay-shankaranand/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/vijay-shankaranand/ip.git (master)... +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jylow/ip.git completed! -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LHeng1/ip.git... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lawruixi/ip.git completed! -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Leb14/ip.git... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LHeng1/ip.git to complete... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Leb14/ip.git to complete... -Sep 05, 2023 2:28:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/JCSnap/ip.git (master)... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/joeng03/ip.git (master)... +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/JeremyYong128/ip.git completed! -Sep 05, 2023 2:28:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/JCSnap/ip.git (master)... -Sep 05, 2023 2:28:58 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/JCSnap/ip.git (master) completed! -Sep 05, 2023 2:28:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [41/480] Analyzing https://github.com/AprupKale/ip.git (master)... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/B-enguin/ip.git... -Sep 05, 2023 2:28:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tanyyyming/ip.git (master)... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/B-enguin/ip.git to complete... -Sep 05, 2023 2:28:58 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AprupKale/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AprupKale/ip.git (master)... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/brandon-nam/ip.git completed! -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/joeng03/ip.git (master)... +Sep 06, 2023 1:12:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/joeng03/ip.git (master) completed! +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/B-enguin/ip.git to complete... +Sep 06, 2023 1:12:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [37/480] Analyzing https://github.com/SelwynAng/ip.git (master)... +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/s-kybound/ip.git... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/s-kybound/ip.git to complete... +Sep 06, 2023 1:12:54 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/SelwynAng/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/SelwynAng/ip.git (master)... +Sep 06, 2023 1:12:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/vijay-shankaranand/ip.git (master)... +Sep 06, 2023 1:12:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/vijay-shankaranand/ip.git (master)... +Sep 06, 2023 1:12:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/vijay-shankaranand/ip.git (master) completed! +Sep 06, 2023 1:12:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [38/480] Analyzing https://github.com/jeffrey-jian/ip.git (master)... +Sep 06, 2023 1:12:54 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jeffrey-jian/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jeffrey-jian/ip.git (master)... +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/LHeng1/ip.git completed! -Sep 05, 2023 2:28:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tanyyyming/ip.git (master)... -Sep 05, 2023 2:28:58 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tanyyyming/ip.git (master) completed! -Sep 05, 2023 2:28:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [42/480] Analyzing https://github.com/woojiahao/ip.git (master)... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/wesho1107/ip.git... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/s-kybound/ip.git to complete... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/wesho1107/ip.git to complete... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Leb14/ip.git completed! -Sep 05, 2023 2:28:58 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/woojiahao/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/woojiahao/ip.git (master)... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yihfei/ip.git... -Sep 05, 2023 2:28:58 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yihfei/ip.git to complete... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/B-enguin/ip.git completed! -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AaronJT1/ip.git... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AaronJT1/ip.git to complete... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/s-kybound/ip.git completed! -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wesho1107/ip.git completed! -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/dlathyun/ip.git... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/dlathyun/ip.git to complete... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wesho1107/ip.git completed! +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ricketytoc/ip.git... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yihfei/ip.git completed! -Sep 05, 2023 2:28:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AprupKale/ip.git (master)... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ricketytoc/ip.git to complete... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Angelyxx/ip.git... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Angelyxx/ip.git to complete... -Sep 05, 2023 2:28:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AprupKale/ip.git (master)... -Sep 05, 2023 2:28:59 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AprupKale/ip.git (master) completed! -Sep 05, 2023 2:28:59 PM reposense.report.ReportGenerator analyzeRepos -INFO: [43/480] Analyzing https://github.com/PetrichorPrecipice/ip.git (master)... -Sep 05, 2023 2:28:59 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/PetrichorPrecipice/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/PetrichorPrecipice/ip.git (master)... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yihfei/ip.git completed! +Sep 06, 2023 1:12:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/SelwynAng/ip.git (master)... +Sep 06, 2023 1:12:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jeffrey-jian/ip.git (master)... +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AaronJT1/ip.git completed! -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Angelyxx/ip.git... +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jingting1412/ip.git... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Angelyxx/ip.git to complete... +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/dlathyun/ip.git completed! -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jingting1412/ip.git to complete... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jeffrey-jian/ip.git (master)... +Sep 06, 2023 1:12:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jeffrey-jian/ip.git (master) completed! +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/SinhaVedant/ip.git... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [39/480] Analyzing https://github.com/tanyyyming/ip.git (master)... +Sep 06, 2023 1:12:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/SelwynAng/ip.git (master)... +Sep 06, 2023 1:12:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/SelwynAng/ip.git (master) completed! +Sep 06, 2023 1:12:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [40/480] Analyzing https://github.com/JCSnap/ip.git (master)... +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jingting1412/ip.git to complete... +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/SinhaVedant/ip.git to complete... +Sep 06, 2023 1:12:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/JCSnap/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/JCSnap/ip.git (master)... +Sep 06, 2023 1:12:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tanyyyming/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tanyyyming/ip.git (master)... +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ricketytoc/ip.git completed! -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Angelyxx/ip.git completed! -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/freddychenyouren2/ip.git... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/SinhaVedant/ip.git to complete... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/freddychenyouren2/ip.git to complete... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Angelyxx/ip.git completed! +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jordankanghm/ip.git... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/SinhaVedant/ip.git completed! +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jordankanghm/ip.git to complete... -Sep 05, 2023 2:28:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/woojiahao/ip.git (master)... -Sep 05, 2023 2:28:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/woojiahao/ip.git (master)... -Sep 05, 2023 2:28:59 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/woojiahao/ip.git (master) completed! -Sep 05, 2023 2:28:59 PM reposense.report.ReportGenerator analyzeRepos -INFO: [44/480] Analyzing https://github.com/syamfarh/ip.git (master)... -Sep 05, 2023 2:28:59 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/syamfarh/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:28:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/syamfarh/ip.git (master)... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jingting1412/ip.git completed! -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/adhigop13/ip.git... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/SinhaVedant/ip.git completed! -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/adhigop13/ip.git to complete... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/waseemingly/ip.git... -Sep 05, 2023 2:28:59 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/waseemingly/ip.git to complete... -Sep 05, 2023 2:29:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/PetrichorPrecipice/ip.git (master)... -Sep 05, 2023 2:29:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/PetrichorPrecipice/ip.git (master)... -Sep 05, 2023 2:29:00 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/PetrichorPrecipice/ip.git (master) completed! -Sep 05, 2023 2:29:00 PM reposense.report.ReportGenerator analyzeRepos -INFO: [45/480] Analyzing https://github.com/D-Limiter/ip.git (master)... -Sep 05, 2023 2:29:00 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/D-Limiter/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/D-Limiter/ip.git (master)... -Sep 05, 2023 2:29:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/syamfarh/ip.git (master)... -Sep 05, 2023 2:29:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/syamfarh/ip.git (master)... -Sep 05, 2023 2:29:00 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/syamfarh/ip.git (master) completed! -Sep 05, 2023 2:29:00 PM reposense.report.ReportGenerator analyzeRepos -INFO: [46/480] Analyzing https://github.com/coderhuang559/ip.git (master)... -Sep 05, 2023 2:29:00 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/coderhuang559/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/coderhuang559/ip.git (master)... -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/JCSnap/ip.git (master)... +Sep 06, 2023 1:12:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/JCSnap/ip.git (master)... +Sep 06, 2023 1:12:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/JCSnap/ip.git (master) completed! +Sep 06, 2023 1:12:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [41/480] Analyzing https://github.com/AprupKale/ip.git (master)... +Sep 06, 2023 1:12:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AprupKale/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AprupKale/ip.git (master)... +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jordankanghm/ip.git completed! -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/adhigop13/ip.git completed! -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/raydenlim/ip.git... -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jingyu987/ip.git... -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/adhigop13/ip.git completed! +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/raydenlim/ip.git to complete... -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jingyu987/ip.git... +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/waseemingly/ip.git completed! -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jingyu987/ip.git to complete... -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tanyyyming/ip.git (master)... +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/FerdiHS/ip.git... -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jingyu987/ip.git to complete... +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/FerdiHS/ip.git to complete... -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/freddychenyouren2/ip.git completed! -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tanyyyming/ip.git (master)... +Sep 06, 2023 1:12:56 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tanyyyming/ip.git (master) completed! +Sep 06, 2023 1:12:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [42/480] Analyzing https://github.com/PetrichorPrecipice/ip.git (master)... +Sep 06, 2023 1:12:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/PetrichorPrecipice/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/PetrichorPrecipice/ip.git (master)... +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/raydenlim/ip.git completed! +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jrchoo/ip.git... -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jingyu987/ip.git completed! +Sep 06, 2023 1:12:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AprupKale/ip.git (master)... +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jrchoo/ip.git to complete... -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/raydenlim/ip.git completed! -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/RiyaMehta2211/ip.git... -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AprupKale/ip.git (master)... +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/FerdiHS/ip.git completed! +Sep 06, 2023 1:12:56 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AprupKale/ip.git (master) completed! +Sep 06, 2023 1:12:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [43/480] Analyzing https://github.com/woojiahao/ip.git (master)... +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/RiyaMehta2211/ip.git to complete... -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jingyu987/ip.git completed! -Sep 05, 2023 2:29:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/coderhuang559/ip.git (master)... -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/leezhanpeng/ip.git... -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/freddychenyouren2/ip.git completed! +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/leezhanpeng/ip.git to complete... -Sep 05, 2023 2:29:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/coderhuang559/ip.git (master)... -Sep 05, 2023 2:29:00 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/coderhuang559/ip.git (master) completed! -Sep 05, 2023 2:29:00 PM reposense.report.ReportGenerator analyzeRepos -INFO: [47/480] Analyzing https://github.com/LINCHENYU2030S/ip.git (master)... -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/FerdiHS/ip.git completed! -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/juzzztinsoong/ip.git... -Sep 05, 2023 2:29:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/D-Limiter/ip.git (master)... -Sep 05, 2023 2:29:00 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LINCHENYU2030S/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LINCHENYU2030S/ip.git (master)... -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/woojiahao/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/woojiahao/ip.git (master)... +Sep 06, 2023 1:12:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/juzzztinsoong/ip.git to complete... -Sep 05, 2023 2:29:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/D-Limiter/ip.git (master)... -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jrchoo/ip.git completed! -Sep 05, 2023 2:29:00 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/D-Limiter/ip.git (master) completed! -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/RiyaMehta2211/ip.git completed! +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/darrentfy/ip.git... -Sep 05, 2023 2:29:00 PM reposense.report.ReportGenerator analyzeRepos -INFO: [48/480] Analyzing https://github.com/pra-navi/ip.git (master)... -Sep 05, 2023 2:29:00 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/darrentfy/ip.git to complete... -Sep 05, 2023 2:29:00 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/pra-navi/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/pra-navi/ip.git (master)... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/RiyaMehta2211/ip.git completed! -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jrchoo/ip.git completed! +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/juzzztinsoong/ip.git completed! +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/leezhanpeng/ip.git completed! -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/redtailedfox/ip.git... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Fallman2/ip.git... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/redtailedfox/ip.git to complete... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Fallman2/ip.git to complete... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/juzzztinsoong/ip.git completed! -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Heran9/ip.git... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/redtailedfox/ip.git to complete... +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Heran9/ip.git to complete... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/PetrichorPrecipice/ip.git (master)... +Sep 06, 2023 1:12:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/PetrichorPrecipice/ip.git (master)... +Sep 06, 2023 1:12:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/PetrichorPrecipice/ip.git (master) completed! +Sep 06, 2023 1:12:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [44/480] Analyzing https://github.com/syamfarh/ip.git (master)... +Sep 06, 2023 1:12:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/syamfarh/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/syamfarh/ip.git (master)... +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/darrentfy/ip.git completed! -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/VN-Hao/ip.git... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/VN-Hao/ip.git to complete... -Sep 05, 2023 2:29:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LINCHENYU2030S/ip.git (master)... -Sep 05, 2023 2:29:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LINCHENYU2030S/ip.git (master)... -Sep 05, 2023 2:29:01 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LINCHENYU2030S/ip.git (master) completed! -Sep 05, 2023 2:29:01 PM reposense.report.ReportGenerator analyzeRepos -INFO: [49/480] Analyzing https://github.com/phiphi-tan/ip.git (master)... -Sep 05, 2023 2:29:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/pra-navi/ip.git (master)... -Sep 05, 2023 2:29:01 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/phiphi-tan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/phiphi-tan/ip.git (master)... -Sep 05, 2023 2:29:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/pra-navi/ip.git (master)... -Sep 05, 2023 2:29:01 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/pra-navi/ip.git (master) completed! -Sep 05, 2023 2:29:01 PM reposense.report.ReportGenerator analyzeRepos -INFO: [50/480] Analyzing https://github.com/ktzy0305/ip.git (master)... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/redtailedfox/ip.git completed! -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jingjie88/ip.git... -Sep 05, 2023 2:29:01 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ktzy0305/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ktzy0305/ip.git (master)... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jingjie88/ip.git to complete... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Fallman2/ip.git completed! -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/H1410101/ip.git... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/H1410101/ip.git to complete... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Heran9/ip.git completed! -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jingjie88/ip.git... +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/H1410101/ip.git... +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/kimshitong/ip.git... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/H1410101/ip.git to complete... +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jingjie88/ip.git to complete... +Sep 06, 2023 1:12:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/woojiahao/ip.git (master)... +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/kimshitong/ip.git to complete... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/woojiahao/ip.git (master)... +Sep 06, 2023 1:12:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/woojiahao/ip.git (master) completed! +Sep 06, 2023 1:12:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [45/480] Analyzing https://github.com/D-Limiter/ip.git (master)... +Sep 06, 2023 1:12:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/D-Limiter/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/D-Limiter/ip.git (master)... +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/VN-Hao/ip.git completed! -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ivanleekk/ip.git... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/syamfarh/ip.git (master)... +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ivanleekk/ip.git to complete... -Sep 05, 2023 2:29:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/phiphi-tan/ip.git (master)... -Sep 05, 2023 2:29:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/phiphi-tan/ip.git (master)... -Sep 05, 2023 2:29:01 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/phiphi-tan/ip.git (master) completed! -Sep 05, 2023 2:29:01 PM reposense.report.ReportGenerator analyzeRepos -INFO: [51/480] Analyzing https://github.com/LordSaumya/ip.git (master)... -Sep 05, 2023 2:29:01 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LordSaumya/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LordSaumya/ip.git (master)... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/syamfarh/ip.git (master)... +Sep 06, 2023 1:12:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/syamfarh/ip.git (master) completed! +Sep 06, 2023 1:12:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [46/480] Analyzing https://github.com/coderhuang559/ip.git (master)... +Sep 06, 2023 1:12:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/coderhuang559/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/coderhuang559/ip.git (master)... +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jingjie88/ip.git completed! -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/H1410101/ip.git completed! +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kimshitong/ip.git completed! +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lamchenghou/ip.git... -Sep 05, 2023 2:29:01 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lamchenghou/ip.git to complete... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kimshitong/ip.git completed! -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/H1410101/ip.git completed! -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tayruxin/ip.git... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/raynertjx/ip.git... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tayruxin/ip.git to complete... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/raynertjx/ip.git to complete... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ivanleekk/ip.git completed! -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/raynertjx/ip.git to complete... +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/zhengyup/ip.git... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/zhengyup/ip.git to complete... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/coderhuang559/ip.git (master)... +Sep 06, 2023 1:12:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/D-Limiter/ip.git (master)... +Sep 06, 2023 1:12:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/coderhuang559/ip.git (master)... +Sep 06, 2023 1:12:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/D-Limiter/ip.git (master)... +Sep 06, 2023 1:12:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/D-Limiter/ip.git (master) completed! +Sep 06, 2023 1:12:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [47/480] Analyzing https://github.com/LINCHENYU2030S/ip.git (master)... +Sep 06, 2023 1:12:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/coderhuang559/ip.git (master) completed! +Sep 06, 2023 1:12:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [48/480] Analyzing https://github.com/pra-navi/ip.git (master)... +Sep 06, 2023 1:12:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LINCHENYU2030S/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LINCHENYU2030S/ip.git (master)... +Sep 06, 2023 1:12:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/pra-navi/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/pra-navi/ip.git (master)... +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lamchenghou/ip.git completed! -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/larrywang0701/ip.git... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/larrywang0701/ip.git to complete... -Sep 05, 2023 2:29:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ktzy0305/ip.git (master)... -Sep 05, 2023 2:29:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ktzy0305/ip.git (master)... -Sep 05, 2023 2:29:02 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ktzy0305/ip.git (master) completed! -Sep 05, 2023 2:29:02 PM reposense.report.ReportGenerator analyzeRepos -INFO: [52/480] Analyzing https://github.com/Chen1x/ip.git (master)... -Sep 05, 2023 2:29:02 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Chen1x/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Chen1x/ip.git (master)... -Sep 05, 2023 2:29:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Chen1x/ip.git (master)... -Sep 05, 2023 2:29:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LordSaumya/ip.git (master)... -Sep 05, 2023 2:29:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Chen1x/ip.git (master)... -Sep 05, 2023 2:29:02 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Chen1x/ip.git (master) completed! -Sep 05, 2023 2:29:02 PM reposense.report.ReportGenerator analyzeRepos -INFO: [53/480] Analyzing https://github.com/yanghengtang/ip.git (master)... -Sep 05, 2023 2:29:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LordSaumya/ip.git (master)... -Sep 05, 2023 2:29:02 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LordSaumya/ip.git (master) completed! -Sep 05, 2023 2:29:02 PM reposense.report.ReportGenerator analyzeRepos -INFO: [54/480] Analyzing https://github.com/johnnythesnake12/ip.git (master)... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tayruxin/ip.git completed! -Sep 05, 2023 2:29:02 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yanghengtang/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yanghengtang/ip.git (master)... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/larrywang0701/ip.git... +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Carlintyj/ip.git... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/raynertjx/ip.git completed! -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wxwern/ip.git... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wxwern/ip.git to complete... -Sep 05, 2023 2:29:02 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/johnnythesnake12/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/johnnythesnake12/ip.git (master)... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Carlintyj/ip.git to complete... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/larrywang0701/ip.git completed! -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/zhengyup/ip.git completed! -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/larrywang0701/ip.git to complete... +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wxwern/ip.git... +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nubnubyas/ip.git... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Carlintyj/ip.git to complete... +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/nubnubyas/ip.git to complete... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wxwern/ip.git to complete... +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/larrywang0701/ip.git completed! +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/aslam341/ip.git... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/aslam341/ip.git to complete... -Sep 05, 2023 2:29:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/johnnythesnake12/ip.git (master)... -Sep 05, 2023 2:29:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/johnnythesnake12/ip.git (master)... -Sep 05, 2023 2:29:02 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/johnnythesnake12/ip.git (master) completed! -Sep 05, 2023 2:29:02 PM reposense.report.ReportGenerator analyzeRepos -INFO: [55/480] Analyzing https://github.com/oeggy03/ip.git (master)... -Sep 05, 2023 2:29:02 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/oeggy03/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/oeggy03/ip.git (master)... -Sep 05, 2023 2:29:02 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nubnubyas/ip.git completed! +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LWZ19/ip.git... +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/wxwern/ip.git completed! -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Carlintyj/ip.git completed! -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LWZ19/ip.git... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LWZ19/ip.git to complete... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nubnubyas/ip.git completed! -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/timleow/ip.git... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/timleow/ip.git to complete... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/rayshawntan/ip.git... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/aslam341/ip.git completed! -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/pra-navi/ip.git (master)... +Sep 06, 2023 1:12:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LINCHENYU2030S/ip.git (master)... +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/rayshawntan/ip.git to complete... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/timleow/ip.git to complete... +Sep 06, 2023 1:12:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LINCHENYU2030S/ip.git (master)... +Sep 06, 2023 1:12:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LINCHENYU2030S/ip.git (master) completed! +Sep 06, 2023 1:12:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [49/480] Analyzing https://github.com/phiphi-tan/ip.git (master)... +Sep 06, 2023 1:12:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/pra-navi/ip.git (master)... +Sep 06, 2023 1:12:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/pra-navi/ip.git (master) completed! +Sep 06, 2023 1:12:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [50/480] Analyzing https://github.com/ktzy0305/ip.git (master)... +Sep 06, 2023 1:12:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/phiphi-tan/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/phiphi-tan/ip.git (master)... +Sep 06, 2023 1:12:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ktzy0305/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ktzy0305/ip.git (master)... +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/aslam341/ip.git completed! +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/aexolate/ip.git... -Sep 05, 2023 2:29:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yanghengtang/ip.git (master)... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/aexolate/ip.git to complete... -Sep 05, 2023 2:29:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yanghengtang/ip.git (master)... -Sep 05, 2023 2:29:03 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yanghengtang/ip.git (master) completed! -Sep 05, 2023 2:29:03 PM reposense.report.ReportGenerator analyzeRepos -INFO: [56/480] Analyzing https://github.com/p-xp/ip.git (master)... -Sep 05, 2023 2:29:03 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/p-xp/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/p-xp/ip.git (master)... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/timleow/ip.git completed! -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/rayshawntan/ip.git completed! +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/LWZ19/ip.git completed! -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Sheeepen/ip.git... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/shuyangk/ip.git... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/rayshawntan/ip.git completed! -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Sheeepen/ip.git to complete... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ncmathan/ip.git... +Sep 06, 2023 1:12:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/phiphi-tan/ip.git (master)... +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ncmathan/ip.git to complete... +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/shuyangk/ip.git to complete... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/phiphi-tan/ip.git (master)... +Sep 06, 2023 1:12:59 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/phiphi-tan/ip.git (master) completed! +Sep 06, 2023 1:12:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [51/480] Analyzing https://github.com/Chen1x/ip.git (master)... +Sep 06, 2023 1:12:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Chen1x/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Chen1x/ip.git (master)... +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/aexolate/ip.git completed! -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ncmathan/ip.git... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/iyioon/ip.git... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ncmathan/ip.git to complete... -Sep 05, 2023 2:29:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/oeggy03/ip.git (master)... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/iyioon/ip.git to complete... -Sep 05, 2023 2:29:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/oeggy03/ip.git (master)... -Sep 05, 2023 2:29:03 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/oeggy03/ip.git (master) completed! -Sep 05, 2023 2:29:03 PM reposense.report.ReportGenerator analyzeRepos -INFO: [57/480] Analyzing https://github.com/matochichap/ip.git (master)... -Sep 05, 2023 2:29:03 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/matochichap/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/matochichap/ip.git (master)... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Sheeepen/ip.git completed! -Sep 05, 2023 2:29:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/p-xp/ip.git (master)... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Chen1x/ip.git (master)... +Sep 06, 2023 1:12:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Chen1x/ip.git (master)... +Sep 06, 2023 1:12:59 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Chen1x/ip.git (master) completed! +Sep 06, 2023 1:12:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [52/480] Analyzing https://github.com/LordSaumya/ip.git (master)... +Sep 06, 2023 1:12:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LordSaumya/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LordSaumya/ip.git (master)... +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ncmathan/ip.git completed! +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/kiwibang/ip.git... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/kiwibang/ip.git to complete... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Sheeepen/ip.git completed! +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/shuyangk/ip.git completed! -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/mingyu-wan/ip.git... -Sep 05, 2023 2:29:03 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LuoZYi/ip.git... +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LuoZYi/ip.git to complete... +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/mingyu-wan/ip.git to complete... -Sep 05, 2023 2:29:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/p-xp/ip.git (master)... -Sep 05, 2023 2:29:03 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/p-xp/ip.git (master) completed! -Sep 05, 2023 2:29:03 PM reposense.report.ReportGenerator analyzeRepos -INFO: [58/480] Analyzing https://github.com/applepiofmyeye/ip.git (master)... -Sep 05, 2023 2:29:03 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/applepiofmyeye/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/applepiofmyeye/ip.git (master)... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ncmathan/ip.git completed! -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ktzy0305/ip.git (master)... +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/iyioon/ip.git completed! -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LuoZYi/ip.git... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/asdfghjkxd/ip.git... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LuoZYi/ip.git to complete... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ktzy0305/ip.git (master)... +Sep 06, 2023 1:12:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/asdfghjkxd/ip.git to complete... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:12:59 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ktzy0305/ip.git (master) completed! +Sep 06, 2023 1:12:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [53/480] Analyzing https://github.com/yanghengtang/ip.git (master)... +Sep 06, 2023 1:12:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yanghengtang/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:12:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yanghengtang/ip.git (master)... +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/kiwibang/ip.git completed! -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/sushiyade/ip.git... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/sushiyade/ip.git to complete... -Sep 05, 2023 2:29:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/applepiofmyeye/ip.git (master)... -Sep 05, 2023 2:29:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/applepiofmyeye/ip.git (master)... -Sep 05, 2023 2:29:04 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/applepiofmyeye/ip.git (master) completed! -Sep 05, 2023 2:29:04 PM reposense.report.ReportGenerator analyzeRepos -INFO: [59/480] Analyzing https://github.com/TiwKangXu/ip.git (master)... -Sep 05, 2023 2:29:04 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/TiwKangXu/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/TiwKangXu/ip.git (master)... -Sep 05, 2023 2:29:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/matochichap/ip.git (master)... -Sep 05, 2023 2:29:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/matochichap/ip.git (master)... -Sep 05, 2023 2:29:04 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/matochichap/ip.git (master) completed! -Sep 05, 2023 2:29:04 PM reposense.report.ReportGenerator analyzeRepos -INFO: [60/480] Analyzing https://github.com/ScarletBlanks/ip.git (master)... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LuoZYi/ip.git completed! -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/asdfghjkxd/ip.git completed! -Sep 05, 2023 2:29:04 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ScarletBlanks/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ScarletBlanks/ip.git (master)... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/mingyu-wan/ip.git completed! +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Nid21cs/ip.git... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/McNaBry/ip.git... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LuoZYi/ip.git completed! +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Nid21cs/ip.git to complete... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/McNaBry/ip.git... +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/McNaBry/ip.git to complete... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sushiyade/ip.git completed! -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/asdfghjkxd/ip.git completed! +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/miljyy/ip.git... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/miljyy/ip.git to complete... -Sep 05, 2023 2:29:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ScarletBlanks/ip.git (master)... -Sep 05, 2023 2:29:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ScarletBlanks/ip.git (master)... -Sep 05, 2023 2:29:04 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ScarletBlanks/ip.git (master) completed! -Sep 05, 2023 2:29:04 PM reposense.report.ReportGenerator analyzeRepos -INFO: [61/480] Analyzing https://github.com/devanshubisht/ip.git (master)... -Sep 05, 2023 2:29:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/TiwKangXu/ip.git (master)... -Sep 05, 2023 2:29:04 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/devanshubisht/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/devanshubisht/ip.git (master)... -Sep 05, 2023 2:29:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/TiwKangXu/ip.git (master)... -Sep 05, 2023 2:29:04 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/TiwKangXu/ip.git (master) completed! -Sep 05, 2023 2:29:04 PM reposense.report.ReportGenerator analyzeRepos -INFO: [62/480] Analyzing https://github.com/chiayunrong/ip.git (master)... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/miljyy/ip.git completed! -Sep 05, 2023 2:29:04 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/chiayunrong/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/chiayunrong/ip.git (master)... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Nid21cs/ip.git completed! -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/McNaBry/ip.git completed! -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LordSaumya/ip.git (master)... +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sushiyade/ip.git completed! +Sep 06, 2023 1:13:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LordSaumya/ip.git (master)... +Sep 06, 2023 1:13:00 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LordSaumya/ip.git (master) completed! +Sep 06, 2023 1:13:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [54/480] Analyzing https://github.com/oeggy03/ip.git (master)... +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ncduy0303/ip.git... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Nid21cs/ip.git completed! +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ncduy0303/ip.git to complete... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/McNaBry/ip.git completed! +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/eyelessrhyme7/ip.git... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ruishanteo/ip.git... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ruishanteo/ip.git to complete... -Sep 05, 2023 2:29:04 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/oeggy03/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/oeggy03/ip.git (master)... +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/eyelessrhyme7/ip.git to complete... -Sep 05, 2023 2:29:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/devanshubisht/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/devanshubisht/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/devanshubisht/ip.git (master) completed! -Sep 05, 2023 2:29:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [63/480] Analyzing https://github.com/Clin-lyx/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Clin-lyx/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Clin-lyx/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ncduy0303/ip.git completed! -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/mingyu-wan/ip.git completed! -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ruishanteo/ip.git completed! -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ruishanteo/ip.git... +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/miljyy/ip.git completed! +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/m1oojv/ip.git... -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ruishanteo/ip.git to complete... +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/m1oojv/ip.git to complete... -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/eyelessrhyme7/ip.git completed! -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yanghengtang/ip.git (master)... +Sep 06, 2023 1:13:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yanghengtang/ip.git (master)... +Sep 06, 2023 1:13:00 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yanghengtang/ip.git (master) completed! +Sep 06, 2023 1:13:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [55/480] Analyzing https://github.com/johnnythesnake12/ip.git (master)... +Sep 06, 2023 1:13:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/johnnythesnake12/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/johnnythesnake12/ip.git (master)... +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ncduy0303/ip.git completed! +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Nixx162/ip.git... -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Gabriel4357/ip.git... -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Nixx162/ip.git to complete... -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Gabriel4357/ip.git to complete... -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/eyelessrhyme7/ip.git completed! +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/m1oojv/ip.git completed! +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Gabriel4357/ip.git... +Sep 06, 2023 1:13:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/mfjkri/ip.git... -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/mfjkri/ip.git to complete... -Sep 05, 2023 2:29:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/chiayunrong/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/chiayunrong/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/chiayunrong/ip.git (master) completed! -Sep 05, 2023 2:29:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [64/480] Analyzing https://github.com/jx124/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jx124/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jx124/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Clin-lyx/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Clin-lyx/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Clin-lyx/ip.git (master) completed! -Sep 05, 2023 2:29:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [65/480] Analyzing https://github.com/AryanG01/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AryanG01/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AryanG01/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/m1oojv/ip.git completed! -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ruishanteo/ip.git completed! +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Gabriel4357/ip.git to complete... +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/junhonglow/ip.git... -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Nixx162/ip.git completed! -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/junhonglow/ip.git to complete... -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/RoeReRe/ip.git... -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/johnnythesnake12/ip.git (master)... +Sep 06, 2023 1:13:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/oeggy03/ip.git (master)... +Sep 06, 2023 1:13:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/johnnythesnake12/ip.git (master)... +Sep 06, 2023 1:13:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/johnnythesnake12/ip.git (master) completed! +Sep 06, 2023 1:13:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [56/480] Analyzing https://github.com/p-xp/ip.git (master)... +Sep 06, 2023 1:13:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/oeggy03/ip.git (master)... +Sep 06, 2023 1:13:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/oeggy03/ip.git (master) completed! +Sep 06, 2023 1:13:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [57/480] Analyzing https://github.com/matochichap/ip.git (master)... +Sep 06, 2023 1:13:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/p-xp/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/p-xp/ip.git (master)... +Sep 06, 2023 1:13:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/matochichap/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/matochichap/ip.git (master)... +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Gabriel4357/ip.git completed! -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/mfjkri/ip.git completed! -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Nixx162/ip.git completed! +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/RoeReRe/ip.git... +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Badatprogrammiing/ip.git... -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/RoeReRe/ip.git to complete... -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Badatprogrammiing/ip.git to complete... -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/mfjkri/ip.git completed! +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nknguyenhc/ip.git... -Sep 05, 2023 2:29:05 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/nknguyenhc/ip.git to complete... -Sep 05, 2023 2:29:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jx124/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AryanG01/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jx124/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jx124/ip.git (master) completed! -Sep 05, 2023 2:29:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AryanG01/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [66/480] Analyzing https://github.com/kayabuttertoastt/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AryanG01/ip.git (master) completed! -Sep 05, 2023 2:29:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [67/480] Analyzing https://github.com/sheryew/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kayabuttertoastt/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kayabuttertoastt/ip.git (master)... -Sep 05, 2023 2:29:05 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/sheryew/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/sheryew/ip.git (master)... -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/junhonglow/ip.git completed! -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/winson8222/ip.git... -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/winson8222/ip.git to complete... -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nknguyenhc/ip.git completed! -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wujy28/ip.git... -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/p-xp/ip.git (master)... +Sep 06, 2023 1:13:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/p-xp/ip.git (master)... +Sep 06, 2023 1:13:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/p-xp/ip.git (master) completed! +Sep 06, 2023 1:13:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [58/480] Analyzing https://github.com/applepiofmyeye/ip.git (master)... +Sep 06, 2023 1:13:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/applepiofmyeye/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/applepiofmyeye/ip.git (master)... +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/RoeReRe/ip.git completed! -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Badatprogrammiing/ip.git completed! -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wujy28/ip.git... +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/wujy28/ip.git to complete... -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nknguyenhc/ip.git completed! +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/SimWPEric/ip.git... -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/winson8222/ip.git completed! +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Badatprogrammiing/ip.git completed! +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/HugeNoob/ip.git... -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/SimWPEric/ip.git to complete... -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/HugeNoob/ip.git to complete... -Sep 05, 2023 2:29:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/sheryew/ip.git (master)... -Sep 05, 2023 2:29:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/sheryew/ip.git (master)... -Sep 05, 2023 2:29:06 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/sheryew/ip.git (master) completed! -Sep 05, 2023 2:29:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [68/480] Analyzing https://github.com/jonasongg/ip.git (master)... -Sep 05, 2023 2:29:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kayabuttertoastt/ip.git (master)... -Sep 05, 2023 2:29:06 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jonasongg/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jonasongg/ip.git (master)... -Sep 05, 2023 2:29:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kayabuttertoastt/ip.git (master)... -Sep 05, 2023 2:29:06 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kayabuttertoastt/ip.git (master) completed! -Sep 05, 2023 2:29:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [69/480] Analyzing https://github.com/tiongMax/ip.git (master)... -Sep 05, 2023 2:29:06 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tiongMax/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tiongMax/ip.git (master)... -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/HugeNoob/ip.git completed! -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wujy28/ip.git completed! -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lerxuann/ip.git... -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lerxuann/ip.git to complete... +Sep 06, 2023 1:13:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/matochichap/ip.git (master)... +Sep 06, 2023 1:13:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/matochichap/ip.git (master)... +Sep 06, 2023 1:13:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/matochichap/ip.git (master) completed! +Sep 06, 2023 1:13:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [59/480] Analyzing https://github.com/TiwKangXu/ip.git (master)... +Sep 06, 2023 1:13:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/TiwKangXu/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/TiwKangXu/ip.git (master)... +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wujy28/ip.git completed! +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Weiennn/ip.git... -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Weiennn/ip.git to complete... -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/SimWPEric/ip.git completed! -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lerxuann/ip.git to complete... -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/maj0-0/ip.git... -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/maj0-0/ip.git to complete... -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/winson8222/ip.git completed! -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/HugeNoob/ip.git completed! +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/qyaner/ip.git... -Sep 05, 2023 2:29:06 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/qyaner/ip.git to complete... -Sep 05, 2023 2:29:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tiongMax/ip.git (master)... -Sep 05, 2023 2:29:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jonasongg/ip.git (master)... -Sep 05, 2023 2:29:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tiongMax/ip.git (master)... -Sep 05, 2023 2:29:06 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tiongMax/ip.git (master) completed! -Sep 05, 2023 2:29:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [70/480] Analyzing https://github.com/yiwen101/ip.git (master)... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Weiennn/ip.git completed! -Sep 05, 2023 2:29:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jonasongg/ip.git (master)... -Sep 05, 2023 2:29:07 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jonasongg/ip.git (master) completed! -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/maj0-0/ip.git completed! -Sep 05, 2023 2:29:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [71/480] Analyzing https://github.com/chuababyy/ip.git (master)... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ruiyangzh/ip.git... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lerxuann/ip.git completed! -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ruiyangzh/ip.git... +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ruiyangzh/ip.git to complete... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/applepiofmyeye/ip.git (master)... +Sep 06, 2023 1:13:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/applepiofmyeye/ip.git (master)... +Sep 06, 2023 1:13:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/applepiofmyeye/ip.git (master) completed! +Sep 06, 2023 1:13:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [60/480] Analyzing https://github.com/ScarletBlanks/ip.git (master)... +Sep 06, 2023 1:13:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ScarletBlanks/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ScarletBlanks/ip.git (master)... +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Weiennn/ip.git completed! +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/maj0-0/ip.git completed! +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Bombbird2001/ip.git... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Bombbird2001/ip.git to complete... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/hyc17003/ip.git... -Sep 05, 2023 2:29:07 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yiwen101/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yiwen101/ip.git (master)... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/qyaner/ip.git completed! -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/hyc17003/ip.git to complete... -Sep 05, 2023 2:29:07 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/chuababyy/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/chuababyy/ip.git (master)... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/qyaner/ip.git completed! +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/adammangzijun/ip.git... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/adammangzijun/ip.git to complete... -Sep 05, 2023 2:29:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/chuababyy/ip.git (master)... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ruiyangzh/ip.git completed! -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/hyc17003/ip.git completed! -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/andytoh1/ip.git... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Originalidk/ip.git... -Sep 05, 2023 2:29:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/chuababyy/ip.git (master)... -Sep 05, 2023 2:29:07 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/chuababyy/ip.git (master) completed! -Sep 05, 2023 2:29:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [72/480] Analyzing https://github.com/supermii2/ip.git (master)... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/andytoh1/ip.git to complete... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Originalidk/ip.git to complete... -Sep 05, 2023 2:29:07 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/supermii2/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/supermii2/ip.git (master)... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/adammangzijun/ip.git completed! -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/TiwKangXu/ip.git (master)... +Sep 06, 2023 1:13:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/TiwKangXu/ip.git (master)... +Sep 06, 2023 1:13:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/TiwKangXu/ip.git (master) completed! +Sep 06, 2023 1:13:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [61/480] Analyzing https://github.com/chiayunrong/ip.git (master)... +Sep 06, 2023 1:13:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/chiayunrong/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/chiayunrong/ip.git (master)... +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Bombbird2001/ip.git completed! -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/hyc17003/ip.git completed! +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Originalidk/ip.git... +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Originalidk/ip.git to complete... +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/quzhetao01/ip.git... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/InfiBeyond/ip.git... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ScarletBlanks/ip.git (master)... +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/adammangzijun/ip.git completed! +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/quzhetao01/ip.git to complete... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:02 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/InfiBeyond/ip.git... +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/InfiBeyond/ip.git to complete... -Sep 05, 2023 2:29:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yiwen101/ip.git (master)... -Sep 05, 2023 2:29:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yiwen101/ip.git (master)... -Sep 05, 2023 2:29:07 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yiwen101/ip.git (master) completed! -Sep 05, 2023 2:29:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [73/480] Analyzing https://github.com/remuslum/ip.git (master)... -Sep 05, 2023 2:29:07 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/remuslum/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/remuslum/ip.git (master)... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ScarletBlanks/ip.git (master)... +Sep 06, 2023 1:13:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ScarletBlanks/ip.git (master) completed! +Sep 06, 2023 1:13:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [62/480] Analyzing https://github.com/devanshubisht/ip.git (master)... +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/andytoh1/ip.git completed! -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Bearypop/ip.git... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Originalidk/ip.git completed! -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/devanshubisht/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/devanshubisht/ip.git (master)... +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Bearypop/ip.git to complete... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Originalidk/ip.git completed! +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/quzhetao01/ip.git completed! +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/sp4ce-cowboy/ip.git... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sp4ce-cowboy/ip.git to complete... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/InfiBeyond/ip.git completed! -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/quzhetao01/ip.git completed! -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Bearypop/ip.git completed! +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/JasonLCY-Temp/ip.git... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/JasonLCY-Temp/ip.git to complete... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/wjayee/ip.git... -Sep 05, 2023 2:29:07 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sp4ce-cowboy/ip.git to complete... +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/wjayee/ip.git to complete... -Sep 05, 2023 2:29:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/supermii2/ip.git (master)... -Sep 05, 2023 2:29:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/supermii2/ip.git (master)... -Sep 05, 2023 2:29:08 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/supermii2/ip.git (master) completed! -Sep 05, 2023 2:29:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [74/480] Analyzing https://github.com/kanna-1/ip.git (master)... -Sep 05, 2023 2:29:08 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kanna-1/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kanna-1/ip.git (master)... -Sep 05, 2023 2:29:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/remuslum/ip.git (master)... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Bearypop/ip.git completed! -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/JasonLCY-Temp/ip.git to complete... +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/vivienherq/ip.git... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sp4ce-cowboy/ip.git completed! -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/vivienherq/ip.git to complete... -Sep 05, 2023 2:29:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/remuslum/ip.git (master)... -Sep 05, 2023 2:29:08 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/remuslum/ip.git (master) completed! -Sep 05, 2023 2:29:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [75/480] Analyzing https://github.com/nicolengk/ip.git (master)... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/devanshubisht/ip.git (master)... +Sep 06, 2023 1:13:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/devanshubisht/ip.git (master)... +Sep 06, 2023 1:13:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/devanshubisht/ip.git (master) completed! +Sep 06, 2023 1:13:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [63/480] Analyzing https://github.com/Clin-lyx/ip.git (master)... +Sep 06, 2023 1:13:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/chiayunrong/ip.git (master)... +Sep 06, 2023 1:13:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Clin-lyx/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Clin-lyx/ip.git (master)... +Sep 06, 2023 1:13:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/chiayunrong/ip.git (master)... +Sep 06, 2023 1:13:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/chiayunrong/ip.git (master) completed! +Sep 06, 2023 1:13:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [64/480] Analyzing https://github.com/jx124/ip.git (master)... +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sp4ce-cowboy/ip.git completed! +Sep 06, 2023 1:13:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jx124/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jx124/ip.git (master)... +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jamesebond/ip.git... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jamesebond/ip.git to complete... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/JasonLCY-Temp/ip.git completed! -Sep 05, 2023 2:29:08 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nicolengk/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nicolengk/ip.git (master)... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/wjayee/ip.git completed! -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jonyeokj/ip.git... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/victorlaiyeeteng/ip.git... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/victorlaiyeeteng/ip.git to complete... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jonyeokj/ip.git to complete... -Sep 05, 2023 2:29:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kanna-1/ip.git (master)... -Sep 05, 2023 2:29:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kanna-1/ip.git (master)... -Sep 05, 2023 2:29:08 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kanna-1/ip.git (master) completed! -Sep 05, 2023 2:29:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [76/480] Analyzing https://github.com/newway1814/ip.git (master)... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jamesebond/ip.git to complete... +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/JasonLCY-Temp/ip.git completed! +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/vivienherq/ip.git completed! -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jonyeokj/ip.git to complete... +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/victorlaiyeeteng/ip.git... +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lyuanww/ip.git... -Sep 05, 2023 2:29:08 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/newway1814/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/newway1814/ip.git (master)... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lyuanww/ip.git to complete... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/victorlaiyeeteng/ip.git to complete... +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jamesebond/ip.git completed! -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yongning0310/ip.git... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yongning0310/ip.git to complete... -Sep 05, 2023 2:29:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nicolengk/ip.git (master)... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Clin-lyx/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jonyeokj/ip.git completed! -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/victorlaiyeeteng/ip.git completed! -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yongning0310/ip.git to complete... +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Cloud7050/ip.git... -Sep 05, 2023 2:29:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nicolengk/ip.git (master)... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LoMaply/ip.git... -Sep 05, 2023 2:29:08 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nicolengk/ip.git (master) completed! -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Cloud7050/ip.git to complete... -Sep 05, 2023 2:29:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [77/480] Analyzing https://github.com/glenngnng/ip.git (master)... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LoMaply/ip.git to complete... -Sep 05, 2023 2:29:08 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/glenngnng/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/glenngnng/ip.git (master)... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/victorlaiyeeteng/ip.git completed! +Sep 06, 2023 1:13:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Clin-lyx/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lyuanww/ip.git completed! -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Clin-lyx/ip.git (master) completed! +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LoMaply/ip.git... +Sep 06, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [65/480] Analyzing https://github.com/AryanG01/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tllshan/ip.git... -Sep 05, 2023 2:29:08 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Cloud7050/ip.git to complete... +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tllshan/ip.git to complete... -Sep 05, 2023 2:29:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/glenngnng/ip.git (master)... -Sep 05, 2023 2:29:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/glenngnng/ip.git (master)... -Sep 05, 2023 2:29:09 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/glenngnng/ip.git (master) completed! -Sep 05, 2023 2:29:09 PM reposense.report.ReportGenerator analyzeRepos -INFO: [78/480] Analyzing https://github.com/zsh-eng/ip.git (master)... -Sep 05, 2023 2:29:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/newway1814/ip.git (master)... -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LoMaply/ip.git completed! -Sep 05, 2023 2:29:09 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/zsh-eng/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/zsh-eng/ip.git (master)... -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Gavino3o/ip.git... -Sep 05, 2023 2:29:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/newway1814/ip.git (master)... -Sep 05, 2023 2:29:09 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/newway1814/ip.git (master) completed! -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Cloud7050/ip.git completed! -Sep 05, 2023 2:29:09 PM reposense.report.ReportGenerator analyzeRepos -INFO: [79/480] Analyzing https://github.com/mingyuanc/ip.git (master)... -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LoMaply/ip.git to complete... +Sep 06, 2023 1:13:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AryanG01/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AryanG01/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jx124/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jx124/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jx124/ip.git (master) completed! +Sep 06, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [66/480] Analyzing https://github.com/kayabuttertoastt/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kayabuttertoastt/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kayabuttertoastt/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AryanG01/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AryanG01/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AryanG01/ip.git (master) completed! +Sep 06, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [67/480] Analyzing https://github.com/sheryew/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/sheryew/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/sheryew/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/yongning0310/ip.git completed! -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Gavino3o/ip.git... +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tllshan/ip.git completed! +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LoMaply/ip.git completed! +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Gavino3o/ip.git to complete... -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Cloud7050/ip.git completed! +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/HollaG/ip.git... -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/cheeggered/ip.git... -Sep 05, 2023 2:29:09 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/mingyuanc/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/mingyuanc/ip.git (master)... -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/xenosf/ip.git... +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/HollaG/ip.git to complete... -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/cheeggered/ip.git to complete... -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tllshan/ip.git completed! -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/xenosf/ip.git... -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/xenosf/ip.git to complete... -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/sheryew/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kayabuttertoastt/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kayabuttertoastt/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/sheryew/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/sheryew/ip.git (master) completed! +Sep 06, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kayabuttertoastt/ip.git (master) completed! +Sep 06, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [68/480] Analyzing https://github.com/jonasongg/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [69/480] Analyzing https://github.com/yiwen101/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jonasongg/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jonasongg/ip.git (master)... +Sep 06, 2023 1:13:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/cheeggered/ip.git completed! -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yiwen101/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yiwen101/ip.git (master)... +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/HollaG/ip.git completed! -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Gavino3o/ip.git completed! -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/TehOPanas/ip.git... -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/xenosf/ip.git completed! +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/TehOPanas/ip.git to complete... +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Gavino3o/ip.git completed! +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/neyapraveen/ip.git... -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/richiehx/ip.git... -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/neyapraveen/ip.git to complete... -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/TehOPanas/ip.git to complete... -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/xenosf/ip.git completed! -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/richiehx/ip.git to complete... -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AlyssaPng/ip.git... -Sep 05, 2023 2:29:09 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/richiehx/ip.git to complete... +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AlyssaPng/ip.git to complete... -Sep 05, 2023 2:29:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zsh-eng/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/TehOPanas/ip.git completed! -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/neyapraveen/ip.git completed! -Sep 05, 2023 2:29:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/mingyuanc/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/richiehx/ip.git completed! +Sep 06, 2023 1:13:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jonasongg/ip.git (master)... +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/TehOPanas/ip.git completed! +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AlyssaPng/ip.git completed! +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/leezhengjing/ip.git... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/seantehds/ip.git... -Sep 05, 2023 2:29:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zsh-eng/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/richiehx/ip.git completed! -Sep 05, 2023 2:29:10 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zsh-eng/ip.git (master) completed! -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ceilingFan456/ip.git... -Sep 05, 2023 2:29:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [80/480] Analyzing https://github.com/GlendaChong/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ceilingFan456/ip.git to complete... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/leezhengjing/ip.git to complete... -Sep 05, 2023 2:29:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/mingyuanc/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/mingyuanc/ip.git (master) completed! -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/seantehds/ip.git to complete... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AlyssaPng/ip.git completed! -Sep 05, 2023 2:29:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [81/480] Analyzing https://github.com/LamJiuFong/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/leezhengjing/ip.git to complete... +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lihongguang00/ip.git... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jonasongg/ip.git (master)... +Sep 06, 2023 1:13:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jonasongg/ip.git (master) completed! +Sep 06, 2023 1:13:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [70/480] Analyzing https://github.com/tiongMax/ip.git (master)... +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lihongguang00/ip.git to complete... -Sep 05, 2023 2:29:10 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/GlendaChong/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/GlendaChong/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LamJiuFong/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LamJiuFong/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tiongMax/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tiongMax/ip.git (master)... +Sep 06, 2023 1:13:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yiwen101/ip.git (master)... +Sep 06, 2023 1:13:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yiwen101/ip.git (master)... +Sep 06, 2023 1:13:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yiwen101/ip.git (master) completed! +Sep 06, 2023 1:13:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [71/480] Analyzing https://github.com/chuababyy/ip.git (master)... +Sep 06, 2023 1:13:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/chuababyy/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/chuababyy/ip.git (master)... +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/seantehds/ip.git completed! +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ceilingFan456/ip.git completed! +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/leezhengjing/ip.git completed! -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lihongguang00/ip.git completed! +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Singa-pirate/ip.git... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ceilingFan456/ip.git completed! -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/seantehds/ip.git completed! -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Singa-pirate/ip.git to complete... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/songfangyl/ip.git... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Singa-pirate/ip.git to complete... +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/vansh284/ip.git... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/songfangyl/ip.git to complete... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lihongguang00/ip.git completed! -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/vansh284/ip.git to complete... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/YeoBohShin/ip.git... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/vansh284/ip.git to complete... +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/songfangyl/ip.git to complete... +Sep 06, 2023 1:13:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/YeoBohShin/ip.git to complete... -Sep 05, 2023 2:29:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LamJiuFong/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LamJiuFong/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LamJiuFong/ip.git (master) completed! -Sep 05, 2023 2:29:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [82/480] Analyzing https://github.com/starrylight99/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/GlendaChong/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/starrylight99/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/starrylight99/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/GlendaChong/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/GlendaChong/ip.git (master) completed! -Sep 05, 2023 2:29:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [83/480] Analyzing https://github.com/limzhenwy/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/limzhenwy/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/limzhenwy/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tiongMax/ip.git (master)... +Sep 06, 2023 1:13:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tiongMax/ip.git (master)... +Sep 06, 2023 1:13:06 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tiongMax/ip.git (master) completed! +Sep 06, 2023 1:13:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [72/480] Analyzing https://github.com/supermii2/ip.git (master)... +Sep 06, 2023 1:13:06 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/supermii2/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/supermii2/ip.git (master)... +Sep 06, 2023 1:13:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/chuababyy/ip.git (master)... +Sep 06, 2023 1:13:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/chuababyy/ip.git (master)... +Sep 06, 2023 1:13:06 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/chuababyy/ip.git (master) completed! +Sep 06, 2023 1:13:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [73/480] Analyzing https://github.com/remuslum/ip.git (master)... +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Singa-pirate/ip.git completed! -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:06 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/remuslum/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/remuslum/ip.git (master)... +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/shuenj/ip.git... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/shuenj/ip.git to complete... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/vansh284/ip.git completed! -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/YeoBohShin/ip.git completed! +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lunaroddity/ip.git... -Sep 05, 2023 2:29:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/starrylight99/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/vansh284/ip.git completed! +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lunaroddity/ip.git to complete... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/YeoBohShin/ip.git completed! -Sep 05, 2023 2:29:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/starrylight99/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/starrylight99/ip.git (master) completed! -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/songfangyl/ip.git completed! -Sep 05, 2023 2:29:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [84/480] Analyzing https://github.com/AustinHuang1203/ip.git (master)... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/andrechuakj/ip.git... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/WeeMingQing/ip.git... -Sep 05, 2023 2:29:10 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/andrechuakj/ip.git to complete... -Sep 05, 2023 2:29:11 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AustinHuang1203/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AustinHuang1203/ip.git (master)... -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/songfangyl/ip.git completed! +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/WeeMingQing/ip.git... +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/WeeMingQing/ip.git to complete... -Sep 05, 2023 2:29:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/limzhenwy/ip.git (master)... -Sep 05, 2023 2:29:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/limzhenwy/ip.git (master)... -Sep 05, 2023 2:29:11 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/limzhenwy/ip.git (master) completed! -Sep 05, 2023 2:29:11 PM reposense.report.ReportGenerator analyzeRepos -INFO: [85/480] Analyzing https://github.com/seewhyjay/ip.git (master)... -Sep 05, 2023 2:29:11 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/seewhyjay/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/seewhyjay/ip.git (master)... -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/supermii2/ip.git (master)... +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/shuenj/ip.git completed! -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/supermii2/ip.git (master)... +Sep 06, 2023 1:13:06 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/supermii2/ip.git (master) completed! +Sep 06, 2023 1:13:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [74/480] Analyzing https://github.com/kanna-1/ip.git (master)... +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/aliciamichellew/ip.git... -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/aliciamichellew/ip.git to complete... -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/andrechuakj/ip.git completed! -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/aliciamichellew/ip.git to complete... +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lunaroddity/ip.git completed! -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/samuelmui8/ip.git... -Sep 05, 2023 2:29:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AustinHuang1203/ip.git (master)... -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:06 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kanna-1/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kanna-1/ip.git (master)... +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/antonTan96/ip.git... +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/samuelmui8/ip.git to complete... -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/antonTan96/ip.git to complete... +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/WeeMingQing/ip.git completed! -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/antonTan96/ip.git... -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/owenyeo/ip.git... -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/owenyeo/ip.git to complete... -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/antonTan96/ip.git to complete... -Sep 05, 2023 2:29:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AustinHuang1203/ip.git (master)... -Sep 05, 2023 2:29:11 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AustinHuang1203/ip.git (master) completed! -Sep 05, 2023 2:29:11 PM reposense.report.ReportGenerator analyzeRepos -INFO: [86/480] Analyzing https://github.com/ruth-lim/ip.git (master)... -Sep 05, 2023 2:29:11 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ruth-lim/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ruth-lim/ip.git (master)... -Sep 05, 2023 2:29:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/seewhyjay/ip.git (master)... -Sep 05, 2023 2:29:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/seewhyjay/ip.git (master)... -Sep 05, 2023 2:29:11 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/seewhyjay/ip.git (master) completed! -Sep 05, 2023 2:29:11 PM reposense.report.ReportGenerator analyzeRepos -INFO: [87/480] Analyzing https://github.com/awhb/ip.git (master)... -Sep 05, 2023 2:29:11 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/awhb/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/awhb/ip.git (master)... -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/remuslum/ip.git (master)... +Sep 06, 2023 1:13:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/remuslum/ip.git (master)... +Sep 06, 2023 1:13:06 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/remuslum/ip.git (master) completed! +Sep 06, 2023 1:13:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [75/480] Analyzing https://github.com/nicolengk/ip.git (master)... +Sep 06, 2023 1:13:06 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nicolengk/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nicolengk/ip.git (master)... +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/aliciamichellew/ip.git completed! -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/gongg21/ip.git... -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/antonTan96/ip.git completed! -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/gongg21/ip.git to complete... -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/samuelmui8/ip.git completed! +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/antonTan96/ip.git completed! +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nabonitasen/ip.git... -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nabonitasen/ip.git to complete... -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/owenyeo/ip.git completed! -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/erohsikivar/ip.git... -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nabonitasen/ip.git to complete... +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/erohsikivar/ip.git to complete... -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/samuelmui8/ip.git completed! -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/owenyeo/ip.git completed! +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/pzl111/ip.git... -Sep 05, 2023 2:29:11 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/pzl111/ip.git to complete... -Sep 05, 2023 2:29:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/awhb/ip.git (master)... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/gongg21/ip.git completed! -Sep 05, 2023 2:29:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/awhb/ip.git (master)... -Sep 05, 2023 2:29:12 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/awhb/ip.git (master) completed! -Sep 05, 2023 2:29:12 PM reposense.report.ReportGenerator analyzeRepos -INFO: [88/480] Analyzing https://github.com/zacwong2151/ip.git (master)... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/teozern1/ip.git... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nabonitasen/ip.git completed! -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nicolengk/ip.git (master)... +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/teozern1/ip.git to complete... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Elijah5399/ip.git... -Sep 05, 2023 2:29:12 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/zacwong2151/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/zacwong2151/ip.git (master)... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nicolengk/ip.git (master)... +Sep 06, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nicolengk/ip.git (master) completed! +Sep 06, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [76/480] Analyzing https://github.com/newway1814/ip.git (master)... +Sep 06, 2023 1:13:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kanna-1/ip.git (master)... +Sep 06, 2023 1:13:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/newway1814/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/newway1814/ip.git (master)... +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nabonitasen/ip.git completed! +Sep 06, 2023 1:13:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kanna-1/ip.git (master)... +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/erohsikivar/ip.git completed! -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Elijah5399/ip.git to complete... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kanna-1/ip.git (master) completed! +Sep 06, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [77/480] Analyzing https://github.com/glenngnng/ip.git (master)... +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Elijah5399/ip.git... +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nicleongyj/ip.git... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Elijah5399/ip.git to complete... +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/nicleongyj/ip.git to complete... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/glenngnng/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/glenngnng/ip.git (master)... +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/pzl111/ip.git completed! -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/WinSheng1/ip.git... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/WinSheng1/ip.git to complete... -Sep 05, 2023 2:29:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ruth-lim/ip.git (master)... -Sep 05, 2023 2:29:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ruth-lim/ip.git (master)... -Sep 05, 2023 2:29:12 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ruth-lim/ip.git (master) completed! -Sep 05, 2023 2:29:12 PM reposense.report.ReportGenerator analyzeRepos -INFO: [89/480] Analyzing https://github.com/xCOLOURx/ip.git (master)... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/teozern1/ip.git completed! -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/WinSheng1/ip.git to complete... +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ryamgoh/ip.git... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Elijah5399/ip.git completed! -Sep 05, 2023 2:29:12 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/xCOLOURx/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/xCOLOURx/ip.git (master)... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yucongkoo/ip.git... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ryamgoh/ip.git to complete... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yucongkoo/ip.git to complete... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Elijah5399/ip.git completed! +Sep 06, 2023 1:13:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/newway1814/ip.git (master)... +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/nicleongyj/ip.git completed! -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yucongkoo/ip.git... +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Chen-Kuei/ip.git... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/glenngnng/ip.git (master)... +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Chen-Kuei/ip.git to complete... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yucongkoo/ip.git to complete... +Sep 06, 2023 1:13:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/newway1814/ip.git (master)... +Sep 06, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/newway1814/ip.git (master) completed! +Sep 06, 2023 1:13:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/glenngnng/ip.git (master)... +Sep 06, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/glenngnng/ip.git (master) completed! +Sep 06, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [78/480] Analyzing https://github.com/zsh-eng/ip.git (master)... +Sep 06, 2023 1:13:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [79/480] Analyzing https://github.com/LamJiuFong/ip.git (master)... +Sep 06, 2023 1:13:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/zsh-eng/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/zsh-eng/ip.git (master)... +Sep 06, 2023 1:13:08 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LamJiuFong/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LamJiuFong/ip.git (master)... +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/WinSheng1/ip.git completed! -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ryamgoh/ip.git completed! +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/conradsoon/ip.git... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/conradsoon/ip.git to complete... -Sep 05, 2023 2:29:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zacwong2151/ip.git (master)... -Sep 05, 2023 2:29:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zacwong2151/ip.git (master)... -Sep 05, 2023 2:29:12 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zacwong2151/ip.git (master) completed! -Sep 05, 2023 2:29:12 PM reposense.report.ReportGenerator analyzeRepos -INFO: [90/480] Analyzing https://github.com/Zjinnnn/ip.git (master)... -Sep 05, 2023 2:29:12 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Zjinnnn/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Zjinnnn/ip.git (master)... -Sep 05, 2023 2:29:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/xCOLOURx/ip.git (master)... -Sep 05, 2023 2:29:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/xCOLOURx/ip.git (master)... -Sep 05, 2023 2:29:12 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/xCOLOURx/ip.git (master) completed! -Sep 05, 2023 2:29:12 PM reposense.report.ReportGenerator analyzeRepos -INFO: [91/480] Analyzing https://github.com/teoks0199/ip.git (master)... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yucongkoo/ip.git completed! -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ryamgoh/ip.git completed! -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/GSgiansen/ip.git... -Sep 05, 2023 2:29:12 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/GSgiansen/ip.git to complete... +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Chen-Kuei/ip.git completed! -Sep 05, 2023 2:29:13 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/teoks0199/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/teoks0199/ip.git (master)... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/et-irl/ip.git... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/et-irl/ip.git to complete... +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yucongkoo/ip.git completed! +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/marioalvaro/ip.git... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/marioalvaro/ip.git to complete... +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/conradsoon/ip.git completed! -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/GSgiansen/ip.git to complete... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Seonlo99/ip.git... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/marioalvaro/ip.git to complete... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/et-irl/ip.git to complete... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Seonlo99/ip.git to complete... -Sep 05, 2023 2:29:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Zjinnnn/ip.git (master)... -Sep 05, 2023 2:29:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Zjinnnn/ip.git (master)... -Sep 05, 2023 2:29:13 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Zjinnnn/ip.git (master) completed! -Sep 05, 2023 2:29:13 PM reposense.report.ReportGenerator analyzeRepos -INFO: [92/480] Analyzing https://github.com/pangyyen/ip.git (master)... -Sep 05, 2023 2:29:13 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/pangyyen/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/pangyyen/ip.git (master)... -Sep 05, 2023 2:29:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/teoks0199/ip.git (master)... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/GSgiansen/ip.git completed! -Sep 05, 2023 2:29:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/teoks0199/ip.git (master)... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/et-irl/ip.git completed! -Sep 05, 2023 2:29:13 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/teoks0199/ip.git (master) completed! -Sep 05, 2023 2:29:13 PM reposense.report.ReportGenerator analyzeRepos -INFO: [93/480] Analyzing https://github.com/qz1004/ip.git (master)... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/marioalvaro/ip.git completed! -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Seonlo99/ip.git completed! -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/joel-foo/ip.git... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LamJiuFong/ip.git (master)... +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/joel-foo/ip.git to complete... +Sep 06, 2023 1:13:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LamJiuFong/ip.git (master)... +Sep 06, 2023 1:13:08 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LamJiuFong/ip.git (master) completed! +Sep 06, 2023 1:13:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [80/480] Analyzing https://github.com/mingyuanc/ip.git (master)... +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/et-irl/ip.git completed! +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tim-pipi/ip.git... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/marioalvaro/ip.git completed! +Sep 06, 2023 1:13:08 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/mingyuanc/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/mingyuanc/ip.git (master)... +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tim-pipi/ip.git to complete... +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/marcellaantania/ip.git... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/marcellaantania/ip.git to complete... +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Seonlo99/ip.git completed! +Sep 06, 2023 1:13:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zsh-eng/ip.git (master)... +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/brendanneojw/ip.git... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tim-pipi/ip.git to complete... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/joel-foo/ip.git to complete... -Sep 05, 2023 2:29:13 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/qz1004/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/qz1004/ip.git (master)... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/brendanneojw/ip.git to complete... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/marcellaantania/ip.git to complete... -Sep 05, 2023 2:29:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/pangyyen/ip.git (master)... -Sep 05, 2023 2:29:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/pangyyen/ip.git (master)... -Sep 05, 2023 2:29:13 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/pangyyen/ip.git (master) completed! -Sep 05, 2023 2:29:13 PM reposense.report.ReportGenerator analyzeRepos -INFO: [94/480] Analyzing https://github.com/Mahidharah/ip.git (master)... -Sep 05, 2023 2:29:13 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Mahidharah/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Mahidharah/ip.git (master)... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tim-pipi/ip.git completed! -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/brendanneojw/ip.git completed! -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zsh-eng/ip.git (master)... +Sep 06, 2023 1:13:08 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zsh-eng/ip.git (master) completed! +Sep 06, 2023 1:13:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [81/480] Analyzing https://github.com/GlendaChong/ip.git (master)... +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/joel-foo/ip.git completed! +Sep 06, 2023 1:13:08 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/GlendaChong/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/GlendaChong/ip.git (master)... +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/li-rongzhi/ip.git... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/KamiliArsyad/ip.git... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:08 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/li-rongzhi/ip.git to complete... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/marcellaantania/ip.git completed! -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/KamiliArsyad/ip.git... +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/KamiliArsyad/ip.git to complete... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/joel-foo/ip.git completed! -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/brendanneojw/ip.git completed! +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/seraphimstreets/ip.git... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/trgao/ip.git... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/seraphimstreets/ip.git to complete... -Sep 05, 2023 2:29:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/trgao/ip.git to complete... -Sep 05, 2023 2:29:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/qz1004/ip.git (master)... -Sep 05, 2023 2:29:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/qz1004/ip.git (master)... -Sep 05, 2023 2:29:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Mahidharah/ip.git (master)... -Sep 05, 2023 2:29:14 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/qz1004/ip.git (master) completed! -Sep 05, 2023 2:29:14 PM reposense.report.ReportGenerator analyzeRepos -INFO: [95/480] Analyzing https://github.com/nixonwidjaja/ip.git (master)... -Sep 05, 2023 2:29:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Mahidharah/ip.git (master)... -Sep 05, 2023 2:29:14 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Mahidharah/ip.git (master) completed! -Sep 05, 2023 2:29:14 PM reposense.report.ReportGenerator analyzeRepos -INFO: [96/480] Analyzing https://github.com/ravern/ip.git (master)... -Sep 05, 2023 2:29:14 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nixonwidjaja/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nixonwidjaja/ip.git (master)... -Sep 05, 2023 2:29:14 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ravern/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ravern/ip.git (master)... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/li-rongzhi/ip.git completed! -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/trgao/ip.git... +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/trgao/ip.git to complete... +Sep 06, 2023 1:13:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/mingyuanc/ip.git (master)... +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/KamiliArsyad/ip.git completed! -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lilozz2/ip.git... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jean-cq/ip.git... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/mingyuanc/ip.git (master)... +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lilozz2/ip.git to complete... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:09 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/mingyuanc/ip.git (master) completed! +Sep 06, 2023 1:13:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [82/480] Analyzing https://github.com/starrylight99/ip.git (master)... +Sep 06, 2023 1:13:09 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/starrylight99/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/starrylight99/ip.git (master)... +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/seraphimstreets/ip.git completed! -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/trgao/ip.git completed! -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jean-cq/ip.git... +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jean-cq/ip.git to complete... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/GlendaChong/ip.git (master)... +Sep 06, 2023 1:13:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/GlendaChong/ip.git (master)... +Sep 06, 2023 1:13:09 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/GlendaChong/ip.git (master) completed! +Sep 06, 2023 1:13:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [83/480] Analyzing https://github.com/AustinHuang1203/ip.git (master)... +Sep 06, 2023 1:13:09 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AustinHuang1203/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AustinHuang1203/ip.git (master)... +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/trgao/ip.git completed! +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jedkohjk/ip.git... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yytan25/ip.git... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jedkohjk/ip.git to complete... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/starrylight99/ip.git (master)... +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lilozz2/ip.git completed! +Sep 06, 2023 1:13:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/starrylight99/ip.git (master)... +Sep 06, 2023 1:13:09 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/starrylight99/ip.git (master) completed! +Sep 06, 2023 1:13:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [84/480] Analyzing https://github.com/ruth-lim/ip.git (master)... +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yytan25/ip.git... +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yytan25/ip.git to complete... -Sep 05, 2023 2:29:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nixonwidjaja/ip.git (master)... -Sep 05, 2023 2:29:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nixonwidjaja/ip.git (master)... -Sep 05, 2023 2:29:14 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nixonwidjaja/ip.git (master) completed! -Sep 05, 2023 2:29:14 PM reposense.report.ReportGenerator analyzeRepos -INFO: [97/480] Analyzing https://github.com/bobscodedump/ip.git (master)... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jean-cq/ip.git completed! -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lilozz2/ip.git completed! -Sep 05, 2023 2:29:14 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/bobscodedump/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/bobscodedump/ip.git (master)... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:09 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ruth-lim/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ruth-lim/ip.git (master)... +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ryantzr1/ip.git... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yytan25/ip.git completed! -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ryantzr1/ip.git to complete... +Sep 06, 2023 1:13:09 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jedkohjk/ip.git completed! -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/maypfv/ip.git... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/maypfv/ip.git to complete... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tim-pipi/ip.git completed! +Sep 06, 2023 1:13:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AustinHuang1203/ip.git (master)... +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/TohLiYuan/ip.git... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/maypfv/ip.git to complete... +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/TohLiYuan/ip.git to complete... +Sep 06, 2023 1:13:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AustinHuang1203/ip.git (master)... +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yytan25/ip.git completed! +Sep 06, 2023 1:13:10 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AustinHuang1203/ip.git (master) completed! +Sep 06, 2023 1:13:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [85/480] Analyzing https://github.com/seewhyjay/ip.git (master)... +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/JizhuoChen/ip.git... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ryantzr1/ip.git to complete... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/seewhyjay/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/seewhyjay/ip.git (master)... +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/JizhuoChen/ip.git to complete... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/TohLiYuan/ip.git to complete... -Sep 05, 2023 2:29:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ravern/ip.git (master)... -Sep 05, 2023 2:29:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ravern/ip.git (master)... -Sep 05, 2023 2:29:14 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ravern/ip.git (master) completed! -Sep 05, 2023 2:29:14 PM reposense.report.ReportGenerator analyzeRepos -INFO: [98/480] Analyzing https://github.com/jason-raiin/ip.git (master)... -Sep 05, 2023 2:29:14 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jason-raiin/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jason-raiin/ip.git (master)... -Sep 05, 2023 2:29:14 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ryantzr1/ip.git completed! -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ChongWeiJie29/ip.git... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/maypfv/ip.git completed! -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/TohLiYuan/ip.git completed! -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ChongWeiJie29/ip.git to complete... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/TohLiYuan/ip.git completed! +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Goh-Li-Ting/ip.git... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/JizhuoChen/ip.git completed! -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kristayeo/ip.git... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Goh-Li-Ting/ip.git to complete... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/maypfv/ip.git completed! +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kristayeo/ip.git... +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/JizhuoChen/ip.git completed! +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/kristayeo/ip.git to complete... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/derekjxtan/ip.git... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ChongWeiJie29/ip.git completed! +Sep 06, 2023 1:13:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/seewhyjay/ip.git (master)... +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/derekjxtan/ip.git to complete... -Sep 05, 2023 2:29:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/bobscodedump/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/bobscodedump/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/bobscodedump/ip.git (master) completed! -Sep 05, 2023 2:29:15 PM reposense.report.ReportGenerator analyzeRepos -INFO: [99/480] Analyzing https://github.com/LuahJunYang/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LuahJunYang/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LuahJunYang/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LuahJunYang/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jason-raiin/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LuahJunYang/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LuahJunYang/ip.git (master) completed! -Sep 05, 2023 2:29:15 PM reposense.report.ReportGenerator analyzeRepos -INFO: [100/480] Analyzing https://github.com/ryanozx/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jason-raiin/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jason-raiin/ip.git (master) completed! -Sep 05, 2023 2:29:15 PM reposense.report.ReportGenerator analyzeRepos -INFO: [101/480] Analyzing https://github.com/techjay-c/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ryanozx/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ryanozx/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/techjay-c/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/techjay-c/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Goh-Li-Ting/ip.git completed! -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/shashahchk/ip.git... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kristayeo/ip.git completed! -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/shashahchk/ip.git to complete... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ChongWeiJie29/ip.git completed! -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/seewhyjay/ip.git (master)... +Sep 06, 2023 1:13:10 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/seewhyjay/ip.git (master) completed! +Sep 06, 2023 1:13:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [86/480] Analyzing https://github.com/limzhenwy/ip.git (master)... +Sep 06, 2023 1:13:10 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/limzhenwy/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/limzhenwy/ip.git (master)... +Sep 06, 2023 1:13:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ruth-lim/ip.git (master)... +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Goh-Li-Ting/ip.git completed! +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Chandan8186/ip.git... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Chandan8186/ip.git to complete... +Sep 06, 2023 1:13:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ruth-lim/ip.git (master)... +Sep 06, 2023 1:13:10 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ruth-lim/ip.git (master) completed! +Sep 06, 2023 1:13:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [87/480] Analyzing https://github.com/xCOLOURx/ip.git (master)... +Sep 06, 2023 1:13:10 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/xCOLOURx/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/xCOLOURx/ip.git (master)... +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kristayeo/ip.git completed! +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/alyssaongyx/ip.git... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/alyssaongyx/ip.git to complete... +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/derekjxtan/ip.git completed! -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Chandan8186/ip.git to complete... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AndrewJanong/ip.git... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/alyssaongyx/ip.git to complete... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AndrewJanong/ip.git to complete... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/shashahchk/ip.git completed! -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AndrewJanong/ip.git to complete... +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Kailash201/ip.git... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Kailash201/ip.git to complete... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/limzhenwy/ip.git (master)... +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Chandan8186/ip.git completed! -Sep 05, 2023 2:29:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/techjay-c/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ryanozx/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/alyssaongyx/ip.git completed! -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AndrewJanong/ip.git completed! -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/limzhenwy/ip.git (master)... +Sep 06, 2023 1:13:11 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/limzhenwy/ip.git (master) completed! +Sep 06, 2023 1:13:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [88/480] Analyzing https://github.com/zacwong2151/ip.git (master)... +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/laurenlim2112/ip.git... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/laurenlim2112/ip.git to complete... +Sep 06, 2023 1:13:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/zacwong2151/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/zacwong2151/ip.git (master)... +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/alyssaongyx/ip.git completed! +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lambraydon/ip.git... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/sk2001git/ip.git... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sk2001git/ip.git to complete... -Sep 05, 2023 2:29:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/techjay-c/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ryanozx/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/techjay-c/ip.git (master) completed! -Sep 05, 2023 2:29:15 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ryanozx/ip.git (master) completed! -Sep 05, 2023 2:29:15 PM reposense.report.ReportGenerator analyzeRepos -INFO: [102/480] Analyzing https://github.com/HEEaZ/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.report.ReportGenerator analyzeRepos -INFO: [103/480] Analyzing https://github.com/tiongjjyi/ip.git (master)... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lambraydon/ip.git to complete... -Sep 05, 2023 2:29:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/laurenlim2112/ip.git to complete... -Sep 05, 2023 2:29:15 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tiongjjyi/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tiongjjyi/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/HEEaZ/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/HEEaZ/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AndrewJanong/ip.git completed! +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/sk2001git/ip.git... +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Kailash201/ip.git completed! -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sk2001git/ip.git to complete... +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/chonguschonguschongus/ip.git... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/chonguschonguschongus/ip.git to complete... -Sep 05, 2023 2:29:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tiongjjyi/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tiongjjyi/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tiongjjyi/ip.git (master) completed! -Sep 05, 2023 2:29:16 PM reposense.report.ReportGenerator analyzeRepos -INFO: [104/480] Analyzing https://github.com/dom-buri/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/HEEaZ/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/xCOLOURx/ip.git (master)... +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/laurenlim2112/ip.git completed! -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lambraydon/ip.git completed! -Sep 05, 2023 2:29:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/HEEaZ/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/HEEaZ/ip.git (master) completed! -Sep 05, 2023 2:29:16 PM reposense.report.ReportGenerator analyzeRepos -INFO: [105/480] Analyzing https://github.com/Vanessamae23/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/xCOLOURx/ip.git (master)... +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lshaoqin/ip.git... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:11 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/xCOLOURx/ip.git (master) completed! +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lshaoqin/ip.git to complete... +Sep 06, 2023 1:13:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [89/480] Analyzing https://github.com/Zjinnnn/ip.git (master)... +Sep 06, 2023 1:13:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Zjinnnn/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Zjinnnn/ip.git (master)... +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lambraydon/ip.git completed! +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/peasantbird/ip.git... -Sep 05, 2023 2:29:16 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dom-buri/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dom-buri/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/peasantbird/ip.git to complete... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lshaoqin/ip.git to complete... -Sep 05, 2023 2:29:16 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Vanessamae23/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Vanessamae23/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/sk2001git/ip.git completed! -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/WangCheng0116/ip.git... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/WangCheng0116/ip.git to complete... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zacwong2151/ip.git (master)... +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/chonguschonguschongus/ip.git completed! -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/teozhengyang/ip.git... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zacwong2151/ip.git (master)... +Sep 06, 2023 1:13:11 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zacwong2151/ip.git (master) completed! +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/teozhengyang/ip.git to complete... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [90/480] Analyzing https://github.com/awhb/ip.git (master)... +Sep 06, 2023 1:13:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/awhb/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/awhb/ip.git (master)... +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lshaoqin/ip.git completed! -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/peasantbird/ip.git completed! -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/chewjh1234/ip.git... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:11 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/chewjh1234/ip.git to complete... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/peasantbird/ip.git completed! +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/elaineshijie/ip.git... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/elaineshijie/ip.git to complete... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/WangCheng0116/ip.git completed! -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lynnlow175/ip.git... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lynnlow175/ip.git to complete... -Sep 05, 2023 2:29:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/dom-buri/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/dom-buri/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/dom-buri/ip.git (master) completed! -Sep 05, 2023 2:29:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Vanessamae23/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.report.ReportGenerator analyzeRepos -INFO: [106/480] Analyzing https://github.com/fuyiqiao/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Vanessamae23/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Vanessamae23/ip.git (master) completed! -Sep 05, 2023 2:29:16 PM reposense.report.ReportGenerator analyzeRepos -INFO: [107/480] Analyzing https://github.com/spatuly/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/fuyiqiao/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/fuyiqiao/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/teozhengyang/ip.git completed! -Sep 05, 2023 2:29:16 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/spatuly/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/spatuly/ip.git (master)... -Sep 05, 2023 2:29:16 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lordidiot/ip.git... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lordidiot/ip.git to complete... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/elaineshijie/ip.git completed! -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/chew01/ip.git... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Zjinnnn/ip.git (master)... +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/chewjh1234/ip.git completed! -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/RSXIX/ip.git... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/chew01/ip.git... +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/chew01/ip.git to complete... +Sep 06, 2023 1:13:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Zjinnnn/ip.git (master)... +Sep 06, 2023 1:13:12 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Zjinnnn/ip.git (master) completed! +Sep 06, 2023 1:13:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [91/480] Analyzing https://github.com/teoks0199/ip.git (master)... +Sep 06, 2023 1:13:12 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/teoks0199/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/teoks0199/ip.git (master)... +Sep 06, 2023 1:13:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/awhb/ip.git (master)... +Sep 06, 2023 1:13:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/awhb/ip.git (master)... +Sep 06, 2023 1:13:12 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/awhb/ip.git (master) completed! +Sep 06, 2023 1:13:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [92/480] Analyzing https://github.com/qz1004/ip.git (master)... +Sep 06, 2023 1:13:12 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/qz1004/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/qz1004/ip.git (master)... +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lynnlow175/ip.git completed! -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/RSXIX/ip.git... +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/RSXIX/ip.git to complete... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/chew01/ip.git to complete... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/elaineshijie/ip.git completed! +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/juliusgambe/ip.git... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/juliusgambe/ip.git to complete... -Sep 05, 2023 2:29:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/fuyiqiao/ip.git (master)... -Sep 05, 2023 2:29:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/fuyiqiao/ip.git (master)... -Sep 05, 2023 2:29:17 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/fuyiqiao/ip.git (master) completed! -Sep 05, 2023 2:29:17 PM reposense.report.ReportGenerator analyzeRepos -INFO: [108/480] Analyzing https://github.com/Kb-Tay/ip.git (master)... -Sep 05, 2023 2:29:17 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Kb-Tay/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Kb-Tay/ip.git (master)... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lordidiot/ip.git completed! -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/zhonghan721/ip.git... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/chew01/ip.git completed! -Sep 05, 2023 2:29:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/spatuly/ip.git (master)... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/RSXIX/ip.git completed! -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zhonghan721/ip.git to complete... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/zhonghan721/ip.git... +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/juliusgambe/ip.git to complete... +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/WZWren/ip.git... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/WZWren/ip.git to complete... -Sep 05, 2023 2:29:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/spatuly/ip.git (master)... -Sep 05, 2023 2:29:17 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/spatuly/ip.git (master) completed! -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/juliusgambe/ip.git completed! -Sep 05, 2023 2:29:17 PM reposense.report.ReportGenerator analyzeRepos -INFO: [109/480] Analyzing https://github.com/beatricecst/ip.git (master)... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zhonghan721/ip.git to complete... +Sep 06, 2023 1:13:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/teoks0199/ip.git (master)... +Sep 06, 2023 1:13:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/teoks0199/ip.git (master)... +Sep 06, 2023 1:13:12 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/teoks0199/ip.git (master) completed! +Sep 06, 2023 1:13:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [93/480] Analyzing https://github.com/Mahidharah/ip.git (master)... +Sep 06, 2023 1:13:12 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Mahidharah/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Mahidharah/ip.git (master)... +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/RSXIX/ip.git completed! +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/inezkok/ip.git... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wasjoe1/ip.git... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/juliusgambe/ip.git completed! +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/inezkok/ip.git to complete... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wasjoe1/ip.git to complete... -Sep 05, 2023 2:29:17 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/beatricecst/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/beatricecst/ip.git (master)... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/zhonghan721/ip.git completed! -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kokrui/ip.git... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kokrui/ip.git to complete... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/WZWren/ip.git completed! -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wasjoe1/ip.git completed! -Sep 05, 2023 2:29:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/beatricecst/ip.git (master)... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wasjoe1/ip.git... +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kokrui/ip.git... +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jinyang628/ip.git... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/qz1004/ip.git (master)... +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jinyang628/ip.git to complete... +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kokrui/ip.git to complete... +Sep 06, 2023 1:13:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wasjoe1/ip.git to complete... +Sep 06, 2023 1:13:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/qz1004/ip.git (master)... +Sep 06, 2023 1:13:13 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/qz1004/ip.git (master) completed! +Sep 06, 2023 1:13:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [94/480] Analyzing https://github.com/pangyyen/ip.git (master)... +Sep 06, 2023 1:13:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Mahidharah/ip.git (master)... +Sep 06, 2023 1:13:13 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/pangyyen/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/pangyyen/ip.git (master)... +Sep 06, 2023 1:13:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Mahidharah/ip.git (master)... +Sep 06, 2023 1:13:13 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Mahidharah/ip.git (master) completed! +Sep 06, 2023 1:13:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [95/480] Analyzing https://github.com/jason-raiin/ip.git (master)... +Sep 06, 2023 1:13:13 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jason-raiin/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jason-raiin/ip.git (master)... +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/inezkok/ip.git completed! -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wasjoe1/ip.git completed! +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nananakx-x/ip.git... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jinyang628/ip.git to complete... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nananakx-x/ip.git to complete... -Sep 05, 2023 2:29:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/beatricecst/ip.git (master)... -Sep 05, 2023 2:29:17 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/beatricecst/ip.git (master) completed! -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kokrui/ip.git completed! +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ylyma/ip.git... -Sep 05, 2023 2:29:17 PM reposense.report.ReportGenerator analyzeRepos -INFO: [110/480] Analyzing https://github.com/tanshiyu1999/ip.git (master)... -Sep 05, 2023 2:29:17 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nananakx-x/ip.git to complete... +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ylyma/ip.git to complete... -Sep 05, 2023 2:29:17 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tanshiyu1999/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tanshiyu1999/ip.git (master)... -Sep 05, 2023 2:29:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Kb-Tay/ip.git (master)... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kokrui/ip.git completed! -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AnnabelTing/ip.git... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AnnabelTing/ip.git to complete... -Sep 05, 2023 2:29:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Kb-Tay/ip.git (master)... -Sep 05, 2023 2:29:18 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Kb-Tay/ip.git (master) completed! -Sep 05, 2023 2:29:18 PM reposense.report.ReportGenerator analyzeRepos -INFO: [111/480] Analyzing https://github.com/tanveersingh10/ip.git (master)... -Sep 05, 2023 2:29:18 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tanveersingh10/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tanveersingh10/ip.git (master)... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jinyang628/ip.git completed! -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AnnabelTing/ip.git... +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/timetraveller-123/ip.git... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nananakx-x/ip.git completed! -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/timetraveller-123/ip.git to complete... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LicongHuang/ip.git... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AnnabelTing/ip.git to complete... +Sep 06, 2023 1:13:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/pangyyen/ip.git (master)... +Sep 06, 2023 1:13:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/pangyyen/ip.git (master)... +Sep 06, 2023 1:13:13 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/pangyyen/ip.git (master) completed! +Sep 06, 2023 1:13:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jason-raiin/ip.git (master)... +Sep 06, 2023 1:13:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [96/480] Analyzing https://github.com/ravern/ip.git (master)... +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ylyma/ip.git completed! -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LicongHuang/ip.git to complete... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Jweng88/ip.git... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Jweng88/ip.git to complete... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jason-raiin/ip.git (master)... +Sep 06, 2023 1:13:13 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ravern/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ravern/ip.git (master)... +Sep 06, 2023 1:13:13 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jason-raiin/ip.git (master) completed! +Sep 06, 2023 1:13:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [97/480] Analyzing https://github.com/nixonwidjaja/ip.git (master)... +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/timetraveller-123/ip.git completed! +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nananakx-x/ip.git completed! +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AnnabelTing/ip.git completed! -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LicongHuang/ip.git... +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Jweng88/ip.git... +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LicongHuang/ip.git to complete... +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/EricXiong420/ip.git... -Sep 05, 2023 2:29:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tanshiyu1999/ip.git (master)... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/EricXiong420/ip.git to complete... -Sep 05, 2023 2:29:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tanshiyu1999/ip.git (master)... -Sep 05, 2023 2:29:18 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tanshiyu1999/ip.git (master) completed! -Sep 05, 2023 2:29:18 PM reposense.report.ReportGenerator analyzeRepos -INFO: [112/480] Analyzing https://github.com/thienmy0/ip.git (master)... -Sep 05, 2023 2:29:18 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/thienmy0/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/thienmy0/ip.git (master)... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/timetraveller-123/ip.git completed! -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Jweng88/ip.git to complete... +Sep 06, 2023 1:13:13 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nixonwidjaja/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nixonwidjaja/ip.git (master)... +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jovkusuma/ip.git... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/EricXiong420/ip.git to complete... +Sep 06, 2023 1:13:13 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jovkusuma/ip.git to complete... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Jweng88/ip.git completed! +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/LicongHuang/ip.git completed! -Sep 05, 2023 2:29:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tanveersingh10/ip.git (master)... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/bhnuka/ip.git... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/EricXiong420/ip.git completed! +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/bhnuka/ip.git to complete... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Jweng88/ip.git completed! -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jovkusuma/ip.git completed! +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/J-hta-n/ip.git... -Sep 05, 2023 2:29:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tanveersingh10/ip.git (master)... -Sep 05, 2023 2:29:18 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tanveersingh10/ip.git (master) completed! -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/J-hta-n/ip.git to complete... -Sep 05, 2023 2:29:18 PM reposense.report.ReportGenerator analyzeRepos -INFO: [113/480] Analyzing https://github.com/s0ngyang/ip.git (master)... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/EricXiong420/ip.git completed! -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Tim-Siu/ip.git... -Sep 05, 2023 2:29:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Tim-Siu/ip.git to complete... -Sep 05, 2023 2:29:18 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/s0ngyang/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/s0ngyang/ip.git (master)... -Sep 05, 2023 2:29:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/thienmy0/ip.git (master)... -Sep 05, 2023 2:29:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/thienmy0/ip.git (master)... -Sep 05, 2023 2:29:18 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/thienmy0/ip.git (master) completed! -Sep 05, 2023 2:29:18 PM reposense.report.ReportGenerator analyzeRepos -INFO: [114/480] Analyzing https://github.com/ldinghan/ip.git (master)... -Sep 05, 2023 2:29:18 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ldinghan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ldinghan/ip.git (master)... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jovkusuma/ip.git completed! -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yarnmengnus/ip.git... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yarnmengnus/ip.git to complete... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/bhnuka/ip.git completed! -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Tim-Siu/ip.git to complete... +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/J-hta-n/ip.git to complete... +Sep 06, 2023 1:13:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nixonwidjaja/ip.git (master)... +Sep 06, 2023 1:13:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nixonwidjaja/ip.git (master)... +Sep 06, 2023 1:13:14 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nixonwidjaja/ip.git (master) completed! +Sep 06, 2023 1:13:14 AM reposense.report.ReportGenerator analyzeRepos +INFO: [98/480] Analyzing https://github.com/techjay-c/ip.git (master)... +Sep 06, 2023 1:13:14 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/techjay-c/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/techjay-c/ip.git (master)... +Sep 06, 2023 1:13:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ravern/ip.git (master)... +Sep 06, 2023 1:13:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ravern/ip.git (master)... +Sep 06, 2023 1:13:14 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ravern/ip.git (master) completed! +Sep 06, 2023 1:13:14 AM reposense.report.ReportGenerator analyzeRepos +INFO: [99/480] Analyzing https://github.com/bobscodedump/ip.git (master)... +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yarnmengnus/ip.git completed! +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/sopa301/ip.git... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sopa301/ip.git to complete... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Tim-Siu/ip.git completed! -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/J-hta-n/ip.git completed! -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sopa301/ip.git to complete... +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ngeeyonglim/ip.git... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/flexibo/ip.git... -Sep 05, 2023 2:29:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/s0ngyang/ip.git (master)... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ngeeyonglim/ip.git to complete... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/flexibo/ip.git to complete... -Sep 05, 2023 2:29:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/s0ngyang/ip.git (master)... -Sep 05, 2023 2:29:19 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/s0ngyang/ip.git (master) completed! -Sep 05, 2023 2:29:19 PM reposense.report.ReportGenerator analyzeRepos -INFO: [115/480] Analyzing https://github.com/ryanongwx/ip.git (master)... -Sep 05, 2023 2:29:19 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ryanongwx/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ryanongwx/ip.git (master)... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yarnmengnus/ip.git completed! -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Tim-Siu/ip.git completed! +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/bhnuka/ip.git completed! +Sep 06, 2023 1:13:14 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/bobscodedump/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/bobscodedump/ip.git (master)... +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/flexibo/ip.git... +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ItsTYtan/ip.git... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/flexibo/ip.git to complete... +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ItsTYtan/ip.git to complete... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/techjay-c/ip.git (master)... +Sep 06, 2023 1:13:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/techjay-c/ip.git (master)... +Sep 06, 2023 1:13:14 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/techjay-c/ip.git (master) completed! +Sep 06, 2023 1:13:14 AM reposense.report.ReportGenerator analyzeRepos +INFO: [100/480] Analyzing https://github.com/ryanozx/ip.git (master)... +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/flexibo/ip.git completed! +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ngeeyonglim/ip.git completed! +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/sopa301/ip.git completed! -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/javinchua/ip.git... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/javinchua/ip.git to complete... -Sep 05, 2023 2:29:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ldinghan/ip.git (master)... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/flexibo/ip.git completed! -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/amosting/ip.git... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/amosting/ip.git to complete... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ngeeyonglim/ip.git completed! -Sep 05, 2023 2:29:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ldinghan/ip.git (master)... -Sep 05, 2023 2:29:19 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ldinghan/ip.git (master) completed! -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ryanozx/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ryanozx/ip.git (master)... +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Cleon2/ip.git... -Sep 05, 2023 2:29:19 PM reposense.report.ReportGenerator analyzeRepos -INFO: [116/480] Analyzing https://github.com/feifeiraindrops/ip.git (master)... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Cleon2/ip.git to complete... -Sep 05, 2023 2:29:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ryanongwx/ip.git (master)... -Sep 05, 2023 2:29:19 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/feifeiraindrops/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/feifeiraindrops/ip.git (master)... -Sep 05, 2023 2:29:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ryanongwx/ip.git (master)... -Sep 05, 2023 2:29:19 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ryanongwx/ip.git (master) completed! -Sep 05, 2023 2:29:19 PM reposense.report.ReportGenerator analyzeRepos -INFO: [117/480] Analyzing https://github.com/AlainS87/ip.git (master)... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:14 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ItsTYtan/ip.git completed! -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ketweeen/ip.git... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ketweeen/ip.git to complete... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/javinchua/ip.git completed! -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/bobscodedump/ip.git (master)... +Sep 06, 2023 1:13:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/bobscodedump/ip.git (master)... +Sep 06, 2023 1:13:15 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/bobscodedump/ip.git (master) completed! +Sep 06, 2023 1:13:15 AM reposense.report.ReportGenerator analyzeRepos +INFO: [101/480] Analyzing https://github.com/LuahJunYang/ip.git (master)... +Sep 06, 2023 1:13:15 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LuahJunYang/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LuahJunYang/ip.git (master)... +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/amosting/ip.git completed! +Sep 06, 2023 1:13:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LuahJunYang/ip.git (master)... +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/sudarshan2401/ip.git... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/javinchua/ip.git completed! +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ketweeen/ip.git completed! +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/sudarshan2401/ip.git to complete... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/amosting/ip.git completed! -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wui-hong/ip.git... -Sep 05, 2023 2:29:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wui-hong/ip.git to complete... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Cleon2/ip.git completed! -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wui-hong/ip.git... +Sep 06, 2023 1:13:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LuahJunYang/ip.git (master)... +Sep 06, 2023 1:13:15 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LuahJunYang/ip.git (master) completed! +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Respirayson/ip.git... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Respirayson/ip.git to complete... -Sep 05, 2023 2:29:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/feifeiraindrops/ip.git (master)... -Sep 05, 2023 2:29:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/feifeiraindrops/ip.git (master)... -Sep 05, 2023 2:29:20 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/feifeiraindrops/ip.git (master) completed! -Sep 05, 2023 2:29:20 PM reposense.report.ReportGenerator analyzeRepos -INFO: [118/480] Analyzing https://github.com/kwangthiag/ip.git (master)... -Sep 05, 2023 2:29:20 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kwangthiag/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kwangthiag/ip.git (master)... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ketweeen/ip.git completed! -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:15 AM reposense.report.ReportGenerator analyzeRepos +INFO: [102/480] Analyzing https://github.com/HEEaZ/ip.git (master)... +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wui-hong/ip.git to complete... +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Chrainx/ip.git... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sudarshan2401/ip.git completed! -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/shishirbychapur/ip.git... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Respirayson/ip.git to complete... +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Chrainx/ip.git to complete... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/shishirbychapur/ip.git to complete... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:15 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/HEEaZ/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/HEEaZ/ip.git (master)... +Sep 06, 2023 1:13:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ryanozx/ip.git (master)... +Sep 06, 2023 1:13:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ryanozx/ip.git (master)... +Sep 06, 2023 1:13:15 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ryanozx/ip.git (master) completed! +Sep 06, 2023 1:13:15 AM reposense.report.ReportGenerator analyzeRepos +INFO: [103/480] Analyzing https://github.com/dom-buri/ip.git (master)... +Sep 06, 2023 1:13:15 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dom-buri/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dom-buri/ip.git (master)... +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sudarshan2401/ip.git completed! +Sep 06, 2023 1:13:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/HEEaZ/ip.git (master)... +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/wui-hong/ip.git completed! -Sep 05, 2023 2:29:20 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AlainS87/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AlainS87/ip.git (master)... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Respirayson/ip.git completed! +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/shishirbychapur/ip.git... +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/sunzihan23/ip.git... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Chrainx/ip.git completed! +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/shishirbychapur/ip.git to complete... +Sep 06, 2023 1:13:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/HEEaZ/ip.git (master)... +Sep 06, 2023 1:13:15 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/HEEaZ/ip.git (master) completed! +Sep 06, 2023 1:13:15 AM reposense.report.ReportGenerator analyzeRepos +INFO: [104/480] Analyzing https://github.com/tiongjjyi/ip.git (master)... +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/sunzihan23/ip.git to complete... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Respirayson/ip.git completed! -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/wj331/ip.git... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wj331/ip.git to complete... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Chrainx/ip.git completed! -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tjch-o/ip.git... -Sep 05, 2023 2:29:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kwangthiag/ip.git (master)... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tjch-o/ip.git to complete... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:15 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tiongjjyi/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tiongjjyi/ip.git (master)... +Sep 06, 2023 1:13:15 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wj331/ip.git to complete... +Sep 06, 2023 1:13:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/dom-buri/ip.git (master)... +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sunzihan23/ip.git completed! +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/shishirbychapur/ip.git completed! -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/licongshen12/ip.git... -Sep 05, 2023 2:29:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kwangthiag/ip.git (master)... -Sep 05, 2023 2:29:20 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kwangthiag/ip.git (master) completed! -Sep 05, 2023 2:29:20 PM reposense.report.ReportGenerator analyzeRepos -INFO: [119/480] Analyzing https://github.com/songgthu/ip.git (master)... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/licongshen12/ip.git to complete... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sunzihan23/ip.git completed! -Sep 05, 2023 2:29:20 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/songgthu/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/songgthu/ip.git (master)... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/dom-buri/ip.git (master)... +Sep 06, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/dom-buri/ip.git (master) completed! +Sep 06, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepos +INFO: [105/480] Analyzing https://github.com/Vanessamae23/ip.git (master)... +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/mamayuan/ip.git... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/mamayuan/ip.git to complete... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/licongshen12/ip.git to complete... +Sep 06, 2023 1:13:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tiongjjyi/ip.git (master)... +Sep 06, 2023 1:13:16 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Vanessamae23/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Vanessamae23/ip.git (master)... +Sep 06, 2023 1:13:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tiongjjyi/ip.git (master)... +Sep 06, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tiongjjyi/ip.git (master) completed! +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/wj331/ip.git completed! -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepos +INFO: [106/480] Analyzing https://github.com/fuyiqiao/ip.git (master)... +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ong-wei-hong/ip.git... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ong-wei-hong/ip.git to complete... -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/fuyiqiao/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/fuyiqiao/ip.git (master)... +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tjch-o/ip.git completed! -Sep 05, 2023 2:29:20 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tanboonkhong/ip.git... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tanboonkhong/ip.git to complete... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/licongshen12/ip.git completed! -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/cbj252/ip.git... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/mamayuan/ip.git completed! -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/cbj252/ip.git... +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/licongshen12/ip.git completed! +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/cbj252/ip.git to complete... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AlfredBeNoel/ip.git... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AlfredBeNoel/ip.git to complete... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ong-wei-hong/ip.git completed! -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tanboonkhong/ip.git completed! +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/keaganpzh/ip.git... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/keaganpzh/ip.git to complete... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tanboonkhong/ip.git completed! -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ElginTZM/ip.git... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ElginTZM/ip.git to complete... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/fuyiqiao/ip.git (master)... +Sep 06, 2023 1:13:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/fuyiqiao/ip.git (master)... +Sep 06, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/fuyiqiao/ip.git (master) completed! +Sep 06, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepos +INFO: [107/480] Analyzing https://github.com/spatuly/ip.git (master)... +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/cbj252/ip.git completed! -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/spatuly/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/spatuly/ip.git (master)... +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LimJH2002/ip.git... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LimJH2002/ip.git to complete... -Sep 05, 2023 2:29:21 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/songgthu/ip.git (master)... -Sep 05, 2023 2:29:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/songgthu/ip.git (master)... -Sep 05, 2023 2:29:21 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/songgthu/ip.git (master) completed! -Sep 05, 2023 2:29:21 PM reposense.report.ReportGenerator analyzeRepos -INFO: [120/480] Analyzing https://github.com/elhy1999/ip.git (master)... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AlfredBeNoel/ip.git completed! -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/cmHuang777/ip.git... -Sep 05, 2023 2:29:21 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/elhy1999/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/elhy1999/ip.git (master)... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Vanessamae23/ip.git (master)... +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LimJH2002/ip.git to complete... +Sep 06, 2023 1:13:16 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/cmHuang777/ip.git to complete... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Vanessamae23/ip.git (master)... +Sep 06, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Vanessamae23/ip.git (master) completed! +Sep 06, 2023 1:13:16 AM reposense.report.ReportGenerator analyzeRepos +INFO: [108/480] Analyzing https://github.com/tanshiyu1999/ip.git (master)... +Sep 06, 2023 1:13:17 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tanshiyu1999/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tanshiyu1999/ip.git (master)... +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/keaganpzh/ip.git completed! -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/WeeeHung/ip.git... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/WeeeHung/ip.git to complete... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ElginTZM/ip.git completed! -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/WeeeHung/ip.git to complete... +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/xxiaoweii/ip.git... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/xxiaoweii/ip.git to complete... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/cmHuang777/ip.git completed! +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/LimJH2002/ip.git completed! -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/rayyan35p/ip.git... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/rayyan35p/ip.git to complete... -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/cmHuang777/ip.git completed! -Sep 05, 2023 2:29:21 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/dhruvir29/ip.git... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/rayyan35p/ip.git to complete... +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/dhruvir29/ip.git to complete... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/spatuly/ip.git (master)... +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/WeeeHung/ip.git completed! -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/spatuly/ip.git (master)... +Sep 06, 2023 1:13:17 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/spatuly/ip.git (master) completed! +Sep 06, 2023 1:13:17 AM reposense.report.ReportGenerator analyzeRepos +INFO: [109/480] Analyzing https://github.com/Kb-Tay/ip.git (master)... +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LinWanLeii/ip.git... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LinWanLeii/ip.git to complete... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Kb-Tay/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Kb-Tay/ip.git (master)... +Sep 06, 2023 1:13:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tanshiyu1999/ip.git (master)... +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/xxiaoweii/ip.git completed! -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Song-Mengfei/ip.git... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Song-Mengfei/ip.git to complete... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LinWanLeii/ip.git completed! -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jinyuan0425/ip.git... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jinyuan0425/ip.git to complete... -Sep 05, 2023 2:29:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/elhy1999/ip.git (master)... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dhruvir29/ip.git completed! -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tanshiyu1999/ip.git (master)... +Sep 06, 2023 1:13:17 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tanshiyu1999/ip.git (master) completed! +Sep 06, 2023 1:13:17 AM reposense.report.ReportGenerator analyzeRepos +INFO: [110/480] Analyzing https://github.com/beatricecst/ip.git (master)... +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/rayyan35p/ip.git completed! -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dhruvir29/ip.git completed! +Sep 06, 2023 1:13:17 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/beatricecst/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/beatricecst/ip.git (master)... +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jinyuan0425/ip.git... +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tiif/ip.git... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nicholascher/ip.git... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jinyuan0425/ip.git to complete... +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tiif/ip.git to complete... -Sep 05, 2023 2:29:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/elhy1999/ip.git (master)... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LinWanLeii/ip.git completed! +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nicholascher/ip.git... +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/nicholascher/ip.git to complete... -Sep 05, 2023 2:29:22 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/elhy1999/ip.git (master) completed! -Sep 05, 2023 2:29:22 PM reposense.report.ReportGenerator analyzeRepos -INFO: [121/480] Analyzing https://github.com/GohTengFong/ip.git (master)... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Song-Mengfei/ip.git completed! -Sep 05, 2023 2:29:22 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/GohTengFong/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/GohTengFong/ip.git (master)... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/hcs1203/ip.git... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:17 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/hcs1203/ip.git to complete... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jinyuan0425/ip.git completed! -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tiif/ip.git completed! +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/papataco14/ip.git... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jinyuan0425/ip.git completed! +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/papataco14/ip.git to complete... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nicholascher/ip.git completed! -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/KamJiaYue/ip.git... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tiif/ip.git completed! -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/KamJiaYue/ip.git to complete... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nicholascher/ip.git completed! +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/NereusWB922/ip.git... -Sep 05, 2023 2:29:22 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/NereusWB922/ip.git to complete... -Sep 05, 2023 2:29:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/GohTengFong/ip.git (master)... -Sep 05, 2023 2:29:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/GohTengFong/ip.git (master)... -Sep 05, 2023 2:29:22 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/GohTengFong/ip.git (master) completed! -Sep 05, 2023 2:29:22 PM reposense.report.ReportGenerator analyzeRepos -INFO: [122/480] Analyzing https://github.com/simbayippy/ip.git (master)... -Sep 05, 2023 2:29:22 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/simbayippy/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/simbayippy/ip.git (master)... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/beatricecst/ip.git (master)... +Sep 06, 2023 1:13:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/beatricecst/ip.git (master)... +Sep 06, 2023 1:13:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Kb-Tay/ip.git (master)... +Sep 06, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/beatricecst/ip.git (master) completed! +Sep 06, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepos +INFO: [111/480] Analyzing https://github.com/thienmy0/ip.git (master)... +Sep 06, 2023 1:13:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Kb-Tay/ip.git (master)... +Sep 06, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Kb-Tay/ip.git (master) completed! +Sep 06, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepos +INFO: [112/480] Analyzing https://github.com/tanveersingh10/ip.git (master)... +Sep 06, 2023 1:13:18 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/thienmy0/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/thienmy0/ip.git (master)... +Sep 06, 2023 1:13:18 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tanveersingh10/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tanveersingh10/ip.git (master)... +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/hcs1203/ip.git completed! -Sep 05, 2023 2:29:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AlainS87/ip.git (master)... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/PohSayKeong/ip.git... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/PohSayKeong/ip.git to complete... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/papataco14/ip.git completed! -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/KamJiaYue/ip.git completed! -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/NereusWB922/ip.git completed! +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ivyy-poison/ip.git... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jacobcuison/ip.git... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/KamJiaYue/ip.git completed! +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ivyy-poison/ip.git to complete... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jacobcuison/ip.git... +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/papataco14/ip.git completed! +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jacobcuison/ip.git to complete... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/NereusWB922/ip.git completed! -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ji-just-ji/ip.git... -Sep 05, 2023 2:29:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AlainS87/ip.git (master)... -Sep 05, 2023 2:29:23 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AlainS87/ip.git (master) completed! -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ji-just-ji/ip.git to complete... -Sep 05, 2023 2:29:23 PM reposense.report.ReportGenerator analyzeRepos -INFO: [123/480] Analyzing https://github.com/Khaleelur-Rahman/ip.git (master)... -Sep 05, 2023 2:29:23 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Khaleelur-Rahman/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Khaleelur-Rahman/ip.git (master)... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/thienmy0/ip.git (master)... +Sep 06, 2023 1:13:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/thienmy0/ip.git (master)... +Sep 06, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/thienmy0/ip.git (master) completed! +Sep 06, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepos +INFO: [113/480] Analyzing https://github.com/s0ngyang/ip.git (master)... +Sep 06, 2023 1:13:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tanveersingh10/ip.git (master)... +Sep 06, 2023 1:13:18 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/s0ngyang/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/s0ngyang/ip.git (master)... +Sep 06, 2023 1:13:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tanveersingh10/ip.git (master)... +Sep 06, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tanveersingh10/ip.git (master) completed! +Sep 06, 2023 1:13:18 AM reposense.report.ReportGenerator analyzeRepos +INFO: [114/480] Analyzing https://github.com/feifeiraindrops/ip.git (master)... +Sep 06, 2023 1:13:18 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/feifeiraindrops/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/feifeiraindrops/ip.git (master)... +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/PohSayKeong/ip.git completed! -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/kohkaijie/ip.git... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/kohkaijie/ip.git to complete... -Sep 05, 2023 2:29:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/simbayippy/ip.git (master)... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ivyy-poison/ip.git completed! -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jacobcuison/ip.git completed! -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ivyy-poison/ip.git completed! +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/rocketninja7/ip.git... -Sep 05, 2023 2:29:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/simbayippy/ip.git (master)... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/zekone/ip.git... -Sep 05, 2023 2:29:23 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/simbayippy/ip.git (master) completed! -Sep 05, 2023 2:29:23 PM reposense.report.ReportGenerator analyzeRepos -INFO: [124/480] Analyzing https://github.com/proto-aiken-13/ip.git (master)... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/rocketninja7/ip.git to complete... -Sep 05, 2023 2:29:23 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/proto-aiken-13/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/proto-aiken-13/ip.git (master)... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zekone/ip.git to complete... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ji-just-ji/ip.git completed! -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/rocketninja7/ip.git to complete... +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/markgcera/ip.git... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kohkaijie/ip.git completed! -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zekone/ip.git to complete... +Sep 06, 2023 1:13:18 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/markgcera/ip.git to complete... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/s0ngyang/ip.git (master)... +Sep 06, 2023 1:13:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/s0ngyang/ip.git (master)... +Sep 06, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/s0ngyang/ip.git (master) completed! +Sep 06, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [115/480] Analyzing https://github.com/ldinghan/ip.git (master)... +Sep 06, 2023 1:13:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/feifeiraindrops/ip.git (master)... +Sep 06, 2023 1:13:19 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ldinghan/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ldinghan/ip.git (master)... +Sep 06, 2023 1:13:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/feifeiraindrops/ip.git (master)... +Sep 06, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/feifeiraindrops/ip.git (master) completed! +Sep 06, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [116/480] Analyzing https://github.com/ryanongwx/ip.git (master)... +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kohkaijie/ip.git completed! +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/PearlynnT/ip.git... -Sep 05, 2023 2:29:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/proto-aiken-13/ip.git (master)... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/PearlynnT/ip.git to complete... -Sep 05, 2023 2:29:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/proto-aiken-13/ip.git (master)... -Sep 05, 2023 2:29:23 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/proto-aiken-13/ip.git (master) completed! -Sep 05, 2023 2:29:23 PM reposense.report.ReportGenerator analyzeRepos -INFO: [125/480] Analyzing https://github.com/bwangpj/ip.git (master)... -Sep 05, 2023 2:29:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Khaleelur-Rahman/ip.git (master)... -Sep 05, 2023 2:29:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Khaleelur-Rahman/ip.git (master)... -Sep 05, 2023 2:29:23 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/bwangpj/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/bwangpj/ip.git (master)... -Sep 05, 2023 2:29:23 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Khaleelur-Rahman/ip.git (master) completed! -Sep 05, 2023 2:29:23 PM reposense.report.ReportGenerator analyzeRepos -INFO: [126/480] Analyzing https://github.com/weeweh/ip.git (master)... -Sep 05, 2023 2:29:23 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/weeweh/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/weeweh/ip.git (master)... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:19 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ryanongwx/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ryanongwx/ip.git (master)... +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/rocketninja7/ip.git completed! -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/StevenLiudw/ip.git... -Sep 05, 2023 2:29:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/StevenLiudw/ip.git to complete... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/markgcera/ip.git completed! +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/zekone/ip.git completed! -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/StevenLiudw/ip.git... +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/TeeRenJing/ip.git... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/mounilsankar/ip.git... +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/TeeRenJing/ip.git to complete... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/StevenLiudw/ip.git to complete... +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/mounilsankar/ip.git to complete... +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/PearlynnT/ip.git completed! -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/markgcera/ip.git completed! -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/mounilsankar/ip.git... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/dloh2236/ip.git... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/mounilsankar/ip.git to complete... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ldinghan/ip.git (master)... +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/dloh2236/ip.git to complete... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ldinghan/ip.git (master)... +Sep 06, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ldinghan/ip.git (master) completed! +Sep 06, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [117/480] Analyzing https://github.com/kwangthiag/ip.git (master)... +Sep 06, 2023 1:13:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ryanongwx/ip.git (master)... +Sep 06, 2023 1:13:19 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kwangthiag/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kwangthiag/ip.git (master)... +Sep 06, 2023 1:13:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ryanongwx/ip.git (master)... +Sep 06, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ryanongwx/ip.git (master) completed! +Sep 06, 2023 1:13:19 AM reposense.report.ReportGenerator analyzeRepos +INFO: [118/480] Analyzing https://github.com/elhy1999/ip.git (master)... +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/StevenLiudw/ip.git completed! -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/zannloo/ip.git... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:19 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/elhy1999/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/elhy1999/ip.git (master)... +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/TeeRenJing/ip.git completed! +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/zannloo/ip.git to complete... -Sep 05, 2023 2:29:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/bwangpj/ip.git (master)... -Sep 05, 2023 2:29:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/bwangpj/ip.git (master)... -Sep 05, 2023 2:29:24 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/bwangpj/ip.git (master) completed! -Sep 05, 2023 2:29:24 PM reposense.report.ReportGenerator analyzeRepos -INFO: [127/480] Analyzing https://github.com/s-peiran/ip.git (master)... -Sep 05, 2023 2:29:24 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/s-peiran/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/s-peiran/ip.git (master)... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/mounilsankar/ip.git completed! -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/junnengsoo/ip.git... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/freshcabbage123/ip.git... +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/junnengsoo/ip.git to complete... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/freshcabbage123/ip.git to complete... +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/dloh2236/ip.git completed! -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/TeeRenJing/ip.git completed! -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/freshcabbage123/ip.git... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Kokseng1/ip.git... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:19 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Kokseng1/ip.git to complete... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/freshcabbage123/ip.git to complete... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/zannloo/ip.git completed! -Sep 05, 2023 2:29:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/weeweh/ip.git (master)... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/itsNatTan/ip.git... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/itsNatTan/ip.git to complete... -Sep 05, 2023 2:29:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/weeweh/ip.git (master)... -Sep 05, 2023 2:29:24 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/weeweh/ip.git (master) completed! -Sep 05, 2023 2:29:24 PM reposense.report.ReportGenerator analyzeRepos -INFO: [128/480] Analyzing https://github.com/jylow/ip.git (master)... -Sep 05, 2023 2:29:24 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jylow/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jylow/ip.git (master)... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/junnengsoo/ip.git completed! -Sep 05, 2023 2:29:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/s-peiran/ip.git (master)... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tjingsheng/ip.git... -Sep 05, 2023 2:29:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/s-peiran/ip.git (master)... -Sep 05, 2023 2:29:24 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/s-peiran/ip.git (master) completed! -Sep 05, 2023 2:29:24 PM reposense.report.ReportGenerator analyzeRepos -INFO: [129/480] Analyzing https://github.com/lawruixi/ip.git (master)... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/freshcabbage123/ip.git completed! -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tjingsheng/ip.git... +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/junnengsoo/ip.git completed! +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tjingsheng/ip.git to complete... -Sep 05, 2023 2:29:24 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lawruixi/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lawruixi/ip.git (master)... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ZD292/ip.git... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kwangthiag/ip.git (master)... +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ZD292/ip.git to complete... +Sep 06, 2023 1:13:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kwangthiag/ip.git (master)... +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Kokseng1/ip.git completed! -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kwangthiag/ip.git (master) completed! +Sep 06, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [119/480] Analyzing https://github.com/AlainS87/ip.git (master)... +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/alientian/ip.git... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ZD292/ip.git to complete... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/alientian/ip.git to complete... -Sep 05, 2023 2:29:24 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/itsNatTan/ip.git completed! -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/frrrrry/ip.git... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/frrrrry/ip.git to complete... -Sep 05, 2023 2:29:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jylow/ip.git (master)... -Sep 05, 2023 2:29:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jylow/ip.git (master)... -Sep 05, 2023 2:29:25 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jylow/ip.git (master) completed! -Sep 05, 2023 2:29:25 PM reposense.report.ReportGenerator analyzeRepos -INFO: [130/480] Analyzing https://github.com/JeremyYong128/ip.git (master)... -Sep 05, 2023 2:29:25 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/JeremyYong128/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/JeremyYong128/ip.git (master)... -Sep 05, 2023 2:29:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lawruixi/ip.git (master)... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tjingsheng/ip.git completed! -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wanghejin/ip.git... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/alientian/ip.git completed! -Sep 05, 2023 2:29:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lawruixi/ip.git (master)... -Sep 05, 2023 2:29:25 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lawruixi/ip.git (master) completed! -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/MagnificentCreature/ip.git... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ZD292/ip.git completed! -Sep 05, 2023 2:29:25 PM reposense.report.ReportGenerator analyzeRepos -INFO: [131/480] Analyzing https://github.com/brandon-nam/ip.git (master)... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/frrrrry/ip.git completed! -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wanghejin/ip.git... +Sep 06, 2023 1:13:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/elhy1999/ip.git (master)... +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/wanghejin/ip.git to complete... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/SungMatt/ip.git... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/MagnificentCreature/ip.git... +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/alientian/ip.git completed! +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/MagnificentCreature/ip.git to complete... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/elhy1999/ip.git (master)... +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/SungMatt/ip.git... +Sep 06, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/elhy1999/ip.git (master) completed! +Sep 06, 2023 1:13:20 AM reposense.report.ReportGenerator analyzeRepos +INFO: [120/480] Analyzing https://github.com/songgthu/ip.git (master)... +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/SungMatt/ip.git to complete... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/frrrrry/ip.git completed! +Sep 06, 2023 1:13:20 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/songgthu/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/songgthu/ip.git (master)... +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/andrefoo/ip.git... -Sep 05, 2023 2:29:25 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/brandon-nam/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/brandon-nam/ip.git (master)... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/andrefoo/ip.git to complete... -Sep 05, 2023 2:29:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/brandon-nam/ip.git (master)... -Sep 05, 2023 2:29:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/JeremyYong128/ip.git (master)... -Sep 05, 2023 2:29:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/brandon-nam/ip.git (master)... -Sep 05, 2023 2:29:25 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/brandon-nam/ip.git (master) completed! -Sep 05, 2023 2:29:25 PM reposense.report.ReportGenerator analyzeRepos -INFO: [132/480] Analyzing https://github.com/LHeng1/ip.git (master)... -Sep 05, 2023 2:29:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/JeremyYong128/ip.git (master)... -Sep 05, 2023 2:29:25 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/JeremyYong128/ip.git (master) completed! -Sep 05, 2023 2:29:25 PM reposense.report.ReportGenerator analyzeRepos -INFO: [133/480] Analyzing https://github.com/Leb14/ip.git (master)... -Sep 05, 2023 2:29:25 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LHeng1/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LHeng1/ip.git (master)... -Sep 05, 2023 2:29:25 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Leb14/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Leb14/ip.git (master)... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/SungMatt/ip.git completed! -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:20 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AlainS87/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AlainS87/ip.git (master)... +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/MagnificentCreature/ip.git completed! -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tohpinren/ip.git... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/XihuaZ/ip.git... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/andrefoo/ip.git completed! -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/XihuaZ/ip.git to complete... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/wanghejin/ip.git completed! -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tohpinren/ip.git... +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/SungMatt/ip.git completed! +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tohpinren/ip.git to complete... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/XihuaZ/ip.git... +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/xavierpok/ip.git... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/XihuaZ/ip.git to complete... +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/xavierpok/ip.git to complete... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/andrefoo/ip.git completed! +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/bkjwjason/ip.git... -Sep 05, 2023 2:29:25 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/bkjwjason/ip.git to complete... -Sep 05, 2023 2:29:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LHeng1/ip.git (master)... -Sep 05, 2023 2:29:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LHeng1/ip.git (master)... -Sep 05, 2023 2:29:26 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LHeng1/ip.git (master) completed! -Sep 05, 2023 2:29:26 PM reposense.report.ReportGenerator analyzeRepos -INFO: [134/480] Analyzing https://github.com/B-enguin/ip.git (master)... -Sep 05, 2023 2:29:26 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/B-enguin/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/B-enguin/ip.git (master)... -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/songgthu/ip.git (master)... +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tohpinren/ip.git completed! -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Choonyan02/ip.git... -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/bkjwjason/ip.git completed! -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Choonyan02/ip.git to complete... -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/XihuaZ/ip.git completed! -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/xavierpok/ip.git completed! -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/songgthu/ip.git (master)... +Sep 06, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/songgthu/ip.git (master) completed! +Sep 06, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepos +INFO: [121/480] Analyzing https://github.com/GohTengFong/ip.git (master)... +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/aarontxz/ip.git... -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jianyangg/ip.git... -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Choonyan02/ip.git to complete... +Sep 06, 2023 1:13:21 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/GohTengFong/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/GohTengFong/ip.git (master)... +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/aarontxz/ip.git to complete... -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tayian/ip.git... -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/xavierpok/ip.git completed! +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jianyangg/ip.git... +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jianyangg/ip.git to complete... -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/bkjwjason/ip.git completed! +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tayian/ip.git... +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tayian/ip.git to complete... -Sep 05, 2023 2:29:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Leb14/ip.git (master)... -Sep 05, 2023 2:29:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Leb14/ip.git (master)... -Sep 05, 2023 2:29:26 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Leb14/ip.git (master) completed! -Sep 05, 2023 2:29:26 PM reposense.report.ReportGenerator analyzeRepos -INFO: [135/480] Analyzing https://github.com/s-kybound/ip.git (master)... -Sep 05, 2023 2:29:26 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/s-kybound/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/s-kybound/ip.git (master)... -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jianyangg/ip.git completed! -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Choonyan02/ip.git completed! -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/aarontxz/ip.git completed! -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/wnchan/ip.git... -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/wnchan/ip.git to complete... -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/aarontxz/ip.git completed! +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Jweewee/ip.git... -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/cyaoxuan/ip.git... -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tayian/ip.git completed! -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Jweewee/ip.git to complete... -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jianyangg/ip.git completed! +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/cyaoxuan/ip.git... +Sep 06, 2023 1:13:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/GohTengFong/ip.git (master)... +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/cyaoxuan/ip.git to complete... -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:21 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tayian/ip.git completed! +Sep 06, 2023 1:13:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/GohTengFong/ip.git (master)... +Sep 06, 2023 1:13:21 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/GohTengFong/ip.git (master) completed! +Sep 06, 2023 1:13:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [122/480] Analyzing https://github.com/simbayippy/ip.git (master)... +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/anthonytamzil/ip.git... -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/anthonytamzil/ip.git to complete... -Sep 05, 2023 2:29:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/B-enguin/ip.git (master)... -Sep 05, 2023 2:29:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/B-enguin/ip.git (master)... -Sep 05, 2023 2:29:26 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/B-enguin/ip.git (master) completed! -Sep 05, 2023 2:29:26 PM reposense.report.ReportGenerator analyzeRepos -INFO: [136/480] Analyzing https://github.com/wesho1107/ip.git (master)... -Sep 05, 2023 2:29:26 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wesho1107/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wesho1107/ip.git (master)... -Sep 05, 2023 2:29:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/s-kybound/ip.git (master)... -Sep 05, 2023 2:29:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/s-kybound/ip.git (master)... -Sep 05, 2023 2:29:26 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/s-kybound/ip.git (master) completed! -Sep 05, 2023 2:29:26 PM reposense.report.ReportGenerator analyzeRepos -INFO: [137/480] Analyzing https://github.com/yihfei/ip.git (master)... -Sep 05, 2023 2:29:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Jweewee/ip.git completed! -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/CelestineTan03/ip.git... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/cyaoxuan/ip.git completed! -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:22 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/simbayippy/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/simbayippy/ip.git (master)... +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/wnchan/ip.git completed! -Sep 05, 2023 2:29:27 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yihfei/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yihfei/ip.git (master)... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/CelestineTan03/ip.git... +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/CelestineTan03/ip.git to complete... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Jweewee/ip.git completed! +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/saltedfishxx/ip.git... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/euchangxian/ip.git... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/anthonytamzil/ip.git completed! -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/saltedfishxx/ip.git to complete... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/euchangxian/ip.git to complete... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/cyaoxuan/ip.git completed! +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/CelestineTan03/ip.git completed! +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/euchangxian/ip.git... +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AlagappanRa/ip.git... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/euchangxian/ip.git to complete... +Sep 06, 2023 1:13:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/simbayippy/ip.git (master)... +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/anthonytamzil/ip.git completed! +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AlagappanRa/ip.git to complete... -Sep 05, 2023 2:29:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wesho1107/ip.git (master)... -Sep 05, 2023 2:29:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/wesho1107/ip.git (master)... -Sep 05, 2023 2:29:27 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/wesho1107/ip.git (master) completed! -Sep 05, 2023 2:29:27 PM reposense.report.ReportGenerator analyzeRepos -INFO: [138/480] Analyzing https://github.com/AaronJT1/ip.git (master)... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/CelestineTan03/ip.git completed! -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Ken-Lai/ip.git... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/simbayippy/ip.git (master)... +Sep 06, 2023 1:13:22 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/simbayippy/ip.git (master) completed! +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Ken-Lai/ip.git to complete... -Sep 05, 2023 2:29:27 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AaronJT1/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AaronJT1/ip.git (master)... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AlagappanRa/ip.git completed! -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/euchangxian/ip.git completed! -Sep 05, 2023 2:29:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yihfei/ip.git (master)... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [123/480] Analyzing https://github.com/Khaleelur-Rahman/ip.git (master)... +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/saltedfishxx/ip.git completed! -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/felibunnyy/ip.git... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/itssisi/ip.git... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:22 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Khaleelur-Rahman/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Khaleelur-Rahman/ip.git (master)... +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/felibunnyy/ip.git to complete... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jamz903/ip.git... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AlainS87/ip.git (master)... +Sep 06, 2023 1:13:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AlainS87/ip.git (master)... +Sep 06, 2023 1:13:22 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AlainS87/ip.git (master) completed! +Sep 06, 2023 1:13:22 AM reposense.report.ReportGenerator analyzeRepos +INFO: [124/480] Analyzing https://github.com/proto-aiken-13/ip.git (master)... +Sep 06, 2023 1:13:22 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/proto-aiken-13/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/proto-aiken-13/ip.git (master)... +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AlagappanRa/ip.git completed! +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/itssisi/ip.git... +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/euchangxian/ip.git completed! +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/itssisi/ip.git to complete... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jamz903/ip.git to complete... -Sep 05, 2023 2:29:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yihfei/ip.git (master)... -Sep 05, 2023 2:29:27 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yihfei/ip.git (master) completed! -Sep 05, 2023 2:29:27 PM reposense.report.ReportGenerator analyzeRepos -INFO: [139/480] Analyzing https://github.com/dlathyun/ip.git (master)... -Sep 05, 2023 2:29:27 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dlathyun/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dlathyun/ip.git (master)... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Ken-Lai/ip.git completed! -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:22 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jamz903/ip.git... +Sep 06, 2023 1:13:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/proto-aiken-13/ip.git (master)... +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Kevin-Liusx/ip.git... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Kevin-Liusx/ip.git to complete... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jamz903/ip.git completed! -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/felibunnyy/ip.git completed! -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jamz903/ip.git to complete... +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Propene-Dan/ip.git... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/proto-aiken-13/ip.git (master)... +Sep 06, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/proto-aiken-13/ip.git (master) completed! +Sep 06, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [125/480] Analyzing https://github.com/bwangpj/ip.git (master)... +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Kevin-Liusx/ip.git to complete... +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Propene-Dan/ip.git to complete... +Sep 06, 2023 1:13:23 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/bwangpj/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/bwangpj/ip.git (master)... +Sep 06, 2023 1:13:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Khaleelur-Rahman/ip.git (master)... +Sep 06, 2023 1:13:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Khaleelur-Rahman/ip.git (master)... +Sep 06, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Khaleelur-Rahman/ip.git (master) completed! +Sep 06, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [126/480] Analyzing https://github.com/weeweh/ip.git (master)... +Sep 06, 2023 1:13:23 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/weeweh/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/weeweh/ip.git (master)... +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/itssisi/ip.git completed! -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Kevin-Liusx/ip.git completed! +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jamz903/ip.git completed! +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ChuanXinNg/ip.git... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/kenvynKwek/ip.git... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Propene-Dan/ip.git to complete... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kenvynKwek/ip.git to complete... -Sep 05, 2023 2:29:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AaronJT1/ip.git (master)... -Sep 05, 2023 2:29:27 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ChuanXinNg/ip.git to complete... -Sep 05, 2023 2:29:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AaronJT1/ip.git (master)... -Sep 05, 2023 2:29:27 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AaronJT1/ip.git (master) completed! -Sep 05, 2023 2:29:27 PM reposense.report.ReportGenerator analyzeRepos -INFO: [140/480] Analyzing https://github.com/ricketytoc/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ricketytoc/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ricketytoc/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/dlathyun/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/dlathyun/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/dlathyun/ip.git (master) completed! -Sep 05, 2023 2:29:28 PM reposense.report.ReportGenerator analyzeRepos -INFO: [141/480] Analyzing https://github.com/Angelyxx/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Angelyxx/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Angelyxx/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Propene-Dan/ip.git completed! -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kenvynKwek/ip.git completed! -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Kevin-Liusx/ip.git completed! -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Ruizhi2001/ip.git... -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kenvynKwek/ip.git to complete... +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Propene-Dan/ip.git completed! +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Ruizhi2001/ip.git to complete... -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/prawnzyy/ip.git... -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/saraozn/ip.git... -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/prawnzyy/ip.git to complete... -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/saraozn/ip.git to complete... -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/bwangpj/ip.git (master)... +Sep 06, 2023 1:13:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/bwangpj/ip.git (master)... +Sep 06, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/bwangpj/ip.git (master) completed! +Sep 06, 2023 1:13:23 AM reposense.report.ReportGenerator analyzeRepos +INFO: [127/480] Analyzing https://github.com/s-peiran/ip.git (master)... +Sep 06, 2023 1:13:23 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/s-peiran/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/s-peiran/ip.git (master)... +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ChuanXinNg/ip.git completed! -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nicholastng010601/ip.git... -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nicholastng010601/ip.git to complete... -Sep 05, 2023 2:29:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Angelyxx/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Angelyxx/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Angelyxx/ip.git (master) completed! -Sep 05, 2023 2:29:28 PM reposense.report.ReportGenerator analyzeRepos -INFO: [142/480] Analyzing https://github.com/jingting1412/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ricketytoc/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jingting1412/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jingting1412/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ricketytoc/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ricketytoc/ip.git (master) completed! -Sep 05, 2023 2:29:28 PM reposense.report.ReportGenerator analyzeRepos -INFO: [143/480] Analyzing https://github.com/SinhaVedant/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kenvynKwek/ip.git completed! +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Ruizhi2001/ip.git completed! -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/saraozn/ip.git... +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nicholastng010601/ip.git... +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/DistractedCat/ip.git... -Sep 05, 2023 2:29:28 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/SinhaVedant/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/SinhaVedant/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/saraozn/ip.git completed! -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/saraozn/ip.git to complete... +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/prawnzyy/ip.git completed! -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/DistractedCat/ip.git to complete... -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nicholastng010601/ip.git completed! -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nicholastng010601/ip.git to complete... +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yezkez10/ip.git... -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/DistractedCat/ip.git to complete... +Sep 06, 2023 1:13:23 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yezkez10/ip.git to complete... -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/revdrag/ip.git... -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/alvinlim277/ip.git... -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/revdrag/ip.git to complete... -Sep 05, 2023 2:29:28 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/alvinlim277/ip.git to complete... -Sep 05, 2023 2:29:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jingting1412/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/SinhaVedant/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/SinhaVedant/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/SinhaVedant/ip.git (master) completed! -Sep 05, 2023 2:29:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jingting1412/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.report.ReportGenerator analyzeRepos -INFO: [144/480] Analyzing https://github.com/jordankanghm/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jingting1412/ip.git (master) completed! -Sep 05, 2023 2:29:28 PM reposense.report.ReportGenerator analyzeRepos -INFO: [145/480] Analyzing https://github.com/adhigop13/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jordankanghm/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jordankanghm/ip.git (master)... -Sep 05, 2023 2:29:28 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/adhigop13/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/adhigop13/ip.git (master)... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/weeweh/ip.git (master)... +Sep 06, 2023 1:13:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/weeweh/ip.git (master)... +Sep 06, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/weeweh/ip.git (master) completed! +Sep 06, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepos +INFO: [128/480] Analyzing https://github.com/jylow/ip.git (master)... +Sep 06, 2023 1:13:24 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jylow/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jylow/ip.git (master)... +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/saraozn/ip.git completed! +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nicholastng010601/ip.git completed! +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/DistractedCat/ip.git completed! -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/JasonRay168/ip.git... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/revdrag/ip.git... +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/yezkez10/ip.git completed! -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/JasonRay168/ip.git to complete... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/alvinlim277/ip.git... +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/JasonRay168/ip.git... +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/billieboy7/ip.git... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/revdrag/ip.git completed! -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/alvinlim277/ip.git completed! -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/revdrag/ip.git to complete... +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/billieboy7/ip.git to complete... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/JasonRay168/ip.git to complete... +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/alvinlim277/ip.git to complete... +Sep 06, 2023 1:13:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/s-peiran/ip.git (master)... +Sep 06, 2023 1:13:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/s-peiran/ip.git (master)... +Sep 06, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/s-peiran/ip.git (master) completed! +Sep 06, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepos +INFO: [129/480] Analyzing https://github.com/lawruixi/ip.git (master)... +Sep 06, 2023 1:13:24 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lawruixi/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lawruixi/ip.git (master)... +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/JasonRay168/ip.git completed! +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jannnice/ip.git... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jannnice/ip.git to complete... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/evanyan13/ip.git... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/evanyan13/ip.git to complete... -Sep 05, 2023 2:29:29 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/adhigop13/ip.git (master)... -Sep 05, 2023 2:29:29 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/adhigop13/ip.git (master)... -Sep 05, 2023 2:29:29 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/adhigop13/ip.git (master) completed! -Sep 05, 2023 2:29:29 PM reposense.report.ReportGenerator analyzeRepos -INFO: [146/480] Analyzing https://github.com/waseemingly/ip.git (master)... -Sep 05, 2023 2:29:29 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/waseemingly/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:29 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/waseemingly/ip.git (master)... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/JasonRay168/ip.git completed! -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/alvinlim277/ip.git completed! +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/billieboy7/ip.git completed! -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/revdrag/ip.git completed! +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/evanyan13/ip.git... +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/samuelim01/ip.git... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/samuelim01/ip.git to complete... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/evanyan13/ip.git to complete... +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/dinde2004/ip.git... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jannnice/ip.git completed! -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/evanyan13/ip.git completed! -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/samuelim01/ip.git to complete... +Sep 06, 2023 1:13:24 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/dinde2004/ip.git to complete... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jylow/ip.git (master)... +Sep 06, 2023 1:13:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jylow/ip.git (master)... +Sep 06, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jylow/ip.git (master) completed! +Sep 06, 2023 1:13:24 AM reposense.report.ReportGenerator analyzeRepos +INFO: [130/480] Analyzing https://github.com/JeremyYong128/ip.git (master)... +Sep 06, 2023 1:13:24 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/JeremyYong128/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/JeremyYong128/ip.git (master)... +Sep 06, 2023 1:13:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lawruixi/ip.git (master)... +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jannnice/ip.git completed! +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/seanpzk/ip.git... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/KumChaiYin/ip.git... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lawruixi/ip.git (master)... +Sep 06, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lawruixi/ip.git (master) completed! +Sep 06, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepos +INFO: [131/480] Analyzing https://github.com/brandon-nam/ip.git (master)... +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/seanpzk/ip.git to complete... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/KumChaiYin/ip.git to complete... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/samuelim01/ip.git completed! -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/dinde2004/ip.git completed! -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/evanyan13/ip.git completed! +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/KumChaiYin/ip.git... +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/samuelim01/ip.git completed! +Sep 06, 2023 1:13:25 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/brandon-nam/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/brandon-nam/ip.git (master)... +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lsyurea/ip.git... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/seanpzk/ip.git completed! -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Sasmik23/ip.git... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lsyurea/ip.git to complete... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/KumChaiYin/ip.git completed! -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/KumChaiYin/ip.git to complete... +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Sasmik23/ip.git to complete... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lsyurea/ip.git to complete... +Sep 06, 2023 1:13:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/JeremyYong128/ip.git (master)... +Sep 06, 2023 1:13:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/JeremyYong128/ip.git (master)... +Sep 06, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/JeremyYong128/ip.git (master) completed! +Sep 06, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepos +INFO: [132/480] Analyzing https://github.com/LHeng1/ip.git (master)... +Sep 06, 2023 1:13:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/brandon-nam/ip.git (master)... +Sep 06, 2023 1:13:25 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LHeng1/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LHeng1/ip.git (master)... +Sep 06, 2023 1:13:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/brandon-nam/ip.git (master)... +Sep 06, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/brandon-nam/ip.git (master) completed! +Sep 06, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepos +INFO: [133/480] Analyzing https://github.com/Leb14/ip.git (master)... +Sep 06, 2023 1:13:25 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Leb14/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Leb14/ip.git (master)... +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/seanpzk/ip.git completed! +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lsyurea/ip.git completed! +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/geraldngjx/ip.git... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lululwtv/ip.git... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Sasmik23/ip.git completed! +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/KumChaiYin/ip.git completed! +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lululwtv/ip.git to complete... -Sep 05, 2023 2:29:29 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/geraldngjx/ip.git to complete... -Sep 05, 2023 2:29:29 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/waseemingly/ip.git (master)... -Sep 05, 2023 2:29:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/waseemingly/ip.git (master)... -Sep 05, 2023 2:29:30 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/waseemingly/ip.git (master) completed! -Sep 05, 2023 2:29:30 PM reposense.report.ReportGenerator analyzeRepos -INFO: [147/480] Analyzing https://github.com/freddychenyouren2/ip.git (master)... -Sep 05, 2023 2:29:30 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/freddychenyouren2/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:30 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/freddychenyouren2/ip.git (master)... -Sep 05, 2023 2:29:30 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jordankanghm/ip.git (master)... -Sep 05, 2023 2:29:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jordankanghm/ip.git (master)... -Sep 05, 2023 2:29:30 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jordankanghm/ip.git (master) completed! -Sep 05, 2023 2:29:30 PM reposense.report.ReportGenerator analyzeRepos -INFO: [148/480] Analyzing https://github.com/raydenlim/ip.git (master)... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lsyurea/ip.git completed! -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/garylow2001/ip.git... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/garylow2001/ip.git to complete... -Sep 05, 2023 2:29:30 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/raydenlim/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:30 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/raydenlim/ip.git (master)... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Sasmik23/ip.git completed! -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/leontan2/ip.git... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lululwtv/ip.git completed! -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wamps-jp/ip.git... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/garylow2001/ip.git to complete... +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/leontan2/ip.git to complete... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wamps-jp/ip.git to complete... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LHeng1/ip.git (master)... +Sep 06, 2023 1:13:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LHeng1/ip.git (master)... +Sep 06, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LHeng1/ip.git (master) completed! +Sep 06, 2023 1:13:25 AM reposense.report.ReportGenerator analyzeRepos +INFO: [134/480] Analyzing https://github.com/B-enguin/ip.git (master)... +Sep 06, 2023 1:13:25 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/B-enguin/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/B-enguin/ip.git (master)... +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lululwtv/ip.git completed! +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/geraldngjx/ip.git completed! -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dickongwd/ip.git... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dickongwd/ip.git to complete... -Sep 05, 2023 2:29:30 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/freddychenyouren2/ip.git (master)... -Sep 05, 2023 2:29:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/freddychenyouren2/ip.git (master)... -Sep 05, 2023 2:29:30 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/freddychenyouren2/ip.git (master) completed! -Sep 05, 2023 2:29:30 PM reposense.report.ReportGenerator analyzeRepos -INFO: [149/480] Analyzing https://github.com/jingyu987/ip.git (master)... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/leontan2/ip.git completed! +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/garylow2001/ip.git completed! -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wamps-jp/ip.git... +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dickongwd/ip.git... +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jacksonyuan256/ip.git... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jacksonyuan256/ip.git to complete... -Sep 05, 2023 2:29:30 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jingyu987/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:30 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jingyu987/ip.git (master)... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wamps-jp/ip.git completed! -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/suryanshkushwaha/ip.git... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/leontan2/ip.git completed! -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wr1159/ip.git... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jacksonyuan256/ip.git to complete... +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dickongwd/ip.git to complete... +Sep 06, 2023 1:13:25 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wamps-jp/ip.git to complete... +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/suryanshkushwaha/ip.git to complete... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wr1159/ip.git to complete... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Leb14/ip.git (master)... +Sep 06, 2023 1:13:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Leb14/ip.git (master)... +Sep 06, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Leb14/ip.git (master) completed! +Sep 06, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepos +INFO: [135/480] Analyzing https://github.com/s-kybound/ip.git (master)... +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wamps-jp/ip.git completed! +Sep 06, 2023 1:13:26 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/s-kybound/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/s-kybound/ip.git (master)... +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/dickongwd/ip.git completed! -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wr1159/ip.git... +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Nauxe/ip.git... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wr1159/ip.git to complete... +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Nauxe/ip.git to complete... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jacksonyuan256/ip.git completed! -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yyyaohhh/ip.git... -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/suryanshkushwaha/ip.git completed! -Sep 05, 2023 2:29:30 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yyyaohhh/ip.git to complete... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/suryanshkushwaha/ip.git completed! +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/zhanyang01/ip.git... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/zhanyang01/ip.git to complete... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/B-enguin/ip.git (master)... +Sep 06, 2023 1:13:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/B-enguin/ip.git (master)... +Sep 06, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/B-enguin/ip.git (master) completed! +Sep 06, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepos +INFO: [136/480] Analyzing https://github.com/wesho1107/ip.git (master)... +Sep 06, 2023 1:13:26 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wesho1107/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wesho1107/ip.git (master)... +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Nauxe/ip.git completed! +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/wr1159/ip.git completed! -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/czhiruo/ip.git... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Nauxe/ip.git completed! -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/victorpengmx/ip.git... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/czhiruo/ip.git to complete... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/victorpengmx/ip.git to complete... -Sep 05, 2023 2:29:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/raydenlim/ip.git (master)... -Sep 05, 2023 2:29:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jingyu987/ip.git (master)... -Sep 05, 2023 2:29:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/raydenlim/ip.git (master)... -Sep 05, 2023 2:29:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jingyu987/ip.git (master)... -Sep 05, 2023 2:29:31 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jingyu987/ip.git (master) completed! -Sep 05, 2023 2:29:31 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/raydenlim/ip.git (master) completed! -Sep 05, 2023 2:29:31 PM reposense.report.ReportGenerator analyzeRepos -INFO: [150/480] Analyzing https://github.com/FerdiHS/ip.git (master)... -Sep 05, 2023 2:29:31 PM reposense.report.ReportGenerator analyzeRepos -INFO: [151/480] Analyzing https://github.com/jrchoo/ip.git (master)... -Sep 05, 2023 2:29:31 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/FerdiHS/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/FerdiHS/ip.git (master)... -Sep 05, 2023 2:29:31 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jrchoo/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jrchoo/ip.git (master)... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zhanyang01/ip.git completed! +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/yyyaohhh/ip.git completed! -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/longnguyentan/ip.git... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/longnguyentan/ip.git to complete... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zhanyang01/ip.git completed! -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Cikguseven/ip.git... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/longnguyentan/ip.git to complete... +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Cikguseven/ip.git to complete... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/s-kybound/ip.git (master)... +Sep 06, 2023 1:13:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/s-kybound/ip.git (master)... +Sep 06, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/s-kybound/ip.git (master) completed! +Sep 06, 2023 1:13:26 AM reposense.report.ReportGenerator analyzeRepos +INFO: [137/480] Analyzing https://github.com/AaronJT1/ip.git (master)... +Sep 06, 2023 1:13:26 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/czhiruo/ip.git completed! -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Eola-Z/ip.git... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AaronJT1/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AaronJT1/ip.git (master)... +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Eola-Z/ip.git to complete... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/longnguyentan/ip.git completed! +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/victorpengmx/ip.git completed! -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jibtaf/ip.git... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jibtaf/ip.git to complete... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/longnguyentan/ip.git completed! -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lipwei1808/ip.git... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lipwei1808/ip.git to complete... -Sep 05, 2023 2:29:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jrchoo/ip.git (master)... -Sep 05, 2023 2:29:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/FerdiHS/ip.git (master)... -Sep 05, 2023 2:29:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jrchoo/ip.git (master)... -Sep 05, 2023 2:29:31 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jrchoo/ip.git (master) completed! -Sep 05, 2023 2:29:31 PM reposense.report.ReportGenerator analyzeRepos -INFO: [152/480] Analyzing https://github.com/leezhanpeng/ip.git (master)... -Sep 05, 2023 2:29:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/FerdiHS/ip.git (master)... -Sep 05, 2023 2:29:31 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/FerdiHS/ip.git (master) completed! -Sep 05, 2023 2:29:31 PM reposense.report.ReportGenerator analyzeRepos -INFO: [153/480] Analyzing https://github.com/RiyaMehta2211/ip.git (master)... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Cikguseven/ip.git completed! -Sep 05, 2023 2:29:31 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/leezhanpeng/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/leezhanpeng/ip.git (master)... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lipwei1808/ip.git... +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Mohammed-Faizzzz/ip.git... -Sep 05, 2023 2:29:31 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/RiyaMehta2211/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/RiyaMehta2211/ip.git (master)... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Mohammed-Faizzzz/ip.git to complete... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lipwei1808/ip.git to complete... +Sep 06, 2023 1:13:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wesho1107/ip.git (master)... +Sep 06, 2023 1:13:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/wesho1107/ip.git (master)... +Sep 06, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/wesho1107/ip.git (master) completed! +Sep 06, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [138/480] Analyzing https://github.com/yihfei/ip.git (master)... +Sep 06, 2023 1:13:27 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yihfei/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yihfei/ip.git (master)... +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Eola-Z/ip.git completed! -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/dylkaw/ip.git... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/dylkaw/ip.git to complete... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lipwei1808/ip.git completed! +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jibtaf/ip.git completed! -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nikele2001/ip.git... -Sep 05, 2023 2:29:31 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nikele2001/ip.git to complete... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lipwei1808/ip.git completed! -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/DeltonCheng/ip.git... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/DeltonCheng/ip.git to complete... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Mohammed-Faizzzz/ip.git completed! -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/DeltonCheng/ip.git... +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ChangruHenryQian/ip.git... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dylkaw/ip.git completed! -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nikele2001/ip.git to complete... +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ChangruHenryQian/ip.git to complete... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/DeltonCheng/ip.git to complete... +Sep 06, 2023 1:13:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AaronJT1/ip.git (master)... +Sep 06, 2023 1:13:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AaronJT1/ip.git (master)... +Sep 06, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AaronJT1/ip.git (master) completed! +Sep 06, 2023 1:13:27 AM reposense.report.ReportGenerator analyzeRepos +INFO: [139/480] Analyzing https://github.com/dlathyun/ip.git (master)... +Sep 06, 2023 1:13:27 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dlathyun/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dlathyun/ip.git (master)... +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dylkaw/ip.git completed! +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/craigtonlian/ip.git... -Sep 05, 2023 2:29:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/RiyaMehta2211/ip.git (master)... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/craigtonlian/ip.git to complete... -Sep 05, 2023 2:29:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/RiyaMehta2211/ip.git (master)... -Sep 05, 2023 2:29:32 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/RiyaMehta2211/ip.git (master) completed! -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/nikele2001/ip.git completed! -Sep 05, 2023 2:29:32 PM reposense.report.ReportGenerator analyzeRepos -INFO: [154/480] Analyzing https://github.com/juzzztinsoong/ip.git (master)... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ChangruHenryQian/ip.git completed! +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ruo-x/ip.git... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ruo-x/ip.git to complete... -Sep 05, 2023 2:29:32 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/juzzztinsoong/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/juzzztinsoong/ip.git (master)... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/DeltonCheng/ip.git completed! -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yihfei/ip.git (master)... +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/iantsaii/ip.git... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/iantsaii/ip.git to complete... -Sep 05, 2023 2:29:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/leezhanpeng/ip.git (master)... -Sep 05, 2023 2:29:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/leezhanpeng/ip.git (master)... -Sep 05, 2023 2:29:32 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/leezhanpeng/ip.git (master) completed! -Sep 05, 2023 2:29:32 PM reposense.report.ReportGenerator analyzeRepos -INFO: [155/480] Analyzing https://github.com/darrentfy/ip.git (master)... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ChangruHenryQian/ip.git completed! -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:27 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/DeltonCheng/ip.git completed! +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/wjacobw/ip.git... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/iantsaii/ip.git to complete... +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/wjacobw/ip.git to complete... -Sep 05, 2023 2:29:32 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/darrentfy/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/darrentfy/ip.git (master)... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yihfei/ip.git (master)... +Sep 06, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yihfei/ip.git (master) completed! +Sep 06, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [140/480] Analyzing https://github.com/ricketytoc/ip.git (master)... +Sep 06, 2023 1:13:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ricketytoc/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ricketytoc/ip.git (master)... +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/craigtonlian/ip.git completed! -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/angkyakdifp/ip.git... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/angkyakdifp/ip.git to complete... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/dlathyun/ip.git (master)... +Sep 06, 2023 1:13:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/dlathyun/ip.git (master)... +Sep 06, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/dlathyun/ip.git (master) completed! +Sep 06, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [141/480] Analyzing https://github.com/Angelyxx/ip.git (master)... +Sep 06, 2023 1:13:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Angelyxx/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Angelyxx/ip.git (master)... +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ruo-x/ip.git completed! -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/brein62/ip.git... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/iantsaii/ip.git completed! -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/brein62/ip.git to complete... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wjacobw/ip.git completed! +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nicrandomlee/ip.git... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/nicrandomlee/ip.git to complete... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wjacobw/ip.git completed! -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner spawnCloneProcess +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/angkyakdifp/ip.git completed! +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/iantsaii/ip.git completed! +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Bryan-Goh/ip.git... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kiatkat/ip.git... +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kiatkat/ip.git to complete... +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Bryan-Goh/ip.git to complete... -Sep 05, 2023 2:29:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ricketytoc/ip.git (master)... +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/brein62/ip.git completed! +Sep 06, 2023 1:13:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ricketytoc/ip.git (master)... +Sep 06, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ricketytoc/ip.git (master) completed! +Sep 06, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [142/480] Analyzing https://github.com/SinhaVedant/ip.git (master)... +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/MadLamprey/ip.git... +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/MadLamprey/ip.git to complete... +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nicrandomlee/ip.git completed! +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/xyT-T/ip.git... +Sep 06, 2023 1:13:28 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/SinhaVedant/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/SinhaVedant/ip.git (master)... +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/xyT-T/ip.git to complete... +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kiatkat/ip.git completed! +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Bryan-Goh/ip.git completed! +Sep 06, 2023 1:13:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Angelyxx/ip.git (master)... +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jiakai-17/ip.git... +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nreHieW/ip.git... +Sep 06, 2023 1:13:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Angelyxx/ip.git (master)... +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jiakai-17/ip.git to complete... +Sep 06, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Angelyxx/ip.git (master) completed! +Sep 06, 2023 1:13:28 AM reposense.report.ReportGenerator analyzeRepos +INFO: [143/480] Analyzing https://github.com/jingting1412/ip.git (master)... +Sep 06, 2023 1:13:28 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nreHieW/ip.git to complete... +Sep 06, 2023 1:13:29 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jingting1412/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jingting1412/ip.git (master)... +Sep 06, 2023 1:13:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/SinhaVedant/ip.git (master)... +Sep 06, 2023 1:13:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/SinhaVedant/ip.git (master)... +Sep 06, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/SinhaVedant/ip.git (master) completed! +Sep 06, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepos +INFO: [144/480] Analyzing https://github.com/jordankanghm/ip.git (master)... +Sep 06, 2023 1:13:29 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jordankanghm/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jordankanghm/ip.git (master)... +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/MadLamprey/ip.git completed! +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nathanielcalimag/ip.git... +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nathanielcalimag/ip.git to complete... +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/xyT-T/ip.git completed! +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jiakai-17/ip.git completed! +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nreHieW/ip.git completed! +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Saezenn/ip.git... +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jellywaiyan/ip.git... +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Saezenn/ip.git to complete... +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/marquestye/ip.git... +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jellywaiyan/ip.git to complete... +Sep 06, 2023 1:13:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jingting1412/ip.git (master)... +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/marquestye/ip.git to complete... +Sep 06, 2023 1:13:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jingting1412/ip.git (master)... +Sep 06, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jingting1412/ip.git (master) completed! +Sep 06, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepos +INFO: [145/480] Analyzing https://github.com/adhigop13/ip.git (master)... +Sep 06, 2023 1:13:29 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/adhigop13/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/adhigop13/ip.git (master)... +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nathanielcalimag/ip.git completed! +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Saezenn/ip.git completed! +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Tang-Moyan/ip.git... +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Tang-Moyan/ip.git to complete... +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jellywaiyan/ip.git completed! +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/DonovanJJ/ip.git... +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/DonovanJJ/ip.git to complete... +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Sebtey/ip.git... +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Sebtey/ip.git to complete... +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/marquestye/ip.git completed! +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/rionshocker/ip.git... +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/rionshocker/ip.git to complete... +Sep 06, 2023 1:13:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/adhigop13/ip.git (master)... +Sep 06, 2023 1:13:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/adhigop13/ip.git (master)... +Sep 06, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/adhigop13/ip.git (master) completed! +Sep 06, 2023 1:13:29 AM reposense.report.ReportGenerator analyzeRepos +INFO: [146/480] Analyzing https://github.com/waseemingly/ip.git (master)... +Sep 06, 2023 1:13:29 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/waseemingly/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/waseemingly/ip.git (master)... +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Tang-Moyan/ip.git completed! +Sep 06, 2023 1:13:29 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Sebtey/ip.git completed! +Sep 06, 2023 1:13:30 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tyouwei/ip.git... +Sep 06, 2023 1:13:30 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/DonovanJJ/ip.git completed! +Sep 06, 2023 1:13:30 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tyouwei/ip.git to complete... +Sep 06, 2023 1:13:30 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Blizzeracz/ip.git... +Sep 06, 2023 1:13:30 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Blizzeracz/ip.git to complete... +Sep 06, 2023 1:13:30 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/rionshocker/ip.git completed! +Sep 06, 2023 1:13:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jordankanghm/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jordankanghm/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jordankanghm/ip.git (master) completed! +Sep 06, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepos +INFO: [147/480] Analyzing https://github.com/raydenlim/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/raydenlim/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/raydenlim/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/waseemingly/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/waseemingly/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/waseemingly/ip.git (master) completed! +Sep 06, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepos +INFO: [148/480] Analyzing https://github.com/jingyu987/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jingyu987/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jingyu987/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Blizzeracz/ip.git completed! +Sep 06, 2023 1:13:30 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tyouwei/ip.git completed! +Sep 06, 2023 1:13:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/raydenlim/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jingyu987/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jingyu987/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/raydenlim/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jingyu987/ip.git (master) completed! +Sep 06, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/raydenlim/ip.git (master) completed! +Sep 06, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepos +INFO: [149/480] Analyzing https://github.com/FerdiHS/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepos +INFO: [150/480] Analyzing https://github.com/freddychenyouren2/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/FerdiHS/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/FerdiHS/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/freddychenyouren2/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/freddychenyouren2/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/FerdiHS/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/FerdiHS/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/FerdiHS/ip.git (master) completed! +Sep 06, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepos +INFO: [151/480] Analyzing https://github.com/RiyaMehta2211/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/freddychenyouren2/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/RiyaMehta2211/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/RiyaMehta2211/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/freddychenyouren2/ip.git (master)... +Sep 06, 2023 1:13:30 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/freddychenyouren2/ip.git (master) completed! +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [152/480] Analyzing https://github.com/juzzztinsoong/ip.git (master)... +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/juzzztinsoong/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/juzzztinsoong/ip.git (master)... +Sep 06, 2023 1:13:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/RiyaMehta2211/ip.git (master)... +Sep 06, 2023 1:13:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/RiyaMehta2211/ip.git (master)... +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/RiyaMehta2211/ip.git (master) completed! +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [153/480] Analyzing https://github.com/jrchoo/ip.git (master)... +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jrchoo/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jrchoo/ip.git (master)... +Sep 06, 2023 1:13:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/juzzztinsoong/ip.git (master)... -Sep 05, 2023 2:29:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/juzzztinsoong/ip.git (master)... -Sep 05, 2023 2:29:32 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/juzzztinsoong/ip.git (master) completed! -Sep 05, 2023 2:29:32 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [154/480] Analyzing https://github.com/leezhanpeng/ip.git (master)... +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/leezhanpeng/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/leezhanpeng/ip.git (master)... +Sep 06, 2023 1:13:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jrchoo/ip.git (master)... +Sep 06, 2023 1:13:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jrchoo/ip.git (master)... +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jrchoo/ip.git (master) completed! +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepos +INFO: [155/480] Analyzing https://github.com/darrentfy/ip.git (master)... +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/darrentfy/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/darrentfy/ip.git (master)... +Sep 06, 2023 1:13:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/leezhanpeng/ip.git (master)... +Sep 06, 2023 1:13:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/leezhanpeng/ip.git (master)... +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/leezhanpeng/ip.git (master) completed! +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepos INFO: [156/480] Analyzing https://github.com/redtailedfox/ip.git (master)... -Sep 05, 2023 2:29:32 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/angkyakdifp/ip.git completed! -Sep 05, 2023 2:29:32 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/darrentfy/ip.git (master)... +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/redtailedfox/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/redtailedfox/ip.git (master)... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kiatkat/ip.git... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kiatkat/ip.git to complete... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/brein62/ip.git completed! -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/MadLamprey/ip.git... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/MadLamprey/ip.git to complete... -Sep 05, 2023 2:29:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/darrentfy/ip.git (master)... -Sep 05, 2023 2:29:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/darrentfy/ip.git (master)... -Sep 05, 2023 2:29:33 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/darrentfy/ip.git (master) completed! -Sep 05, 2023 2:29:33 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepos INFO: [157/480] Analyzing https://github.com/Fallman2/ip.git (master)... -Sep 05, 2023 2:29:33 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Fallman2/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Fallman2/ip.git (master)... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Bryan-Goh/ip.git completed! -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/xyT-T/ip.git... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/xyT-T/ip.git to complete... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nicrandomlee/ip.git completed! -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jiakai-17/ip.git... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kiatkat/ip.git completed! -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jiakai-17/ip.git to complete... -Sep 05, 2023 2:29:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/redtailedfox/ip.git (master)... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nreHieW/ip.git... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nreHieW/ip.git to complete... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/MadLamprey/ip.git completed! -Sep 05, 2023 2:29:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/redtailedfox/ip.git (master)... -Sep 05, 2023 2:29:33 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/redtailedfox/ip.git (master) completed! -Sep 05, 2023 2:29:33 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepos INFO: [158/480] Analyzing https://github.com/Heran9/ip.git (master)... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nathanielcalimag/ip.git... -Sep 05, 2023 2:29:33 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Heran9/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Heran9/ip.git (master)... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nathanielcalimag/ip.git to complete... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/xyT-T/ip.git completed! -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Saezenn/ip.git... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Saezenn/ip.git to complete... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jiakai-17/ip.git completed! -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jellywaiyan/ip.git... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jellywaiyan/ip.git to complete... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nreHieW/ip.git completed! -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/marquestye/ip.git... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/marquestye/ip.git to complete... -Sep 05, 2023 2:29:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Fallman2/ip.git (master)... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nathanielcalimag/ip.git completed! -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Tang-Moyan/ip.git... -Sep 05, 2023 2:29:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Fallman2/ip.git (master)... -Sep 05, 2023 2:29:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Heran9/ip.git (master)... -Sep 05, 2023 2:29:33 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Fallman2/ip.git (master) completed! -Sep 05, 2023 2:29:33 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator analyzeRepos INFO: [159/480] Analyzing https://github.com/VN-Hao/ip.git (master)... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Tang-Moyan/ip.git to complete... -Sep 05, 2023 2:29:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:31 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/VN-Hao/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/VN-Hao/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Heran9/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Heran9/ip.git (master)... -Sep 05, 2023 2:29:33 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Heran9/ip.git (master) completed! -Sep 05, 2023 2:29:33 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepos INFO: [160/480] Analyzing https://github.com/jingjie88/ip.git (master)... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Saezenn/ip.git completed! -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/DonovanJJ/ip.git... -Sep 05, 2023 2:29:33 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/VN-Hao/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/VN-Hao/ip.git (master)... -Sep 05, 2023 2:29:33 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/DonovanJJ/ip.git to complete... -Sep 05, 2023 2:29:33 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jingjie88/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jingjie88/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jellywaiyan/ip.git completed! -Sep 05, 2023 2:29:34 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Sebtey/ip.git... -Sep 05, 2023 2:29:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/marquestye/ip.git completed! -Sep 05, 2023 2:29:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Sebtey/ip.git to complete... -Sep 05, 2023 2:29:34 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/rionshocker/ip.git... -Sep 05, 2023 2:29:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/rionshocker/ip.git to complete... -Sep 05, 2023 2:29:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/VN-Hao/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/VN-Hao/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/VN-Hao/ip.git (master) completed! -Sep 05, 2023 2:29:34 PM reposense.report.ReportGenerator analyzeRepos -INFO: [161/480] Analyzing https://github.com/H1410101/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Tang-Moyan/ip.git completed! -Sep 05, 2023 2:29:34 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/H1410101/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/H1410101/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/DonovanJJ/ip.git completed! -Sep 05, 2023 2:29:34 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tyouwei/ip.git... -Sep 05, 2023 2:29:34 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Blizzeracz/ip.git... -Sep 05, 2023 2:29:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tyouwei/ip.git to complete... -Sep 05, 2023 2:29:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Blizzeracz/ip.git to complete... -Sep 05, 2023 2:29:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/H1410101/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/H1410101/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/H1410101/ip.git (master) completed! -Sep 05, 2023 2:29:34 PM reposense.report.ReportGenerator analyzeRepos -INFO: [162/480] Analyzing https://github.com/kimshitong/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jingjie88/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [161/480] Analyzing https://github.com/kimshitong/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kimshitong/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kimshitong/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jingjie88/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jingjie88/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jingjie88/ip.git (master) completed! -Sep 05, 2023 2:29:34 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [162/480] Analyzing https://github.com/H1410101/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/H1410101/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/H1410101/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kimshitong/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kimshitong/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kimshitong/ip.git (master) completed! +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepos INFO: [163/480] Analyzing https://github.com/ivanleekk/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ivanleekk/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ivanleekk/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/rionshocker/ip.git completed! -Sep 05, 2023 2:29:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Sebtey/ip.git completed! -Sep 05, 2023 2:29:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tyouwei/ip.git completed! -Sep 05, 2023 2:29:34 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Blizzeracz/ip.git completed! -Sep 05, 2023 2:29:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/H1410101/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/H1410101/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/H1410101/ip.git (master) completed! +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [164/480] Analyzing https://github.com/tayruxin/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tayruxin/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tayruxin/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ivanleekk/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kimshitong/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ivanleekk/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ivanleekk/ip.git (master) completed! -Sep 05, 2023 2:29:34 PM reposense.report.ReportGenerator analyzeRepos -INFO: [164/480] Analyzing https://github.com/lamchenghou/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kimshitong/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kimshitong/ip.git (master) completed! -Sep 05, 2023 2:29:34 PM reposense.report.ReportGenerator analyzeRepos -INFO: [165/480] Analyzing https://github.com/tayruxin/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [165/480] Analyzing https://github.com/lamchenghou/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lamchenghou/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lamchenghou/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tayruxin/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tayruxin/ip.git (master)... -Sep 05, 2023 2:29:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tayruxin/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tayruxin/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tayruxin/ip.git (master) completed! -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator analyzeRepos -INFO: [166/480] Analyzing https://github.com/raynertjx/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [166/480] Analyzing https://github.com/zhengyup/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/zhengyup/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/zhengyup/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zhengyup/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zhengyup/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zhengyup/ip.git (master) completed! +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [167/480] Analyzing https://github.com/raynertjx/ip.git (master)... +Sep 06, 2023 1:13:32 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/raynertjx/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/raynertjx/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lamchenghou/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lamchenghou/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lamchenghou/ip.git (master) completed! -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator analyzeRepos -INFO: [167/480] Analyzing https://github.com/larrywang0701/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [168/480] Analyzing https://github.com/larrywang0701/ip.git (master)... +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/larrywang0701/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/larrywang0701/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/raynertjx/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/raynertjx/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/raynertjx/ip.git (master) completed! -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator analyzeRepos -INFO: [168/480] Analyzing https://github.com/zhengyup/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/zhengyup/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/zhengyup/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/larrywang0701/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/raynertjx/ip.git (master)... +Sep 06, 2023 1:13:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/larrywang0701/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/larrywang0701/ip.git (master) completed! -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator analyzeRepos -INFO: [169/480] Analyzing https://github.com/wxwern/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wxwern/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wxwern/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zhengyup/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zhengyup/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zhengyup/ip.git (master) completed! -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [169/480] Analyzing https://github.com/nubnubyas/ip.git (master)... +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/raynertjx/ip.git (master) completed! +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepos INFO: [170/480] Analyzing https://github.com/Carlintyj/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Carlintyj/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Carlintyj/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wxwern/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/wxwern/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/wxwern/ip.git (master) completed! -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator analyzeRepos -INFO: [171/480] Analyzing https://github.com/nubnubyas/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nubnubyas/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nubnubyas/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Carlintyj/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Carlintyj/ip.git (master)... +Sep 06, 2023 1:13:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nubnubyas/ip.git (master)... +Sep 06, 2023 1:13:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nubnubyas/ip.git (master)... +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nubnubyas/ip.git (master) completed! +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [171/480] Analyzing https://github.com/wxwern/ip.git (master)... +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wxwern/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wxwern/ip.git (master)... +Sep 06, 2023 1:13:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Carlintyj/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Carlintyj/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Carlintyj/ip.git (master) completed! -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepos INFO: [172/480] Analyzing https://github.com/aslam341/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nubnubyas/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/aslam341/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/aslam341/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nubnubyas/ip.git (master)... -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nubnubyas/ip.git (master) completed! -Sep 05, 2023 2:29:35 PM reposense.report.ReportGenerator analyzeRepos -INFO: [173/480] Analyzing https://github.com/LWZ19/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LWZ19/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LWZ19/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wxwern/ip.git (master)... +Sep 06, 2023 1:13:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/wxwern/ip.git (master)... +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/wxwern/ip.git (master) completed! +Sep 06, 2023 1:13:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/aslam341/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [173/480] Analyzing https://github.com/rayshawntan/ip.git (master)... +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/rayshawntan/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/rayshawntan/ip.git (master)... +Sep 06, 2023 1:13:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/aslam341/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/aslam341/ip.git (master) completed! -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator analyzeRepos INFO: [174/480] Analyzing https://github.com/timleow/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:33 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/timleow/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/timleow/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/timleow/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/timleow/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/timleow/ip.git (master) completed! -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator analyzeRepos -INFO: [175/480] Analyzing https://github.com/rayshawntan/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/rayshawntan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/rayshawntan/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LWZ19/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LWZ19/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LWZ19/ip.git (master) completed! -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator analyzeRepos -INFO: [176/480] Analyzing https://github.com/aexolate/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/aexolate/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/aexolate/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [175/480] Analyzing https://github.com/LWZ19/ip.git (master)... +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LWZ19/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LWZ19/ip.git (master)... +Sep 06, 2023 1:13:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/rayshawntan/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/rayshawntan/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/rayshawntan/ip.git (master) completed! -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator analyzeRepos -INFO: [177/480] Analyzing https://github.com/Sheeepen/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [176/480] Analyzing https://github.com/aexolate/ip.git (master)... +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/aexolate/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/aexolate/ip.git (master)... +Sep 06, 2023 1:13:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/aexolate/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Sheeepen/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Sheeepen/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/aexolate/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/aexolate/ip.git (master) completed! -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator analyzeRepos -INFO: [178/480] Analyzing https://github.com/shuyangk/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [177/480] Analyzing https://github.com/ncmathan/ip.git (master)... +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ncmathan/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ncmathan/ip.git (master)... +Sep 06, 2023 1:13:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LWZ19/ip.git (master)... +Sep 06, 2023 1:13:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LWZ19/ip.git (master)... +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LWZ19/ip.git (master) completed! +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [178/480] Analyzing https://github.com/Sheeepen/ip.git (master)... +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Sheeepen/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Sheeepen/ip.git (master)... +Sep 06, 2023 1:13:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ncmathan/ip.git (master)... +Sep 06, 2023 1:13:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ncmathan/ip.git (master)... +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ncmathan/ip.git (master) completed! +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [179/480] Analyzing https://github.com/shuyangk/ip.git (master)... +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/shuyangk/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/shuyangk/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/shuyangk/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/shuyangk/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/shuyangk/ip.git (master) completed! -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator analyzeRepos -INFO: [179/480] Analyzing https://github.com/ncmathan/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Sheeepen/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ncmathan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ncmathan/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Sheeepen/ip.git (master)... -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Sheeepen/ip.git (master) completed! -Sep 05, 2023 2:29:36 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepos INFO: [180/480] Analyzing https://github.com/iyioon/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/iyioon/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/iyioon/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ncmathan/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ncmathan/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ncmathan/ip.git (master) completed! -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/shuyangk/ip.git (master)... +Sep 06, 2023 1:13:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/shuyangk/ip.git (master)... +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/shuyangk/ip.git (master) completed! +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator analyzeRepos INFO: [181/480] Analyzing https://github.com/kiwibang/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:34 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kiwibang/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kiwibang/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/iyioon/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/iyioon/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/iyioon/ip.git (master) completed! -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator analyzeRepos -INFO: [182/480] Analyzing https://github.com/asdfghjkxd/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/asdfghjkxd/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/asdfghjkxd/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/kiwibang/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [182/480] Analyzing https://github.com/mingyu-wan/ip.git (master)... +Sep 06, 2023 1:13:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kiwibang/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/kiwibang/ip.git (master) completed! -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepos INFO: [183/480] Analyzing https://github.com/LuoZYi/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/mingyu-wan/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/mingyu-wan/ip.git (master)... +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/LuoZYi/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/LuoZYi/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/LuoZYi/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LuoZYi/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LuoZYi/ip.git (master) completed! -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator analyzeRepos -INFO: [184/480] Analyzing https://github.com/sushiyade/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [184/480] Analyzing https://github.com/asdfghjkxd/ip.git (master)... +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/asdfghjkxd/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/asdfghjkxd/ip.git (master)... +Sep 06, 2023 1:13:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/mingyu-wan/ip.git (master)... +Sep 06, 2023 1:13:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/mingyu-wan/ip.git (master)... +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/mingyu-wan/ip.git (master) completed! +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [185/480] Analyzing https://github.com/sushiyade/ip.git (master)... +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sushiyade/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sushiyade/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sushiyade/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sushiyade/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sushiyade/ip.git (master) completed! -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator analyzeRepos -INFO: [185/480] Analyzing https://github.com/miljyy/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/miljyy/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/miljyy/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [186/480] Analyzing https://github.com/Nid21cs/ip.git (master)... +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Nid21cs/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Nid21cs/ip.git (master)... +Sep 06, 2023 1:13:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Nid21cs/ip.git (master)... +Sep 06, 2023 1:13:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Nid21cs/ip.git (master)... +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Nid21cs/ip.git (master) completed! +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [187/480] Analyzing https://github.com/McNaBry/ip.git (master)... +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/McNaBry/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/McNaBry/ip.git (master)... +Sep 06, 2023 1:13:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/asdfghjkxd/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/asdfghjkxd/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/asdfghjkxd/ip.git (master) completed! -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator analyzeRepos -INFO: [186/480] Analyzing https://github.com/McNaBry/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/McNaBry/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/McNaBry/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [188/480] Analyzing https://github.com/miljyy/ip.git (master)... +Sep 06, 2023 1:13:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/miljyy/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/miljyy/ip.git (master)... +Sep 06, 2023 1:13:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/miljyy/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/miljyy/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/miljyy/ip.git (master) completed! -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator analyzeRepos -INFO: [187/480] Analyzing https://github.com/Nid21cs/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Nid21cs/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Nid21cs/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Nid21cs/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Nid21cs/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Nid21cs/ip.git (master) completed! -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator analyzeRepos -INFO: [188/480] Analyzing https://github.com/ncduy0303/ip.git (master)... -Sep 05, 2023 2:29:37 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [189/480] Analyzing https://github.com/ncduy0303/ip.git (master)... +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ncduy0303/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ncduy0303/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/McNaBry/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/McNaBry/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/McNaBry/ip.git (master) completed! -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator analyzeRepos -INFO: [189/480] Analyzing https://github.com/ruishanteo/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ruishanteo/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ruishanteo/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [190/480] Analyzing https://github.com/eyelessrhyme7/ip.git (master)... +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/eyelessrhyme7/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/eyelessrhyme7/ip.git (master)... +Sep 06, 2023 1:13:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ncduy0303/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ncduy0303/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ncduy0303/ip.git (master) completed! -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator analyzeRepos -INFO: [190/480] Analyzing https://github.com/mingyu-wan/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/mingyu-wan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/mingyu-wan/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ruishanteo/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ruishanteo/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ruishanteo/ip.git (master) completed! -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator analyzeRepos -INFO: [191/480] Analyzing https://github.com/eyelessrhyme7/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/eyelessrhyme7/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/eyelessrhyme7/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/mingyu-wan/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/mingyu-wan/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/mingyu-wan/ip.git (master) completed! -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator analyzeRepos -INFO: [192/480] Analyzing https://github.com/m1oojv/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [191/480] Analyzing https://github.com/m1oojv/ip.git (master)... +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/m1oojv/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/m1oojv/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/eyelessrhyme7/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/eyelessrhyme7/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/eyelessrhyme7/ip.git (master) completed! -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator analyzeRepos -INFO: [193/480] Analyzing https://github.com/Nixx162/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Nixx162/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Nixx162/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [192/480] Analyzing https://github.com/ruishanteo/ip.git (master)... +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ruishanteo/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ruishanteo/ip.git (master)... +Sep 06, 2023 1:13:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/m1oojv/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/m1oojv/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/m1oojv/ip.git (master) completed! -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [193/480] Analyzing https://github.com/Nixx162/ip.git (master)... +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Nixx162/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Nixx162/ip.git (master)... +Sep 06, 2023 1:13:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ruishanteo/ip.git (master)... +Sep 06, 2023 1:13:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ruishanteo/ip.git (master)... +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ruishanteo/ip.git (master) completed! +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepos INFO: [194/480] Analyzing https://github.com/Gabriel4357/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Gabriel4357/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Gabriel4357/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Nixx162/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Nixx162/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Nixx162/ip.git (master) completed! -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepos INFO: [195/480] Analyzing https://github.com/mfjkri/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/mfjkri/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/mfjkri/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Gabriel4357/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Gabriel4357/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Gabriel4357/ip.git (master) completed! -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator analyzeRepos INFO: [196/480] Analyzing https://github.com/junhonglow/ip.git (master)... -Sep 05, 2023 2:29:38 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:36 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/junhonglow/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/junhonglow/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/mfjkri/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/mfjkri/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/mfjkri/ip.git (master) completed! -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator analyzeRepos -INFO: [197/480] Analyzing https://github.com/nknguyenhc/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nknguyenhc/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nknguyenhc/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/junhonglow/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/junhonglow/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/junhonglow/ip.git (master) completed! -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator analyzeRepos -INFO: [198/480] Analyzing https://github.com/Badatprogrammiing/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Badatprogrammiing/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Badatprogrammiing/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Badatprogrammiing/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Badatprogrammiing/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Badatprogrammiing/ip.git (master) completed! -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator analyzeRepos -INFO: [199/480] Analyzing https://github.com/RoeReRe/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nknguyenhc/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/junhonglow/ip.git (master) completed! +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [197/480] Analyzing https://github.com/RoeReRe/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/mfjkri/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/RoeReRe/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/RoeReRe/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/mfjkri/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/mfjkri/ip.git (master) completed! +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [198/480] Analyzing https://github.com/nknguyenhc/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nknguyenhc/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nknguyenhc/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/RoeReRe/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/RoeReRe/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/RoeReRe/ip.git (master) completed! +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [199/480] Analyzing https://github.com/winson8222/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/winson8222/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/winson8222/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nknguyenhc/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nknguyenhc/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nknguyenhc/ip.git (master) completed! -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator analyzeRepos -INFO: [200/480] Analyzing https://github.com/wujy28/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/winson8222/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [200/480] Analyzing https://github.com/Badatprogrammiing/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/winson8222/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/winson8222/ip.git (master) completed! +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [201/480] Analyzing https://github.com/wujy28/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Badatprogrammiing/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Badatprogrammiing/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wujy28/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wujy28/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/RoeReRe/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/RoeReRe/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/RoeReRe/ip.git (master) completed! -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator analyzeRepos -INFO: [201/480] Analyzing https://github.com/HugeNoob/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wujy28/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/HugeNoob/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/HugeNoob/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wujy28/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wujy28/ip.git (master) completed! -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator analyzeRepos INFO: [202/480] Analyzing https://github.com/SimWPEric/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/SimWPEric/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/SimWPEric/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/HugeNoob/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/HugeNoob/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/HugeNoob/ip.git (master) completed! -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator analyzeRepos -INFO: [203/480] Analyzing https://github.com/winson8222/ip.git (master)... -Sep 05, 2023 2:29:39 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/winson8222/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/winson8222/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Badatprogrammiing/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Badatprogrammiing/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Badatprogrammiing/ip.git (master) completed! +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [203/480] Analyzing https://github.com/HugeNoob/ip.git (master)... +Sep 06, 2023 1:13:37 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/HugeNoob/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/HugeNoob/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/SimWPEric/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/HugeNoob/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/SimWPEric/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/HugeNoob/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/SimWPEric/ip.git (master) completed! -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator analyzeRepos -INFO: [204/480] Analyzing https://github.com/Weiennn/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/HugeNoob/ip.git (master) completed! +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [204/480] Analyzing https://github.com/lerxuann/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [205/480] Analyzing https://github.com/Weiennn/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lerxuann/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lerxuann/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Weiennn/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Weiennn/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/winson8222/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/winson8222/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/winson8222/ip.git (master) completed! -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator analyzeRepos -INFO: [205/480] Analyzing https://github.com/maj0-0/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lerxuann/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lerxuann/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lerxuann/ip.git (master) completed! +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [206/480] Analyzing https://github.com/maj0-0/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/maj0-0/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/maj0-0/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/maj0-0/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/maj0-0/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/maj0-0/ip.git (master) completed! -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator analyzeRepos -INFO: [206/480] Analyzing https://github.com/lerxuann/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lerxuann/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lerxuann/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Weiennn/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Weiennn/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Weiennn/ip.git (master) completed! -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepos INFO: [207/480] Analyzing https://github.com/qyaner/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/maj0-0/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/qyaner/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/qyaner/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lerxuann/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lerxuann/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lerxuann/ip.git (master) completed! -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator analyzeRepos -INFO: [208/480] Analyzing https://github.com/hyc17003/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/maj0-0/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/maj0-0/ip.git (master) completed! +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [208/480] Analyzing https://github.com/ruiyangzh/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ruiyangzh/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ruiyangzh/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/qyaner/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/hyc17003/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/hyc17003/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/qyaner/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/qyaner/ip.git (master) completed! -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator analyzeRepos -INFO: [209/480] Analyzing https://github.com/ruiyangzh/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ruiyangzh/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ruiyangzh/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/hyc17003/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/hyc17003/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/hyc17003/ip.git (master) completed! -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator analyzeRepos -INFO: [210/480] Analyzing https://github.com/Bombbird2001/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [209/480] Analyzing https://github.com/Bombbird2001/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Bombbird2001/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Bombbird2001/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ruiyangzh/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ruiyangzh/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ruiyangzh/ip.git (master) completed! -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [210/480] Analyzing https://github.com/hyc17003/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/hyc17003/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/hyc17003/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/hyc17003/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/hyc17003/ip.git (master)... +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/hyc17003/ip.git (master) completed! +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepos INFO: [211/480] Analyzing https://github.com/adammangzijun/ip.git (master)... -Sep 05, 2023 2:29:40 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/adammangzijun/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/adammangzijun/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Bombbird2001/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Bombbird2001/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Bombbird2001/ip.git (master) completed! -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/adammangzijun/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator analyzeRepos INFO: [212/480] Analyzing https://github.com/andytoh1/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/adammangzijun/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:38 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/andytoh1/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/andytoh1/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/adammangzijun/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/adammangzijun/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/adammangzijun/ip.git (master) completed! -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepos -INFO: [213/480] Analyzing https://github.com/Originalidk/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Originalidk/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Originalidk/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator analyzeRepos +INFO: [213/480] Analyzing https://github.com/quzhetao01/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/quzhetao01/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/quzhetao01/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/andytoh1/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/andytoh1/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/andytoh1/ip.git (master) completed! -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepos -INFO: [214/480] Analyzing https://github.com/InfiBeyond/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/InfiBeyond/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/InfiBeyond/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/InfiBeyond/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/InfiBeyond/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/InfiBeyond/ip.git (master) completed! -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepos -INFO: [215/480] Analyzing https://github.com/quzhetao01/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/quzhetao01/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/quzhetao01/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator analyzeRepos +INFO: [214/480] Analyzing https://github.com/Originalidk/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Originalidk/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Originalidk/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Originalidk/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Originalidk/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Originalidk/ip.git (master) completed! -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/quzhetao01/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator analyzeRepos +INFO: [215/480] Analyzing https://github.com/InfiBeyond/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/quzhetao01/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/InfiBeyond/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/InfiBeyond/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/quzhetao01/ip.git (master) completed! +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator analyzeRepos INFO: [216/480] Analyzing https://github.com/Bearypop/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Bearypop/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Bearypop/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Bearypop/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/quzhetao01/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Bearypop/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Bearypop/ip.git (master) completed! -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/InfiBeyond/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/InfiBeyond/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/InfiBeyond/ip.git (master) completed! +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator analyzeRepos INFO: [217/480] Analyzing https://github.com/sp4ce-cowboy/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/quzhetao01/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/quzhetao01/ip.git (master) completed! -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepos -INFO: [218/480] Analyzing https://github.com/JasonLCY-Temp/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sp4ce-cowboy/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sp4ce-cowboy/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/JasonLCY-Temp/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/JasonLCY-Temp/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Bearypop/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Bearypop/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Bearypop/ip.git (master) completed! +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator analyzeRepos +INFO: [218/480] Analyzing https://github.com/wjayee/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wjayee/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wjayee/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sp4ce-cowboy/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sp4ce-cowboy/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sp4ce-cowboy/ip.git (master) completed! -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepos -INFO: [219/480] Analyzing https://github.com/wjayee/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wjayee/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wjayee/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/JasonLCY-Temp/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/JasonLCY-Temp/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/JasonLCY-Temp/ip.git (master) completed! -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator analyzeRepos +INFO: [219/480] Analyzing https://github.com/JasonLCY-Temp/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/JasonLCY-Temp/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/JasonLCY-Temp/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wjayee/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/wjayee/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/wjayee/ip.git (master) completed! +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator analyzeRepos INFO: [220/480] Analyzing https://github.com/vivienherq/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/vivienherq/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/vivienherq/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/vivienherq/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/vivienherq/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/vivienherq/ip.git (master) completed! -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/JasonLCY-Temp/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/JasonLCY-Temp/ip.git (master)... +Sep 06, 2023 1:13:39 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/JasonLCY-Temp/ip.git (master) completed! +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator analyzeRepos INFO: [221/480] Analyzing https://github.com/jamesebond/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jamesebond/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jamesebond/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wjayee/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/wjayee/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/wjayee/ip.git (master) completed! -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator analyzeRepos -INFO: [222/480] Analyzing https://github.com/victorlaiyeeteng/ip.git (master)... -Sep 05, 2023 2:29:41 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/victorlaiyeeteng/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/victorlaiyeeteng/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/vivienherq/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/vivienherq/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/vivienherq/ip.git (master) completed! +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [222/480] Analyzing https://github.com/jonyeokj/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jonyeokj/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jonyeokj/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jamesebond/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jamesebond/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jamesebond/ip.git (master) completed! -Sep 05, 2023 2:29:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/victorlaiyeeteng/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator analyzeRepos -INFO: [223/480] Analyzing https://github.com/jonyeokj/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/victorlaiyeeteng/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/victorlaiyeeteng/ip.git (master) completed! -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator analyzeRepos -INFO: [224/480] Analyzing https://github.com/lyuanww/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jonyeokj/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jonyeokj/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [223/480] Analyzing https://github.com/lyuanww/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lyuanww/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lyuanww/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lyuanww/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lyuanww/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lyuanww/ip.git (master) completed! -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator analyzeRepos -INFO: [225/480] Analyzing https://github.com/LoMaply/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LoMaply/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LoMaply/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jonyeokj/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jonyeokj/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jonyeokj/ip.git (master) completed! -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator analyzeRepos -INFO: [226/480] Analyzing https://github.com/yongning0310/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [224/480] Analyzing https://github.com/victorlaiyeeteng/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/victorlaiyeeteng/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/victorlaiyeeteng/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lyuanww/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lyuanww/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lyuanww/ip.git (master) completed! +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [225/480] Analyzing https://github.com/yongning0310/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/yongning0310/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/yongning0310/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LoMaply/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LoMaply/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LoMaply/ip.git (master) completed! -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/victorlaiyeeteng/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/victorlaiyeeteng/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/victorlaiyeeteng/ip.git (master) completed! +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [226/480] Analyzing https://github.com/tllshan/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tllshan/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tllshan/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tllshan/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yongning0310/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tllshan/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tllshan/ip.git (master) completed! +Sep 06, 2023 1:13:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yongning0310/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator analyzeRepos INFO: [227/480] Analyzing https://github.com/Cloud7050/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yongning0310/ip.git (master) completed! +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [228/480] Analyzing https://github.com/LoMaply/ip.git (master)... +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Cloud7050/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Cloud7050/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yongning0310/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:40 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LoMaply/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LoMaply/ip.git (master)... +Sep 06, 2023 1:13:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LoMaply/ip.git (master)... +Sep 06, 2023 1:13:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Cloud7050/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yongning0310/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yongning0310/ip.git (master) completed! -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator analyzeRepos -INFO: [228/480] Analyzing https://github.com/tllshan/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LoMaply/ip.git (master)... +Sep 06, 2023 1:13:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Cloud7050/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Cloud7050/ip.git (master) completed! -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator analyzeRepos -INFO: [229/480] Analyzing https://github.com/HollaG/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tllshan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tllshan/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LoMaply/ip.git (master) completed! +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [229/480] Analyzing https://github.com/cheeggered/ip.git (master)... +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [230/480] Analyzing https://github.com/HollaG/ip.git (master)... +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/cheeggered/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/cheeggered/ip.git (master)... +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/HollaG/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/HollaG/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tllshan/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tllshan/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tllshan/ip.git (master) completed! -Sep 05, 2023 2:29:42 PM reposense.report.ReportGenerator analyzeRepos -INFO: [230/480] Analyzing https://github.com/Gavino3o/ip.git (master)... -Sep 05, 2023 2:29:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/HollaG/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/cheeggered/ip.git (master)... +Sep 06, 2023 1:13:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/HollaG/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/HollaG/ip.git (master) completed! -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Gavino3o/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Gavino3o/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [231/480] Analyzing https://github.com/cheeggered/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/cheeggered/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/cheeggered/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/cheeggered/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [231/480] Analyzing https://github.com/Gavino3o/ip.git (master)... +Sep 06, 2023 1:13:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/cheeggered/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/cheeggered/ip.git (master) completed! -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator analyzeRepos INFO: [232/480] Analyzing https://github.com/xenosf/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Gavino3o/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Gavino3o/ip.git (master)... +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/xenosf/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/xenosf/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Gavino3o/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Gavino3o/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Gavino3o/ip.git (master) completed! -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [233/480] Analyzing https://github.com/TehOPanas/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/TehOPanas/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/TehOPanas/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/xenosf/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/xenosf/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/xenosf/ip.git (master) completed! -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [234/480] Analyzing https://github.com/neyapraveen/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [233/480] Analyzing https://github.com/neyapraveen/ip.git (master)... +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/neyapraveen/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/neyapraveen/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Gavino3o/ip.git (master)... +Sep 06, 2023 1:13:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/neyapraveen/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/neyapraveen/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/neyapraveen/ip.git (master) completed! -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [235/480] Analyzing https://github.com/richiehx/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [234/480] Analyzing https://github.com/richiehx/ip.git (master)... +Sep 06, 2023 1:13:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Gavino3o/ip.git (master)... +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Gavino3o/ip.git (master) completed! +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [235/480] Analyzing https://github.com/TehOPanas/ip.git (master)... +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/richiehx/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/richiehx/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/TehOPanas/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/TehOPanas/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/TehOPanas/ip.git (master) completed! -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [236/480] Analyzing https://github.com/AlyssaPng/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AlyssaPng/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AlyssaPng/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:41 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/TehOPanas/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/TehOPanas/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/richiehx/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/richiehx/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/richiehx/ip.git (master) completed! -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [237/480] Analyzing https://github.com/leezhengjing/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/leezhengjing/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/leezhengjing/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [236/480] Analyzing https://github.com/AlyssaPng/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AlyssaPng/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AlyssaPng/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/TehOPanas/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/TehOPanas/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/TehOPanas/ip.git (master) completed! +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [237/480] Analyzing https://github.com/seantehds/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/seantehds/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/seantehds/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AlyssaPng/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AlyssaPng/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AlyssaPng/ip.git (master) completed! -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [238/480] Analyzing https://github.com/seantehds/ip.git (master)... -Sep 05, 2023 2:29:43 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/seantehds/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/seantehds/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/leezhengjing/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/leezhengjing/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/leezhengjing/ip.git (master) completed! -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator analyzeRepos -INFO: [239/480] Analyzing https://github.com/ceilingFan456/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [238/480] Analyzing https://github.com/ceilingFan456/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ceilingFan456/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ceilingFan456/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ceilingFan456/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ceilingFan456/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ceilingFan456/ip.git (master) completed! -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator analyzeRepos -INFO: [240/480] Analyzing https://github.com/lihongguang00/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lihongguang00/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lihongguang00/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [239/480] Analyzing https://github.com/leezhengjing/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/seantehds/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/leezhengjing/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/leezhengjing/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/seantehds/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/seantehds/ip.git (master) completed! -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator analyzeRepos -INFO: [241/480] Analyzing https://github.com/Singa-pirate/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Singa-pirate/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Singa-pirate/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [240/480] Analyzing https://github.com/lihongguang00/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lihongguang00/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lihongguang00/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lihongguang00/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lihongguang00/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lihongguang00/ip.git (master) completed! -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator analyzeRepos -INFO: [242/480] Analyzing https://github.com/vansh284/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [241/480] Analyzing https://github.com/Singa-pirate/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Singa-pirate/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Singa-pirate/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/leezhengjing/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/leezhengjing/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/leezhengjing/ip.git (master) completed! +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [242/480] Analyzing https://github.com/YeoBohShin/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/YeoBohShin/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/YeoBohShin/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/YeoBohShin/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/YeoBohShin/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/YeoBohShin/ip.git (master) completed! +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [243/480] Analyzing https://github.com/vansh284/ip.git (master)... +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/vansh284/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/vansh284/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Singa-pirate/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Singa-pirate/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Singa-pirate/ip.git (master) completed! -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator analyzeRepos -INFO: [243/480] Analyzing https://github.com/YeoBohShin/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/YeoBohShin/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/YeoBohShin/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/vansh284/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/vansh284/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/vansh284/ip.git (master) completed! -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator analyzeRepos INFO: [244/480] Analyzing https://github.com/songfangyl/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:42 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/songfangyl/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/songfangyl/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/YeoBohShin/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/YeoBohShin/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/YeoBohShin/ip.git (master) completed! -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/vansh284/ip.git (master)... +Sep 06, 2023 1:13:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/vansh284/ip.git (master)... +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/vansh284/ip.git (master) completed! +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepos INFO: [245/480] Analyzing https://github.com/shuenj/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/shuenj/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/shuenj/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/songfangyl/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/songfangyl/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/songfangyl/ip.git (master) completed! -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepos INFO: [246/480] Analyzing https://github.com/andrechuakj/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/andrechuakj/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/andrechuakj/ip.git (master)... -Sep 05, 2023 2:29:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/andrechuakj/ip.git (master)... +Sep 06, 2023 1:13:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/andrechuakj/ip.git (master)... +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/andrechuakj/ip.git (master) completed! +Sep 06, 2023 1:13:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/shuenj/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/shuenj/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/shuenj/ip.git (master) completed! -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepos INFO: [247/480] Analyzing https://github.com/lunaroddity/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lunaroddity/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lunaroddity/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/andrechuakj/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/andrechuakj/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/andrechuakj/ip.git (master) completed! -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/shuenj/ip.git (master)... +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/shuenj/ip.git (master) completed! +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepos INFO: [248/480] Analyzing https://github.com/WeeMingQing/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/WeeMingQing/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/WeeMingQing/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lunaroddity/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lunaroddity/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lunaroddity/ip.git (master) completed! -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepos INFO: [249/480] Analyzing https://github.com/aliciamichellew/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/WeeMingQing/ip.git (master)... +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/aliciamichellew/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/aliciamichellew/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/WeeMingQing/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/WeeMingQing/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/WeeMingQing/ip.git (master) completed! -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepos -INFO: [250/480] Analyzing https://github.com/antonTan96/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator analyzeRepos +INFO: [250/480] Analyzing https://github.com/samuelmui8/ip.git (master)... +Sep 06, 2023 1:13:43 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/samuelmui8/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/samuelmui8/ip.git (master)... +Sep 06, 2023 1:13:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/samuelmui8/ip.git (master)... +Sep 06, 2023 1:13:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/samuelmui8/ip.git (master)... +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/samuelmui8/ip.git (master) completed! +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [251/480] Analyzing https://github.com/antonTan96/ip.git (master)... +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/antonTan96/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/antonTan96/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/aliciamichellew/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/aliciamichellew/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/aliciamichellew/ip.git (master) completed! -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepos -INFO: [251/480] Analyzing https://github.com/owenyeo/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [252/480] Analyzing https://github.com/owenyeo/ip.git (master)... +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/owenyeo/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/owenyeo/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/antonTan96/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/antonTan96/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/antonTan96/ip.git (master) completed! -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepos -INFO: [252/480] Analyzing https://github.com/samuelmui8/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/samuelmui8/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/samuelmui8/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/owenyeo/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/owenyeo/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/owenyeo/ip.git (master) completed! -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepos INFO: [253/480] Analyzing https://github.com/gongg21/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/gongg21/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/gongg21/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/samuelmui8/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/samuelmui8/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/samuelmui8/ip.git (master) completed! -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/owenyeo/ip.git (master)... +Sep 06, 2023 1:13:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/owenyeo/ip.git (master)... +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/owenyeo/ip.git (master) completed! +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepos INFO: [254/480] Analyzing https://github.com/nabonitasen/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/gongg21/ip.git (master)... +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nabonitasen/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nabonitasen/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/gongg21/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/gongg21/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/gongg21/ip.git (master) completed! -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepos INFO: [255/480] Analyzing https://github.com/erohsikivar/ip.git (master)... -Sep 05, 2023 2:29:45 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/erohsikivar/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/erohsikivar/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/erohsikivar/ip.git (master)... +Sep 06, 2023 1:13:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nabonitasen/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/erohsikivar/ip.git (master)... +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/erohsikivar/ip.git (master) completed! +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [256/480] Analyzing https://github.com/pzl111/ip.git (master)... +Sep 06, 2023 1:13:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nabonitasen/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nabonitasen/ip.git (master) completed! -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator analyzeRepos -INFO: [256/480] Analyzing https://github.com/pzl111/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [257/480] Analyzing https://github.com/teozern1/ip.git (master)... +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/pzl111/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/pzl111/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/erohsikivar/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/erohsikivar/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/erohsikivar/ip.git (master) completed! -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator analyzeRepos -INFO: [257/480] Analyzing https://github.com/teozern1/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/teozern1/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/teozern1/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/teozern1/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/teozern1/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/teozern1/ip.git (master) completed! -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator analyzeRepos INFO: [258/480] Analyzing https://github.com/Elijah5399/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Elijah5399/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Elijah5399/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/pzl111/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/pzl111/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/pzl111/ip.git (master) completed! -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepos INFO: [259/480] Analyzing https://github.com/nicleongyj/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nicleongyj/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nicleongyj/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Elijah5399/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Elijah5399/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Elijah5399/ip.git (master) completed! -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepos INFO: [260/480] Analyzing https://github.com/WinSheng1/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/WinSheng1/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/WinSheng1/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nicleongyj/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nicleongyj/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nicleongyj/ip.git (master) completed! -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator analyzeRepos -INFO: [261/480] Analyzing https://github.com/yucongkoo/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yucongkoo/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yucongkoo/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [261/480] Analyzing https://github.com/ryamgoh/ip.git (master)... +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ryamgoh/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ryamgoh/ip.git (master)... +Sep 06, 2023 1:13:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/WinSheng1/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/WinSheng1/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/WinSheng1/ip.git (master) completed! -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator analyzeRepos -INFO: [262/480] Analyzing https://github.com/ryamgoh/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ryamgoh/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ryamgoh/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yucongkoo/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yucongkoo/ip.git (master)... -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yucongkoo/ip.git (master) completed! -Sep 05, 2023 2:29:46 PM reposense.report.ReportGenerator analyzeRepos -INFO: [263/480] Analyzing https://github.com/Chen-Kuei/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ryamgoh/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [262/480] Analyzing https://github.com/Chen-Kuei/ip.git (master)... +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Chen-Kuei/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Chen-Kuei/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ryamgoh/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ryamgoh/ip.git (master) completed! -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [264/480] Analyzing https://github.com/conradsoon/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Chen-Kuei/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Chen-Kuei/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Chen-Kuei/ip.git (master) completed! -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [265/480] Analyzing https://github.com/GSgiansen/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [263/480] Analyzing https://github.com/yucongkoo/ip.git (master)... +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yucongkoo/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yucongkoo/ip.git (master)... +Sep 06, 2023 1:13:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ryamgoh/ip.git (master)... +Sep 06, 2023 1:13:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ryamgoh/ip.git (master)... +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ryamgoh/ip.git (master) completed! +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [264/480] Analyzing https://github.com/conradsoon/ip.git (master)... +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/conradsoon/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/conradsoon/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yucongkoo/ip.git (master)... +Sep 06, 2023 1:13:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yucongkoo/ip.git (master)... +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yucongkoo/ip.git (master) completed! +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [265/480] Analyzing https://github.com/GSgiansen/ip.git (master)... +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/GSgiansen/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/GSgiansen/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/conradsoon/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/conradsoon/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/conradsoon/ip.git (master) completed! -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [266/480] Analyzing https://github.com/Seonlo99/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Seonlo99/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Seonlo99/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/GSgiansen/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/GSgiansen/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/GSgiansen/ip.git (master) completed! -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [267/480] Analyzing https://github.com/et-irl/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [266/480] Analyzing https://github.com/et-irl/ip.git (master)... +Sep 06, 2023 1:13:45 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/et-irl/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/et-irl/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Seonlo99/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Seonlo99/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Seonlo99/ip.git (master) completed! -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [268/480] Analyzing https://github.com/marioalvaro/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/marioalvaro/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/marioalvaro/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/et-irl/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/GSgiansen/ip.git (master)... +Sep 06, 2023 1:13:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/et-irl/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/et-irl/ip.git (master) completed! -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [269/480] Analyzing https://github.com/tim-pipi/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tim-pipi/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tim-pipi/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [267/480] Analyzing https://github.com/marioalvaro/ip.git (master)... +Sep 06, 2023 1:13:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/GSgiansen/ip.git (master)... +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/GSgiansen/ip.git (master) completed! +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [268/480] Analyzing https://github.com/Seonlo99/ip.git (master)... +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/marioalvaro/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/marioalvaro/ip.git (master)... +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Seonlo99/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Seonlo99/ip.git (master)... +Sep 06, 2023 1:13:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Seonlo99/ip.git (master)... +Sep 06, 2023 1:13:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/marioalvaro/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Seonlo99/ip.git (master)... +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Seonlo99/ip.git (master) completed! +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [269/480] Analyzing https://github.com/joel-foo/ip.git (master)... +Sep 06, 2023 1:13:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/marioalvaro/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/marioalvaro/ip.git (master) completed! -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [270/480] Analyzing https://github.com/brendanneojw/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/brendanneojw/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/brendanneojw/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tim-pipi/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tim-pipi/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tim-pipi/ip.git (master) completed! -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [271/480] Analyzing https://github.com/marcellaantania/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/marcellaantania/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/marcellaantania/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/brendanneojw/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/brendanneojw/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/brendanneojw/ip.git (master) completed! -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [272/480] Analyzing https://github.com/joel-foo/ip.git (master)... -Sep 05, 2023 2:29:47 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [270/480] Analyzing https://github.com/marcellaantania/ip.git (master)... +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/joel-foo/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/joel-foo/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/marcellaantania/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/marcellaantania/ip.git (master)... +Sep 06, 2023 1:13:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/marcellaantania/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/marcellaantania/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/marcellaantania/ip.git (master) completed! -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [273/480] Analyzing https://github.com/li-rongzhi/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/li-rongzhi/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/li-rongzhi/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [271/480] Analyzing https://github.com/brendanneojw/ip.git (master)... +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/brendanneojw/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/brendanneojw/ip.git (master)... +Sep 06, 2023 1:13:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/joel-foo/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/joel-foo/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/joel-foo/ip.git (master) completed! -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [274/480] Analyzing https://github.com/KamiliArsyad/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [272/480] Analyzing https://github.com/li-rongzhi/ip.git (master)... +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/li-rongzhi/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/li-rongzhi/ip.git (master)... +Sep 06, 2023 1:13:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/brendanneojw/ip.git (master)... +Sep 06, 2023 1:13:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/brendanneojw/ip.git (master)... +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/brendanneojw/ip.git (master) completed! +Sep 06, 2023 1:13:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [273/480] Analyzing https://github.com/KamiliArsyad/ip.git (master)... +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/KamiliArsyad/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/KamiliArsyad/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/KamiliArsyad/ip.git (master)... +Sep 06, 2023 1:13:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/KamiliArsyad/ip.git (master)... +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/KamiliArsyad/ip.git (master) completed! +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [274/480] Analyzing https://github.com/seraphimstreets/ip.git (master)... +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/seraphimstreets/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/seraphimstreets/ip.git (master)... +Sep 06, 2023 1:13:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/li-rongzhi/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/li-rongzhi/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/li-rongzhi/ip.git (master) completed! -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepos INFO: [275/480] Analyzing https://github.com/trgao/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/trgao/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/trgao/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/KamiliArsyad/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/KamiliArsyad/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/KamiliArsyad/ip.git (master) completed! -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [276/480] Analyzing https://github.com/seraphimstreets/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/seraphimstreets/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/seraphimstreets/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/seraphimstreets/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/seraphimstreets/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/seraphimstreets/ip.git (master) completed! -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [277/480] Analyzing https://github.com/jean-cq/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jean-cq/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jean-cq/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [276/480] Analyzing https://github.com/lilozz2/ip.git (master)... +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lilozz2/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lilozz2/ip.git (master)... +Sep 06, 2023 1:13:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/trgao/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/trgao/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/trgao/ip.git (master) completed! -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [278/480] Analyzing https://github.com/lilozz2/ip.git (master)... -Sep 05, 2023 2:29:48 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lilozz2/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lilozz2/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jean-cq/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jean-cq/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [277/480] Analyzing https://github.com/jean-cq/ip.git (master)... +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jean-cq/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jean-cq/ip.git (master)... +Sep 06, 2023 1:13:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lilozz2/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jean-cq/ip.git (master) completed! -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [279/480] Analyzing https://github.com/jedkohjk/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lilozz2/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lilozz2/ip.git (master) completed! -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [278/480] Analyzing https://github.com/jedkohjk/ip.git (master)... +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jedkohjk/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jedkohjk/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jean-cq/ip.git (master)... +Sep 06, 2023 1:13:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jean-cq/ip.git (master)... +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jean-cq/ip.git (master) completed! +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [279/480] Analyzing https://github.com/tim-pipi/ip.git (master)... +Sep 06, 2023 1:13:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tim-pipi/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tim-pipi/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tim-pipi/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tim-pipi/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tim-pipi/ip.git (master) completed! +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepos INFO: [280/480] Analyzing https://github.com/yytan25/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jedkohjk/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/yytan25/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/yytan25/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yytan25/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yytan25/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yytan25/ip.git (master) completed! -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jedkohjk/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jedkohjk/ip.git (master) completed! +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepos INFO: [281/480] Analyzing https://github.com/ryantzr1/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ryantzr1/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ryantzr1/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jedkohjk/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yytan25/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yytan25/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yytan25/ip.git (master) completed! +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [282/480] Analyzing https://github.com/TohLiYuan/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/TohLiYuan/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/TohLiYuan/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ryantzr1/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ryantzr1/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jedkohjk/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ryantzr1/ip.git (master) completed! -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jedkohjk/ip.git (master) completed! -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [282/480] Analyzing https://github.com/maypfv/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [283/480] Analyzing https://github.com/JizhuoChen/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [283/480] Analyzing https://github.com/maypfv/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/maypfv/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/maypfv/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/TohLiYuan/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/TohLiYuan/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/TohLiYuan/ip.git (master) completed! +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [284/480] Analyzing https://github.com/JizhuoChen/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/JizhuoChen/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/JizhuoChen/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/JizhuoChen/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/JizhuoChen/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/JizhuoChen/ip.git (master) completed! -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [284/480] Analyzing https://github.com/TohLiYuan/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/TohLiYuan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/TohLiYuan/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/maypfv/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/maypfv/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/maypfv/ip.git (master) completed! -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [285/480] Analyzing https://github.com/Goh-Li-Ting/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [285/480] Analyzing https://github.com/ChongWeiJie29/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ChongWeiJie29/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ChongWeiJie29/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/JizhuoChen/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/JizhuoChen/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/JizhuoChen/ip.git (master) completed! +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [286/480] Analyzing https://github.com/Goh-Li-Ting/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Goh-Li-Ting/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Goh-Li-Ting/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/TohLiYuan/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/TohLiYuan/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/TohLiYuan/ip.git (master) completed! -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [286/480] Analyzing https://github.com/kristayeo/ip.git (master)... -Sep 05, 2023 2:29:49 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ChongWeiJie29/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ChongWeiJie29/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ChongWeiJie29/ip.git (master) completed! +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [287/480] Analyzing https://github.com/kristayeo/ip.git (master)... +Sep 06, 2023 1:13:48 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kristayeo/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kristayeo/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Goh-Li-Ting/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Goh-Li-Ting/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Goh-Li-Ting/ip.git (master) completed! -Sep 05, 2023 2:29:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [287/480] Analyzing https://github.com/ChongWeiJie29/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ChongWeiJie29/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ChongWeiJie29/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/kristayeo/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kristayeo/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:49 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/kristayeo/ip.git (master) completed! -Sep 05, 2023 2:29:50 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:49 AM reposense.report.ReportGenerator analyzeRepos INFO: [288/480] Analyzing https://github.com/derekjxtan/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Goh-Li-Ting/ip.git (master)... +Sep 06, 2023 1:13:49 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/derekjxtan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/derekjxtan/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ChongWeiJie29/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ChongWeiJie29/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ChongWeiJie29/ip.git (master) completed! -Sep 05, 2023 2:29:50 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Goh-Li-Ting/ip.git (master)... +Sep 06, 2023 1:13:49 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Goh-Li-Ting/ip.git (master) completed! +Sep 06, 2023 1:13:49 AM reposense.report.ReportGenerator analyzeRepos INFO: [289/480] Analyzing https://github.com/shashahchk/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:49 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/shashahchk/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/shashahchk/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/derekjxtan/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/derekjxtan/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:49 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/derekjxtan/ip.git (master) completed! -Sep 05, 2023 2:29:50 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:49 AM reposense.report.ReportGenerator analyzeRepos INFO: [290/480] Analyzing https://github.com/Chandan8186/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:49 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Chandan8186/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Chandan8186/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Chandan8186/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Chandan8186/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:49 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Chandan8186/ip.git (master) completed! -Sep 05, 2023 2:29:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [291/480] Analyzing https://github.com/AndrewJanong/ip.git (master)... -Sep 05, 2023 2:29:50 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AndrewJanong/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AndrewJanong/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AndrewJanong/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AndrewJanong/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AndrewJanong/ip.git (master) completed! -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [292/480] Analyzing https://github.com/alyssaongyx/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:49 AM reposense.report.ReportGenerator analyzeRepos +INFO: [291/480] Analyzing https://github.com/alyssaongyx/ip.git (master)... +Sep 06, 2023 1:13:49 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/alyssaongyx/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/alyssaongyx/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/alyssaongyx/ip.git (master)... +Sep 06, 2023 1:13:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/alyssaongyx/ip.git (master)... +Sep 06, 2023 1:13:49 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/alyssaongyx/ip.git (master) completed! +Sep 06, 2023 1:13:49 AM reposense.report.ReportGenerator analyzeRepos +INFO: [292/480] Analyzing https://github.com/AndrewJanong/ip.git (master)... +Sep 06, 2023 1:13:49 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AndrewJanong/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AndrewJanong/ip.git (master)... +Sep 06, 2023 1:13:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/shashahchk/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/shashahchk/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/shashahchk/ip.git (master) completed! -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepos INFO: [293/480] Analyzing https://github.com/Kailash201/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Kailash201/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Kailash201/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/alyssaongyx/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/alyssaongyx/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/alyssaongyx/ip.git (master) completed! -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AndrewJanong/ip.git (master)... +Sep 06, 2023 1:13:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AndrewJanong/ip.git (master)... +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AndrewJanong/ip.git (master) completed! +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepos INFO: [294/480] Analyzing https://github.com/laurenlim2112/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/laurenlim2112/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/laurenlim2112/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Kailash201/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Kailash201/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Kailash201/ip.git (master) completed! -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepos INFO: [295/480] Analyzing https://github.com/lambraydon/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lambraydon/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lambraydon/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/laurenlim2112/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/laurenlim2112/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/laurenlim2112/ip.git (master) completed! -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepos INFO: [296/480] Analyzing https://github.com/sk2001git/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sk2001git/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sk2001git/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lambraydon/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lambraydon/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lambraydon/ip.git (master) completed! -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepos INFO: [297/480] Analyzing https://github.com/chonguschonguschongus/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/chonguschonguschongus/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/chonguschonguschongus/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sk2001git/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/chonguschonguschongus/ip.git (master)... +Sep 06, 2023 1:13:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sk2001git/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sk2001git/ip.git (master) completed! -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [298/480] Analyzing https://github.com/peasantbird/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/chonguschonguschongus/ip.git (master)... -Sep 05, 2023 2:29:51 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/peasantbird/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/peasantbird/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/chonguschonguschongus/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/chonguschonguschongus/ip.git (master) completed! -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [299/480] Analyzing https://github.com/lshaoqin/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [298/480] Analyzing https://github.com/lshaoqin/ip.git (master)... +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [299/480] Analyzing https://github.com/peasantbird/ip.git (master)... +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lshaoqin/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lshaoqin/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/peasantbird/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/peasantbird/ip.git (master)... +Sep 06, 2023 1:13:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/peasantbird/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/peasantbird/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/peasantbird/ip.git (master) completed! -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepos INFO: [300/480] Analyzing https://github.com/WangCheng0116/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/WangCheng0116/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/WangCheng0116/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lshaoqin/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lshaoqin/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lshaoqin/ip.git (master) completed! -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepos INFO: [301/480] Analyzing https://github.com/teozhengyang/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/teozhengyang/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/teozhengyang/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/teozhengyang/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/teozhengyang/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/teozhengyang/ip.git (master) completed! -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [302/480] Analyzing https://github.com/elaineshijie/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/elaineshijie/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/elaineshijie/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [302/480] Analyzing https://github.com/chewjh1234/ip.git (master)... +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/chewjh1234/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/chewjh1234/ip.git (master)... +Sep 06, 2023 1:13:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/WangCheng0116/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/WangCheng0116/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/WangCheng0116/ip.git (master) completed! -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [303/480] Analyzing https://github.com/chewjh1234/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/chewjh1234/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/chewjh1234/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/elaineshijie/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/elaineshijie/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/elaineshijie/ip.git (master) completed! -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [304/480] Analyzing https://github.com/lynnlow175/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [303/480] Analyzing https://github.com/lynnlow175/ip.git (master)... +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lynnlow175/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lynnlow175/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/chewjh1234/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/chewjh1234/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/chewjh1234/ip.git (master) completed! -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [305/480] Analyzing https://github.com/lordidiot/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lordidiot/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lordidiot/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [304/480] Analyzing https://github.com/elaineshijie/ip.git (master)... +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/elaineshijie/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/elaineshijie/ip.git (master)... +Sep 06, 2023 1:13:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lynnlow175/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lynnlow175/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lynnlow175/ip.git (master) completed! -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [306/480] Analyzing https://github.com/RSXIX/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/RSXIX/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/RSXIX/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [305/480] Analyzing https://github.com/lordidiot/ip.git (master)... +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lordidiot/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lordidiot/ip.git (master)... +Sep 06, 2023 1:13:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/elaineshijie/ip.git (master)... +Sep 06, 2023 1:13:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/elaineshijie/ip.git (master)... +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/elaineshijie/ip.git (master) completed! +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [306/480] Analyzing https://github.com/chew01/ip.git (master)... +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/chew01/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/chew01/ip.git (master)... +Sep 06, 2023 1:13:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lordidiot/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lordidiot/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lordidiot/ip.git (master) completed! -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [307/480] Analyzing https://github.com/chew01/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/chew01/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/chew01/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [307/480] Analyzing https://github.com/RSXIX/ip.git (master)... +Sep 06, 2023 1:13:51 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/RSXIX/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/RSXIX/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/RSXIX/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/chew01/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/RSXIX/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/RSXIX/ip.git (master) completed! -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepos INFO: [308/480] Analyzing https://github.com/juliusgambe/ip.git (master)... -Sep 05, 2023 2:29:52 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/juliusgambe/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/juliusgambe/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/chew01/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/chew01/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/chew01/ip.git (master) completed! -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [309/480] Analyzing https://github.com/zhonghan721/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepos +INFO: [309/480] Analyzing https://github.com/WZWren/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/juliusgambe/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/juliusgambe/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/WZWren/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/WZWren/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/WZWren/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/WZWren/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/WZWren/ip.git (master) completed! +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepos +INFO: [310/480] Analyzing https://github.com/zhonghan721/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/juliusgambe/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/zhonghan721/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/zhonghan721/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/juliusgambe/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/juliusgambe/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/juliusgambe/ip.git (master) completed! -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [310/480] Analyzing https://github.com/wasjoe1/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wasjoe1/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wasjoe1/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepos +INFO: [311/480] Analyzing https://github.com/inezkok/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/inezkok/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/inezkok/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/zhonghan721/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/zhonghan721/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/zhonghan721/ip.git (master) completed! -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [311/480] Analyzing https://github.com/WZWren/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/WZWren/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/WZWren/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wasjoe1/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/wasjoe1/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/wasjoe1/ip.git (master) completed! -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [312/480] Analyzing https://github.com/inezkok/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/inezkok/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/inezkok/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/WZWren/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/WZWren/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/WZWren/ip.git (master) completed! -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepos +INFO: [312/480] Analyzing https://github.com/wasjoe1/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wasjoe1/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wasjoe1/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/inezkok/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/inezkok/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/inezkok/ip.git (master) completed! +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepos INFO: [313/480] Analyzing https://github.com/kokrui/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kokrui/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kokrui/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/kokrui/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wasjoe1/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kokrui/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/kokrui/ip.git (master) completed! -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepos INFO: [314/480] Analyzing https://github.com/jinyang628/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/wasjoe1/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/wasjoe1/ip.git (master) completed! +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator analyzeRepos +INFO: [315/480] Analyzing https://github.com/nananakx-x/ip.git (master)... +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jinyang628/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jinyang628/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/inezkok/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/inezkok/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/inezkok/ip.git (master) completed! -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [315/480] Analyzing https://github.com/nananakx-x/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:52 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nananakx-x/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nananakx-x/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jinyang628/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nananakx-x/ip.git (master)... +Sep 06, 2023 1:13:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jinyang628/ip.git (master)... -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nananakx-x/ip.git (master)... +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jinyang628/ip.git (master) completed! -Sep 05, 2023 2:29:53 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nananakx-x/ip.git (master) completed! +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepos INFO: [316/480] Analyzing https://github.com/ylyma/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [317/480] Analyzing https://github.com/timetraveller-123/ip.git (master)... +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ylyma/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ylyma/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nananakx-x/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nananakx-x/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nananakx-x/ip.git (master) completed! -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [317/480] Analyzing https://github.com/AnnabelTing/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AnnabelTing/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AnnabelTing/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/timetraveller-123/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/timetraveller-123/ip.git (master)... +Sep 06, 2023 1:13:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/timetraveller-123/ip.git (master)... +Sep 06, 2023 1:13:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/timetraveller-123/ip.git (master)... +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/timetraveller-123/ip.git (master) completed! +Sep 06, 2023 1:13:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ylyma/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [318/480] Analyzing https://github.com/AnnabelTing/ip.git (master)... +Sep 06, 2023 1:13:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ylyma/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ylyma/ip.git (master) completed! -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [318/480] Analyzing https://github.com/timetraveller-123/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/timetraveller-123/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/timetraveller-123/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [319/480] Analyzing https://github.com/Jweng88/ip.git (master)... +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AnnabelTing/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AnnabelTing/ip.git (master)... +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Jweng88/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Jweng88/ip.git (master)... +Sep 06, 2023 1:13:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AnnabelTing/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AnnabelTing/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AnnabelTing/ip.git (master) completed! -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [319/480] Analyzing https://github.com/LicongHuang/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [320/480] Analyzing https://github.com/LicongHuang/ip.git (master)... +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/LicongHuang/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/LicongHuang/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/timetraveller-123/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/timetraveller-123/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LicongHuang/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/timetraveller-123/ip.git (master) completed! -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [320/480] Analyzing https://github.com/Jweng88/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LicongHuang/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LicongHuang/ip.git (master) completed! -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [321/480] Analyzing https://github.com/EricXiong420/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Jweng88/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Jweng88/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/EricXiong420/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/EricXiong420/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Jweng88/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Jweng88/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Jweng88/ip.git (master) completed! -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [322/480] Analyzing https://github.com/jovkusuma/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [321/480] Analyzing https://github.com/jovkusuma/ip.git (master)... +Sep 06, 2023 1:13:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LicongHuang/ip.git (master)... +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jovkusuma/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jovkusuma/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/EricXiong420/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/EricXiong420/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/EricXiong420/ip.git (master) completed! -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [323/480] Analyzing https://github.com/bhnuka/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/bhnuka/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/bhnuka/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LicongHuang/ip.git (master)... +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LicongHuang/ip.git (master) completed! +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [322/480] Analyzing https://github.com/EricXiong420/ip.git (master)... +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/EricXiong420/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/EricXiong420/ip.git (master)... +Sep 06, 2023 1:13:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jovkusuma/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jovkusuma/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jovkusuma/ip.git (master) completed! -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [323/480] Analyzing https://github.com/yarnmengnus/ip.git (master)... +Sep 06, 2023 1:13:53 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yarnmengnus/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yarnmengnus/ip.git (master)... +Sep 06, 2023 1:13:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/EricXiong420/ip.git (master)... +Sep 06, 2023 1:13:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/EricXiong420/ip.git (master)... +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/EricXiong420/ip.git (master) completed! +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepos INFO: [324/480] Analyzing https://github.com/J-hta-n/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/J-hta-n/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/J-hta-n/ip.git (master)... -Sep 05, 2023 2:29:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/bhnuka/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/bhnuka/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/bhnuka/ip.git (master) completed! -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yarnmengnus/ip.git (master)... +Sep 06, 2023 1:13:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yarnmengnus/ip.git (master)... +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yarnmengnus/ip.git (master) completed! +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepos INFO: [325/480] Analyzing https://github.com/Tim-Siu/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Tim-Siu/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Tim-Siu/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/J-hta-n/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/J-hta-n/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/J-hta-n/ip.git (master) completed! -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [326/480] Analyzing https://github.com/yarnmengnus/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yarnmengnus/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yarnmengnus/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [326/480] Analyzing https://github.com/bhnuka/ip.git (master)... +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/bhnuka/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/bhnuka/ip.git (master)... +Sep 06, 2023 1:13:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Tim-Siu/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Tim-Siu/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Tim-Siu/ip.git (master) completed! -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [327/480] Analyzing https://github.com/sopa301/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/sopa301/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/sopa301/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yarnmengnus/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yarnmengnus/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yarnmengnus/ip.git (master) completed! -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [328/480] Analyzing https://github.com/flexibo/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [327/480] Analyzing https://github.com/flexibo/ip.git (master)... +Sep 06, 2023 1:13:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/bhnuka/ip.git (master)... +Sep 06, 2023 1:13:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/bhnuka/ip.git (master)... +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/bhnuka/ip.git (master) completed! +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [328/480] Analyzing https://github.com/sopa301/ip.git (master)... +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/flexibo/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/flexibo/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/sopa301/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/sopa301/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/sopa301/ip.git (master) completed! -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [329/480] Analyzing https://github.com/ngeeyonglim/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ngeeyonglim/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ngeeyonglim/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/sopa301/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/sopa301/ip.git (master)... +Sep 06, 2023 1:13:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/flexibo/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/flexibo/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/flexibo/ip.git (master) completed! -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [329/480] Analyzing https://github.com/ngeeyonglim/ip.git (master)... +Sep 06, 2023 1:13:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/sopa301/ip.git (master)... +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ngeeyonglim/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ngeeyonglim/ip.git (master)... +Sep 06, 2023 1:13:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/sopa301/ip.git (master)... +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/sopa301/ip.git (master) completed! +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator analyzeRepos INFO: [330/480] Analyzing https://github.com/ItsTYtan/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:54 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ItsTYtan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ItsTYtan/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ngeeyonglim/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ngeeyonglim/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ngeeyonglim/ip.git (master) completed! -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [331/480] Analyzing https://github.com/javinchua/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/javinchua/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/javinchua/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ItsTYtan/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [331/480] Analyzing https://github.com/amosting/ip.git (master)... +Sep 06, 2023 1:13:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ItsTYtan/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ItsTYtan/ip.git (master) completed! -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [332/480] Analyzing https://github.com/amosting/ip.git (master)... -Sep 05, 2023 2:29:55 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/amosting/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/amosting/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ItsTYtan/ip.git (master) completed! +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [332/480] Analyzing https://github.com/javinchua/ip.git (master)... +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/javinchua/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/javinchua/ip.git (master)... +Sep 06, 2023 1:13:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/amosting/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/amosting/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/amosting/ip.git (master) completed! -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [333/480] Analyzing https://github.com/Cleon2/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Cleon2/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Cleon2/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/javinchua/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/javinchua/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/javinchua/ip.git (master) completed! -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [334/480] Analyzing https://github.com/ketweeen/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [333/480] Analyzing https://github.com/ketweeen/ip.git (master)... +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ketweeen/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ketweeen/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ketweeen/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ketweeen/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ketweeen/ip.git (master) completed! -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [334/480] Analyzing https://github.com/Cleon2/ip.git (master)... +Sep 06, 2023 1:13:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/javinchua/ip.git (master)... +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Cleon2/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Cleon2/ip.git (master)... +Sep 06, 2023 1:13:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/javinchua/ip.git (master)... +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/javinchua/ip.git (master) completed! +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepos INFO: [335/480] Analyzing https://github.com/sudarshan2401/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sudarshan2401/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sudarshan2401/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Cleon2/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Cleon2/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Cleon2/ip.git (master) completed! -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [336/480] Analyzing https://github.com/wui-hong/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wui-hong/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wui-hong/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sudarshan2401/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sudarshan2401/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sudarshan2401/ip.git (master) completed! -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [336/480] Analyzing https://github.com/wui-hong/ip.git (master)... +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wui-hong/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wui-hong/ip.git (master)... +Sep 06, 2023 1:13:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Cleon2/ip.git (master)... +Sep 06, 2023 1:13:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Cleon2/ip.git (master)... +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Cleon2/ip.git (master) completed! +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepos INFO: [337/480] Analyzing https://github.com/Respirayson/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Respirayson/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Respirayson/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wui-hong/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wui-hong/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wui-hong/ip.git (master) completed! -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator analyzeRepos INFO: [338/480] Analyzing https://github.com/Chrainx/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:55 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Chrainx/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Chrainx/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Chrainx/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Respirayson/ip.git (master)... +Sep 06, 2023 1:13:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Chrainx/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Chrainx/ip.git (master) completed! -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [339/480] Analyzing https://github.com/shishirbychapur/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/shishirbychapur/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/shishirbychapur/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Respirayson/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [339/480] Analyzing https://github.com/sunzihan23/ip.git (master)... +Sep 06, 2023 1:13:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Respirayson/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Respirayson/ip.git (master) completed! -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [340/480] Analyzing https://github.com/sunzihan23/ip.git (master)... -Sep 05, 2023 2:29:56 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [340/480] Analyzing https://github.com/shishirbychapur/ip.git (master)... +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sunzihan23/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sunzihan23/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/shishirbychapur/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/shishirbychapur/ip.git (master)... +Sep 06, 2023 1:13:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sunzihan23/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sunzihan23/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sunzihan23/ip.git (master) completed! -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepos INFO: [341/480] Analyzing https://github.com/wj331/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wj331/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wj331/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/shishirbychapur/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/shishirbychapur/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/shishirbychapur/ip.git (master) completed! -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepos INFO: [342/480] Analyzing https://github.com/tjch-o/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tjch-o/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tjch-o/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wj331/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tjch-o/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tjch-o/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tjch-o/ip.git (master) completed! -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [343/480] Analyzing https://github.com/licongshen12/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wj331/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wj331/ip.git (master) completed! -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [344/480] Analyzing https://github.com/mamayuan/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/licongshen12/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/licongshen12/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [343/480] Analyzing https://github.com/mamayuan/ip.git (master)... +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/mamayuan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/mamayuan/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tjch-o/ip.git (master)... +Sep 06, 2023 1:13:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/mamayuan/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tjch-o/ip.git (master)... +Sep 06, 2023 1:13:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/mamayuan/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tjch-o/ip.git (master) completed! +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/mamayuan/ip.git (master) completed! -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [344/480] Analyzing https://github.com/licongshen12/ip.git (master)... +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator analyzeRepos INFO: [345/480] Analyzing https://github.com/ong-wei-hong/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/licongshen12/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/licongshen12/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/licongshen12/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/licongshen12/ip.git (master)... +Sep 06, 2023 1:13:56 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ong-wei-hong/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ong-wei-hong/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/licongshen12/ip.git (master)... +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/licongshen12/ip.git (master)... +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/licongshen12/ip.git (master) completed! -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepos INFO: [346/480] Analyzing https://github.com/tanboonkhong/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tanboonkhong/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tanboonkhong/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tanboonkhong/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tanboonkhong/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tanboonkhong/ip.git (master) completed! -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [347/480] Analyzing https://github.com/cbj252/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/cbj252/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/cbj252/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ong-wei-hong/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ong-wei-hong/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ong-wei-hong/ip.git (master) completed! -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [347/480] Analyzing https://github.com/cbj252/ip.git (master)... +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/cbj252/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/cbj252/ip.git (master)... +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tanboonkhong/ip.git (master)... +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tanboonkhong/ip.git (master)... +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tanboonkhong/ip.git (master) completed! +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepos INFO: [348/480] Analyzing https://github.com/AlfredBeNoel/ip.git (master)... -Sep 05, 2023 2:29:57 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AlfredBeNoel/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AlfredBeNoel/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AlfredBeNoel/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AlfredBeNoel/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AlfredBeNoel/ip.git (master) completed! -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [349/480] Analyzing https://github.com/keaganpzh/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/cbj252/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/keaganpzh/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/keaganpzh/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/cbj252/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/cbj252/ip.git (master) completed! -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [349/480] Analyzing https://github.com/keaganpzh/ip.git (master)... +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AlfredBeNoel/ip.git (master)... +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/keaganpzh/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/keaganpzh/ip.git (master)... +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AlfredBeNoel/ip.git (master)... +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AlfredBeNoel/ip.git (master) completed! +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepos INFO: [350/480] Analyzing https://github.com/ElginTZM/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ElginTZM/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ElginTZM/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ElginTZM/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ElginTZM/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ElginTZM/ip.git (master) completed! -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepos INFO: [351/480] Analyzing https://github.com/LimJH2002/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/keaganpzh/ip.git (master)... +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/LimJH2002/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/LimJH2002/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/keaganpzh/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/keaganpzh/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/keaganpzh/ip.git (master) completed! -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepos INFO: [352/480] Analyzing https://github.com/cmHuang777/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/cmHuang777/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/cmHuang777/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/LimJH2002/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LimJH2002/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LimJH2002/ip.git (master) completed! -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepos INFO: [353/480] Analyzing https://github.com/WeeeHung/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/cmHuang777/ip.git (master)... +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/WeeeHung/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/WeeeHung/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/cmHuang777/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/cmHuang777/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/cmHuang777/ip.git (master) completed! -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator analyzeRepos INFO: [354/480] Analyzing https://github.com/xxiaoweii/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/WeeeHung/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:57 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/xxiaoweii/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/xxiaoweii/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/WeeeHung/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/WeeeHung/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/WeeeHung/ip.git (master) completed! -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [355/480] Analyzing https://github.com/LinWanLeii/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LinWanLeii/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LinWanLeii/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [355/480] Analyzing https://github.com/dhruvir29/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dhruvir29/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dhruvir29/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/xxiaoweii/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/xxiaoweii/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/xxiaoweii/ip.git (master) completed! -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [356/480] Analyzing https://github.com/dhruvir29/ip.git (master)... -Sep 05, 2023 2:29:58 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dhruvir29/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dhruvir29/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LinWanLeii/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LinWanLeii/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LinWanLeii/ip.git (master) completed! -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepos -INFO: [357/480] Analyzing https://github.com/rayyan35p/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [356/480] Analyzing https://github.com/rayyan35p/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/rayyan35p/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/rayyan35p/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/dhruvir29/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/dhruvir29/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dhruvir29/ip.git (master) completed! -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepos -INFO: [358/480] Analyzing https://github.com/Song-Mengfei/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Song-Mengfei/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Song-Mengfei/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [357/480] Analyzing https://github.com/LinWanLeii/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LinWanLeii/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LinWanLeii/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/rayyan35p/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/rayyan35p/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/rayyan35p/ip.git (master) completed! -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepos -INFO: [359/480] Analyzing https://github.com/jinyuan0425/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jinyuan0425/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jinyuan0425/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [358/480] Analyzing https://github.com/Song-Mengfei/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Song-Mengfei/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Song-Mengfei/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LinWanLeii/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LinWanLeii/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LinWanLeii/ip.git (master) completed! +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [359/480] Analyzing https://github.com/tiif/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tiif/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tiif/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Song-Mengfei/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Song-Mengfei/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Song-Mengfei/ip.git (master) completed! -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepos -INFO: [360/480] Analyzing https://github.com/nicholascher/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [360/480] Analyzing https://github.com/jinyuan0425/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jinyuan0425/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jinyuan0425/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tiif/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tiif/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tiif/ip.git (master) completed! +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [361/480] Analyzing https://github.com/nicholascher/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nicholascher/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nicholascher/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jinyuan0425/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jinyuan0425/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jinyuan0425/ip.git (master) completed! -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepos -INFO: [361/480] Analyzing https://github.com/tiif/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tiif/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tiif/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nicholascher/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tiif/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nicholascher/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nicholascher/ip.git (master) completed! -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tiif/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tiif/ip.git (master) completed! -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepos INFO: [362/480] Analyzing https://github.com/hcs1203/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepos -INFO: [363/480] Analyzing https://github.com/papataco14/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/hcs1203/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/hcs1203/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/papataco14/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/papataco14/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nicholascher/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nicholascher/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nicholascher/ip.git (master) completed! +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/hcs1203/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [363/480] Analyzing https://github.com/NereusWB922/ip.git (master)... +Sep 06, 2023 1:13:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/hcs1203/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/hcs1203/ip.git (master) completed! -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator analyzeRepos INFO: [364/480] Analyzing https://github.com/KamJiaYue/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/KamJiaYue/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/KamJiaYue/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/papataco14/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/papataco14/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/papataco14/ip.git (master) completed! -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepos -INFO: [365/480] Analyzing https://github.com/NereusWB922/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:58 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/NereusWB922/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:29:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/NereusWB922/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/KamJiaYue/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/KamJiaYue/ip.git (master)... +Sep 06, 2023 1:13:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/KamJiaYue/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/KamJiaYue/ip.git (master)... -Sep 05, 2023 2:29:59 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/KamJiaYue/ip.git (master) completed! -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [365/480] Analyzing https://github.com/papataco14/ip.git (master)... +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/papataco14/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/papataco14/ip.git (master)... +Sep 06, 2023 1:13:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/NereusWB922/ip.git (master)... +Sep 06, 2023 1:13:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/NereusWB922/ip.git (master)... +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/NereusWB922/ip.git (master) completed! +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator analyzeRepos INFO: [366/480] Analyzing https://github.com/PohSayKeong/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/PohSayKeong/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/PohSayKeong/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/NereusWB922/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/papataco14/ip.git (master)... +Sep 06, 2023 1:13:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/papataco14/ip.git (master)... +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/papataco14/ip.git (master) completed! +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [367/480] Analyzing https://github.com/jacobcuison/ip.git (master)... +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jacobcuison/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jacobcuison/ip.git (master)... +Sep 06, 2023 1:13:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/PohSayKeong/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/PohSayKeong/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/PohSayKeong/ip.git (master) completed! -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator analyzeRepos -INFO: [367/480] Analyzing https://github.com/jacobcuison/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/NereusWB922/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/NereusWB922/ip.git (master) completed! -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator analyzeRepos INFO: [368/480] Analyzing https://github.com/ivyy-poison/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jacobcuison/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jacobcuison/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ivyy-poison/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ivyy-poison/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:13:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jacobcuison/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ivyy-poison/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jacobcuison/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jacobcuison/ip.git (master) completed! -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator analyzeRepos INFO: [369/480] Analyzing https://github.com/ji-just-ji/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ji-just-ji/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:13:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ji-just-ji/ip.git (master)... +Sep 06, 2023 1:13:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ivyy-poison/ip.git (master)... +Sep 06, 2023 1:13:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ivyy-poison/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ivyy-poison/ip.git (master) completed! -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator analyzeRepos INFO: [370/480] Analyzing https://github.com/kohkaijie/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ji-just-ji/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ji-just-ji/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:13:59 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kohkaijie/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:13:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kohkaijie/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kohkaijie/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ji-just-ji/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kohkaijie/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kohkaijie/ip.git (master) completed! -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ji-just-ji/ip.git (master)... +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ji-just-ji/ip.git (master) completed! +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepos INFO: [371/480] Analyzing https://github.com/rocketninja7/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/rocketninja7/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/rocketninja7/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ji-just-ji/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ji-just-ji/ip.git (master) completed! -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kohkaijie/ip.git (master)... +Sep 06, 2023 1:14:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kohkaijie/ip.git (master)... +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kohkaijie/ip.git (master) completed! +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepos INFO: [372/480] Analyzing https://github.com/zekone/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/zekone/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/zekone/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/rocketninja7/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/rocketninja7/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/rocketninja7/ip.git (master) completed! -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator analyzeRepos -INFO: [373/480] Analyzing https://github.com/PearlynnT/ip.git (master)... -Sep 05, 2023 2:30:00 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/PearlynnT/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/PearlynnT/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zekone/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zekone/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zekone/ip.git (master) completed! -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepos -INFO: [374/480] Analyzing https://github.com/markgcera/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [373/480] Analyzing https://github.com/markgcera/ip.git (master)... +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/markgcera/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/markgcera/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/PearlynnT/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/markgcera/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/PearlynnT/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/PearlynnT/ip.git (master) completed! -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/markgcera/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/markgcera/ip.git (master) completed! +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [374/480] Analyzing https://github.com/PearlynnT/ip.git (master)... +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/PearlynnT/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/PearlynnT/ip.git (master)... +Sep 06, 2023 1:14:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zekone/ip.git (master)... +Sep 06, 2023 1:14:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zekone/ip.git (master)... +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zekone/ip.git (master) completed! +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepos INFO: [375/480] Analyzing https://github.com/StevenLiudw/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/markgcera/ip.git (master) completed! -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepos -INFO: [376/480] Analyzing https://github.com/mounilsankar/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/StevenLiudw/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/StevenLiudw/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/mounilsankar/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/mounilsankar/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/mounilsankar/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/mounilsankar/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/mounilsankar/ip.git (master) completed! -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/PearlynnT/ip.git (master)... +Sep 06, 2023 1:14:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/PearlynnT/ip.git (master)... +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/PearlynnT/ip.git (master) completed! +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [376/480] Analyzing https://github.com/TeeRenJing/ip.git (master)... +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/TeeRenJing/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/TeeRenJing/ip.git (master)... +Sep 06, 2023 1:14:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/StevenLiudw/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepos -INFO: [377/480] Analyzing https://github.com/dloh2236/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/StevenLiudw/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dloh2236/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dloh2236/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/StevenLiudw/ip.git (master) completed! -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepos -INFO: [378/480] Analyzing https://github.com/TeeRenJing/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/TeeRenJing/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/TeeRenJing/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [377/480] Analyzing https://github.com/mounilsankar/ip.git (master)... +Sep 06, 2023 1:14:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/mounilsankar/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/mounilsankar/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/TeeRenJing/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/dloh2236/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/TeeRenJing/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/TeeRenJing/ip.git (master) completed! -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [378/480] Analyzing https://github.com/dloh2236/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dloh2236/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dloh2236/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/mounilsankar/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/mounilsankar/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/mounilsankar/ip.git (master) completed! +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator analyzeRepos INFO: [379/480] Analyzing https://github.com/zannloo/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/dloh2236/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/zannloo/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/zannloo/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/dloh2236/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/dloh2236/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dloh2236/ip.git (master) completed! -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepos -INFO: [380/480] Analyzing https://github.com/junnengsoo/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/junnengsoo/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/junnengsoo/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/junnengsoo/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/junnengsoo/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/junnengsoo/ip.git (master) completed! -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zannloo/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepos -INFO: [381/480] Analyzing https://github.com/freshcabbage123/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zannloo/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [380/480] Analyzing https://github.com/freshcabbage123/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/freshcabbage123/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/freshcabbage123/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zannloo/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zannloo/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/zannloo/ip.git (master) completed! -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [381/480] Analyzing https://github.com/junnengsoo/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/junnengsoo/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/junnengsoo/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/freshcabbage123/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/freshcabbage123/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/freshcabbage123/ip.git (master) completed! +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator analyzeRepos INFO: [382/480] Analyzing https://github.com/Kokseng1/ip.git (master)... -Sep 05, 2023 2:30:01 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Kokseng1/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Kokseng1/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/junnengsoo/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/junnengsoo/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/junnengsoo/ip.git (master) completed! +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [383/480] Analyzing https://github.com/itsNatTan/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/itsNatTan/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/itsNatTan/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Kokseng1/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/freshcabbage123/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Kokseng1/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Kokseng1/ip.git (master) completed! -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator analyzeRepos -INFO: [383/480] Analyzing https://github.com/itsNatTan/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/freshcabbage123/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/freshcabbage123/ip.git (master) completed! -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator analyzeRepos INFO: [384/480] Analyzing https://github.com/tjingsheng/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/itsNatTan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/itsNatTan/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tjingsheng/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tjingsheng/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/itsNatTan/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/itsNatTan/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/itsNatTan/ip.git (master) completed! -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator analyzeRepos -INFO: [385/480] Analyzing https://github.com/alientian/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [385/480] Analyzing https://github.com/ZD292/ip.git (master)... +Sep 06, 2023 1:14:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ZD292/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ZD292/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tjingsheng/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/alientian/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/alientian/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tjingsheng/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tjingsheng/ip.git (master) completed! -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator analyzeRepos -INFO: [386/480] Analyzing https://github.com/ZD292/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ZD292/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ZD292/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/alientian/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/alientian/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/alientian/ip.git (master) completed! -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator analyzeRepos -INFO: [387/480] Analyzing https://github.com/frrrrry/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/frrrrry/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/frrrrry/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [386/480] Analyzing https://github.com/alientian/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ZD292/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/alientian/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/alientian/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ZD292/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ZD292/ip.git (master) completed! -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator analyzeRepos -INFO: [388/480] Analyzing https://github.com/SungMatt/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/SungMatt/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/SungMatt/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/SungMatt/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/SungMatt/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/SungMatt/ip.git (master) completed! -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator analyzeRepos -INFO: [389/480] Analyzing https://github.com/MagnificentCreature/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [387/480] Analyzing https://github.com/frrrrry/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/frrrrry/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/frrrrry/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/alientian/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/alientian/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/alientian/ip.git (master) completed! +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [388/480] Analyzing https://github.com/MagnificentCreature/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/MagnificentCreature/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/MagnificentCreature/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/frrrrry/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/frrrrry/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/frrrrry/ip.git (master) completed! -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator analyzeRepos -INFO: [390/480] Analyzing https://github.com/andrefoo/ip.git (master)... -Sep 05, 2023 2:30:02 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/andrefoo/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/andrefoo/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/andrefoo/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/andrefoo/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/andrefoo/ip.git (master) completed! -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepos -INFO: [391/480] Analyzing https://github.com/wanghejin/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/MagnificentCreature/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [389/480] Analyzing https://github.com/wanghejin/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wanghejin/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wanghejin/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/MagnificentCreature/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/MagnificentCreature/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/MagnificentCreature/ip.git (master) completed! -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepos -INFO: [392/480] Analyzing https://github.com/tohpinren/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tohpinren/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tohpinren/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [390/480] Analyzing https://github.com/SungMatt/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/SungMatt/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/SungMatt/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wanghejin/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tohpinren/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tohpinren/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wanghejin/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tohpinren/ip.git (master) completed! -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wanghejin/ip.git (master) completed! -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [391/480] Analyzing https://github.com/andrefoo/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/andrefoo/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/andrefoo/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/SungMatt/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/SungMatt/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/SungMatt/ip.git (master) completed! +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [392/480] Analyzing https://github.com/tohpinren/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tohpinren/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tohpinren/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/andrefoo/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/andrefoo/ip.git (master)... +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/andrefoo/ip.git (master) completed! +Sep 06, 2023 1:14:02 AM reposense.report.ReportGenerator analyzeRepos INFO: [393/480] Analyzing https://github.com/XihuaZ/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepos -INFO: [394/480] Analyzing https://github.com/bkjwjason/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/XihuaZ/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/XihuaZ/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/bkjwjason/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/bkjwjason/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/bkjwjason/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/bkjwjason/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/bkjwjason/ip.git (master) completed! -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepos -INFO: [395/480] Analyzing https://github.com/xavierpok/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tohpinren/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tohpinren/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tohpinren/ip.git (master) completed! +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [394/480] Analyzing https://github.com/xavierpok/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/xavierpok/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/xavierpok/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/XihuaZ/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/XihuaZ/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/XihuaZ/ip.git (master) completed! -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepos -INFO: [396/480] Analyzing https://github.com/jianyangg/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jianyangg/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jianyangg/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jianyangg/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jianyangg/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jianyangg/ip.git (master) completed! -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepos -INFO: [397/480] Analyzing https://github.com/aarontxz/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/aarontxz/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/aarontxz/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [395/480] Analyzing https://github.com/bkjwjason/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/bkjwjason/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/bkjwjason/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/bkjwjason/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/bkjwjason/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/bkjwjason/ip.git (master) completed! +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [396/480] Analyzing https://github.com/Choonyan02/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Choonyan02/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Choonyan02/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/xavierpok/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/xavierpok/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/xavierpok/ip.git (master) completed! -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepos -INFO: [398/480] Analyzing https://github.com/Choonyan02/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [397/480] Analyzing https://github.com/aarontxz/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/aarontxz/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/aarontxz/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Choonyan02/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Choonyan02/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Choonyan02/ip.git (master) completed! +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [398/480] Analyzing https://github.com/jianyangg/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jianyangg/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jianyangg/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/aarontxz/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Choonyan02/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Choonyan02/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/aarontxz/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/aarontxz/ip.git (master) completed! -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepos INFO: [399/480] Analyzing https://github.com/tayian/ip.git (master)... -Sep 05, 2023 2:30:03 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tayian/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tayian/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jianyangg/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tayian/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Choonyan02/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jianyangg/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jianyangg/ip.git (master) completed! +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tayian/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tayian/ip.git (master) completed! -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Choonyan02/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepos -INFO: [400/480] Analyzing https://github.com/Jweewee/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Choonyan02/ip.git (master) completed! -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepos -INFO: [401/480] Analyzing https://github.com/wnchan/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [400/480] Analyzing https://github.com/wnchan/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [401/480] Analyzing https://github.com/Jweewee/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Jweewee/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Jweewee/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wnchan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wnchan/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wnchan/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Jweewee/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/wnchan/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/wnchan/ip.git (master) completed! -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepos -INFO: [402/480] Analyzing https://github.com/cyaoxuan/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Jweewee/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Jweewee/ip.git (master) completed! -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepos -INFO: [403/480] Analyzing https://github.com/anthonytamzil/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [402/480] Analyzing https://github.com/cyaoxuan/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wnchan/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/wnchan/ip.git (master)... +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/wnchan/ip.git (master) completed! +Sep 06, 2023 1:14:03 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/cyaoxuan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/cyaoxuan/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/anthonytamzil/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/anthonytamzil/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [403/480] Analyzing https://github.com/CelestineTan03/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/CelestineTan03/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/CelestineTan03/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/cyaoxuan/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/cyaoxuan/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/cyaoxuan/ip.git (master) completed! -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepos -INFO: [404/480] Analyzing https://github.com/CelestineTan03/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/CelestineTan03/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/CelestineTan03/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/anthonytamzil/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/anthonytamzil/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/anthonytamzil/ip.git (master) completed! -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepos -INFO: [405/480] Analyzing https://github.com/euchangxian/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/euchangxian/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/euchangxian/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [404/480] Analyzing https://github.com/anthonytamzil/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/anthonytamzil/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/anthonytamzil/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/CelestineTan03/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/CelestineTan03/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/CelestineTan03/ip.git (master) completed! -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [405/480] Analyzing https://github.com/saltedfishxx/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/saltedfishxx/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/saltedfishxx/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/anthonytamzil/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/anthonytamzil/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/anthonytamzil/ip.git (master) completed! +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepos INFO: [406/480] Analyzing https://github.com/AlagappanRa/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AlagappanRa/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AlagappanRa/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/saltedfishxx/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/saltedfishxx/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/saltedfishxx/ip.git (master) completed! +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [407/480] Analyzing https://github.com/euchangxian/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/euchangxian/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/euchangxian/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AlagappanRa/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AlagappanRa/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AlagappanRa/ip.git (master) completed! -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepos -INFO: [407/480] Analyzing https://github.com/saltedfishxx/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/euchangxian/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/saltedfishxx/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/saltedfishxx/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/euchangxian/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/euchangxian/ip.git (master) completed! -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepos INFO: [408/480] Analyzing https://github.com/Ken-Lai/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Ken-Lai/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Ken-Lai/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Ken-Lai/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Ken-Lai/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Ken-Lai/ip.git (master) completed! -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepos -INFO: [409/480] Analyzing https://github.com/jamz903/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jamz903/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jamz903/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/saltedfishxx/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/saltedfishxx/ip.git (master)... -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/saltedfishxx/ip.git (master) completed! -Sep 05, 2023 2:30:04 PM reposense.report.ReportGenerator analyzeRepos -INFO: [410/480] Analyzing https://github.com/itssisi/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/itssisi/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/itssisi/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jamz903/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jamz903/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jamz903/ip.git (master) completed! -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [411/480] Analyzing https://github.com/felibunnyy/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [409/480] Analyzing https://github.com/felibunnyy/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/felibunnyy/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/felibunnyy/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/felibunnyy/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/itssisi/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/euchangxian/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/felibunnyy/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/felibunnyy/ip.git (master) completed! -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [412/480] Analyzing https://github.com/Propene-Dan/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [410/480] Analyzing https://github.com/itssisi/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/euchangxian/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/itssisi/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/itssisi/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/euchangxian/ip.git (master) completed! +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [411/480] Analyzing https://github.com/Kevin-Liusx/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Kevin-Liusx/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Kevin-Liusx/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Kevin-Liusx/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Kevin-Liusx/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Kevin-Liusx/ip.git (master) completed! +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [412/480] Analyzing https://github.com/jamz903/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jamz903/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jamz903/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/itssisi/ip.git (master)... +Sep 06, 2023 1:14:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/itssisi/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/itssisi/ip.git (master) completed! -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [413/480] Analyzing https://github.com/Kevin-Liusx/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [413/480] Analyzing https://github.com/Propene-Dan/ip.git (master)... +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Propene-Dan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Propene-Dan/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Kevin-Liusx/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Kevin-Liusx/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jamz903/ip.git (master)... +Sep 06, 2023 1:14:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jamz903/ip.git (master)... +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jamz903/ip.git (master) completed! +Sep 06, 2023 1:14:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Propene-Dan/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [414/480] Analyzing https://github.com/Ruizhi2001/ip.git (master)... +Sep 06, 2023 1:14:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Propene-Dan/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Propene-Dan/ip.git (master) completed! -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [414/480] Analyzing https://github.com/kenvynKwek/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Kevin-Liusx/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Kevin-Liusx/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Kevin-Liusx/ip.git (master) completed! -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [415/480] Analyzing https://github.com/kenvynKwek/ip.git (master)... +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Ruizhi2001/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Ruizhi2001/ip.git (master)... +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kenvynKwek/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kenvynKwek/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [415/480] Analyzing https://github.com/ChuanXinNg/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ChuanXinNg/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ChuanXinNg/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/kenvynKwek/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kenvynKwek/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kenvynKwek/ip.git (master) completed! -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [416/480] Analyzing https://github.com/Ruizhi2001/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Ruizhi2001/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Ruizhi2001/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ChuanXinNg/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ChuanXinNg/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ChuanXinNg/ip.git (master) completed! -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [417/480] Analyzing https://github.com/saraozn/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/saraozn/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/saraozn/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Ruizhi2001/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kenvynKwek/ip.git (master) completed! +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [416/480] Analyzing https://github.com/ChuanXinNg/ip.git (master)... +Sep 06, 2023 1:14:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Ruizhi2001/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Ruizhi2001/ip.git (master) completed! -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [418/480] Analyzing https://github.com/prawnzyy/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ChuanXinNg/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ChuanXinNg/ip.git (master)... +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [417/480] Analyzing https://github.com/prawnzyy/ip.git (master)... +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/prawnzyy/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/prawnzyy/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/saraozn/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/saraozn/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/saraozn/ip.git (master) completed! -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [419/480] Analyzing https://github.com/nicholastng010601/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ChuanXinNg/ip.git (master)... +Sep 06, 2023 1:14:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ChuanXinNg/ip.git (master)... +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ChuanXinNg/ip.git (master) completed! +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [418/480] Analyzing https://github.com/nicholastng010601/ip.git (master)... +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nicholastng010601/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nicholastng010601/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/prawnzyy/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/prawnzyy/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/prawnzyy/ip.git (master) completed! -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [420/480] Analyzing https://github.com/DistractedCat/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [419/480] Analyzing https://github.com/DistractedCat/ip.git (master)... +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/DistractedCat/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/DistractedCat/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nicholastng010601/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nicholastng010601/ip.git (master)... -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nicholastng010601/ip.git (master) completed! -Sep 05, 2023 2:30:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [421/480] Analyzing https://github.com/yezkez10/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yezkez10/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yezkez10/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [420/480] Analyzing https://github.com/saraozn/ip.git (master)... +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/saraozn/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/saraozn/ip.git (master)... +Sep 06, 2023 1:14:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/DistractedCat/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yezkez10/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/DistractedCat/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yezkez10/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yezkez10/ip.git (master) completed! -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/DistractedCat/ip.git (master) completed! -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [422/480] Analyzing https://github.com/revdrag/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [423/480] Analyzing https://github.com/alvinlim277/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/revdrag/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/revdrag/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/alvinlim277/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/alvinlim277/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/revdrag/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/revdrag/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/revdrag/ip.git (master) completed! -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [424/480] Analyzing https://github.com/JasonRay168/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [421/480] Analyzing https://github.com/yezkez10/ip.git (master)... +Sep 06, 2023 1:14:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yezkez10/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yezkez10/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/saraozn/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/saraozn/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/saraozn/ip.git (master) completed! +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [422/480] Analyzing https://github.com/JasonRay168/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/JasonRay168/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/JasonRay168/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/alvinlim277/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/alvinlim277/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/alvinlim277/ip.git (master) completed! -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [425/480] Analyzing https://github.com/billieboy7/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yezkez10/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yezkez10/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yezkez10/ip.git (master) completed! +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [423/480] Analyzing https://github.com/billieboy7/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/billieboy7/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/billieboy7/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/JasonRay168/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/JasonRay168/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/JasonRay168/ip.git (master) completed! -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [426/480] Analyzing https://github.com/evanyan13/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/evanyan13/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/evanyan13/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [424/480] Analyzing https://github.com/revdrag/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/revdrag/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/revdrag/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/billieboy7/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/billieboy7/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/billieboy7/ip.git (master) completed! -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [427/480] Analyzing https://github.com/jannnice/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [425/480] Analyzing https://github.com/alvinlim277/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/alvinlim277/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/alvinlim277/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/revdrag/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/revdrag/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/revdrag/ip.git (master) completed! +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [426/480] Analyzing https://github.com/jannnice/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jannnice/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jannnice/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/evanyan13/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/evanyan13/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/evanyan13/ip.git (master) completed! -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [428/480] Analyzing https://github.com/dinde2004/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dinde2004/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dinde2004/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jannnice/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jannnice/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jannnice/ip.git (master) completed! -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [429/480] Analyzing https://github.com/samuelim01/ip.git (master)... -Sep 05, 2023 2:30:06 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/samuelim01/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/samuelim01/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [427/480] Analyzing https://github.com/dinde2004/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dinde2004/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dinde2004/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/alvinlim277/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/alvinlim277/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/alvinlim277/ip.git (master) completed! +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [428/480] Analyzing https://github.com/evanyan13/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/evanyan13/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/evanyan13/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/dinde2004/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/dinde2004/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dinde2004/ip.git (master) completed! -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [429/480] Analyzing https://github.com/samuelim01/ip.git (master)... +Sep 06, 2023 1:14:06 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/samuelim01/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/samuelim01/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/evanyan13/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/evanyan13/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/evanyan13/ip.git (master) completed! +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepos INFO: [430/480] Analyzing https://github.com/seanpzk/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/seanpzk/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/seanpzk/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/samuelim01/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/samuelim01/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/samuelim01/ip.git (master) completed! -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [431/480] Analyzing https://github.com/KumChaiYin/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/KumChaiYin/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/KumChaiYin/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [431/480] Analyzing https://github.com/lsyurea/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lsyurea/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lsyurea/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/seanpzk/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/seanpzk/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/seanpzk/ip.git (master) completed! -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [432/480] Analyzing https://github.com/lsyurea/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lsyurea/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lsyurea/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/KumChaiYin/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lsyurea/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/KumChaiYin/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/KumChaiYin/ip.git (master) completed! -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [433/480] Analyzing https://github.com/Sasmik23/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [432/480] Analyzing https://github.com/KumChaiYin/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lsyurea/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lsyurea/ip.git (master) completed! -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [434/480] Analyzing https://github.com/lululwtv/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/KumChaiYin/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/KumChaiYin/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [433/480] Analyzing https://github.com/Sasmik23/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Sasmik23/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Sasmik23/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lululwtv/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lululwtv/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Sasmik23/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Sasmik23/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Sasmik23/ip.git (master) completed! -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [435/480] Analyzing https://github.com/geraldngjx/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [434/480] Analyzing https://github.com/lululwtv/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lululwtv/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lululwtv/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/KumChaiYin/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/KumChaiYin/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/KumChaiYin/ip.git (master) completed! +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [435/480] Analyzing https://github.com/garylow2001/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/garylow2001/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/garylow2001/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lululwtv/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/geraldngjx/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/geraldngjx/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lululwtv/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lululwtv/ip.git (master) completed! -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [436/480] Analyzing https://github.com/garylow2001/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/garylow2001/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/garylow2001/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/geraldngjx/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [436/480] Analyzing https://github.com/leontan2/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/leontan2/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/leontan2/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/garylow2001/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/garylow2001/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/geraldngjx/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/garylow2001/ip.git (master) completed! -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [437/480] Analyzing https://github.com/wamps-jp/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [437/480] Analyzing https://github.com/geraldngjx/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/geraldngjx/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/geraldngjx/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/leontan2/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/leontan2/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/leontan2/ip.git (master) completed! +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator analyzeRepos +INFO: [438/480] Analyzing https://github.com/dickongwd/ip.git (master)... +Sep 06, 2023 1:14:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dickongwd/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dickongwd/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/geraldngjx/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/geraldngjx/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/geraldngjx/ip.git (master) completed! -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [438/480] Analyzing https://github.com/leontan2/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [439/480] Analyzing https://github.com/wamps-jp/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wamps-jp/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wamps-jp/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/leontan2/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/leontan2/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wamps-jp/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wamps-jp/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wamps-jp/ip.git (master) completed! -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [439/480] Analyzing https://github.com/dickongwd/ip.git (master)... -Sep 05, 2023 2:30:07 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dickongwd/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dickongwd/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/leontan2/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/leontan2/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/leontan2/ip.git (master) completed! -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepos INFO: [440/480] Analyzing https://github.com/jacksonyuan256/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jacksonyuan256/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jacksonyuan256/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/dickongwd/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/dickongwd/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dickongwd/ip.git (master) completed! -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepos INFO: [441/480] Analyzing https://github.com/suryanshkushwaha/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/suryanshkushwaha/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/suryanshkushwaha/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jacksonyuan256/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jacksonyuan256/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jacksonyuan256/ip.git (master) completed! -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [442/480] Analyzing https://github.com/wr1159/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wr1159/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wr1159/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [442/480] Analyzing https://github.com/Nauxe/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Nauxe/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Nauxe/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/suryanshkushwaha/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/suryanshkushwaha/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/suryanshkushwaha/ip.git (master) completed! -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [443/480] Analyzing https://github.com/Nauxe/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Nauxe/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Nauxe/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wr1159/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/wr1159/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/wr1159/ip.git (master) completed! -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [444/480] Analyzing https://github.com/yyyaohhh/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [443/480] Analyzing https://github.com/wr1159/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Nauxe/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yyyaohhh/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yyyaohhh/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wr1159/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wr1159/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Nauxe/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Nauxe/ip.git (master) completed! -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [445/480] Analyzing https://github.com/zhanyang01/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/zhanyang01/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/zhanyang01/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [444/480] Analyzing https://github.com/yyyaohhh/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yyyaohhh/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yyyaohhh/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yyyaohhh/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yyyaohhh/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yyyaohhh/ip.git (master) completed! -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [445/480] Analyzing https://github.com/zhanyang01/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wr1159/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/wr1159/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/zhanyang01/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/wr1159/ip.git (master) completed! +Sep 06, 2023 1:14:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/zhanyang01/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepos INFO: [446/480] Analyzing https://github.com/czhiruo/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/czhiruo/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/czhiruo/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zhanyang01/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zhanyang01/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zhanyang01/ip.git (master) completed! -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [447/480] Analyzing https://github.com/victorpengmx/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/victorpengmx/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/victorpengmx/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/czhiruo/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/czhiruo/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/czhiruo/ip.git (master) completed! -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [448/480] Analyzing https://github.com/longnguyentan/ip.git (master)... -Sep 05, 2023 2:30:08 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [447/480] Analyzing https://github.com/longnguyentan/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zhanyang01/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/longnguyentan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/longnguyentan/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/victorpengmx/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/victorpengmx/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/victorpengmx/ip.git (master) completed! -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator analyzeRepos -INFO: [449/480] Analyzing https://github.com/Cikguseven/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Cikguseven/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Cikguseven/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zhanyang01/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zhanyang01/ip.git (master) completed! +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [448/480] Analyzing https://github.com/victorpengmx/ip.git (master)... +Sep 06, 2023 1:14:08 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/victorpengmx/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/victorpengmx/ip.git (master)... +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/longnguyentan/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/longnguyentan/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/longnguyentan/ip.git (master) completed! -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [449/480] Analyzing https://github.com/Cikguseven/ip.git (master)... +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Cikguseven/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Cikguseven/ip.git (master)... +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/victorpengmx/ip.git (master)... +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/victorpengmx/ip.git (master)... +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/victorpengmx/ip.git (master) completed! +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepos INFO: [450/480] Analyzing https://github.com/Eola-Z/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Eola-Z/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Eola-Z/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Cikguseven/ip.git (master)... +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Eola-Z/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Eola-Z/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Eola-Z/ip.git (master) completed! -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator analyzeRepos -INFO: [451/480] Analyzing https://github.com/jibtaf/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jibtaf/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jibtaf/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Cikguseven/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Cikguseven/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Eola-Z/ip.git (master) completed! +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Cikguseven/ip.git (master) completed! -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator analyzeRepos -INFO: [452/480] Analyzing https://github.com/lipwei1808/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [451/480] Analyzing https://github.com/lipwei1808/ip.git (master)... +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [452/480] Analyzing https://github.com/jibtaf/ip.git (master)... +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lipwei1808/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lipwei1808/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jibtaf/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jibtaf/ip.git (master)... +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jibtaf/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jibtaf/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jibtaf/ip.git (master) completed! -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepos INFO: [453/480] Analyzing https://github.com/Mohammed-Faizzzz/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Mohammed-Faizzzz/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Mohammed-Faizzzz/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lipwei1808/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lipwei1808/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lipwei1808/ip.git (master) completed! -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepos INFO: [454/480] Analyzing https://github.com/dylkaw/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/dylkaw/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/dylkaw/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Mohammed-Faizzzz/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Mohammed-Faizzzz/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Mohammed-Faizzzz/ip.git (master) completed! -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepos INFO: [455/480] Analyzing https://github.com/nikele2001/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/dylkaw/ip.git (master)... +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nikele2001/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nikele2001/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/dylkaw/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/dylkaw/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dylkaw/ip.git (master) completed! -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator analyzeRepos -INFO: [456/480] Analyzing https://github.com/DeltonCheng/ip.git (master)... -Sep 05, 2023 2:30:09 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [456/480] Analyzing https://github.com/ChangruHenryQian/ip.git (master)... +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ChangruHenryQian/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ChangruHenryQian/ip.git (master)... +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ChangruHenryQian/ip.git (master)... +Sep 06, 2023 1:14:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ChangruHenryQian/ip.git (master)... +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ChangruHenryQian/ip.git (master) completed! +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [457/480] Analyzing https://github.com/DeltonCheng/ip.git (master)... +Sep 06, 2023 1:14:09 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/DeltonCheng/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/DeltonCheng/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nikele2001/ip.git (master)... +Sep 06, 2023 1:14:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/DeltonCheng/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/DeltonCheng/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/DeltonCheng/ip.git (master) completed! -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [457/480] Analyzing https://github.com/ChangruHenryQian/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ChangruHenryQian/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ChangruHenryQian/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nikele2001/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nikele2001/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/DeltonCheng/ip.git (master) completed! +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nikele2001/ip.git (master) completed! -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepos INFO: [458/480] Analyzing https://github.com/craigtonlian/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/craigtonlian/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/craigtonlian/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ChangruHenryQian/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ChangruHenryQian/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ChangruHenryQian/ip.git (master) completed! -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepos INFO: [459/480] Analyzing https://github.com/ruo-x/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ruo-x/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ruo-x/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/craigtonlian/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/craigtonlian/ip.git (master)... +Sep 06, 2023 1:14:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ruo-x/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/craigtonlian/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ruo-x/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/craigtonlian/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ruo-x/ip.git (master) completed! -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [460/480] Analyzing https://github.com/iantsaii/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/craigtonlian/ip.git (master) completed! -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [461/480] Analyzing https://github.com/wjacobw/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/iantsaii/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/iantsaii/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [460/480] Analyzing https://github.com/wjacobw/ip.git (master)... +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wjacobw/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wjacobw/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/craigtonlian/ip.git (master)... +Sep 06, 2023 1:14:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/craigtonlian/ip.git (master)... +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/craigtonlian/ip.git (master) completed! +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [461/480] Analyzing https://github.com/angkyakdifp/ip.git (master)... +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/angkyakdifp/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/angkyakdifp/ip.git (master)... +Sep 06, 2023 1:14:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wjacobw/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wjacobw/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wjacobw/ip.git (master) completed! -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [462/480] Analyzing https://github.com/angkyakdifp/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/angkyakdifp/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/angkyakdifp/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/iantsaii/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/iantsaii/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/iantsaii/ip.git (master) completed! -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [463/480] Analyzing https://github.com/brein62/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/brein62/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/brein62/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [462/480] Analyzing https://github.com/iantsaii/ip.git (master)... +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/iantsaii/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/iantsaii/ip.git (master)... +Sep 06, 2023 1:14:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/angkyakdifp/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/angkyakdifp/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/angkyakdifp/ip.git (master) completed! -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [464/480] Analyzing https://github.com/Bryan-Goh/ip.git (master)... -Sep 05, 2023 2:30:10 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Bryan-Goh/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Bryan-Goh/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/brein62/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/brein62/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/brein62/ip.git (master) completed! -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepos -INFO: [465/480] Analyzing https://github.com/nicrandomlee/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [463/480] Analyzing https://github.com/brein62/ip.git (master)... +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/brein62/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/brein62/ip.git (master)... +Sep 06, 2023 1:14:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/iantsaii/ip.git (master)... +Sep 06, 2023 1:14:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/iantsaii/ip.git (master)... +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/iantsaii/ip.git (master) completed! +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator analyzeRepos +INFO: [464/480] Analyzing https://github.com/nicrandomlee/ip.git (master)... +Sep 06, 2023 1:14:10 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nicrandomlee/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nicrandomlee/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Bryan-Goh/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Bryan-Goh/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Bryan-Goh/ip.git (master) completed! -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepos -INFO: [466/480] Analyzing https://github.com/kiatkat/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nicrandomlee/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kiatkat/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kiatkat/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nicrandomlee/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nicrandomlee/ip.git (master) completed! -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepos -INFO: [467/480] Analyzing https://github.com/MadLamprey/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/MadLamprey/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/MadLamprey/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [465/480] Analyzing https://github.com/kiatkat/ip.git (master)... +Sep 06, 2023 1:14:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/brein62/ip.git (master)... +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kiatkat/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kiatkat/ip.git (master)... +Sep 06, 2023 1:14:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/brein62/ip.git (master)... +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/brein62/ip.git (master) completed! +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [466/480] Analyzing https://github.com/Bryan-Goh/ip.git (master)... +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Bryan-Goh/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Bryan-Goh/ip.git (master)... +Sep 06, 2023 1:14:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/kiatkat/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kiatkat/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/kiatkat/ip.git (master) completed! -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [467/480] Analyzing https://github.com/MadLamprey/ip.git (master)... +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/MadLamprey/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/MadLamprey/ip.git (master)... +Sep 06, 2023 1:14:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Bryan-Goh/ip.git (master)... +Sep 06, 2023 1:14:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Bryan-Goh/ip.git (master)... +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Bryan-Goh/ip.git (master) completed! +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepos INFO: [468/480] Analyzing https://github.com/xyT-T/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/xyT-T/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/xyT-T/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/MadLamprey/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/xyT-T/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/MadLamprey/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/MadLamprey/ip.git (master) completed! -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/xyT-T/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/xyT-T/ip.git (master) completed! -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepos INFO: [469/480] Analyzing https://github.com/jiakai-17/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepos -INFO: [470/480] Analyzing https://github.com/nreHieW/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jiakai-17/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jiakai-17/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/MadLamprey/ip.git (master)... +Sep 06, 2023 1:14:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/MadLamprey/ip.git (master)... +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/MadLamprey/ip.git (master) completed! +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [470/480] Analyzing https://github.com/nreHieW/ip.git (master)... +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nreHieW/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nreHieW/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nreHieW/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nreHieW/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nreHieW/ip.git (master) completed! -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepos -INFO: [471/480] Analyzing https://github.com/nathanielcalimag/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nathanielcalimag/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nathanielcalimag/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jiakai-17/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jiakai-17/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jiakai-17/ip.git (master) completed! -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [471/480] Analyzing https://github.com/nathanielcalimag/ip.git (master)... +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nathanielcalimag/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nathanielcalimag/ip.git (master)... +Sep 06, 2023 1:14:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nreHieW/ip.git (master)... +Sep 06, 2023 1:14:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nreHieW/ip.git (master)... +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nreHieW/ip.git (master) completed! +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator analyzeRepos INFO: [472/480] Analyzing https://github.com/Saezenn/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:11 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Saezenn/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Saezenn/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Saezenn/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Saezenn/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Saezenn/ip.git (master) completed! -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepos INFO: [473/480] Analyzing https://github.com/jellywaiyan/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jellywaiyan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jellywaiyan/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nathanielcalimag/ip.git (master)... -Sep 05, 2023 2:30:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nathanielcalimag/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nathanielcalimag/ip.git (master) completed! -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepos INFO: [474/480] Analyzing https://github.com/marquestye/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/marquestye/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/marquestye/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jellywaiyan/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jellywaiyan/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jellywaiyan/ip.git (master) completed! -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepos INFO: [475/480] Analyzing https://github.com/Tang-Moyan/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Tang-Moyan/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Tang-Moyan/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Tang-Moyan/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Tang-Moyan/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Tang-Moyan/ip.git (master) completed! -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepos INFO: [476/480] Analyzing https://github.com/DonovanJJ/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/marquestye/ip.git (master)... +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/DonovanJJ/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/DonovanJJ/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/marquestye/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/marquestye/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/marquestye/ip.git (master) completed! -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator analyzeRepos -INFO: [477/480] Analyzing https://github.com/rionshocker/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/rionshocker/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/rionshocker/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [477/480] Analyzing https://github.com/Sebtey/ip.git (master)... +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Sebtey/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Sebtey/ip.git (master)... +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/DonovanJJ/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/DonovanJJ/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/DonovanJJ/ip.git (master) completed! -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator analyzeRepos -INFO: [478/480] Analyzing https://github.com/Sebtey/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Sebtey/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Sebtey/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/rionshocker/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/rionshocker/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/rionshocker/ip.git (master) completed! -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator analyzeRepos -INFO: [479/480] Analyzing https://github.com/tyouwei/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tyouwei/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tyouwei/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [478/480] Analyzing https://github.com/rionshocker/ip.git (master)... +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/rionshocker/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/rionshocker/ip.git (master)... +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Sebtey/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Sebtey/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Sebtey/ip.git (master) completed! -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator analyzeRepos +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [479/480] Analyzing https://github.com/tyouwei/ip.git (master)... +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tyouwei/ip.git (master) does not contain a standalone config file. +Sep 06, 2023 1:14:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tyouwei/ip.git (master)... +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/rionshocker/ip.git (master)... +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/rionshocker/ip.git (master)... +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/rionshocker/ip.git (master) completed! +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepos INFO: [480/480] Analyzing https://github.com/Blizzeracz/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator updateRepoConfig +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Blizzeracz/ip.git (master) does not contain a standalone config file. -Sep 05, 2023 2:30:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 06, 2023 1:14:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Blizzeracz/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tyouwei/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Blizzeracz/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tyouwei/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tyouwei/ip.git (master) completed! -Sep 05, 2023 2:30:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Blizzeracz/ip.git (master)... +Sep 06, 2023 1:14:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Blizzeracz/ip.git (master)... -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator analyzeRepo +Sep 06, 2023 1:14:13 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Blizzeracz/ip.git (master) completed! -Sep 05, 2023 2:30:12 PM reposense.report.ReportGenerator generateReposReport +Sep 06, 2023 1:14:13 AM reposense.report.ReportGenerator generateReposReport INFO: The report is generated at /home/runner/work/ip-dashboard/ip-dashboard/reposense-report -Sep 05, 2023 2:30:14 PM reposense.RepoSense main -INFO: Elapsed processing time: 1 minute(s) 32.10 second(s) +Sep 06, 2023 1:14:14 AM reposense.RepoSense main +INFO: Elapsed processing time: 1 minute(s) 36.51 second(s) diff --git a/rocketninja7_ip_master/authorship.json b/rocketninja7_ip_master/authorship.json index 866dfcb0..6d38b539 100644 --- a/rocketninja7_ip_master/authorship.json +++ b/rocketninja7_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/ipbot/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Pair;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.TaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":"import ipbot.util.CommandArgumentException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":"import ipbot.util.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":"import ipbot.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":"import ipbot.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":"import ipbot.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" public static final DateTimeFormatter QUERY_DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofPattern(\"uuuu-MM-dd HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":" private static final String SAVE_FILE \u003d \"data/saved_tasks.csv\";","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" private Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" public Duke() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":" this.storage \u003d new Storage(SAVE_FILE);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":" this.ui.printWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" this.taskList \u003d this.storage.readTasksFromFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":" } catch (TaskFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"rocketninja7"},"content":" return;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"rocketninja7"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"rocketninja7"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"rocketninja7"},"content":" return;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"rocketninja7"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"rocketninja7"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"rocketninja7"},"content":" return;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"rocketninja7"},"content":" while(true) {","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"rocketninja7"},"content":" ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"rocketninja7"},"content":" ui.printDivider();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"rocketninja7"},"content":" Pair\u003cString, Map\u003cString, String\u003e\u003e commandResult \u003d ui.processCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"rocketninja7"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"rocketninja7"},"content":" if (commandResult.getFirst().length() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"Nothing happened!\");","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"rocketninja7"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"rocketninja7"},"content":" String command \u003d commandResult.getFirst();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"rocketninja7"},"content":" Command commandName \u003d Command.commandEnum(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"rocketninja7"},"content":" if(commandName \u003d\u003d null){","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"Error: \" + command + \" is not a valid command!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"rocketninja7"},"content":" else {","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"rocketninja7"},"content":" if (command.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"rocketninja7"},"content":" ui.printExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"rocketninja7"},"content":" Map\u003cString, String\u003e commandArgs \u003d commandResult.getSecond();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"rocketninja7"},"content":" switch (commandName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"rocketninja7"},"content":" case LIST:","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"rocketninja7"},"content":" if (!commandArgs.get(\"\").isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"rocketninja7"},"content":" LocalDateTime queryDate \u003d LocalDateTime.parse(","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"rocketninja7"},"content":" commandArgs.get(\"\") + \" 0000\", QUERY_DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"rocketninja7"},"content":" taskList.listTasks(ui, queryDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"rocketninja7"},"content":" else{","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"rocketninja7"},"content":" taskList.listTasks(ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"rocketninja7"},"content":" case MARK:","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"rocketninja7"},"content":" int markIndex \u003d Parser.checkIndexArg(commandArgs.get(\"\"), taskList.getTasksSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"rocketninja7"},"content":" if (markIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Invalid task to mark: \" + commandArgs);","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"rocketninja7"},"content":" Pair\u003cTask, Boolean\u003e taskMark \u003d taskList.markTask(markIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"rocketninja7"},"content":" if (taskMark.getSecond()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"rocketninja7"},"content":" ui.printMarkTask(taskMark.getFirst(), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"rocketninja7"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"rocketninja7"},"content":" ui.printAlreadyMarkedTask(taskMark.getFirst(), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"rocketninja7"},"content":" case UNMARK:","lastModifiedDate":"2023-08-23"},{"lineNumber":93,"author":{"gitId":"rocketninja7"},"content":" int unmarkIndex \u003d Parser.checkIndexArg(commandArgs.get(\"\"), taskList.getTasksSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"rocketninja7"},"content":" if (unmarkIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Invalid task to unmark: \" + commandArgs);","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"rocketninja7"},"content":" Pair\u003cTask, Boolean\u003e taskUnmark \u003d taskList.unmarkTask(unmarkIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"rocketninja7"},"content":" if (taskUnmark.getSecond()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"rocketninja7"},"content":" ui.printMarkTask(taskUnmark.getFirst(), false);","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"rocketninja7"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"rocketninja7"},"content":" ui.printAlreadyMarkedTask(taskUnmark.getFirst(), false);","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":103,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":104,"author":{"gitId":"rocketninja7"},"content":" case TODO:","lastModifiedDate":"2023-08-23"},{"lineNumber":105,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.isEmpty()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Task description cannot be empty!\");","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":108,"author":{"gitId":"rocketninja7"},"content":" ToDo toDo \u003d taskList.addToDoWithArgs(commandArgs);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"rocketninja7"},"content":" ui.printAddedItem(toDo, \"todo\");","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":111,"author":{"gitId":"rocketninja7"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-23"},{"lineNumber":112,"author":{"gitId":"rocketninja7"},"content":" Deadline deadline \u003d taskList.addDeadlineWithArgs(commandArgs);","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"rocketninja7"},"content":" ui.printAddedItem(deadline, \"deadline\");","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":115,"author":{"gitId":"rocketninja7"},"content":" case EVENT:","lastModifiedDate":"2023-08-23"},{"lineNumber":116,"author":{"gitId":"rocketninja7"},"content":" Event event \u003d taskList.addEventWithArgs(commandArgs);","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"rocketninja7"},"content":" ui.printAddedItem(event, \"event\");","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":119,"author":{"gitId":"rocketninja7"},"content":" case DELETE:","lastModifiedDate":"2023-08-23"},{"lineNumber":120,"author":{"gitId":"rocketninja7"},"content":" int deleteIndex \u003d Parser.checkIndexArg(commandArgs.get(\"\"), taskList.getTasksSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"rocketninja7"},"content":" if (deleteIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":122,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Invalid task to delete: \" + commandArgs);","lastModifiedDate":"2023-08-23"},{"lineNumber":123,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":124,"author":{"gitId":"rocketninja7"},"content":" Task task \u003d taskList.deleteTask(deleteIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"rocketninja7"},"content":" ui.printDeletedItem(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":127,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":128,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":129,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":130,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":131,"author":{"gitId":"rocketninja7"},"content":" catch(CommandArgumentException e){","lastModifiedDate":"2023-08-23"},{"lineNumber":132,"author":{"gitId":"rocketninja7"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":133,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":134,"author":{"gitId":"rocketninja7"},"content":" catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"rocketninja7"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"rocketninja7"},"content":" catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"rocketninja7"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"rocketninja7"},"content":" ui.printDivider();","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"rocketninja7"},"content":" this.storage.writeTasksToFile(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":144,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"rocketninja7"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"rocketninja7"},"content":" Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"rocketninja7"},"content":" duke.run();","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":149,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"rocketninja7":146,"-":3}},{"path":"src/main/java/ipbot/model/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.model;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"public enum Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":" BYE (\"bye\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":" LIST (\"list\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":" MARK (\"mark\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":" UNMARK (\"unmark\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":" TODO (\"todo\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":" DEADLINE (\"deadline\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":" EVENT (\"event\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":" DELETE (\"delete\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":" INVALID (\"\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":" private final String command;","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" Command(String command) {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":" public static Command commandEnum(String command) {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" for(Command currCmd: values()){","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" if(currCmd.command.equals(command)){","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":" return currCmd;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" return null;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"rocketninja7":28}},{"path":"src/main/java/ipbot/model/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.model;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":" protected LocalDateTime endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":" public Deadline(String description, String endTimeStr) throws DateTimeParseException {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":" this(description, LocalDateTime.parse(endTimeStr, Task.INPUT_DATE_TIME_FORMATTER));","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":" public Deadline(String description, LocalDateTime endTime) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":" public boolean isDue(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" return this.endTime.truncatedTo(ChronoUnit.DAYS).isEqual(dateTime.truncatedTo(ChronoUnit.DAYS));","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" public String toCommaString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" String[] commaStringValues \u003d {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" \"D\",","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":" this.isDone ? \"X\" : \" \",","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" this.description,","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":" this.endTime.format(Task.INPUT_DATE_TIME_FORMATTER),","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":" String commaString \u003d String.join(\",\", commaStringValues);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":" return commaString;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":" public String toString(){","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.endTime.format(Task.DISPLAY_DATE_TIME_FORMATTER) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"rocketninja7":40}},{"path":"src/main/java/ipbot/model/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.model;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":" protected LocalDateTime startTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":" protected LocalDateTime endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":" public Event(String description, String startTimeStr, String endTimeStr) throws DateTimeParseException {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":" this(","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":" description,","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":" LocalDateTime.parse(startTimeStr, Task.INPUT_DATE_TIME_FORMATTER),","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" LocalDateTime.parse(endTimeStr, Task.INPUT_DATE_TIME_FORMATTER));","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":" public Event(String description, LocalDateTime startTime, LocalDateTime endTime) throws IllegalArgumentException {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" if (startTime.isAfter(endTime)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" throw new IllegalArgumentException(\"Start time of event cannot be after end time!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":" public boolean isOngoing(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" return !this.startTime.truncatedTo(ChronoUnit.DAYS).isAfter(dateTime.truncatedTo(ChronoUnit.DAYS))","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":" \u0026\u0026 !dateTime.truncatedTo(ChronoUnit.DAYS).isAfter(this.endTime.truncatedTo(ChronoUnit.DAYS));","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":" public String toCommaString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":" String[] commaStringValues \u003d {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":" \"E\",","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":" this.isDone ? \"X\" : \" \",","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" this.description,","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":" this.startTime.format(Task.INPUT_DATE_TIME_FORMATTER),","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":" this.endTime.format(Task.INPUT_DATE_TIME_FORMATTER),","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"rocketninja7"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"rocketninja7"},"content":" String commaString \u003d String.join(\",\", commaStringValues);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"rocketninja7"},"content":" return commaString;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"rocketninja7"},"content":" public String toString(){","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"rocketninja7"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"rocketninja7"},"content":" + \" (from: \" + this.startTime.format(Task.DISPLAY_DATE_TIME_FORMATTER)","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"rocketninja7"},"content":" + \" to: \" + this.endTime.format(Task.DISPLAY_DATE_TIME_FORMATTER) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"rocketninja7":52}},{"path":"src/main/java/ipbot/model/Pair.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.model;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"public class Pair \u003cS, T\u003e {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":" private S first;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":" private T second;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":" public Pair(S first, T second) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":" this.first \u003d first;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":" this.second \u003d second;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":" public S getFirst() {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":" return this.first;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" public T getSecond() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" return this.second;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"rocketninja7":19}},{"path":"src/main/java/ipbot/model/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.model;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"public class Task implements Serializable {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":" public static final DateTimeFormatter INPUT_DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofPattern(","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":" \"uuuu-MM-dd HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":" public static final DateTimeFormatter DISPLAY_DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofPattern(","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":" \"dd LLL yyyy hh:mm a\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" return (this.isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":" public boolean markDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" if(this.isDone){","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" return false;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" return true;","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":" public boolean unmarkDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":" if(!this.isDone){","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":" return false;","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":" return true;","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":" public static Task fromString(String string) throws TaskFormatException, DateTimeParseException {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"rocketninja7"},"content":" String[] args \u003d string.split(\",\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"rocketninja7"},"content":" if (args.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"rocketninja7"},"content":" throw new TaskFormatException(\"Task string is too short!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"rocketninja7"},"content":" if (!args[0].matches(\"^[a-zA-Z]$\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"rocketninja7"},"content":" throw new TaskFormatException(\"Task string has incorrect format for type!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"rocketninja7"},"content":" char taskType \u003d args[0].charAt(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"rocketninja7"},"content":" if (!args[1].matches(\"^[X ]$\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"rocketninja7"},"content":" throw new TaskFormatException(\"Task string has incorrect format for completion status!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"rocketninja7"},"content":" char completionStatus \u003d args[1].charAt(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"rocketninja7"},"content":" Task retTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"rocketninja7"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"rocketninja7"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"rocketninja7"},"content":" if (args.length !\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"rocketninja7"},"content":" throw new TaskFormatException(","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"rocketninja7"},"content":" \"Task string has wrong number of arguments for ToDo \" + args.length + \"!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"rocketninja7"},"content":" ToDo toDo \u003d new ToDo(args[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"rocketninja7"},"content":" retTask \u003d toDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"rocketninja7"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"rocketninja7"},"content":" if (args.length !\u003d 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"rocketninja7"},"content":" throw new TaskFormatException(","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"rocketninja7"},"content":" \"Task string has wrong number of arguments for Deadline \" + args.length + \"!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"rocketninja7"},"content":" Deadline deadline \u003d new Deadline(args[2], args[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"rocketninja7"},"content":" retTask \u003d deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"rocketninja7"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"rocketninja7"},"content":" if (args.length !\u003d 5) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"rocketninja7"},"content":" throw new TaskFormatException(","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"rocketninja7"},"content":" \"Task string has wrong number of arguments for Event \" + args.length + \"!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"rocketninja7"},"content":" Event event \u003d new Event(args[2], args[3], args[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"rocketninja7"},"content":" retTask \u003d event;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"rocketninja7"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"rocketninja7"},"content":" throw new TaskFormatException(\"Task type is invalid!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"rocketninja7"},"content":" if (completionStatus \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"rocketninja7"},"content":" retTask.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"rocketninja7"},"content":" return retTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"rocketninja7"},"content":" public String toCommaString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"rocketninja7"},"content":" throw new UnsupportedOperationException();","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":93,"author":{"gitId":"rocketninja7"},"content":" public String toString(){","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"rocketninja7"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"rocketninja7":97}},{"path":"src/main/java/ipbot/model/TaskFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.model;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"public class TaskFormatException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":" public TaskFormatException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"rocketninja7":7}},{"path":"src/main/java/ipbot/model/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.model;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":" public ToDo(String description){","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":" public String toCommaString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":" String[] commaStringValues \u003d {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":" \"T\",","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":" this.isDone ? \"X\" : \" \",","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":" this.description,","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":" String commaString \u003d String.join(\",\", commaStringValues);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" return commaString;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":" public String toString(){","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"rocketninja7":23}},{"path":"src/main/java/ipbot/util/CommandArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"public class CommandArgumentException extends Exception{","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":" public CommandArgumentException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"rocketninja7":8}},{"path":"src/main/java/ipbot/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Pair;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":" public static int checkIndexArg(String indexArg, int lstSize){","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":" if (!indexArg.matches(\"^\\\\d+$\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":" return -1;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":" int index \u003d Integer.parseInt(indexArg) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":" if (0 \u003e index || index \u003e\u003d lstSize){","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" return -1;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":" return index;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" public static Pair\u003cString, Map\u003cString, String\u003e\u003e parseCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" int commandEndIndex \u003d command.indexOf(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":" if (commandEndIndex \u003d\u003d -1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":" commandEndIndex \u003d command.length();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" String commandNameStr \u003d command.substring(0, commandEndIndex).toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" String commandArgs \u003d command.substring(commandEndIndex).strip();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":" commandArgs \u003d \"/ \" + commandArgs;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" String[] splitArgs \u003d commandArgs.split(\"/\");","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":" Map\u003cString, String\u003e args \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":" for (String currArg: splitArgs) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":" int argEndIndex \u003d currArg.indexOf(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":" if (argEndIndex \u003d\u003d -1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":" argEndIndex \u003d currArg.length();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":" String argName \u003d currArg.substring(0, argEndIndex).toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":" String argArgs \u003d currArg.substring(argEndIndex).strip();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" args.put(argName, argArgs);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":" return new Pair\u003c\u003e(commandNameStr, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"rocketninja7":42}},{"path":"src/main/java/ipbot/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.TaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" private String saveFile;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":" public Storage(String saveFile) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":" this.saveFile \u003d saveFile;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" this.createFileIfNotExists();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":" public void createFileIfNotExists() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" File saveFile \u003d new File(this.saveFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" if (!saveFile.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" if (!saveFile.getParentFile().exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":" saveFile.getParentFile().mkdirs();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":" saveFile.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" public TaskList readTasksFromFile() throws TaskFormatException, DateTimeParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"rocketninja7"},"content":" FileReader fr \u003d new FileReader(this.saveFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"rocketninja7"},"content":" BufferedReader br \u003d new BufferedReader(fr);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"rocketninja7"},"content":" String line;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"rocketninja7"},"content":" while ((line \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"rocketninja7"},"content":" taskList.addTask(Task.fromString(line));","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"rocketninja7"},"content":" br.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"rocketninja7"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"rocketninja7"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"rocketninja7"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"rocketninja7"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"rocketninja7"},"content":" return taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"rocketninja7"},"content":" public void writeTasksToFile(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"rocketninja7"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"rocketninja7"},"content":" FileWriter fw \u003d new FileWriter(this.saveFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"rocketninja7"},"content":" BufferedWriter bw \u003d new BufferedWriter(fw);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"rocketninja7"},"content":" bw.write(taskList.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"rocketninja7"},"content":" bw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"rocketninja7"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"rocketninja7"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"rocketninja7":66}},{"path":"src/main/java/ipbot/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Pair;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":"import java.util.List;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" public int getTasksSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" public void listTasks(Ui ui) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":" for (int index \u003d 0; index \u003c tasks.size(); index++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":" ui.printTaskListFormat(tasks.get(index), index + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":" public void listTasks(Ui ui, LocalDateTime queryDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":" for (int index \u003d 0; index \u003c tasks.size(); index++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":" if (queryDate !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" Task currTask \u003d tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":" if (currTask instanceof Event) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":" Event event \u003d (Event) currTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"rocketninja7"},"content":" if (!event.isOngoing(queryDate)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"rocketninja7"},"content":" continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"rocketninja7"},"content":" } else if (currTask instanceof Deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"rocketninja7"},"content":" Deadline deadline \u003d (Deadline) currTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"rocketninja7"},"content":" if (!deadline.isDue(queryDate)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"rocketninja7"},"content":" continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"rocketninja7"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"rocketninja7"},"content":" continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"rocketninja7"},"content":" ui.printTaskListFormat(tasks.get(index), index + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"rocketninja7"},"content":" public Pair\u003cTask, Boolean\u003e markTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"rocketninja7"},"content":" boolean wasNotMarked \u003d tasks.get(index).markDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"rocketninja7"},"content":" return new Pair\u003c\u003e(tasks.get(index), wasNotMarked);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"rocketninja7"},"content":" public Pair\u003cTask, Boolean\u003e unmarkTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"rocketninja7"},"content":" boolean wasNotUnmarked \u003d tasks.get(index).unmarkDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"rocketninja7"},"content":" return new Pair\u003c\u003e(tasks.get(index), wasNotUnmarked);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"rocketninja7"},"content":" public ToDo addToDoWithArgs(Map\u003cString, String\u003e commandArgs) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"rocketninja7"},"content":" ToDo toDo \u003d new ToDo(commandArgs.get(\"\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"rocketninja7"},"content":" tasks.add(toDo);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"rocketninja7"},"content":" return toDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"rocketninja7"},"content":" public Deadline addDeadlineWithArgs(Map\u003cString, String\u003e commandArgs) throws CommandArgumentException {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.get(\"\").isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Task description cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.get(\"by\") \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Deadline missing a /by argument!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.get(\"by\").isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"/by argument cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"rocketninja7"},"content":" Deadline deadline \u003d new Deadline(commandArgs.get(\"\"), commandArgs.get(\"by\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"rocketninja7"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"rocketninja7"},"content":" return deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"rocketninja7"},"content":" public Event addEventWithArgs(Map\u003cString, String\u003e commandArgs) throws CommandArgumentException {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.get(\"\").isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Task description cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.get(\"from\") \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Event missing a /from argument!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.get(\"from\").isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"/from argument cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.get(\"to\") \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Event missing a /to argument!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.get(\"to\").isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"/to argument cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"rocketninja7"},"content":" Event event \u003d new Event(commandArgs.get(\"\"), commandArgs.get(\"from\"), commandArgs.get(\"to\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"rocketninja7"},"content":" tasks.add(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"rocketninja7"},"content":" return event;","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"rocketninja7"},"content":" public Task deleteTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"rocketninja7"},"content":" Task task \u003d tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"rocketninja7"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"rocketninja7"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"rocketninja7"},"content":" String string \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"rocketninja7"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"rocketninja7"},"content":" string +\u003d tasks.get(i).toCommaString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"rocketninja7"},"content":" return string;","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"rocketninja7":122}},{"path":"src/main/java/ipbot/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Pair;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":" private static final String HORIZONTAL_LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":" private static final String NAME \u003d \"Ip Bot\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":" private String currentCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":" public Ui() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":" public void printDivider() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":" public void printWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":" printDivider();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"Hello I\u0027m \" + NAME + \"!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"While I may not be able to fight like Ip Man, I can assist you in other areas!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":" printDivider();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":" public void printExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":" printDivider();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":" public void readCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":" this.currentCommand \u003d scanner.nextLine().strip();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":" public Pair\u003cString, Map\u003cString, String\u003e\u003e processCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"rocketninja7"},"content":" return Parser.parseCommand(this.currentCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"rocketninja7"},"content":" public void printTaskListFormat(Task task, int number) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"rocketninja7"},"content":" System.out.printf(\"%d. %s\\n\", number, task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"rocketninja7"},"content":" public void printAddedItem(Task task, String taskTypeStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"Added \" + taskTypeStr + \" item: \" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"rocketninja7"},"content":" public void printDeletedItem(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"Deleted item: \" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"rocketninja7"},"content":" public void printMarkTask(Task task, boolean markAsDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"rocketninja7"},"content":" String done \u003d markAsDone ? \"done\" : \"undone\";","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"Marking task as \" + done + \": \" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"rocketninja7"},"content":" public void printAlreadyMarkedTask(Task task, boolean markAsDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"rocketninja7"},"content":" String done \u003d markAsDone ? \"done\" : \"undone\";","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"Task was already marked as \" + done + \": \" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"rocketninja7":65}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"test","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"todo apple Pen 2","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"list 1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"list apple Pen 2","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"deadline eat apple","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"deadline eat apple /by tonight","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":"event something cool /to today /from yesterday","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":"deadline a /by /by /by","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":"mark","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":"delete 2","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"rocketninja7":26}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"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":"rocketninja7"},"content":" implementation \u0027org.junit.jupiter:junit-jupiter:5.8.1\u0027","lastModifiedDate":"2023-09-05"},{"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":{"rocketninja7":1,"-":42}},{"path":"src/main/java/ipbot/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Pair;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.TaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":"import ipbot.util.CommandArgumentException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":"import ipbot.util.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":"import ipbot.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":"import ipbot.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":"import ipbot.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" public static final DateTimeFormatter QUERY_DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofPattern(\"uuuu-MM-dd HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":" private static final String SAVE_FILE \u003d \"data/saved_tasks.csv\";","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" private Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" public Duke() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":" this.storage \u003d new Storage(SAVE_FILE);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":" this.ui.printWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" this.taskList \u003d this.storage.readTasksFromFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":" } catch (TaskFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"rocketninja7"},"content":" return;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"rocketninja7"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"rocketninja7"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"rocketninja7"},"content":" return;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"rocketninja7"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"rocketninja7"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"rocketninja7"},"content":" return;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"rocketninja7"},"content":" while(true) {","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"rocketninja7"},"content":" ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"rocketninja7"},"content":" ui.printDivider();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"rocketninja7"},"content":" Pair\u003cString, Map\u003cString, String\u003e\u003e commandResult \u003d ui.processCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"rocketninja7"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"rocketninja7"},"content":" if (commandResult.getFirst().length() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"Nothing happened!\");","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"rocketninja7"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"rocketninja7"},"content":" String command \u003d commandResult.getFirst();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"rocketninja7"},"content":" Command commandName \u003d Command.commandEnum(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"rocketninja7"},"content":" if(commandName \u003d\u003d null){","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"Error: \" + command + \" is not a valid command!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"rocketninja7"},"content":" else {","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"rocketninja7"},"content":" if (command.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"rocketninja7"},"content":" ui.printExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"rocketninja7"},"content":" Map\u003cString, String\u003e commandArgs \u003d commandResult.getSecond();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"rocketninja7"},"content":" switch (commandName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"rocketninja7"},"content":" case LIST:","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"rocketninja7"},"content":" if (!commandArgs.get(\"\").isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"rocketninja7"},"content":" LocalDateTime queryDate \u003d LocalDateTime.parse(","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"rocketninja7"},"content":" commandArgs.get(\"\") + \" 0000\", QUERY_DATE_TIME_FORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"rocketninja7"},"content":" taskList.listTasks(ui, queryDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"rocketninja7"},"content":" else{","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"rocketninja7"},"content":" taskList.listTasks(ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"rocketninja7"},"content":" case MARK:","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"rocketninja7"},"content":" int markIndex \u003d Parser.checkIndexArg(commandArgs.get(\"\"), taskList.getTasksSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"rocketninja7"},"content":" if (markIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Invalid task to mark: \" + commandArgs);","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"rocketninja7"},"content":" Pair\u003cTask, Boolean\u003e taskMark \u003d taskList.markTask(markIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"rocketninja7"},"content":" if (taskMark.getSecond()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"rocketninja7"},"content":" ui.printMarkTask(taskMark.getFirst(), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"rocketninja7"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"rocketninja7"},"content":" ui.printAlreadyMarkedTask(taskMark.getFirst(), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"rocketninja7"},"content":" case UNMARK:","lastModifiedDate":"2023-08-23"},{"lineNumber":93,"author":{"gitId":"rocketninja7"},"content":" int unmarkIndex \u003d Parser.checkIndexArg(commandArgs.get(\"\"), taskList.getTasksSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"rocketninja7"},"content":" if (unmarkIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Invalid task to unmark: \" + commandArgs);","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"rocketninja7"},"content":" Pair\u003cTask, Boolean\u003e taskUnmark \u003d taskList.unmarkTask(unmarkIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"rocketninja7"},"content":" if (taskUnmark.getSecond()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"rocketninja7"},"content":" ui.printMarkTask(taskUnmark.getFirst(), false);","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"rocketninja7"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"rocketninja7"},"content":" ui.printAlreadyMarkedTask(taskUnmark.getFirst(), false);","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":103,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":104,"author":{"gitId":"rocketninja7"},"content":" case TODO:","lastModifiedDate":"2023-08-23"},{"lineNumber":105,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.isEmpty()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Task description cannot be empty!\");","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":108,"author":{"gitId":"rocketninja7"},"content":" ToDo toDo \u003d taskList.addToDoWithArgs(commandArgs);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"rocketninja7"},"content":" ui.printAddedItem(toDo, \"todo\");","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":111,"author":{"gitId":"rocketninja7"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-23"},{"lineNumber":112,"author":{"gitId":"rocketninja7"},"content":" Deadline deadline \u003d taskList.addDeadlineWithArgs(commandArgs);","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"rocketninja7"},"content":" ui.printAddedItem(deadline, \"deadline\");","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":115,"author":{"gitId":"rocketninja7"},"content":" case EVENT:","lastModifiedDate":"2023-08-23"},{"lineNumber":116,"author":{"gitId":"rocketninja7"},"content":" Event event \u003d taskList.addEventWithArgs(commandArgs);","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"rocketninja7"},"content":" ui.printAddedItem(event, \"event\");","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":119,"author":{"gitId":"rocketninja7"},"content":" case DELETE:","lastModifiedDate":"2023-08-23"},{"lineNumber":120,"author":{"gitId":"rocketninja7"},"content":" int deleteIndex \u003d Parser.checkIndexArg(commandArgs.get(\"\"), taskList.getTasksSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"rocketninja7"},"content":" if (deleteIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":122,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Invalid task to delete: \" + commandArgs);","lastModifiedDate":"2023-08-23"},{"lineNumber":123,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":124,"author":{"gitId":"rocketninja7"},"content":" Task task \u003d taskList.deleteTask(deleteIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"rocketninja7"},"content":" ui.printDeletedItem(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":127,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":128,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":129,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":130,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":131,"author":{"gitId":"rocketninja7"},"content":" catch(CommandArgumentException e){","lastModifiedDate":"2023-08-23"},{"lineNumber":132,"author":{"gitId":"rocketninja7"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":133,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":134,"author":{"gitId":"rocketninja7"},"content":" catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"rocketninja7"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"rocketninja7"},"content":" catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"rocketninja7"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"rocketninja7"},"content":" ui.printDivider();","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"rocketninja7"},"content":" this.storage.writeTasksToFile(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":144,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"rocketninja7"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"rocketninja7"},"content":" Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"rocketninja7"},"content":" duke.run();","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":149,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"rocketninja7":146,"-":3}},{"path":"src/main/java/ipbot/model/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.model;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"public enum Command {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":" BYE (\"bye\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":" LIST (\"list\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":" MARK (\"mark\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":" UNMARK (\"unmark\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":" TODO (\"todo\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":" DEADLINE (\"deadline\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":" EVENT (\"event\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":" DELETE (\"delete\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":" INVALID (\"\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":" private final String command;","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" Command(String command) {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":" public static Command commandEnum(String command) {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" for(Command currCmd: values()){","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" if(currCmd.command.equals(command)){","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":" return currCmd;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" return null;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"rocketninja7":28}},{"path":"src/main/java/ipbot/model/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.model;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":" protected LocalDateTime endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":" public Deadline(String description, String endTimeStr) throws DateTimeParseException {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":" this(description, LocalDateTime.parse(endTimeStr, Task.INPUT_DATE_TIME_FORMATTER));","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":" public Deadline(String description, LocalDateTime endTime) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":" public boolean isDue(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" return this.endTime.truncatedTo(ChronoUnit.DAYS).isEqual(dateTime.truncatedTo(ChronoUnit.DAYS));","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" public String toCommaString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" String[] commaStringValues \u003d {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" \"D\",","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":" this.isDone ? \"X\" : \" \",","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" this.description,","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":" this.endTime.format(Task.INPUT_DATE_TIME_FORMATTER),","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":" String commaString \u003d String.join(\",\", commaStringValues);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":" return commaString;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":" public String toString(){","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.endTime.format(Task.DISPLAY_DATE_TIME_FORMATTER) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"rocketninja7":40}},{"path":"src/main/java/ipbot/model/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.model;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":" protected LocalDateTime startTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":" protected LocalDateTime endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":" public Event(String description, String startTimeStr, String endTimeStr) throws DateTimeParseException {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":" this(","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":" description,","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":" LocalDateTime.parse(startTimeStr, Task.INPUT_DATE_TIME_FORMATTER),","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" LocalDateTime.parse(endTimeStr, Task.INPUT_DATE_TIME_FORMATTER));","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":" public Event(String description, LocalDateTime startTime, LocalDateTime endTime) throws IllegalArgumentException {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" if (startTime.isAfter(endTime)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" throw new IllegalArgumentException(\"Start time of event cannot be after end time!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":" public boolean isOngoing(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" return !this.startTime.truncatedTo(ChronoUnit.DAYS).isAfter(dateTime.truncatedTo(ChronoUnit.DAYS))","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":" \u0026\u0026 !dateTime.truncatedTo(ChronoUnit.DAYS).isAfter(this.endTime.truncatedTo(ChronoUnit.DAYS));","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":" public String toCommaString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":" String[] commaStringValues \u003d {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":" \"E\",","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":" this.isDone ? \"X\" : \" \",","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" this.description,","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":" this.startTime.format(Task.INPUT_DATE_TIME_FORMATTER),","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":" this.endTime.format(Task.INPUT_DATE_TIME_FORMATTER),","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"rocketninja7"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"rocketninja7"},"content":" String commaString \u003d String.join(\",\", commaStringValues);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"rocketninja7"},"content":" return commaString;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"rocketninja7"},"content":" public String toString(){","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"rocketninja7"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"rocketninja7"},"content":" + \" (from: \" + this.startTime.format(Task.DISPLAY_DATE_TIME_FORMATTER)","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"rocketninja7"},"content":" + \" to: \" + this.endTime.format(Task.DISPLAY_DATE_TIME_FORMATTER) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"rocketninja7":52}},{"path":"src/main/java/ipbot/model/Pair.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.model;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"public class Pair \u003cS, T\u003e {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":" private S first;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":" private T second;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":" public Pair(S first, T second) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":" this.first \u003d first;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":" this.second \u003d second;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":" public S getFirst() {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":" return this.first;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" public T getSecond() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" return this.second;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" if (obj \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" if (this.first \u003d\u003d null || this.second \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":" if (obj \u003d\u003d this) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" return true;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":" if (obj instanceof Pair\u003c?,?\u003e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":" Pair\u003c?,?\u003e p \u003d (Pair\u003c?, ?\u003e) obj;","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":" if (p.first \u003d\u003d null || p.second \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":" return this.first.equals(p.first) \u0026\u0026 this.second.equals(p.second);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"rocketninja7":40}},{"path":"src/main/java/ipbot/model/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.model;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"public class Task implements Serializable {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":" public static final DateTimeFormatter INPUT_DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofPattern(","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":" \"uuuu-MM-dd HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":" public static final DateTimeFormatter DISPLAY_DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofPattern(","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":" \"dd LLL yyyy hh:mm a\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" return (this.isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":" public boolean markDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" if(this.isDone){","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" return false;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" return true;","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":" public boolean unmarkDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":" if(!this.isDone){","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":" return false;","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":" return true;","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":" public static Task fromString(String string) throws TaskFormatException, DateTimeParseException {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"rocketninja7"},"content":" String[] args \u003d string.split(\",\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"rocketninja7"},"content":" if (args.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"rocketninja7"},"content":" throw new TaskFormatException(\"Task string is too short!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"rocketninja7"},"content":" if (!args[0].matches(\"^[a-zA-Z]$\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"rocketninja7"},"content":" throw new TaskFormatException(\"Task string has incorrect format for type!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"rocketninja7"},"content":" char taskType \u003d args[0].charAt(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"rocketninja7"},"content":" if (!args[1].matches(\"^[X ]$\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"rocketninja7"},"content":" throw new TaskFormatException(\"Task string has incorrect format for completion status!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"rocketninja7"},"content":" char completionStatus \u003d args[1].charAt(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"rocketninja7"},"content":" Task retTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"rocketninja7"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"rocketninja7"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"rocketninja7"},"content":" if (args.length !\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"rocketninja7"},"content":" throw new TaskFormatException(","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"rocketninja7"},"content":" \"Task string has wrong number of arguments for ToDo \" + args.length + \"!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"rocketninja7"},"content":" ToDo toDo \u003d new ToDo(args[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"rocketninja7"},"content":" retTask \u003d toDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"rocketninja7"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"rocketninja7"},"content":" if (args.length !\u003d 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"rocketninja7"},"content":" throw new TaskFormatException(","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"rocketninja7"},"content":" \"Task string has wrong number of arguments for Deadline \" + args.length + \"!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"rocketninja7"},"content":" Deadline deadline \u003d new Deadline(args[2], args[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"rocketninja7"},"content":" retTask \u003d deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"rocketninja7"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"rocketninja7"},"content":" if (args.length !\u003d 5) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"rocketninja7"},"content":" throw new TaskFormatException(","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"rocketninja7"},"content":" \"Task string has wrong number of arguments for Event \" + args.length + \"!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"rocketninja7"},"content":" Event event \u003d new Event(args[2], args[3], args[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"rocketninja7"},"content":" retTask \u003d event;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"rocketninja7"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"rocketninja7"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"rocketninja7"},"content":" throw new TaskFormatException(\"Task type is invalid!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"rocketninja7"},"content":" if (completionStatus \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"rocketninja7"},"content":" retTask.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"rocketninja7"},"content":" return retTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"rocketninja7"},"content":" public String toCommaString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"rocketninja7"},"content":" throw new UnsupportedOperationException();","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":93,"author":{"gitId":"rocketninja7"},"content":" public String toString(){","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"rocketninja7"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"rocketninja7":97}},{"path":"src/main/java/ipbot/model/TaskFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.model;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"public class TaskFormatException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":" public TaskFormatException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"rocketninja7":7}},{"path":"src/main/java/ipbot/model/TaskStub.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.model;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"public class TaskStub extends Task {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":" public TaskStub(String description) {","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":" super(description);","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":" return \"\u003cSome Task String\u003e\";","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"rocketninja7":12}},{"path":"src/main/java/ipbot/model/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.model;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":" public ToDo(String description){","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":" public String toCommaString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":" String[] commaStringValues \u003d {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":" \"T\",","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":" this.isDone ? \"X\" : \" \",","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":" this.description,","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":" String commaString \u003d String.join(\",\", commaStringValues);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" return commaString;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":" public String toString(){","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"rocketninja7":23}},{"path":"src/main/java/ipbot/model/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.model;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import ipbot.util.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":" * Adapted from: https://stackoverflow.com/questions/1119385/junit-test-for-system-out-println","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":"public class UiTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" private final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" private final ByteArrayOutputStream errContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":" private final PrintStream originalErr \u003d System.err;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" @BeforeEach","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" public void setUpStreams() {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":" System.setOut(new PrintStream(this.outContent));","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":" System.setErr(new PrintStream(this.errContent));","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" @AfterEach","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":" public void restoreStreams() {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" System.setOut(this.originalOut);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":" System.setErr(this.originalErr);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":" public void testPrintTaskListFormat() {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":" ui.printTaskListFormat(new TaskStub(\"asdf\"), 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":" ui.printTaskListFormat(new TaskStub(\"asdf\"), 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" ui.printTaskListFormat(new TaskStub(\"asdf\"), 3);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":" Assertions.assertEquals(","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":" \"1. \u003cSome Task String\u003e\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"rocketninja7"},"content":" \"2. \u003cSome Task String\u003e\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"rocketninja7"},"content":" \"3. \u003cSome Task String\u003e\\n\",","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"rocketninja7"},"content":" this.outContent.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"rocketninja7"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"rocketninja7"},"content":" public void testPrintAddedItem() {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"rocketninja7"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"rocketninja7"},"content":" ui.printAddedItem(new TaskStub(\"asdf\"), \"taskType\");","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"rocketninja7"},"content":" Assertions.assertEquals(","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"rocketninja7"},"content":" \"Added taskType item: \u003cSome Task String\u003e\\r\\n\",","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"rocketninja7"},"content":" this.outContent.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"rocketninja7":54}},{"path":"src/main/java/ipbot/util/CommandArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"public class CommandArgumentException extends Exception{","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":" public CommandArgumentException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"rocketninja7":8}},{"path":"src/main/java/ipbot/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Pair;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":" public static int checkIndexArg(String indexArg, int lstSize){","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":" if (!indexArg.matches(\"^\\\\d+$\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":" return -1;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":" int index \u003d Integer.parseInt(indexArg) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":" if (0 \u003e index || index \u003e\u003d lstSize){","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" return -1;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":" return index;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" public static Pair\u003cString, Map\u003cString, String\u003e\u003e parseCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" int commandEndIndex \u003d command.indexOf(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":" if (commandEndIndex \u003d\u003d -1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":" commandEndIndex \u003d command.length();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" String commandNameStr \u003d command.substring(0, commandEndIndex).toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" String commandArgs \u003d command.substring(commandEndIndex).strip();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":" commandArgs \u003d \"/ \" + commandArgs;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" String[] splitArgs \u003d commandArgs.split(\"/\");","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":" Map\u003cString, String\u003e args \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":" for (String currArg: splitArgs) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":" int argEndIndex \u003d currArg.indexOf(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":" if (argEndIndex \u003d\u003d -1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":" argEndIndex \u003d currArg.length();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":" String argName \u003d currArg.substring(0, argEndIndex).toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":" String argArgs \u003d currArg.substring(argEndIndex).strip();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" if (argName.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":" continue;","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"rocketninja7"},"content":" args.put(argName, argArgs);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"rocketninja7"},"content":" return new Pair\u003c\u003e(commandNameStr, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"rocketninja7":45}},{"path":"src/main/java/ipbot/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.TaskFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" private String saveFile;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":" public Storage(String saveFile) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":" this.saveFile \u003d saveFile;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" this.createFileIfNotExists();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":" public void createFileIfNotExists() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" File saveFile \u003d new File(this.saveFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" if (!saveFile.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" if (!saveFile.getParentFile().exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":" saveFile.getParentFile().mkdirs();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":" saveFile.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" public TaskList readTasksFromFile() throws TaskFormatException, DateTimeParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"rocketninja7"},"content":" FileReader fr \u003d new FileReader(this.saveFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"rocketninja7"},"content":" BufferedReader br \u003d new BufferedReader(fr);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"rocketninja7"},"content":" String line;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"rocketninja7"},"content":" while ((line \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"rocketninja7"},"content":" taskList.addTask(Task.fromString(line));","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"rocketninja7"},"content":" br.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"rocketninja7"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"rocketninja7"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"rocketninja7"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"rocketninja7"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"rocketninja7"},"content":" return taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"rocketninja7"},"content":" public void writeTasksToFile(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"rocketninja7"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"rocketninja7"},"content":" FileWriter fw \u003d new FileWriter(this.saveFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"rocketninja7"},"content":" BufferedWriter bw \u003d new BufferedWriter(fw);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"rocketninja7"},"content":" bw.write(taskList.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"rocketninja7"},"content":" bw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"rocketninja7"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"rocketninja7"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"rocketninja7":66}},{"path":"src/main/java/ipbot/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Pair;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":"import java.util.List;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" public int getTasksSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" public void listTasks(Ui ui) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":" for (int index \u003d 0; index \u003c tasks.size(); index++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":" ui.printTaskListFormat(tasks.get(index), index + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":" public void listTasks(Ui ui, LocalDateTime queryDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":" for (int index \u003d 0; index \u003c tasks.size(); index++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":" if (queryDate !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" Task currTask \u003d tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":" if (currTask instanceof Event) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":" Event event \u003d (Event) currTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"rocketninja7"},"content":" if (!event.isOngoing(queryDate)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"rocketninja7"},"content":" continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"rocketninja7"},"content":" } else if (currTask instanceof Deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"rocketninja7"},"content":" Deadline deadline \u003d (Deadline) currTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"rocketninja7"},"content":" if (!deadline.isDue(queryDate)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"rocketninja7"},"content":" continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"rocketninja7"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"rocketninja7"},"content":" continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"rocketninja7"},"content":" ui.printTaskListFormat(tasks.get(index), index + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"rocketninja7"},"content":" public Pair\u003cTask, Boolean\u003e markTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"rocketninja7"},"content":" boolean wasNotMarked \u003d tasks.get(index).markDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"rocketninja7"},"content":" return new Pair\u003c\u003e(tasks.get(index), wasNotMarked);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"rocketninja7"},"content":" public Pair\u003cTask, Boolean\u003e unmarkTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"rocketninja7"},"content":" boolean wasNotUnmarked \u003d tasks.get(index).unmarkDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"rocketninja7"},"content":" return new Pair\u003c\u003e(tasks.get(index), wasNotUnmarked);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"rocketninja7"},"content":" public ToDo addToDoWithArgs(Map\u003cString, String\u003e commandArgs) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"rocketninja7"},"content":" ToDo toDo \u003d new ToDo(commandArgs.get(\"\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"rocketninja7"},"content":" tasks.add(toDo);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"rocketninja7"},"content":" return toDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"rocketninja7"},"content":" public Deadline addDeadlineWithArgs(Map\u003cString, String\u003e commandArgs) throws CommandArgumentException {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.get(\"\").isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Task description cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.get(\"by\") \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Deadline missing a /by argument!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.get(\"by\").isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"/by argument cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"rocketninja7"},"content":" Deadline deadline \u003d new Deadline(commandArgs.get(\"\"), commandArgs.get(\"by\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"rocketninja7"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"rocketninja7"},"content":" return deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"rocketninja7"},"content":" public Event addEventWithArgs(Map\u003cString, String\u003e commandArgs) throws CommandArgumentException {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.get(\"\").isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Task description cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.get(\"from\") \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Event missing a /from argument!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.get(\"from\").isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"/from argument cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.get(\"to\") \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"Event missing a /to argument!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"rocketninja7"},"content":" if (commandArgs.get(\"to\").isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"rocketninja7"},"content":" throw new CommandArgumentException(\"/to argument cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"rocketninja7"},"content":" Event event \u003d new Event(commandArgs.get(\"\"), commandArgs.get(\"from\"), commandArgs.get(\"to\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"rocketninja7"},"content":" tasks.add(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"rocketninja7"},"content":" return event;","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"rocketninja7"},"content":" public Task deleteTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"rocketninja7"},"content":" Task task \u003d tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"rocketninja7"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"rocketninja7"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"rocketninja7"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"rocketninja7"},"content":" String string \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"rocketninja7"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"rocketninja7"},"content":" string +\u003d tasks.get(i).toCommaString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"rocketninja7"},"content":" return string;","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"rocketninja7":122}},{"path":"src/main/java/ipbot/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Pair;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":" private static final String HORIZONTAL_LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":" private static final String NAME \u003d \"Ip Bot\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":" private String currentCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":" public Ui() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":" public void printDivider() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":" public void printWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":" printDivider();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"Hello I\u0027m \" + NAME + \"!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"While I may not be able to fight like Ip Man, I can assist you in other areas!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":" printDivider();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":" public void printExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":" printDivider();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":" public void readCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"rocketninja7"},"content":" this.currentCommand \u003d scanner.nextLine().strip();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"rocketninja7"},"content":" public Pair\u003cString, Map\u003cString, String\u003e\u003e processCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"rocketninja7"},"content":" return Parser.parseCommand(this.currentCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"rocketninja7"},"content":" public void printTaskListFormat(Task task, int number) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"rocketninja7"},"content":" System.out.printf(\"%d. %s\\n\", number, task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"rocketninja7"},"content":" public void printAddedItem(Task task, String taskTypeStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"Added \" + taskTypeStr + \" item: \" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"rocketninja7"},"content":" public void printDeletedItem(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"Deleted item: \" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"rocketninja7"},"content":" public void printMarkTask(Task task, boolean markAsDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"rocketninja7"},"content":" String done \u003d markAsDone ? \"done\" : \"undone\";","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"Marking task as \" + done + \": \" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"rocketninja7"},"content":" public void printAlreadyMarkedTask(Task task, boolean markAsDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"rocketninja7"},"content":" String done \u003d markAsDone ? \"done\" : \"undone\";","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"rocketninja7"},"content":" System.out.println(\"Task was already marked as \" + done + \": \" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"rocketninja7":65}},{"path":"src/main/java/ipbot/util/test/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"package ipbot.util.test;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"import ipbot.model.Pair;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"import ipbot.util.Parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":" public void testCheckIndexArg() {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":" assertEquals(-1, Parser.checkIndexArg(\"abc\", 3));","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":" assertEquals(-1, Parser.checkIndexArg(\"-1\", 3));","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":" assertEquals(-1, Parser.checkIndexArg(\"0\", 3));","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":" assertEquals(0, Parser.checkIndexArg(\"1\", 3));","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":" assertEquals(1, Parser.checkIndexArg(\"2\", 3));","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":" assertEquals(2, Parser.checkIndexArg(\"3\", 3));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":" assertEquals(-1, Parser.checkIndexArg(\"4\", 3));","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":" public void testParseCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":" assertEquals(new Pair\u003c\u003e(\"\", new HashMap\u003cString, String\u003e()), Parser.parseCommand(\"\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"rocketninja7"},"content":" assertEquals(new Pair\u003c\u003e(\"asdf\", new HashMap\u003cString, String\u003e()), Parser.parseCommand(\"asdf\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"rocketninja7"},"content":" Map\u003cString, String\u003e m1 \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"rocketninja7"},"content":" m1.put(\"arg1\", \"a\");","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"rocketninja7"},"content":" m1.put(\"arg2\", \"\");","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"rocketninja7"},"content":" assertEquals(new Pair\u003c\u003e(\"asdf\", m1), Parser.parseCommand(\"asdf /arg1 a /arg2 \"));","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"rocketninja7"},"content":" Map\u003cString, String\u003e m2 \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"rocketninja7"},"content":" m2.put(\"arg1\", \"1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"rocketninja7"},"content":" assertEquals(new Pair\u003c\u003e(\"asdf\", m2), Parser.parseCommand(\"asdf /arg1 /arg1 1\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"rocketninja7"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"rocketninja7"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"rocketninja7":36}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"rocketninja7"},"content":"test","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"rocketninja7"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"rocketninja7"},"content":"todo apple Pen 2","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"rocketninja7"},"content":"list 1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"rocketninja7"},"content":"list apple Pen 2","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"rocketninja7"},"content":"deadline eat apple","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"rocketninja7"},"content":"deadline eat apple /by tonight","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"rocketninja7"},"content":"event something cool /to today /from yesterday","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"rocketninja7"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"rocketninja7"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"rocketninja7"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"rocketninja7"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"rocketninja7"},"content":"deadline a /by /by /by","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"rocketninja7"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"rocketninja7"},"content":"mark","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"rocketninja7"},"content":"delete 2","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"rocketninja7"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"rocketninja7"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"rocketninja7":26}}] diff --git a/rocketninja7_ip_master/commits.json b/rocketninja7_ip_master/commits.json index 6a64fd69..47b7a93e 100644 --- a/rocketninja7_ip_master/commits.json +++ b/rocketninja7_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"rocketninja7":[{"date":"2023-08-23","commitResults":[{"hash":"d15b2a0dbdc07458d40e132141a3e02ac64a1ab7","isMergeCommit":false,"messageTitle":"Changed name of chatbot and implemented intial skeleton version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"8afa7472984cd9bf2eec0d7866a1096fb612b49f","isMergeCommit":false,"messageTitle":"Improved bot to echo commands entered by user","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":1}}},{"hash":"fa89b8b3ab4e905753e3cabcb6ad33cc1669e254","isMergeCommit":false,"messageTitle":"Added ability to store text and display them","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":3}}},{"hash":"901cb15d857dffb6c6a97c41729279a495c85018","isMergeCommit":false,"messageTitle":"Added Task object and ability to mark and unmark tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":3}}},{"hash":"2e36905c6d27c89fd2e35a1ebfe2bf428a8683df","isMergeCommit":false,"messageTitle":"Added support for ToDos, Events and Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":33}}},{"hash":"b159cb07e5d1df9eb37cab691de6de03fb5e993a","isMergeCommit":false,"messageTitle":"Added semi automated testing using I/O redirection","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":21,"deletions":0}}},{"hash":"dde4c2de4216048fc63fc52537f6536ee60b4567","isMergeCommit":false,"messageTitle":"Added error handling with Exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":85,"deletions":79}}},{"hash":"92e435299f6fe7e579d07df9ce9565afa2e43983","isMergeCommit":false,"messageTitle":"Added support for deleting tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":22,"deletions":10}}},{"hash":"073e653030bed8d15b1c00da608e656c459c375e","isMergeCommit":false,"messageTitle":"Refactored code using enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":134,"deletions":97}}}]},{"date":"2023-08-31","commitResults":[{"hash":"0427656cc5db77fdfa8e1c13007a07f4dee09868","isMergeCommit":false,"messageTitle":"Add save functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":141,"deletions":1}}},{"hash":"2736c18685c21a5e3ac128a72172313e8fc152f6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 Merge save feature to master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"9ac51e04e99c51d26494809e172b9e167a8c6300","isMergeCommit":false,"messageTitle":"Use dates/times instead of String","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":11}}},{"hash":"d491db74aeb520c76788648101f0e78d4591781a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027 Merge date and time updates into master","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"9d7001bfdf71992b89ff81de068374957ebed9af","isMergeCommit":false,"messageTitle":"Added command to print deadlines/events on certain date","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":1}}},{"hash":"3efd4b89a1fd19bf9d833883c68254345229bbe0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027 Merge command to print deadlines/events on specific date to master","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"c4563984d14b0c8f33e51cf570fad7110731a910","isMergeCommit":false,"messageTitle":"Make the code more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":339,"deletions":156}}},{"hash":"16a0848a63766fb13d9df01e915e71f7ead0f79b","isMergeCommit":false,"messageTitle":"Improve OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":86}}},{"hash":"8c0aee27bc786385fb02591a5c0251080cea793a","isMergeCommit":true,"messageTitle":"Merge branch \u0027develop\u0027 Merge OOP updates to master","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"adae12fa75c7031e77c4b7b1fbb3c40f0431218e","isMergeCommit":false,"messageTitle":"Divided classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":4}}},{"hash":"be935a0b4588adb601f3605d26c9f84c8a618d55","isMergeCommit":true,"messageTitle":"Merge branch \u0027develop\u0027 Merge added packages to master","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"82e239dea309516327d52e1e0c3ee1d23735656d","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into develop Add gradle support","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"6099409d53ebe63765180627de1d401f2e6e14fc","isMergeCommit":true,"messageTitle":"Merge branch \u0027develop\u0027 Merge Gradle to master","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"rocketninja7":{"java":715,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":26}},"authorContributionVariance":{"rocketninja7":57050.754},"authorDisplayNameMap":{"rocketninja7":"CS2103T-T13-1 ANDR..RONG"}} +{"authorDailyContributionsMap":{"rocketninja7":[{"date":"2023-08-23","commitResults":[{"hash":"d15b2a0dbdc07458d40e132141a3e02ac64a1ab7","isMergeCommit":false,"messageTitle":"Changed name of chatbot and implemented intial skeleton version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"8afa7472984cd9bf2eec0d7866a1096fb612b49f","isMergeCommit":false,"messageTitle":"Improved bot to echo commands entered by user","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":1}}},{"hash":"fa89b8b3ab4e905753e3cabcb6ad33cc1669e254","isMergeCommit":false,"messageTitle":"Added ability to store text and display them","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":3}}},{"hash":"901cb15d857dffb6c6a97c41729279a495c85018","isMergeCommit":false,"messageTitle":"Added Task object and ability to mark and unmark tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":3}}},{"hash":"2e36905c6d27c89fd2e35a1ebfe2bf428a8683df","isMergeCommit":false,"messageTitle":"Added support for ToDos, Events and Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":33}}},{"hash":"b159cb07e5d1df9eb37cab691de6de03fb5e993a","isMergeCommit":false,"messageTitle":"Added semi automated testing using I/O redirection","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":21,"deletions":0}}},{"hash":"dde4c2de4216048fc63fc52537f6536ee60b4567","isMergeCommit":false,"messageTitle":"Added error handling with Exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":85,"deletions":79}}},{"hash":"92e435299f6fe7e579d07df9ce9565afa2e43983","isMergeCommit":false,"messageTitle":"Added support for deleting tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":22,"deletions":10}}},{"hash":"073e653030bed8d15b1c00da608e656c459c375e","isMergeCommit":false,"messageTitle":"Refactored code using enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":134,"deletions":97}}}]},{"date":"2023-08-31","commitResults":[{"hash":"0427656cc5db77fdfa8e1c13007a07f4dee09868","isMergeCommit":false,"messageTitle":"Add save functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":141,"deletions":1}}},{"hash":"2736c18685c21a5e3ac128a72172313e8fc152f6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 Merge save feature to master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"9ac51e04e99c51d26494809e172b9e167a8c6300","isMergeCommit":false,"messageTitle":"Use dates/times instead of String","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":11}}},{"hash":"d491db74aeb520c76788648101f0e78d4591781a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027 Merge date and time updates into master","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"9d7001bfdf71992b89ff81de068374957ebed9af","isMergeCommit":false,"messageTitle":"Added command to print deadlines/events on certain date","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":1}}},{"hash":"3efd4b89a1fd19bf9d833883c68254345229bbe0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027 Merge command to print deadlines/events on specific date to master","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"c4563984d14b0c8f33e51cf570fad7110731a910","isMergeCommit":false,"messageTitle":"Make the code more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":339,"deletions":156}}},{"hash":"16a0848a63766fb13d9df01e915e71f7ead0f79b","isMergeCommit":false,"messageTitle":"Improve OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":86}}},{"hash":"8c0aee27bc786385fb02591a5c0251080cea793a","isMergeCommit":true,"messageTitle":"Merge branch \u0027develop\u0027 Merge OOP updates to master","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"adae12fa75c7031e77c4b7b1fbb3c40f0431218e","isMergeCommit":false,"messageTitle":"Divided classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":4}}},{"hash":"be935a0b4588adb601f3605d26c9f84c8a618d55","isMergeCommit":true,"messageTitle":"Merge branch \u0027develop\u0027 Merge added packages to master","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"82e239dea309516327d52e1e0c3ee1d23735656d","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into develop Add gradle support","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"6099409d53ebe63765180627de1d401f2e6e14fc","isMergeCommit":true,"messageTitle":"Merge branch \u0027develop\u0027 Merge Gradle to master","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"822f3303c6109df1338c28ccb679881bda898661","isMergeCommit":false,"messageTitle":"Added JUnit tests for Ui and Parser","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":126,"deletions":0}}},{"hash":"fa00c7267d2c6722fa43faacb138c7f8f3325d7f","isMergeCommit":true,"messageTitle":"Merge branch \u0027develop\u0027 Merge JUnit tests into master","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"rocketninja7":{"java":841,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":1,"txt":26}},"authorContributionVariance":{"rocketninja7":51602.723},"authorDisplayNameMap":{"rocketninja7":"CS2103T-T13-1 ANDR..RONG"}} diff --git a/ryamgoh_ip_master/authorship.json b/ryamgoh_ip_master/authorship.json index 1c369c8f..6f39b832 100644 --- a/ryamgoh_ip_master/authorship.json +++ b/ryamgoh_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":"ryamgoh"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":" archiveFileName \u003d \"duke.jar\"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ryamgoh":7,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"T | 1 | sdsd","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"E | 1 | sdsdsdsd | Dec 23 2023 06:00 PM - Dec 24 2023 07:00 PM","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"E | 0 | sdsdsdsd | Dec 12 2023 06:00 PM - Nov 12 2024 12:39 PM","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"T | 1 | sdsd","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"T | 1 | ssdsd","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"T | 0 | sadsdjsfhjdg","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"T | 0 | Hello","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"T | 0 | Hello my name is Ryann","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"D | 0 | Hello I like to go shopping | Dec 12 2012 06:00 PM","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"T | 0 | sdsd my Name is Hello","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"E | 0 | I like to be Hello | Dec 12 2012 07:00 PM - Dec 13 2012 12:00 PM","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":11}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"public class Duke {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"\t * The task list","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\tprivate final TaskList taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\t * The ui object","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"\tprivate final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\t * The storage object","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"\tprivate final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor for Duke","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t * @param filePath the file path","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"\tpublic Duke(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.taskList \u003d new TaskList(this.storage.readData());","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":"\t * Main method","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":"\t * @param args the arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"-"},"content":"\tpublic static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":"\t\tnew Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":"\t * Runs the program","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":"\tpublic void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.ui.showWelcome();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":"\t\tboolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":"\t\twhile (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":"\t\t\ttry {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tString command \u003d ui.readCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tCommand c \u003d Parser.parse(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tc.execute(this.taskList, this.ui, this.storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tisExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":"\t\t\t} catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tthis.ui.printLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tthis.ui.printLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":"\t\t\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"-"},"content":"\t\t}","lastModifiedDate":"2019-07-29"},{"lineNumber":62,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":63,"-":2}},{"path":"src/main/java/duke/commands/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\t * The description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"\tprivate final String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\t * The type of the task, either mark or unmark","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"\tprivate final String type;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\t * The end time of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\tprivate LocalDateTime to;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"\t * The start time of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\tprivate LocalDateTime from;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"\t * duke.tasks.Todo Constructor","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"\t * @param description","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":"\tpublic AddCommand(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.type \u003d \"todo\";","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":"\t * duke.tasks.Deadline Constructor","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":"\t * @param description the description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":"\t * @param to the end time of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":"\tpublic AddCommand(String description, LocalDateTime to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.to \u003d to;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.type \u003d \"deadline\";","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":"\t * duke.tasks.Event Constructor","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":"\t * @param description the description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":"\t * @param from the start time of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":"\t * @param to the end time of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":"\tpublic AddCommand(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.to \u003d to;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.from \u003d from;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.type \u003d \"event\";","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryamgoh"},"content":"\t * Executes the command","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryamgoh"},"content":"\t * @param tasks the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryamgoh"},"content":"\t * @param ui the ui","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryamgoh"},"content":"\t * @param storage the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryamgoh"},"content":"\tpublic void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryamgoh"},"content":"\t\tTask task \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryamgoh"},"content":"\t\tswitch (this.type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\ttask \u003d new Todo(this.description);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\ttask \u003d new Deadline(this.description, this.to);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\ttask \u003d new Event(this.description, this.from, this.to);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryamgoh"},"content":"\t\ttasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ryamgoh"},"content":"\t\tui.showAdd(tasks.length(), task);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ryamgoh"},"content":"\t\tstorage.writeData(tasks.getAllTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ryamgoh"},"content":"\t * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ryamgoh"},"content":"\t * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ryamgoh"},"content":"\tpublic boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ryamgoh"},"content":"\t\treturn false;","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":100}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\t * Executes the command","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"\t * @param tasks the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"\t * @param ui the ui","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\t * @param storage the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\t * @throws DukeException if there is an error","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"\tpublic abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\t * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"\t * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\tpublic abstract boolean isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":25}},{"path":"src/main/java/duke/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\t * The index of the task to be deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"\tprivate final int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"\t * @param index the index of the task to be deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\tpublic DeleteCommand(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.index \u003d index;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\t * Executes the command","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"\t * @param tasks the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t * @param ui the ui","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"\t * @param storage the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"\t * @throws DukeException if there is an error","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":"\tpublic void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":"\t\t// Check if index is invalid or the task exists.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":"\t\tif (tasks.length() \u003c index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"\t\t\tthrow new DukeException(\"The task you are trying to delete either doesnt exist, or is already deleted!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":"\t\tui.showDelete(index, tasks.getTask(index - 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":"\t\ttasks.delete(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":"\t\tstorage.writeData(tasks.getAllTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":"\t * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":"\t * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":"\tpublic boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":"\t\treturn false;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":51}},{"path":"src/main/java/duke/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"\t * Executes the command","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\t * @param tasks the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"\t * @param ui the ui","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"\t * @param storage the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\tpublic void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\t\tui.exit();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\t * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"\t * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\tpublic boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"\t\treturn true;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":29}},{"path":"src/main/java/duke/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"\tprivate final String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\tpublic FindCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.keyword \u003d keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\t * The keyword to search for","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"\tpublic void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\t\tTaskList filteredTasks \u003d tasks.filter(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\t\tui.showFilteredList(filteredTasks.length());","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\t\tfilteredTasks.list();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"\t\tui.printLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"\t * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"\t * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":"\tpublic boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":"\t\treturn false;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":34}},{"path":"src/main/java/duke/commands/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"\t * Executes the command","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\t * @param tasks the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"\t * @param ui the ui","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"\t * @param storage the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\tpublic void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\t\tui.help();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\t * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"\t * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\tpublic boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"\t\treturn false;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":28}},{"path":"src/main/java/duke/commands/IncorrectCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"public class IncorrectCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\t * The message to be displayed","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"\tprivate final String message;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"\t * @param message the message to be displayed","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\tpublic IncorrectCommand(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.message \u003d message;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\t * Executes the command","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"\t * @param tasks the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t * @param ui the ui","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"\t * @param storage the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"\t * @throws DukeException if there is an error","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":"\tpublic void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":"\t\tthrow new DukeException(this.message);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":"\t * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":"\t * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":"\tpublic boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":"\t\treturn false;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":"\t * Returns the message","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":"\t * @return the message","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":"\tpublic String getMessage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":"\t\treturn this.message;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":54}},{"path":"src/main/java/duke/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"\t * Executes the command","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\t * @param tasks the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"\t * @param ui the ui","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"\t * @param storage the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\tpublic void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"\t\tui.showList(tasks.length());","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"\t\ttasks.list();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\t\tui.printLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"\t * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\t * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"\tpublic boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"\t\treturn false;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":31}},{"path":"src/main/java/duke/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\t * The index of the task to be marked","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"\tprivate final int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\t * The type of mark command","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\tprivate final boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\t * @param index the index of the task to be marked","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"\t * @param type the type of mark command","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\tpublic MarkCommand(int index, String type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.index \u003d index;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.isDone \u003d type.equals(\"mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"\t * Executes the command","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":"\t * @param tasks the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":"\t * @param ui the ui","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":"\t * @param storage the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"\t * @throws DukeException if there is an error","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":"\tpublic void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":"\t\t// Check if index is invalid or the task is already marked","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":"\t\tif (tasks.length() \u003c index || tasks.getTask(index - 1).isCompleted() \u003d\u003d isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":"\t\t\tthrow new DukeException(\"The task you are trying to mark either doesnt exist, or is already marked\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":"\t\tif (isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":"\t\t\ttasks.mark(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":"\t\t\tui.showMark(tasks.getTask(index - 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":"\t\t} else {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":"\t\t\ttasks.unmark(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":"\t\t\tui.showUnmark(index, tasks.getTask(index - 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":"\t\tstorage.writeData(tasks.getAllTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":"\t * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":"\t * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryamgoh"},"content":"\tpublic boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryamgoh"},"content":"\t\treturn false;","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":64}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"\t * @param message the message to be displayed","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"\tpublic DukeException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\t\tsuper(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ryamgoh":12}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.commands.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\t * Parses the query and returns the corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"\t * @param query the query","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\t * @return the corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\tpublic static Command parse(String query) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"\t\tString[] split \u003d query.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\t\tCommand command \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\t\tString keyword \u003d split[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"\t\tswitch (keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"help\":","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tcommand \u003d validateHelp(split);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tcommand \u003d validateExit(split);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tcommand \u003d validateList(split);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tcommand \u003d validateTask(split);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tcommand \u003d validateMark(split);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tcommand \u003d validateDelete(split);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tcommand \u003d validateFind(split);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":"\t\t\tdefault:","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tcommand \u003d new IncorrectCommand(\"☹ OOPS!!! Please try again!\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t\t\t+ \"If you need help with commands, please type \u0027help\u0027!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":"\t\treturn command;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":"\tprivate static Command validateFind(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":"\t\tif (split.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! You are missing a keyword\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t\t\"Please enter a valid find query - find book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":"\t\tif (split.length \u003e 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! You have too many keywords\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t\t\"Please enter a valid find query - find book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryamgoh"},"content":"\t\treturn new FindCommand(split[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryamgoh"},"content":"\t * Validates the mark command","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryamgoh"},"content":"\t * @param split the split query","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryamgoh"},"content":"\t * @return the corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryamgoh"},"content":"\tprivate static Command validateMark(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryamgoh"},"content":"\t\tif (split.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! You are missing a number\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t\t\"Please enter a valid mark query - mark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryamgoh"},"content":"\t\tif (split.length \u003e 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! You have entered too many numbers\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t\t\"Please enter a valid mark query - mark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryamgoh"},"content":"\t\tif (!isNumeric(split[1])) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! You have entered a non-numeric item!\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t\t\"Please enter a valid mark query - mark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ryamgoh"},"content":"\t\tint index \u003d Integer.parseInt(split[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ryamgoh"},"content":"\t\t// Check if index is greater than 0.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ryamgoh"},"content":"\t\tif (index \u003c\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! You have entered a non-numeric item!\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t\t\"Please enter a number greater than 0 - mark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ryamgoh"},"content":"\t\treturn new MarkCommand(index, split[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ryamgoh"},"content":"\t * Validates the delete command","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ryamgoh"},"content":"\t * @param split the split query","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ryamgoh"},"content":"\t * @return the corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ryamgoh"},"content":"\tpublic static Command validateDelete(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"ryamgoh"},"content":"\t\tif (split.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! You are missing a number\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t\t\"Please enter a valid delete query - delete 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ryamgoh"},"content":"\t\tif (split.length \u003e 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! You have too many numbers\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t\t\"Please enter a valid delete query - delete 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"ryamgoh"},"content":"\t\tif (!isNumeric(split[1])) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! You entered a non-numeric item!\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t\t\"Please enter a valid delete query - delete 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"ryamgoh"},"content":"\t\tint index \u003d Integer.parseInt(split[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"ryamgoh"},"content":"\t\t// Check if index is greater than 0.","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ryamgoh"},"content":"\t\tif (index \u003c\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn new IncorrectCommand(\"Please enter a number greater than 0!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ryamgoh"},"content":"\t\treturn new DeleteCommand(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"ryamgoh"},"content":"\t * Validates the task command","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"ryamgoh"},"content":"\t * @param split the split query","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ryamgoh"},"content":"\t * @return the corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"ryamgoh"},"content":"\tpublic static Command validateTask(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ryamgoh"},"content":"\t\tif (split.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! The description of a \" + split[0] + \" cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"ryamgoh"},"content":"\t\tif (split[0].equals(\"deadline\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"ryamgoh"},"content":"\t\t\tif (!split[1].contains(\"/by\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! Please enter a valid deadline - deadline return book /by 2pm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"ryamgoh"},"content":"\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"ryamgoh"},"content":"\t\t\tif (split[1].split(\"\\\\s+/by\\\\s+\").length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! You added a /by but did not include a deadline!.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t\t\t\"Please enter a valid deadline - deadline return book /by dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"ryamgoh"},"content":"\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"ryamgoh"},"content":"\t\t\tString[] parts \u003d split[1].split(\"\\\\s*/by\\\\s+\");","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"ryamgoh"},"content":"\t\t\tString taskName \u003d parts[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"ryamgoh"},"content":"\t\t\tif (taskName.isBlank()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"ryamgoh"},"content":"\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"ryamgoh"},"content":"\t\t\tString deadline \u003d parts[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"ryamgoh"},"content":"\t\t\ttry {","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tDateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\treturn new AddCommand(taskName, LocalDateTime.parse(deadline, formatter));","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"ryamgoh"},"content":"\t\t\t} catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! Please enter the date \u0026 time in a valid format! (DD/MM/YY HHMM)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"ryamgoh"},"content":"\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"ryamgoh"},"content":"\t\t} else if (split[0].equals(\"event\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"ryamgoh"},"content":"\t\t\tif (!split[1].contains(\"/from\") || !split[1].contains(\"/to\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! Your query is missing the prefixes /from or /to\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t\t\t\"Please enter a valid event - event read book /from dd/MM/yy HHmm /to dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"ryamgoh"},"content":"\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"ryamgoh"},"content":"\t\t\tint fromIndex \u003d split[1].indexOf(\"/from\");","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"ryamgoh"},"content":"\t\t\tint toIndex \u003d split[1].indexOf(\"/to\");","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"ryamgoh"},"content":"\t\t\tif (fromIndex \u003e toIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! The /from prefix should come before the /to prefix.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t\t\t\"Please enter a valid event - event read book /from dd/MM/yy HHmm /to dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"ryamgoh"},"content":"\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"ryamgoh"},"content":"\t\t\tif (split[1].split(\"\\\\s+/from\\\\s+\").length \u003d\u003d 1 || split[1].split(\"\\\\s+/to\\\\s+\").length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! You added a /from or /to but did not include a time!.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t\t\t\"Please enter a valid event - event read book /from dd/MM/yy HHmm /to dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"ryamgoh"},"content":"\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"ryamgoh"},"content":"\t\t\tString[] parts \u003d split[1].split(\"\\\\s*/from\\\\s+|\\\\s*/to\\\\s+\");","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"ryamgoh"},"content":"\t\t\tString taskName \u003d parts[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"ryamgoh"},"content":"\t\t\tif (taskName.isBlank()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"ryamgoh"},"content":"\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"ryamgoh"},"content":"\t\t\tString from \u003d parts[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"ryamgoh"},"content":"\t\t\tif (from.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! You added a /from but did not include a time!.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t\t\t\"Please enter a valid event - event read book /from dd/MM/yy HHmm /to dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"ryamgoh"},"content":"\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"ryamgoh"},"content":"\t\t\tString to \u003d parts[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"ryamgoh"},"content":"\t\t\tif (to.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! You added a /to but did not include a time!.\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t\t\t\"Please enter a valid event - event read book /from dd/MM/yy HHmm /to dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"ryamgoh"},"content":"\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"ryamgoh"},"content":"\t\t\ttry {","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tDateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tLocalDateTime fromDate \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tLocalDateTime toDate \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tif (fromDate.isAfter(toDate) || fromDate.isEqual(toDate)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! The start date cannot be after the end date!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\treturn new AddCommand(taskName, fromDate, toDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"ryamgoh"},"content":"\t\t\t} catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\treturn new IncorrectCommand(\"Please enter the date \u0026 time in a valid format! (DD/MM/YY HHMM)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"ryamgoh"},"content":"\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"ryamgoh"},"content":"\t\t} else {","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn new AddCommand(split[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"ryamgoh"},"content":"\t * Validates the list command","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"ryamgoh"},"content":"\t * @param split the split query","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"ryamgoh"},"content":"\t * @return the corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"ryamgoh"},"content":"\tpublic static Command validateList(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"ryamgoh"},"content":"\t\tif (split.length !\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! Please enter a valid command - list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"ryamgoh"},"content":"\t\treturn new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"ryamgoh"},"content":"\t * Validates the exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"ryamgoh"},"content":"\t * @param split the split query","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"ryamgoh"},"content":"\t * @return the corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"ryamgoh"},"content":"\tpublic static Command validateExit(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":232,"author":{"gitId":"ryamgoh"},"content":"\t\tif (split.length !\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! Please enter a valid command - bye\");","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"ryamgoh"},"content":"\t\treturn new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"ryamgoh"},"content":"\t * Validates the help command","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"ryamgoh"},"content":"\t * @param split the split query","lastModifiedDate":"2023-08-31"},{"lineNumber":242,"author":{"gitId":"ryamgoh"},"content":"\t * @return the corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"ryamgoh"},"content":"\tpublic static Command validateHelp(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"ryamgoh"},"content":"\t\tif (split.length !\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn new IncorrectCommand(\"☹ OOPS!!! Please enter a valid command - help\");","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"ryamgoh"},"content":"\t\treturn new HelpCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":250,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":251,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":252,"author":{"gitId":"ryamgoh"},"content":"\t * Checks if the string is numeric","lastModifiedDate":"2023-08-31"},{"lineNumber":253,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":254,"author":{"gitId":"ryamgoh"},"content":"\t * @param str the string","lastModifiedDate":"2023-08-31"},{"lineNumber":255,"author":{"gitId":"ryamgoh"},"content":"\t * @return true if the string is numeric","lastModifiedDate":"2023-08-31"},{"lineNumber":256,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":257,"author":{"gitId":"ryamgoh"},"content":"\tstatic boolean isNumeric(String str) {","lastModifiedDate":"2023-08-31"},{"lineNumber":258,"author":{"gitId":"ryamgoh"},"content":"\t\tif (str \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":259,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn false;","lastModifiedDate":"2023-08-31"},{"lineNumber":260,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":261,"author":{"gitId":"ryamgoh"},"content":"\t\ttry {","lastModifiedDate":"2023-08-31"},{"lineNumber":262,"author":{"gitId":"ryamgoh"},"content":"\t\t\tDouble.parseDouble(str);","lastModifiedDate":"2023-08-31"},{"lineNumber":263,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn true;","lastModifiedDate":"2023-08-31"},{"lineNumber":264,"author":{"gitId":"ryamgoh"},"content":"\t\t} catch (NumberFormatException nfe) {","lastModifiedDate":"2023-08-31"},{"lineNumber":265,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn false;","lastModifiedDate":"2023-08-31"},{"lineNumber":266,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":267,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":268,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":269,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":269}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\t * The folder to store the file","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\tprivate final File folder;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"\t * The file to store the data","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\tprivate final File file;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"\t * @param filePath the path to the file","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":"\tpublic Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":"\t\tString[] folder \u003d filePath.split(\"/\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.file \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.folder \u003d new File(folder[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":"\t\t// Directory doesn\u0027t exist","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":"\t\tif (!this.folder.isDirectory()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":"\t\t\tthis.createDirectory();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":"\t\t// File doesn\u0027t exist","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":"\t\tif (!this.fileExists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":"\t\t\tthis.createFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":"\t * Creates the directory","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":"\tpublic void createDirectory() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.folder.mkdir();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":"\t * Creates the file","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":"\tpublic void createFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":"\t\ttry {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":"\t\t\tthis.file.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryamgoh"},"content":"\t\t} catch (IOException err) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryamgoh"},"content":"\t\t\tSystem.out.println(err);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryamgoh"},"content":"\t * Returns true if the file exists","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryamgoh"},"content":"\t * @return true if the file exists","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryamgoh"},"content":"\tpublic boolean fileExists() {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryamgoh"},"content":"\t\treturn this.file.exists();","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryamgoh"},"content":"\t * Reads the data from the file","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryamgoh"},"content":"\t * @return the data from the file","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryamgoh"},"content":"\tpublic ArrayList\u003cTask\u003e readData() {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryamgoh"},"content":"\t\tArrayList\u003cTask\u003e data \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryamgoh"},"content":"\t\ttry {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryamgoh"},"content":"\t\t\tScanner scanner \u003d new Scanner(this.file);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryamgoh"},"content":"\t\t\twhile (scanner.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tTask task \u003d this.formatStringToTask(scanner.nextLine());","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tif (task !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\tdata.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ryamgoh"},"content":"\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ryamgoh"},"content":"\t\t} catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ryamgoh"},"content":"\t\t\tSystem.out.println(\"File not found!\" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ryamgoh"},"content":"\t\treturn data;","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ryamgoh"},"content":"\t * Writes the data to the file","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ryamgoh"},"content":"\t * @param tasks the data to be written","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ryamgoh"},"content":"\tpublic void writeData(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ryamgoh"},"content":"\t\ttry {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ryamgoh"},"content":"\t\t\tFileWriter fw \u003d new FileWriter(this.file);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ryamgoh"},"content":"\t\t\tfor (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tfw.write(task.toFile() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"ryamgoh"},"content":"\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ryamgoh"},"content":"\t\t\tfw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ryamgoh"},"content":"\t\t} catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ryamgoh"},"content":"\t\t\tSystem.out.println(\"Error writing to file!\" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"ryamgoh"},"content":"\t * Formats the string to a task","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"ryamgoh"},"content":"\t * @param line the string to be formatted","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ryamgoh"},"content":"\t * @return the task","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"ryamgoh"},"content":"\tpublic Task formatStringToTask(String line) {","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"ryamgoh"},"content":"\t\tString[] split \u003d line.split(\" \\\\| \", 4);","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ryamgoh"},"content":"\t\t// Corrupted File","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ryamgoh"},"content":"\t\tif (split.length \u003c 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ryamgoh"},"content":"\t\t\tSystem.out.println(\"Error!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn null;","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"ryamgoh"},"content":"\t\tString type \u003d split[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"ryamgoh"},"content":"\t\tString status \u003d split[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"ryamgoh"},"content":"\t\tString description \u003d split[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"ryamgoh"},"content":"\t\tTask task;","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"ryamgoh"},"content":"\t\tDateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\");","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ryamgoh"},"content":"\t\tswitch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\ttask \u003d new Todo(description, status);","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\ttask \u003d new Deadline(description, LocalDateTime.parse(split[3], formatter), status);","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tString[] interval \u003d split[3].split(\" - \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tif (interval.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\ttask \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t} else {","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\ttask \u003d new Event(description, LocalDateTime.parse(interval[0], formatter), LocalDateTime.parse(interval[1], formatter), status);","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"ryamgoh"},"content":"\t\t\tdefault:","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\ttask \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"ryamgoh"},"content":"\t\treturn task;","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":158}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"\t * The time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\tprivate final LocalDateTime deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor for Deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\t * @param description the description of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\t * @param deadline the time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"\tpublic Deadline(String description, LocalDateTime deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\t\tsuper(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.deadline \u003d deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor for Deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"\t * @param description the description of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t * @param deadline the time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"\t * @param status the status of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"\tpublic Deadline(String description, LocalDateTime deadline, String status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":"\t\tsuper(description, status);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.deadline \u003d deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":"\t * Returns the time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":"\t * @return the time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":"\t\treturn \"[D]\" + super.toString()","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t+ \" (by: \" + this.deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":"\t * Returns the time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":"\t * @return the time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":"\tpublic String toFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":"\t\treturn \"D\" + super.toFile() + \" | \" + this.deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":54}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":" * The \"from\" date/time","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" * The \"to\" date/time","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":" * Constructor for Event","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" * @param description the description of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":" * @param from the start time of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" * @param to the end time of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":" super(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":" * Constructor for Event","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":" * @param description the description of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":" * @param from the start time of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":" * @param to the end time of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":" * @param status the status of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to, String status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":" super(description, status);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":" * Returns a string representation of the event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":" * @return String representation of the event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":" + \" (from: \" + this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":" + \" to: \" + this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":" * Returns a string representation of the event task for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":" * @return String representation of the event task for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryamgoh"},"content":" public String toFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryamgoh"},"content":" return \"E\" + super.toFile() + \" | \"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryamgoh"},"content":" + this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryamgoh"},"content":" + \" - \" + this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":68}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"\t * The description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"\tprivate final String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"\t * The status of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\tprivate boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor for Task","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\t * @param description the description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"\tpublic Task(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor for Task","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"\t * @param description the description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t * @param status the status of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"\tpublic Task(String description, String status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.isDone \u003d status.equals(\"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"\t * Returns the description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":"\t * @return String description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":"\tpublic String getStatusIcon() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":"\t\treturn (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":"\t * Returns the description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":"\t * @return String description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":"\t\treturn \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":"\t * Returns the description of the task for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":"\t * @return String description of the task for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":"\tpublic String toFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":"\t\treturn \" | \" + (this.isDone ? 1 : 0) + \" | \" + this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryamgoh"},"content":"\t * Returns the description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryamgoh"},"content":"\t * @return String description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryamgoh"},"content":"\tpublic boolean isCompleted() {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryamgoh"},"content":"\t\treturn this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryamgoh"},"content":"\t * Marks the task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryamgoh"},"content":"\tpublic void unmark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryamgoh"},"content":"\t * Marks the task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryamgoh"},"content":"\tpublic void mark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ryamgoh"},"content":"\t * Returns the description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ryamgoh"},"content":"\t * @return String description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ryamgoh"},"content":"\tpublic String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ryamgoh"},"content":"\t\treturn this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":93}},{"path":"src/main/java/duke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"\t * The list of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"\tprivate final ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor for TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\tpublic TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.list \u003d list;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor for TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\tpublic void add(Task newTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.list.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"\t * Marks the task as done","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"\t * @param index the index of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"\tpublic void mark(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.list.get(index).mark();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"\t * Unmarks the task as done","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":"\t * @param index the index of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":"\tpublic void unmark(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.list.get(index).unmark();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":"\t * Prints the list of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":"\tpublic void list() {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":"\t\tfor (int i \u003d 0; i \u003c this.list.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":"\t\t\tSystem.out.println((i + 1) + \".\" + this.list.get(i).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":"\t * Deletes the task","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":"\t * @param index the index of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":"\tpublic void delete(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.list.remove(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryamgoh"},"content":"\t * Returns the size of the list","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryamgoh"},"content":"\t * @return the size of the list","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryamgoh"},"content":"\tpublic int length() {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryamgoh"},"content":"\t\treturn this.list.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryamgoh"},"content":"\t * Returns the task","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryamgoh"},"content":"\t * @param index the index of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryamgoh"},"content":"\t * @return the task","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryamgoh"},"content":"\tpublic Task getTask(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryamgoh"},"content":"\t\treturn this.list.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryamgoh"},"content":"\t * Returns all the tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryamgoh"},"content":"\t * @return all the tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ryamgoh"},"content":"\tpublic ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ryamgoh"},"content":"\t\treturn this.list;","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ryamgoh"},"content":"\t * Returns the filtered tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ryamgoh"},"content":"\t * @param keyword the keyword to filter","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ryamgoh"},"content":"\t * @return the filtered tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ryamgoh"},"content":"\tpublic TaskList filter(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ryamgoh"},"content":"\t\tArrayList\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ryamgoh"},"content":"\t\tfor (Task task : this.list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ryamgoh"},"content":"\t\t\tif (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tfilteredTasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ryamgoh"},"content":"\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ryamgoh"},"content":"\t\treturn new TaskList(filteredTasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":104}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor for Todo","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"\t * @param description the description of the todo","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\tpublic Todo(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\t\tsuper(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor for Todo","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"\t * @param description the description of the todo","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"\t * @param status the status of the todo","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\tpublic Todo(String description, String status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\t\tsuper(description, status);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\t * Returns the description of the todo","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t * @return the description of the todo","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":"\t\treturn \"[T]\" + super.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"\t * Returns the description of the todo for file storage","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":"\t * @return the description of the todo for file storage","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":"\tpublic String toFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":"\t\treturn \"T\" + super.toFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":43}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"\t * The scanner to read user input","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\tprivate final Scanner scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor for Ui","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\tpublic Ui() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\t * Prints a line","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"\tpublic void printLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"\t * Reads the command from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"\t * @return the command from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":"\tpublic String readCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":"\t\treturn this.scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":"\t * Shows the welcome message","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":"\tpublic void showWelcome() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"Hello I\u0027m RyamBot\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"Type \u0027help\u0027 to see the list of commands\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":"\t * Shows the exit message","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":"\tpublic void exit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"I shall now take my leave. Farewell!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":"\t * Display the added task","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":"\t * @param size the size of the list","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":"\t * @param task the task added","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryamgoh"},"content":"\tpublic void showAdd(int size, Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"Now you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryamgoh"},"content":"\t * Displays the list of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryamgoh"},"content":"\t * @param size the size of the list","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryamgoh"},"content":"\tpublic void showList(int size) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(size + \" tasks in total.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryamgoh"},"content":"\t * Display the marked task message","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ryamgoh"},"content":"\t * @param task the task marked","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ryamgoh"},"content":"\tpublic void showMark(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ryamgoh"},"content":"\t * Display the unmarked task message","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ryamgoh"},"content":"\t * @param task the task unmarked","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ryamgoh"},"content":"\tpublic void showUnmark(int index, Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"Nice! I\u0027ve unmarked this task as done:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ryamgoh"},"content":"\t * Display the deleted task message","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ryamgoh"},"content":"\t * @param index the index of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ryamgoh"},"content":"\t * @param task the task deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"ryamgoh"},"content":"\tpublic void showDelete(int index, Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"Now you have \" + index + \" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"ryamgoh"},"content":"\t * Display the help message","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ryamgoh"},"content":"\tpublic void help() {","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"Here are the list of commands you can use:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"list - Lists all the tasks\");","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"todo \u003ctask\u003e - Adds a todo task\");","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"deadline \u003ctask\u003e /by \u003cdate in dd/MM/yy HHmm\u003e - Adds a deadline task\");","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"event \u003ctask\u003e /from \u003cdate in dd/MM/yy HHmm\u003e /to \u003cdate\u003e - Adds an event task\");","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"delete \u003cindex\u003e - Deletes the task at the index\");","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"mark \u003cindex\u003e - Marks the task at the index as done\");","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"unmark \u003cindex\u003e - Unmarks the task at the index as done\");","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"help - Shows the list of commands\");","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"bye - Exits the program\");","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"ryamgoh"},"content":"\tpublic void showFilteredList(int length) {","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"ryamgoh"},"content":"\t\tSystem.out.println(length + \" tasks in total.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"ryamgoh"},"content":"\t\tprintLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":144}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"event hello world /from today /to tomorrow","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"deadline my man is cool /by 2020-10-10","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"todo watch movie","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ryamgoh":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":"ryamgoh"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"javafx {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" version \u003d \"11.0.2\"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":" modules \u003d [\u0027javafx.controls\u0027, \u0027javafx.fxml\u0027, \u0027javafx.media\u0027]","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":"mainClassName \u003d \u0027duke.Duke\u0027","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ryamgoh":14,"-":40}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"E | 0 | sdsdsdsd | Dec 12 2023 06:00 PM - Nov 12 2024 12:39 PM","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"T | 1 | sdsd","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"T | 1 | ssdsd","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"T | 1 | sadsdjsfhjdg","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"T | 1 | Hello","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"T | 0 | Hello my name is Ryann","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"D | 0 | Hello I like to go shopping | Dec 12 2012 06:00 PM","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"T | 0 | sdsd my Name is Hello","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"E | 0 | I like to be Hello | Dec 12 2012 07:00 PM - Dec 13 2012 12:00 PM","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"T | 0 | sdsdsd","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"T | 1 | sdsd","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"T | 0 | sdsd","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"E | 0 | sdsd | Dec 12 2012 12:00 PM - Dec 12 2012 06:00 PM","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"T | 0 | my name is Ryann","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ryamgoh":14}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Main;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"public class Duke {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" * The task list","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" * The ui object","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":" * The storage object","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":" private final Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":" private final Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":" private Scene scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":" * Constructor for Duke","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":" * @param filePath the file path","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":" this.taskList \u003d new TaskList(this.storage.readData());","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":" * Constructor for Duke","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":" public Duke() {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":" this.storage \u003d new Storage(\"data/duke.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":" this.taskList \u003d new TaskList(this.storage.readData());","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":" * Initialises the program","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"ryamgoh"},"content":" * @param args Input args.","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":65,"author":{"gitId":"ryamgoh"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryamgoh"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"ryamgoh"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryamgoh"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"ryamgoh"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryamgoh"},"content":" Command command \u003d Parser.parse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"ryamgoh"},"content":" return command.execute(this.taskList, this.ui, this.storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"ryamgoh"},"content":" } catch (DukeException exc) {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"ryamgoh"},"content":" return exc.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":80,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":79,"-":2}},{"path":"src/main/java/duke/commands/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":" * The description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" private final String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" * The type of the task, either mark or unmark","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" private final String type;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" * The end time of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" * The start time of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":" * duke.tasks.Todo Constructor","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":" * @param description","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":" public AddCommand(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":" this.type \u003d \"todo\";","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":" * duke.tasks.Deadline Constructor","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":" * @param description the description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":" * @param to the end time of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":" public AddCommand(String description, LocalDateTime to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":" this.type \u003d \"deadline\";","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":" * duke.tasks.Event Constructor","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":" * @param description the description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":" * @param from the start time of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":" * @param to the end time of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":" public AddCommand(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryamgoh"},"content":" this.type \u003d \"event\";","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryamgoh"},"content":" * Executes the command","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryamgoh"},"content":" * @param tasks the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryamgoh"},"content":" * @param ui the ui","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryamgoh"},"content":" * @param storage the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryamgoh"},"content":" * @return","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryamgoh"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"ryamgoh"},"content":" Task task;","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"ryamgoh"},"content":" switch (this.type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryamgoh"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryamgoh"},"content":" task \u003d new Todo(this.description);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryamgoh"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryamgoh"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryamgoh"},"content":" task \u003d new Deadline(this.description, this.to);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryamgoh"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryamgoh"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryamgoh"},"content":" task \u003d new Event(this.description, this.from, this.to);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryamgoh"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ryamgoh"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"ryamgoh"},"content":" throw new DukeException(\"Invalid task type!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ryamgoh"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ryamgoh"},"content":" storage.writeData(tasks.getAllTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ryamgoh"},"content":" return ui.showAdd(tasks.length(), task);","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ryamgoh"},"content":" * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ryamgoh"},"content":" * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ryamgoh"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ryamgoh"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":104}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":" * Executes the command","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":" * @param tasks the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":" * @param ui the ui","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" * @param storage the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":" * @return","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" * @throws DukeException if there is an error","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":26}},{"path":"src/main/java/duke/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":" * The index of the task to be deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":" private final int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" * Constructor","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" * @param index the index of the task to be deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" * Executes the command","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":" * @param tasks the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":" * @param ui the ui","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":" * @param storage the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":" * @return","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":" * @throws DukeException if there is an error","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":" // Check if index is invalid or the task exists.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":" if (tasks.length() \u003c index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":" throw new DukeException(\"The task you are trying to delete either doesn\u0027t exist, or is already deleted!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":" Task task \u003d tasks.getTask(this.index - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":" tasks.delete(index - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":" storage.writeData(tasks.getAllTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":" return ui.showDelete(index, task) + \"\\n\" + \"You now have\" + ui.showList(tasks.length()) + \"tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":" * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":" * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":54}},{"path":"src/main/java/duke/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":" * Executes the command","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":" * @param tasks the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":" * @param ui the ui","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":" * @param storage the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" * @return","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":" return ui.exit();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":30}},{"path":"src/main/java/duke/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":" private final String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":" * The keyword to search for","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":" * @return","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" TaskList filteredTasks \u003d tasks.filter(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":" return ui.showFilteredList(filteredTasks.length()) + \"\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" filteredTasks.showList();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":" * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":" * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":35}},{"path":"src/main/java/duke/commands/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":" * Executes the command","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":" * @param tasks the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":" * @param ui the ui","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":" * @param storage the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" * @return","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":" return ui.help();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":29}},{"path":"src/main/java/duke/commands/IncorrectCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"public class IncorrectCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":" * The message to be displayed","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":" private final String message;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":" * Constructor","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":" * @param message the message to be displayed","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":" public IncorrectCommand(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" this.message \u003d message;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" * Executes the command","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":" * @param tasks the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":" * @param ui the ui","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":" * @param storage the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":" * @return","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":" * @throws DukeException if there is an error","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":" throw new DukeException(this.message);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":" * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":" * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":" * Returns the message","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":" * @return the message","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":" return this.message;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":55}},{"path":"src/main/java/duke/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":" * Executes the command","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":" * @param tasks the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":" * @param ui the ui","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":" * @param storage the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" * @return","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" return ui.showList(tasks.length()) + \"\\n\" + tasks.showList();","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":" * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":30}},{"path":"src/main/java/duke/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":" * The index of the task to be marked","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":" private final int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" * The type of mark command","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" private final boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":" * Constructor","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" * @param index the index of the task to be marked","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":" * @param type the type of mark command","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" public MarkCommand(int index, String type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":" this.isDone \u003d type.equals(\"mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":" * Executes the command","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":" * @param tasks the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":" * @param ui the ui","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":" * @param storage the storage","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":" * @return","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":" * @throws DukeException if there is an error","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":" // Check if index is invalid or the task is already marked","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":" if (tasks.length() \u003c index || tasks.getTask(index - 1).isCompleted() \u003d\u003d isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":" throw new DukeException(\"The task you are trying to mark either doesnt exist, or is already marked\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":" tasks.changeStatus(index - 1, isDone);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":" storage.writeData(tasks.getAllTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":" return ui.showStatus(index, tasks.getTask(index - 1), isDone);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":" * Returns true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":" * @return true if the command is an exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":58}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"\t * @param message the message to be displayed","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"\tpublic DukeException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\t\tsuper(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ryamgoh":12}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.commands.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":" * Parses the query and returns the corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":" * @param query the query","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" * @return the corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" public static Command parse(String query) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" String[] split \u003d query.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":" Command command \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" String keyword \u003d split[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" switch (keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" case \"help\":","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" command \u003d validateHelp(split);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":" command \u003d validateExit(split);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":" command \u003d validateList(split);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":" command \u003d validateTask(split);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":" command \u003d validateMark(split);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":" command \u003d validateDelete(split);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":" command \u003d validateFind(split);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":" command \u003d new IncorrectCommand(\"OOPS!!! Please try again!\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":" + \"If you need help with commands, please type \u0027help\u0027!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":" return command;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":" private static Command validateFind(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":" if (split.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! You are missing a keyword\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":" \"Please enter a valid find query - find book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":" if (split.length \u003e 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! You have too many keywords\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"ryamgoh"},"content":" \"Please enter a valid find query - find book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryamgoh"},"content":" return new FindCommand(split[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryamgoh"},"content":" * Validates the mark command","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryamgoh"},"content":" * @param split the split query","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryamgoh"},"content":" * @return the corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryamgoh"},"content":" private static Command validateMark(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryamgoh"},"content":" if (split.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! You are missing a number\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"ryamgoh"},"content":" \"Please enter a valid mark query - mark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryamgoh"},"content":" if (split.length \u003e 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! You have entered too many numbers\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"ryamgoh"},"content":" \"Please enter a valid mark query - mark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryamgoh"},"content":" if (!isNumeric(split[1])) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! You have entered a non-numeric item!\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"ryamgoh"},"content":" \"Please enter a valid mark query - mark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ryamgoh"},"content":" int index \u003d Integer.parseInt(split[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ryamgoh"},"content":" // Check if index is greater than 0.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ryamgoh"},"content":" if (index \u003c\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! You have entered a non-numeric item!\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"ryamgoh"},"content":" \"Please enter a number greater than 0 - mark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ryamgoh"},"content":" return new MarkCommand(index, split[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ryamgoh"},"content":" * Validates the delete command","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ryamgoh"},"content":" * @param split the split query","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ryamgoh"},"content":" * @return the corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ryamgoh"},"content":" public static Command validateDelete(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"ryamgoh"},"content":" if (split.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! You are missing a number\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"ryamgoh"},"content":" \"Please enter a valid delete query - delete 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ryamgoh"},"content":" if (split.length \u003e 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! You have too many numbers\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"ryamgoh"},"content":" \"Please enter a valid delete query - delete 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"ryamgoh"},"content":" if (!isNumeric(split[1])) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! You entered a non-numeric item!\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"ryamgoh"},"content":" \"Please enter a valid delete query - delete 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"ryamgoh"},"content":" int index \u003d Integer.parseInt(split[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"ryamgoh"},"content":" // Check if index is greater than 0.","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ryamgoh"},"content":" if (index \u003c\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"Please enter a number greater than 0!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ryamgoh"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"ryamgoh"},"content":" * Validates the task command","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"ryamgoh"},"content":" * @param split the split query","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ryamgoh"},"content":" * @return the corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"ryamgoh"},"content":" public static Command validateTask(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ryamgoh"},"content":" if (split.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! The description of a \" + split[0] + \" cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"ryamgoh"},"content":" if (split[0].equals(\"deadline\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"ryamgoh"},"content":" if (!split[1].contains(\"/by\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! Please enter a valid deadline - deadline return book /by 2pm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"ryamgoh"},"content":" if (split[1].split(\"\\\\s+/by\\\\s+\").length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! You added a /by but did not include a deadline!.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"ryamgoh"},"content":" \"Please enter a valid deadline - deadline return book /by dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"ryamgoh"},"content":" String[] parts \u003d split[1].split(\"\\\\s*/by\\\\s+\");","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"ryamgoh"},"content":" String taskName \u003d parts[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"ryamgoh"},"content":" if (taskName.isBlank()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"ryamgoh"},"content":" String deadline \u003d parts[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"ryamgoh"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"ryamgoh"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"ryamgoh"},"content":" return new AddCommand(taskName, LocalDateTime.parse(deadline, formatter));","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"ryamgoh"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! Please enter the date \u0026 time in a valid format! (DD/MM/YY HHMM)\");","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"ryamgoh"},"content":" } else if (split[0].equals(\"event\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"ryamgoh"},"content":" if (!split[1].contains(\"/from\") || !split[1].contains(\"/to\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! Your query is missing the prefixes /from or /to\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"ryamgoh"},"content":" \"Please enter a valid event - event read book /from dd/MM/yy HHmm /to dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"ryamgoh"},"content":" int fromIndex \u003d split[1].indexOf(\"/from\");","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"ryamgoh"},"content":" int toIndex \u003d split[1].indexOf(\"/to\");","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"ryamgoh"},"content":" if (fromIndex \u003e toIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! The /from prefix should come before the /to prefix.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"ryamgoh"},"content":" \"Please enter a valid event - event read book /from dd/MM/yy HHmm /to dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"ryamgoh"},"content":" if (split[1].split(\"\\\\s+/from\\\\s+\").length \u003d\u003d 1 || split[1].split(\"\\\\s+/to\\\\s+\").length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! You added a /from or /to but did not include a time!.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"ryamgoh"},"content":" \"Please enter a valid event - event read book /from dd/MM/yy HHmm /to dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"ryamgoh"},"content":" String[] parts \u003d split[1].split(\"\\\\s*/from\\\\s+|\\\\s*/to\\\\s+\");","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"ryamgoh"},"content":" String taskName \u003d parts[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"ryamgoh"},"content":" if (taskName.isBlank()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":183,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"ryamgoh"},"content":" String from \u003d parts[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"ryamgoh"},"content":" if (from.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! You added a /from but did not include a time!.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":187,"author":{"gitId":"ryamgoh"},"content":" \"Please enter a valid event - event read book /from dd/MM/yy HHmm /to dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"ryamgoh"},"content":" String to \u003d parts[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"ryamgoh"},"content":" if (to.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! You added a /to but did not include a time!.\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":192,"author":{"gitId":"ryamgoh"},"content":" \"Please enter a valid event - event read book /from dd/MM/yy HHmm /to dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"ryamgoh"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"ryamgoh"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"ryamgoh"},"content":" LocalDateTime fromDate \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"ryamgoh"},"content":" LocalDateTime toDate \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"ryamgoh"},"content":" if (fromDate.isAfter(toDate) || fromDate.isEqual(toDate)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! The start date cannot be after the end date!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":201,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"ryamgoh"},"content":" return new AddCommand(taskName, fromDate, toDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"ryamgoh"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"Please enter the date \u0026 time in a valid format! (DD/MM/YY HHMM)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"ryamgoh"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"ryamgoh"},"content":" return new AddCommand(split[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"ryamgoh"},"content":" * Validates the list command","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"ryamgoh"},"content":" * @param split the split query","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"ryamgoh"},"content":" * @return the corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"ryamgoh"},"content":" public static Command validateList(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"ryamgoh"},"content":" if (split.length !\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! Please enter a valid command - list\");","lastModifiedDate":"2023-09-05"},{"lineNumber":221,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"ryamgoh"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"ryamgoh"},"content":" * Validates the exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"ryamgoh"},"content":" * @param split the split query","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"ryamgoh"},"content":" * @return the corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"ryamgoh"},"content":" public static Command validateExit(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":232,"author":{"gitId":"ryamgoh"},"content":" if (split.length !\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! Please enter a valid command - bye\");","lastModifiedDate":"2023-09-05"},{"lineNumber":234,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"ryamgoh"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"ryamgoh"},"content":" * Validates the help command","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"ryamgoh"},"content":" * @param split the split query","lastModifiedDate":"2023-08-31"},{"lineNumber":242,"author":{"gitId":"ryamgoh"},"content":" * @return the corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"ryamgoh"},"content":" public static Command validateHelp(String[] split) {","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"ryamgoh"},"content":" if (split.length !\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"ryamgoh"},"content":" return new IncorrectCommand(\"OOPS! Please enter a valid command - help\");","lastModifiedDate":"2023-09-05"},{"lineNumber":247,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"ryamgoh"},"content":" return new HelpCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":250,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":251,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":252,"author":{"gitId":"ryamgoh"},"content":" * Checks if the string is numeric","lastModifiedDate":"2023-08-31"},{"lineNumber":253,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":254,"author":{"gitId":"ryamgoh"},"content":" * @param str the string","lastModifiedDate":"2023-08-31"},{"lineNumber":255,"author":{"gitId":"ryamgoh"},"content":" * @return true if the string is numeric","lastModifiedDate":"2023-08-31"},{"lineNumber":256,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":257,"author":{"gitId":"ryamgoh"},"content":" static boolean isNumeric(String str) {","lastModifiedDate":"2023-08-31"},{"lineNumber":258,"author":{"gitId":"ryamgoh"},"content":" if (str \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":259,"author":{"gitId":"ryamgoh"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":260,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":261,"author":{"gitId":"ryamgoh"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":262,"author":{"gitId":"ryamgoh"},"content":" Double.parseDouble(str);","lastModifiedDate":"2023-08-31"},{"lineNumber":263,"author":{"gitId":"ryamgoh"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":264,"author":{"gitId":"ryamgoh"},"content":" } catch (NumberFormatException nfe) {","lastModifiedDate":"2023-08-31"},{"lineNumber":265,"author":{"gitId":"ryamgoh"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":266,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":267,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":268,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":269,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":269}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\t * The folder to store the file","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\tprivate final File folder;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"\t * The file to store the data","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\tprivate final File file;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"\t * @param filePath the path to the file","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":"\tpublic Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":"\t\tString[] folder \u003d filePath.split(\"/\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.file \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.folder \u003d new File(folder[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":"\t\t// Directory doesn\u0027t exist","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":"\t\tif (!this.folder.isDirectory()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":"\t\t\tthis.createDirectory();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":"\t\t// File doesn\u0027t exist","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":"\t\tif (!this.fileExists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":"\t\t\tthis.createFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":"\t * Creates the directory","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":"\tpublic void createDirectory() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.folder.mkdir();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":"\t * Creates the file","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":"\tpublic void createFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":"\t\ttry {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":"\t\t\tthis.file.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryamgoh"},"content":"\t\t} catch (IOException err) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryamgoh"},"content":"\t\t\tSystem.out.println(err);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryamgoh"},"content":"\t * Returns true if the file exists","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryamgoh"},"content":"\t * @return true if the file exists","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryamgoh"},"content":"\tpublic boolean fileExists() {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryamgoh"},"content":"\t\treturn this.file.exists();","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryamgoh"},"content":"\t * Reads the data from the file","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryamgoh"},"content":"\t * @return the data from the file","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryamgoh"},"content":"\tpublic ArrayList\u003cTask\u003e readData() {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryamgoh"},"content":"\t\tArrayList\u003cTask\u003e data \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryamgoh"},"content":"\t\ttry {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryamgoh"},"content":"\t\t\tScanner scanner \u003d new Scanner(this.file);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryamgoh"},"content":"\t\t\twhile (scanner.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tTask task \u003d this.formatStringToTask(scanner.nextLine());","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tif (task !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\tdata.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ryamgoh"},"content":"\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ryamgoh"},"content":"\t\t} catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ryamgoh"},"content":"\t\t\tSystem.out.println(\"File not found!\" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ryamgoh"},"content":"\t\treturn data;","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ryamgoh"},"content":"\t * Writes the data to the file","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ryamgoh"},"content":"\t * @param tasks the data to be written","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ryamgoh"},"content":"\tpublic void writeData(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ryamgoh"},"content":"\t\ttry {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ryamgoh"},"content":"\t\t\tFileWriter fw \u003d new FileWriter(this.file);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ryamgoh"},"content":"\t\t\tfor (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tfw.write(task.toFile() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"ryamgoh"},"content":"\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ryamgoh"},"content":"\t\t\tfw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ryamgoh"},"content":"\t\t} catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ryamgoh"},"content":"\t\t\tSystem.out.println(\"Error writing to file!\" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"ryamgoh"},"content":"\t * Formats the string to a task","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"ryamgoh"},"content":"\t * @param line the string to be formatted","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ryamgoh"},"content":"\t * @return the task","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"ryamgoh"},"content":"\tpublic Task formatStringToTask(String line) {","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"ryamgoh"},"content":"\t\tString[] split \u003d line.split(\" \\\\| \", 4);","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ryamgoh"},"content":"\t\t// Corrupted File","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ryamgoh"},"content":"\t\tif (split.length \u003c 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ryamgoh"},"content":"\t\t\tSystem.out.println(\"Error!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ryamgoh"},"content":"\t\t\treturn null;","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"ryamgoh"},"content":"\t\tString type \u003d split[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"ryamgoh"},"content":"\t\tString status \u003d split[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"ryamgoh"},"content":"\t\tString description \u003d split[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"ryamgoh"},"content":"\t\tTask task;","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"ryamgoh"},"content":"\t\tDateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\");","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ryamgoh"},"content":"\t\tswitch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\ttask \u003d new Todo(description, status);","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\ttask \u003d new Deadline(description, LocalDateTime.parse(split[3], formatter), status);","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"ryamgoh"},"content":"\t\t\tcase \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tString[] interval \u003d split[3].split(\" - \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tif (interval.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\ttask \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t} else {","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\ttask \u003d new Event(description, LocalDateTime.parse(interval[0], formatter), LocalDateTime.parse(interval[1], formatter), status);","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"ryamgoh"},"content":"\t\t\tdefault:","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\ttask \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"ryamgoh"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"ryamgoh"},"content":"\t\treturn task;","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":158}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"\t * The time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\tprivate final LocalDateTime deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor for Deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\t * @param description the description of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\t * @param deadline the time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"\tpublic Deadline(String description, LocalDateTime deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\t\tsuper(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.deadline \u003d deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor for Deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"\t * @param description the description of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t * @param deadline the time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"\t * @param status the status of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"\tpublic Deadline(String description, LocalDateTime deadline, String status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":"\t\tsuper(description, status);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":"\t\tthis.deadline \u003d deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":"\t * Returns the time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":"\t * @return the time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":"\t\treturn \"[D]\" + super.toString()","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":"\t\t\t\t\t\t+ \" (by: \" + this.deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":"\t * Returns the time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":"\t * @return the time of the deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":"\tpublic String toFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":"\t\treturn \"D\" + super.toFile() + \" | \" + this.deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":54}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":" * The \"from\" date/time","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" * The \"to\" date/time","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":" * Constructor for Event","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" * @param description the description of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":" * @param from the start time of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" * @param to the end time of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":" super(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":" * Constructor for Event","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":" * @param description the description of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":" * @param from the start time of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":" * @param to the end time of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":" * @param status the status of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to, String status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":" super(description, status);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":" * Returns a string representation of the event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":" * @return String representation of the event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":" + \" (from: \" + this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":" + \" to: \" + this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":" * Returns a string representation of the event task for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":" * @return String representation of the event task for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryamgoh"},"content":" public String toFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryamgoh"},"content":" return \"E\" + super.toFile() + \" | \"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryamgoh"},"content":" + this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryamgoh"},"content":" + \" - \" + this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":68}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":" * The description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":" private final String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":" * The status of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" * Constructor for Task","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" * @param description the description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" * Constructor for Task","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":" * @param description the description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":" * @param status the status of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":" public Task(String description, String status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":" this.isDone \u003d status.equals(\"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":" * @return String description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":" * @return String description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":" * Returns the description of the task for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":" * @return String description of the task for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":" public String toFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":" return \" | \" + (this.isDone ? 1 : 0) + \" | \" + this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryamgoh"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryamgoh"},"content":" * @return String description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryamgoh"},"content":" public boolean isCompleted() {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryamgoh"},"content":" return this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryamgoh"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryamgoh"},"content":" public void unmark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryamgoh"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryamgoh"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryamgoh"},"content":" public void mark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryamgoh"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ryamgoh"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ryamgoh"},"content":" * @return String description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ryamgoh"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ryamgoh"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"ryamgoh"},"content":" public void completeTask(boolean isMark) {","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"ryamgoh"},"content":" this.isDone \u003d isMark;","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":97}},{"path":"src/main/java/duke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":" * The list of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":" private final ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" * Constructor for TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" public TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" * Constructor for TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" public void add(Task newTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" this.list.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":" * Marks the task as done","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":" * @param index the index of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":" public void mark(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":" this.list.get(index).mark();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":" * Unmarks the task as done","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":" * @param index the index of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":" public void unmark(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":" this.list.get(index).unmark();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":" * Prints the list of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":" public String showList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":" for (int i \u003d 0; i \u003c this.list.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":" output +\u003d (i + 1) + \".\" + this.list.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":" return output;","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":" * Marks the task with the given index.","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":" * @param index Index of the task to be marked.","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"ryamgoh"},"content":" * @param isMark Mark if true, Unmark if false.","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"ryamgoh"},"content":" * @throws DukeException Exception thrown upon invalid index.","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"ryamgoh"},"content":" public void changeStatus(int index, boolean isMark) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"ryamgoh"},"content":" if (index \u003e\u003d this.length()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"ryamgoh"},"content":" throw new DukeException(\"I\u0027m unable to perform the mark/unmark operation due to an invalid index!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"ryamgoh"},"content":" if (this.list.get(index).isCompleted() \u003d\u003d isMark) {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"ryamgoh"},"content":" throw new DukeException(\"I\u0027m unable to perform the mark/unmark operation because the task\"","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"ryamgoh"},"content":" + \" is already marked/unmarked!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryamgoh"},"content":" this.list.get(index).completeTask(isMark);","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryamgoh"},"content":" * Deletes the task","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryamgoh"},"content":" * @param index the index of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryamgoh"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryamgoh"},"content":" this.list.remove(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ryamgoh"},"content":" * Returns the size of the list","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ryamgoh"},"content":" * @return the size of the list","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ryamgoh"},"content":" public int length() {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ryamgoh"},"content":" return this.list.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ryamgoh"},"content":" * Returns the task","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ryamgoh"},"content":" * @param index the index of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ryamgoh"},"content":" * @return the task","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ryamgoh"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ryamgoh"},"content":" return this.list.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ryamgoh"},"content":" * Returns all the tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"ryamgoh"},"content":" * @return all the tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ryamgoh"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ryamgoh"},"content":" return this.list;","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ryamgoh"},"content":" * Returns the filtered tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"ryamgoh"},"content":" * @param keyword the keyword to filter","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"ryamgoh"},"content":" * @return the filtered tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"ryamgoh"},"content":" public TaskList filter(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"ryamgoh"},"content":" ArrayList\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"ryamgoh"},"content":" for (Task task : this.list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"ryamgoh"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ryamgoh"},"content":" filteredTasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ryamgoh"},"content":" return new TaskList(filteredTasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":127}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor for Todo","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"\t * @param description the description of the todo","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"\tpublic Todo(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"\t\tsuper(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"\t * Constructor for Todo","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"\t * @param description the description of the todo","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"\t * @param status the status of the todo","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":"\tpublic Todo(String description, String status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":"\t\tsuper(description, status);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":"\t * Returns the description of the todo","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"\t * @return the description of the todo","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":"\t\treturn \"[T]\" + super.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":"\t/**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"\t * Returns the description of the todo for file storage","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":"\t *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":"\t * @return the description of the todo for file storage","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":"\t */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":"\tpublic String toFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":"\t\treturn \"T\" + super.toFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":43}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ryamgoh":61}},{"path":"src/main/java/duke/ui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":" private final Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":" stage.setTitle(\"RyamBot\");","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ryamgoh":34}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" private final Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Bot2.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":" private final Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Bot.jpg\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":" DialogBox.getDukeDialog(\"Welcome to my world\", dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ryamgoh":54}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"package duke.ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":" * The scanner to read user input","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" * Constructor for Ui","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" public Ui() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" * Reads the command from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryamgoh"},"content":" * @return the command from the user","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryamgoh"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryamgoh"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryamgoh"},"content":" * Shows the welcome message","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryamgoh"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ryamgoh"},"content":" return \"Hello I\u0027m RyamBot\\nWhat can I do for you?\\nType \\\"help\\\" to see the list of commands\";","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryamgoh"},"content":" * Shows the exit message","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryamgoh"},"content":" public String exit() {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ryamgoh"},"content":" return \"I shall now take my leave. Farewell!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryamgoh"},"content":" * Display the added task","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryamgoh"},"content":" * @param size the size of the list","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryamgoh"},"content":" * @param task the task added","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryamgoh"},"content":" public String showAdd(int size, Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ryamgoh"},"content":" return \"Got it. I\u0027ve added this task:\" + \"\\n\" + task.toString() + \"\\n\" + \"Now you have \" + size + \" tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryamgoh"},"content":" * Displays the list of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryamgoh"},"content":" * @param size the size of the list","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryamgoh"},"content":" public String showList(int size) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"ryamgoh"},"content":" return \"Here are the tasks in your list:\" + \"\\n\" + size + \" tasks in total.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryamgoh"},"content":" * Display the marked task message","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryamgoh"},"content":" * @param task the task marked","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryamgoh"},"content":" public String showMark(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"ryamgoh"},"content":" return \"Nice! I\u0027ve marked this task as done:\" + \"\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryamgoh"},"content":" * Display the unmarked task message","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryamgoh"},"content":" * @param task the task unmarked","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryamgoh"},"content":" public String showUnmark(int index, Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"ryamgoh"},"content":" return \"Nice! I\u0027ve unmarked this task as done:\" + \"\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryamgoh"},"content":" * Display the deleted task message","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryamgoh"},"content":" * @param index the index of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryamgoh"},"content":" * @param task the task deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ryamgoh"},"content":" public String showDelete(int index, Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"ryamgoh"},"content":" return \"Noted. I\u0027ve removed this task:\" + \"\\n\" + task.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ryamgoh"},"content":" * Display the help message","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ryamgoh"},"content":" public String help() {","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"ryamgoh"},"content":" return \"Here are the list of commands you can use:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"ryamgoh"},"content":" + \"list - Lists all the tasks\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"ryamgoh"},"content":" + \"todo \u003ctask\u003e - Adds a todo task\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"ryamgoh"},"content":" + \"deadline \u003ctask\u003e /by \u003cdate in dd/MM/yy HHmm\u003e - Adds a deadline task\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"ryamgoh"},"content":" + \"event \u003ctask\u003e /from \u003cdate in dd/MM/yy HHmm\u003e /to \u003cdate\u003e - Adds an event task\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"ryamgoh"},"content":" + \"delete \u003cindex\u003e - Deletes the task at the index\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"ryamgoh"},"content":" + \"mark \u003cindex\u003e - Marks the task at the index as done\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"ryamgoh"},"content":" + \"unmark \u003cindex\u003e - Unmarks the task at the index as done\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"ryamgoh"},"content":" + \"help - Shows the list of commands\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"ryamgoh"},"content":" + \"bye - Exits the program\";","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"ryamgoh"},"content":" public String showFilteredList(int length) {","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"ryamgoh"},"content":" return \"Here are the matching tasks in your list:\" + \"\\n\" + length + \" tasks in total.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ryamgoh"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"ryamgoh"},"content":" * Returns an acknowledgment message on a successful mark/unmark.","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"ryamgoh"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"ryamgoh"},"content":" * @param index Index of the newly marked/unmarked task.","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"ryamgoh"},"content":" * @param task Newly marked/unmarked task.","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"ryamgoh"},"content":" * @param isDone Mark if true, Unmark if false.","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"ryamgoh"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"ryamgoh"},"content":" public String showStatus(int index, Task task, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"ryamgoh"},"content":" String message;","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"ryamgoh"},"content":" if (isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"ryamgoh"},"content":" message \u003d \"The following task is marked as complete:\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"ryamgoh"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"ryamgoh"},"content":" message \u003d \"The following task has been unmarked:\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"ryamgoh"},"content":" return message + index + \".\" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"ryamgoh"},"content":" + \"Is there anything else I can assist you with?\";","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"ryamgoh"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ryamgoh"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryamgoh":127}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":" \u003cLabel fx:id\u003d\"dialog\" maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"0.0\" text\u003d\"Label\" textFill\u003d\"RED\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":" \u003cInsets left\u003d\"15.0\" right\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" \u003c/padding\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"50.0\" fitWidth\u003d\"50.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ryamgoh"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ryamgoh"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ryamgoh"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ryamgoh":22}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ryamgoh"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ryamgoh"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ryamgoh"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ryamgoh"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ryamgoh"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ryamgoh"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ryamgoh"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ryamgoh"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ryamgoh"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ryamgoh":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ryamgoh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"ryamgoh"},"content":"event hello world /from today /to tomorrow","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ryamgoh"},"content":"deadline my man is cool /by 2020-10-10","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ryamgoh"},"content":"todo watch movie","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ryamgoh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ryamgoh"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ryamgoh"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ryamgoh"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ryamgoh"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ryamgoh"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ryamgoh":10}}] diff --git a/ryamgoh_ip_master/commits.json b/ryamgoh_ip_master/commits.json index 5e202e20..965a2b36 100644 --- a/ryamgoh_ip_master/commits.json +++ b/ryamgoh_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ryamgoh":[{"date":"2023-08-23","commitResults":[{"hash":"8c80924be449e20c7e4a137dc386204c95020bb0","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"23756dcf08b1aecc5ae7a3cdd00e2b96612af458","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":8}}},{"hash":"9c8a7362dbfbb14fe666ed4a5a274f9790e25484","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":20}}},{"hash":"5a263b4c7e26b2832981e11684142dd887b992df","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":30}}},{"hash":"fc96acf16cc0582745f27984874abaa38bda8448","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":20}}}]},{"date":"2023-08-24","commitResults":[{"hash":"d3336e14cb9a29327073f05b1d679144de1c6666","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":84,"deletions":78}}},{"hash":"dd597eb7353dda1de3b0c308752b3aff1416ae02","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":164,"deletions":47}}},{"hash":"2aa52001612931dab32cdf6a0bdf0b8d59e39c88","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":52}}},{"hash":"43127ac4438cab6488226323f17512a6d9b0c941","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":3}}}]},{"date":"2023-08-28","commitResults":[{"hash":"d467d5d47ac3ed8ccc9a920ccda2781e9f1a3606","isMergeCommit":false,"messageTitle":"Add Storage","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":129,"deletions":63}}}]},{"date":"2023-08-29","commitResults":[{"hash":"50647a49bbbeb2fc73fc4f3a8a79bbe8718fa0b2","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":114,"deletions":73}}},{"hash":"18a8d8c2a397b30aff2888805a61344eeea56bf4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5a91a6168595431ab8bd8b73df1758e304a50942","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":121,"deletions":43}}},{"hash":"41f5f501f4f058355c554f8aca18f01895e497f4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4e3c4ec6347d19e23adf261c017cf60fcaf64e81","isMergeCommit":false,"messageTitle":"Refactor Code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":321,"deletions":287}}},{"hash":"550484197b6703bf7c23dec6e87821bd28b78834","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":68}}},{"hash":"4b2c3c6f07250ae5b4227783ef11fbb7211d1af9","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-MoreOOP\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"43a9736f7801d267958f8b7f5dc61a0a906fe5b0","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":4}}},{"hash":"633556b79d8e51200d92d7134340e84c379d0488","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"007ba6b469150954203634bdd93deb95a8b55289","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/ryamgoh/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"616a00a58284bf63be8b3c98077de2e75ff4924d","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"51b498c7793aca8c6be2f140629467ddb345d16c","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":0}}},{"hash":"a86878471753bcc2f863c2922054fd7b54410f18","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"88ea1de75c95fc3c7f3a3c81d6eab922cb1ebc22","isMergeCommit":false,"messageTitle":"Javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":165,"deletions":3}}}]},{"date":"2023-08-31","commitResults":[{"hash":"d26f9f658fabdf1ff7ffc3d9e879e9da727f5096","isMergeCommit":false,"messageTitle":"Refactor with Command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":3},"java":{"insertions":927,"deletions":914}}},{"hash":"04bd4088a7fc274a5e84ba72a51ac7650d329aa7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-experimentWithRefactoring\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"92265cccd8f348398f060d68b0a420eed73764ce","isMergeCommit":false,"messageTitle":"Add Javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":5}}},{"hash":"f9d74ce33362014ce1e81cc22ccea0daae1d2ff9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"78d4a60c428c5b29330c8f4e2bec4d0fbe4b54da","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":379,"deletions":55}}},{"hash":"fa348e007afe6bfd248274dbc11ddddfed9ff338","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-JavaDoc\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"ef7b94144205cf4c0e2e017360744cbf14d3b9ac","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":82,"deletions":1}}},{"hash":"3410bb980631c3b466b3ad21a4499e1cfe8a3b63","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"d8cebdf48bab1f31f3a2165a12589739cdbfece0","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":55,"deletions":55}}},{"hash":"575b39aae243971a305da3228bdee0a759c35374","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ryamgoh":{"java":1424,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":7,"txt":21}},"authorContributionVariance":{"ryamgoh":377198.6},"authorDisplayNameMap":{"ryamgoh":"CS2103T-F10-2 GOH ..YANN"}} +{"authorDailyContributionsMap":{"ryamgoh":[{"date":"2023-08-23","commitResults":[{"hash":"8c80924be449e20c7e4a137dc386204c95020bb0","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"23756dcf08b1aecc5ae7a3cdd00e2b96612af458","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":8}}},{"hash":"9c8a7362dbfbb14fe666ed4a5a274f9790e25484","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":20}}},{"hash":"5a263b4c7e26b2832981e11684142dd887b992df","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":30}}},{"hash":"fc96acf16cc0582745f27984874abaa38bda8448","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":20}}}]},{"date":"2023-08-24","commitResults":[{"hash":"d3336e14cb9a29327073f05b1d679144de1c6666","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":84,"deletions":78}}},{"hash":"dd597eb7353dda1de3b0c308752b3aff1416ae02","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":164,"deletions":47}}},{"hash":"2aa52001612931dab32cdf6a0bdf0b8d59e39c88","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":52}}},{"hash":"43127ac4438cab6488226323f17512a6d9b0c941","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":3}}}]},{"date":"2023-08-28","commitResults":[{"hash":"d467d5d47ac3ed8ccc9a920ccda2781e9f1a3606","isMergeCommit":false,"messageTitle":"Add Storage","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":129,"deletions":63}}}]},{"date":"2023-08-29","commitResults":[{"hash":"50647a49bbbeb2fc73fc4f3a8a79bbe8718fa0b2","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":114,"deletions":73}}},{"hash":"18a8d8c2a397b30aff2888805a61344eeea56bf4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5a91a6168595431ab8bd8b73df1758e304a50942","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":121,"deletions":43}}},{"hash":"41f5f501f4f058355c554f8aca18f01895e497f4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4e3c4ec6347d19e23adf261c017cf60fcaf64e81","isMergeCommit":false,"messageTitle":"Refactor Code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":321,"deletions":287}}},{"hash":"550484197b6703bf7c23dec6e87821bd28b78834","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":68}}},{"hash":"4b2c3c6f07250ae5b4227783ef11fbb7211d1af9","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-MoreOOP\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"43a9736f7801d267958f8b7f5dc61a0a906fe5b0","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":4}}},{"hash":"633556b79d8e51200d92d7134340e84c379d0488","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"007ba6b469150954203634bdd93deb95a8b55289","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/ryamgoh/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"616a00a58284bf63be8b3c98077de2e75ff4924d","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"51b498c7793aca8c6be2f140629467ddb345d16c","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":0}}},{"hash":"a86878471753bcc2f863c2922054fd7b54410f18","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"88ea1de75c95fc3c7f3a3c81d6eab922cb1ebc22","isMergeCommit":false,"messageTitle":"Javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":165,"deletions":3}}}]},{"date":"2023-08-31","commitResults":[{"hash":"d26f9f658fabdf1ff7ffc3d9e879e9da727f5096","isMergeCommit":false,"messageTitle":"Refactor with Command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":3},"java":{"insertions":927,"deletions":914}}},{"hash":"04bd4088a7fc274a5e84ba72a51ac7650d329aa7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-experimentWithRefactoring\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"92265cccd8f348398f060d68b0a420eed73764ce","isMergeCommit":false,"messageTitle":"Add Javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":5}}},{"hash":"f9d74ce33362014ce1e81cc22ccea0daae1d2ff9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"78d4a60c428c5b29330c8f4e2bec4d0fbe4b54da","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":379,"deletions":55}}},{"hash":"fa348e007afe6bfd248274dbc11ddddfed9ff338","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-JavaDoc\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"ef7b94144205cf4c0e2e017360744cbf14d3b9ac","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":82,"deletions":1}}},{"hash":"3410bb980631c3b466b3ad21a4499e1cfe8a3b63","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"d8cebdf48bab1f31f3a2165a12589739cdbfece0","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":55,"deletions":55}}},{"hash":"575b39aae243971a305da3228bdee0a759c35374","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d51737786c53ac79b21ad9010cb313badccfe200","isMergeCommit":false,"messageTitle":"Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":12,"deletions":6},"txt":{"insertions":7,"deletions":4},"fxml":{"insertions":41,"deletions":0},"java":{"insertions":1067,"deletions":887}}},{"hash":"23b49b69aabdc44faee52e8f6bde9a665023e547","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ryamgoh":{"java":1604,"md":0,"fxml":41,"sh":0,"bat":0,"gradle":14,"txt":24}},"authorContributionVariance":{"ryamgoh":548806.94},"authorDisplayNameMap":{"ryamgoh":"CS2103T-F10-2 GOH ..YANN"}} diff --git a/ryanozx_ip_master/authorship.json b/ryanozx_ip_master/authorship.json index 31ed9613..27281129 100644 --- a/ryanozx_ip_master/authorship.json +++ b/ryanozx_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":"ryanozx"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ryanozx":1,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" * Chatbot implementation","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" private final Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" * Constructs a Duke object","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" * @param fileDir Relative path to save task list","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" * @param fileName Name of file to save task list","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" public Duke(String fileDir, String fileName) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" storage \u003d new Storage(fileDir, fileName);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" taskList \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" * Constructs a new Duke instance and runs it","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" * @param args Command-line arguments passed in at startup","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":" new Duke(\"./data/\", \"duke.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" * Runs the chatbot, listens to user inputs, and executes commands","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryanozx"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"ryanozx"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryanozx"},"content":" ui.printLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryanozx"},"content":" Command c \u003d parser.parse(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryanozx"},"content":" c.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryanozx"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryanozx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryanozx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryanozx"},"content":" } finally {","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"ryanozx"},"content":" ui.printLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ryanozx":59,"-":3}},{"path":"src/main/java/duke/commands/AddTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" * Command to add task to task list","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":"public class AddTaskCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" protected final Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" * Constructs an AddTaskCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" * @param t Task to be added","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" public AddTaskCommand(Task t) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" task \u003d t;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(\"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" + \"\\t\"+ task);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(taskList.getCountString());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" storage.write(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":36}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":" * Abstract Command class that can be executed to perform a command","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" public enum Type {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" TODO, DEADLINE, EVENT, MARK, UNMARK, DELETE, DATE, FIND","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" * Returns whether a command is an Exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" * @return True if command is an Exit Command, false otherwise","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" * Executes command","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" * @param taskList TaskList for containing lists","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" * @param ui Ui to handle interaction with users","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" * @param storage Storage to handle file saving and loading","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":31}},{"path":"src/main/java/duke/commands/DeleteTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" * Command to delete a Task from the TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":"public class DeleteTaskCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" private final int idx;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" * Constructs a DeleteTaskCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" * @param idx Index of task to mark","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" public DeleteTaskCommand(int idx) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" this.idx \u003d idx;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" Task t \u003d taskList.deleteTask(idx);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(\"Noted. I\u0027ve removed this task:\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" \"\\t\" + t);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(taskList.getCountString());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" storage.save(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" ui.showError(String.format(\"%d is not a valid index! Unable to delete task.\", idx + 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":38}},{"path":"src/main/java/duke/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":" * Command to exit the chatbot","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(\"Goodbye!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":20}},{"path":"src/main/java/duke/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"import java.util.List;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" * Command to find all events that contain the keyword","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" private final String keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" * Constructs a FindCommand object","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" * @param keyword Keyword to query for","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" List\u003cTask\u003e tasksWithKeyword \u003d taskList.getTasksWithKeyword(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" int idx \u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" for (Task t : tasksWithKeyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(String.format(\"%d.%s\", ++idx, t.toString()));","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ryanozx":34}},{"path":"src/main/java/duke/commands/ListByDateCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" * Command to list all events that occur on date","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"public class ListByDateCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" private final LocalDate date;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" * Constructs a ListByDateCommand object","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" * @param date Date to query for","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" public ListByDateCommand(LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" List\u003cTask\u003e tasksOnDate \u003d taskList.getTaskOnDate(date);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(\"Here are the tasks occurring on \" + date + \":\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" for (Task t : tasksOnDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(t.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":33}},{"path":"src/main/java/duke/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" * Command to print the contents of the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(\"Here are your tasks:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" List\u003cTask\u003e tasks \u003d taskList.getTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" int taskIdx \u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" System.out.printf(\"%d.%s\\n\", ++taskIdx, t);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":23}},{"path":"src/main/java/duke/commands/MarkTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" * Command to mark a Task in the TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":"public class MarkTaskCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" private final int idx;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" * Constructs a MarkTaskCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" * @param idx Index of task to mark","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" public MarkTaskCommand(int idx) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" this.idx \u003d idx;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" Task t \u003d taskList.markTask(idx);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(\"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" + t);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" storage.save(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" ui.showError(String.format(\"%d is not a valid index! Unable to mark task.\", idx + 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":36}},{"path":"src/main/java/duke/commands/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":" * Command used to handle invalid commands (e.g. bad parsing)","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"public class UnknownCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" private final String errorMsg;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" * Constructs an UnknownCommand object with the default error message","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" public UnknownCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" errorMsg \u003d \"I do not understand this command.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" + \"Here\u0027s what I can do though: I can create ToDos (todo),\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" + \"Deadlines (deadline), Events (event), print them out (list),\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" + \"print tasks occurring on a specific date (date) as well as \\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" + \"check (mark) and uncheck (unmark) them!\";","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" * Constructs an UnknownCommand object with a specified error message","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" * @param errorMsg Error message to print","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" public UnknownCommand(String errorMsg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" this.errorMsg \u003d errorMsg;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" ui.showError(errorMsg);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":36}},{"path":"src/main/java/duke/commands/UnmarkTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" * Command to unmark a Task in the TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":"public class UnmarkTaskCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" private final int idx;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" * Constructs a MarkTaskCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" * @param idx Index of task to mark","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" public UnmarkTaskCommand(int idx) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" this.idx \u003d idx;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" Task t \u003d taskList.unmarkTask(idx);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(\"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" + t);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" storage.save(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" ui.showError(String.format(\"%d is not a valid index! Unable to unmark task.\", idx + 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":37}},{"path":"src/main/java/duke/components/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.components;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.commands.AddTaskCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.commands.DeleteTaskCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.commands.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import duke.commands.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import duke.commands.ListByDateCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"import duke.commands.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"import duke.commands.MarkTaskCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"import duke.commands.UnknownCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"import duke.commands.UnmarkTaskCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" * Class that parses user commands","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" static final String DATE_FORMAT \u003d \"dd-MM-yyyy\";","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" public static final DateTimeFormatter DATE_FORMATTER \u003d DateTimeFormatter.ofPattern(DATE_FORMAT);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" static final String DATETIME_FORMAT \u003d \"dd-MM-yyyy HHmm\";","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" public static final DateTimeFormatter DATETIME_FORMATTER \u003d DateTimeFormatter.ofPattern(DATETIME_FORMAT);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" * Parses the user input into a Command object","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" * @param commandInput String containing user input","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" * @return A Command object that can be executed","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":" public Command parse(String commandInput) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" String[] splitInput \u003d commandInput.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":" String command \u003d splitInput[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" switch (command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":" return parseArguments(Command.Type.TODO, splitInput[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryanozx"},"content":" return parseArguments(Command.Type.DEADLINE, splitInput[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryanozx"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryanozx"},"content":" return parseArguments(Command.Type.EVENT, splitInput[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryanozx"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryanozx"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryanozx"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryanozx"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryanozx"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryanozx"},"content":" return parseArguments(Command.Type.MARK, splitInput[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryanozx"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryanozx"},"content":" return parseArguments(Command.Type.UNMARK, splitInput[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryanozx"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryanozx"},"content":" return parseArguments(Command.Type.DELETE, splitInput[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryanozx"},"content":" case \"date\":","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryanozx"},"content":" return parseArguments(Command.Type.DATE, splitInput[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryanozx"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"ryanozx"},"content":" return parseArguments(Command.Type.FIND, splitInput[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"ryanozx"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryanozx"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryanozx"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryanozx"},"content":" return new UnknownCommand(String.format(\"%s requires additional arguments!\", command));","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryanozx"},"content":" * Parses arguments for commands that require arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryanozx"},"content":" * @param commandType Command Type","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryanozx"},"content":" * @param args String containing the arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryanozx"},"content":" * @return Command of type commandType initialised with parsed arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryanozx"},"content":" protected Command parseArguments(Command.Type commandType, String args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryanozx"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryanozx"},"content":" case TODO:","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryanozx"},"content":" Task newTodo \u003d parseTaskArgs(Task.Types.TODO, args);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryanozx"},"content":" return new AddTaskCommand(newTodo);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ryanozx"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ryanozx"},"content":" Task newDeadline \u003d parseTaskArgs(Task.Types.DEADLINE, args);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ryanozx"},"content":" return new AddTaskCommand(newDeadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ryanozx"},"content":" case EVENT:","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ryanozx"},"content":" Task newEvent \u003d parseTaskArgs(Task.Types.EVENT, args);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ryanozx"},"content":" return new AddTaskCommand(newEvent);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ryanozx"},"content":" case DATE:","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ryanozx"},"content":" LocalDate searchDate \u003d parseDate(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ryanozx"},"content":" return new ListByDateCommand(searchDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ryanozx"},"content":" case MARK:","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ryanozx"},"content":" return new MarkTaskCommand(parseOneBasedIndexToZeroBased(args));","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ryanozx"},"content":" case UNMARK:","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ryanozx"},"content":" return new UnmarkTaskCommand(parseOneBasedIndexToZeroBased(args));","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ryanozx"},"content":" case DELETE:","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ryanozx"},"content":" return new DeleteTaskCommand(parseOneBasedIndexToZeroBased(args));","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ryanozx"},"content":" case FIND:","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"ryanozx"},"content":" return new FindCommand(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"ryanozx"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ryanozx"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ryanozx"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"ryanozx"},"content":" return new UnknownCommand(\"I need a positive integer to know which task you\u0027re referring to!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ryanozx"},"content":" } catch (DateTimeParseException | IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ryanozx"},"content":" return new UnknownCommand(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ryanozx"},"content":" * Creates a task based on a line read from a save file","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"ryanozx"},"content":" * @param fileArgs Line containing task saved data","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"ryanozx"},"content":" * @return Task initialised with arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"ryanozx"},"content":" * @throws UnsupportedTaskType Thrown if task type specified in fileArgs do not match","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ryanozx"},"content":" * any known task types","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"ryanozx"},"content":" * @throws IllegalArgumentException Thrown if line does not have 2 delimiters \" | \"","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"ryanozx"},"content":" public static Task parseFileTasks(String fileArgs) throws UnsupportedTaskType, IllegalArgumentException {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"ryanozx"},"content":" String[] args \u003d fileArgs.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ryanozx"},"content":" if (args.length !\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ryanozx"},"content":" throw new IllegalArgumentException(\"Save file is corrupted, skipping line\");","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ryanozx"},"content":" boolean isMarked \u003d args[1].equals(\"true\");","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ryanozx"},"content":" Task loadedTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ryanozx"},"content":" switch (args[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"ryanozx"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"ryanozx"},"content":" loadedTask \u003d parseTaskArgs(Task.Types.TODO, args[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"ryanozx"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"ryanozx"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"ryanozx"},"content":" loadedTask \u003d parseTaskArgs(Task.Types.DEADLINE, args[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ryanozx"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"ryanozx"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"ryanozx"},"content":" loadedTask \u003d parseTaskArgs(Task.Types.EVENT, args[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ryanozx"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"ryanozx"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"ryanozx"},"content":" throw new UnsupportedTaskType(args[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"ryanozx"},"content":" if (isMarked) {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"ryanozx"},"content":" loadedTask.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"ryanozx"},"content":" return loadedTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"ryanozx"},"content":" * Creates a task based on the task type and additional arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"ryanozx"},"content":" * @param taskType Type of task","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"ryanozx"},"content":" * @param args Additional arguments required to create the task","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"ryanozx"},"content":" * @return Task of specified task type initialised with arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"ryanozx"},"content":" * @throws IllegalArgumentException Thrown if arguments could not be parsed correctly","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"ryanozx"},"content":" * @throws UnsupportedTaskType Thrown if task type is not covered (should not happen)","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"ryanozx"},"content":" private static Task parseTaskArgs(Task.Types taskType, String args) throws IllegalArgumentException,","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"ryanozx"},"content":" UnsupportedTaskType {","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"ryanozx"},"content":" String name;","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"ryanozx"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"ryanozx"},"content":" case TODO:","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"ryanozx"},"content":" name \u003d parseNonEmptyString(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"ryanozx"},"content":" return new Todo(name);","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"ryanozx"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"ryanozx"},"content":" String[] deadlineArgs \u003d args.split(\" /by \");","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"ryanozx"},"content":" if (deadlineArgs.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"ryanozx"},"content":" throw new IllegalArgumentException(\"Deadlines should be created with the following format:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"ryanozx"},"content":" + \"deadline [name] /by [date]\");","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"ryanozx"},"content":" name \u003d parseNonEmptyString(deadlineArgs[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"ryanozx"},"content":" LocalDateTime byTime \u003d parseDateTime(deadlineArgs[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"ryanozx"},"content":" return new Deadline(name, byTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"ryanozx"},"content":" case EVENT:","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"ryanozx"},"content":" IllegalArgumentException badFormat \u003d new IllegalArgumentException(\"Events should be created \"","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"ryanozx"},"content":" + \"with the following format:\\n event [name] /from [start time] /to [end time]\");","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"ryanozx"},"content":" String[] splitNameDates \u003d args.split(\" /from \");","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"ryanozx"},"content":" if (splitNameDates.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"ryanozx"},"content":" throw badFormat;","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"ryanozx"},"content":" name \u003d splitNameDates[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"ryanozx"},"content":" String[] splitTime \u003d splitNameDates[1].split(\" /to \");","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"ryanozx"},"content":" if (splitTime.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"ryanozx"},"content":" throw badFormat;","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"ryanozx"},"content":" LocalDateTime startTime \u003d parseDateTime(splitTime[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"ryanozx"},"content":" LocalDateTime endTime \u003d parseDateTime(splitTime[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"ryanozx"},"content":" return new Event(name, startTime, endTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"ryanozx"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"ryanozx"},"content":" throw new UnsupportedTaskType(taskType.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"ryanozx"},"content":" * Exception class for unsupported task types","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"ryanozx"},"content":" public static class UnsupportedTaskType extends RuntimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"ryanozx"},"content":" final protected String taskType;","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"ryanozx"},"content":" * Constructs an UnsupportedTaskType exception","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"ryanozx"},"content":" * @param taskType Name of illegal task type","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"ryanozx"},"content":" public UnsupportedTaskType(String taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"ryanozx"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"ryanozx"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"ryanozx"},"content":" return taskType;","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"ryanozx"},"content":" * Parses string argument for dates","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"ryanozx"},"content":" * @param dateInput String representation of date in dd-MM-yyyy format","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"ryanozx"},"content":" * @return LocalDate object","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"ryanozx"},"content":" * @throws DateTimeParseException Thrown if string is not of dd-MM-yyyy format","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"ryanozx"},"content":" protected LocalDate parseDate(String dateInput) throws DateTimeParseException {","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"ryanozx"},"content":" return LocalDate.parse(dateInput, DATE_FORMATTER);","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"ryanozx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"ryanozx"},"content":" throw new DateTimeParseException(\"Dates must be of the form \" + DATE_FORMAT,","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"ryanozx"},"content":" e.getParsedString(), e.getErrorIndex());","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"ryanozx"},"content":" * Parses string argument for DateTimes","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"ryanozx"},"content":" * @param dateTimeInput String representation of date in dd-MM-yyyy HHmm format","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"ryanozx"},"content":" * @return LocalDateTime object","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"ryanozx"},"content":" * @throws DateTimeParseException Thrown if string is not of dd-MM-yyyy HHmm format","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"ryanozx"},"content":" protected static LocalDateTime parseDateTime(String dateTimeInput) throws DateTimeParseException {","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":232,"author":{"gitId":"ryanozx"},"content":" return LocalDateTime.parse(dateTimeInput, DATETIME_FORMATTER);","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"ryanozx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"ryanozx"},"content":" throw new DateTimeParseException(\"DateTimes must be of the form \" + DATETIME_FORMAT,","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"ryanozx"},"content":" e.getParsedString(), e.getErrorIndex());","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"ryanozx"},"content":" * Returns input if non-empty, otherwise throws an IllegalArgumentException","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"ryanozx"},"content":" * @param input String input","lastModifiedDate":"2023-08-31"},{"lineNumber":242,"author":{"gitId":"ryanozx"},"content":" * @return input","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"ryanozx"},"content":" * @throws IllegalArgumentException Thrown if input is empty","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"ryanozx"},"content":" protected static String parseNonEmptyString(String input) throws IllegalArgumentException {","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"ryanozx"},"content":" if (input.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"ryanozx"},"content":" throw new IllegalArgumentException(\"I need a name for the task!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"ryanozx"},"content":" return input;","lastModifiedDate":"2023-08-31"},{"lineNumber":250,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":251,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":252,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":253,"author":{"gitId":"ryanozx"},"content":" * Parses zero-based index from string representation of one-based index","lastModifiedDate":"2023-08-31"},{"lineNumber":254,"author":{"gitId":"ryanozx"},"content":" * @param input String representation of one-based index","lastModifiedDate":"2023-08-31"},{"lineNumber":255,"author":{"gitId":"ryanozx"},"content":" * @return Zero-based index in integer form","lastModifiedDate":"2023-08-31"},{"lineNumber":256,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":257,"author":{"gitId":"ryanozx"},"content":" protected int parseOneBasedIndexToZeroBased(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":258,"author":{"gitId":"ryanozx"},"content":" return Integer.parseUnsignedInt(input) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":259,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":260,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":260}},{"path":"src/main/java/duke/components/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.components;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" * Handler to load tasks from file and save tasks to file","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" final String fileDir;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" final String fileName;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" * Constructs a storage object","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" * @param fileDir Location of file to save to","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" * @param fileName Name of file to save to","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" public Storage(String fileDir, String fileName) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" this.fileDir \u003d fileDir;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" this.fileName \u003d fileName;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" * Loads tasks from file","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" * @return List of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" public List\u003cTask\u003e load() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" List\u003cTask\u003e loadedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" File fileToLoad \u003d new File(getFilePath());","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" Scanner listReader \u003d new Scanner(fileToLoad);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":" while (listReader.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" Task newTask \u003d Parser.parseFileTasks(listReader.nextLine());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":" loadedTasks.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" System.out.println(\"Load file is corrupted, skipping task\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" } catch (Parser.UnsupportedTaskType e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":" System.out.printf(\"Unsupported task type %s, skipping task\\n\", e.getTaskType());","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryanozx"},"content":" listReader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryanozx"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryanozx"},"content":" System.out.println(\"Could not find file: \" + getFilePath());","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryanozx"},"content":" return loadedTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryanozx"},"content":" * Returns relative file path of save file","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryanozx"},"content":" * @return Relative file path of save file","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryanozx"},"content":" private String getFilePath() {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryanozx"},"content":" return fileDir + fileName;","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryanozx"},"content":" * Writes task list to file","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryanozx"},"content":" * @param taskList TaskList object containing tasks to write to file","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryanozx"},"content":" * @throws IOException I/O problem encountered, unable to save file","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryanozx"},"content":" public void save(TaskList taskList) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryanozx"},"content":" createFileIfNotExists();","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryanozx"},"content":" try (FileWriter taskListWriter \u003d new FileWriter(getFilePath())) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryanozx"},"content":" for (Task t : taskList.getTasks()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryanozx"},"content":" taskListWriter.write(t.generateSaveString() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryanozx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryanozx"},"content":" throw new IOException(\"Unable to create file: \" + fileName + \"\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryanozx"},"content":" + \"Reason: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryanozx"},"content":" * Writes a single task into the file, useful if adding only a single task","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ryanozx"},"content":" * @param task Task to be written into the file","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ryanozx"},"content":" * @throws IOException Thrown if task cannot be written into file","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ryanozx"},"content":" public void write(Task task) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ryanozx"},"content":" createFileIfNotExists();","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ryanozx"},"content":" try (FileWriter taskListWriter \u003d new FileWriter(getFilePath())){","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ryanozx"},"content":" taskListWriter.append(String.format(\"%s\\n\", task.generateSaveString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ryanozx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ryanozx"},"content":" throw new IOException(\"Unable to save task list to destination: \" + getFilePath() + \"\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ryanozx"},"content":" + \"Reason: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ryanozx"},"content":" * Creates file if file is not found at filepath","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ryanozx"},"content":" * @throws IOException Thrown if file cannot be created for some reason","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ryanozx"},"content":" protected void createFileIfNotExists() throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ryanozx"},"content":" File saveDir \u003d new File(fileDir);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ryanozx"},"content":" if (!saveDir.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ryanozx"},"content":" saveDir.mkdirs();","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"ryanozx"},"content":" File saveFile \u003d new File(getFilePath());","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ryanozx"},"content":" saveFile.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":110}},{"path":"src/main/java/duke/components/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.components;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":" * List that contains tasks and methods to interact with the tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" private final List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" * Constructs a TaskList object","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" * @param tasks Destination path of the file to save the list to","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" this.tasks.addAll(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" public void addTask(Task newTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" * Marks task as done","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" * @param idx 0-based task index","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" * @return Task marked as undone","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" public Task markTask(int idx) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" Task selectedTask \u003d tasks.get(idx);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" selectedTask.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" return selectedTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":" * Marks task as not done","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":" * @param idx 0-based task index","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" * @return Task marked as undone","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" public Task unmarkTask(int idx) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" Task selectedTask \u003d tasks.get(idx);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" selectedTask.markNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":" return selectedTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryanozx"},"content":" * Deletes task from task list","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryanozx"},"content":" * @param idx Zero-based index of task to delete","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryanozx"},"content":" * @return Task deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryanozx"},"content":" public Task deleteTask(int idx) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryanozx"},"content":" Task taskToDelete \u003d tasks.get(idx);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryanozx"},"content":" tasks.remove(idx);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryanozx"},"content":" return taskToDelete;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryanozx"},"content":" * Returns string containing the current task count in the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryanozx"},"content":" * @return Message containing the current task count","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryanozx"},"content":" public String getCountString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryanozx"},"content":" return String.format(\"Now you have %d %s in the list.\\n\", tasks.size(),","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryanozx"},"content":" tasks.size() \u003d\u003d 1 ? \"task\" : \"tasks\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryanozx"},"content":" * Returns all tasks occurring on a particular date","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryanozx"},"content":" * @param date LocalDate object","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryanozx"},"content":" * @return List of tasks that occur on date","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryanozx"},"content":" public List\u003cTask\u003e getTaskOnDate(LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryanozx"},"content":" List\u003cTask\u003e tasksOnDate \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryanozx"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryanozx"},"content":" if (t.isOccurringOnDate(date)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryanozx"},"content":" tasksOnDate.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryanozx"},"content":" return tasksOnDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"ryanozx"},"content":" * Returns all tasks containing a particular keyword","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"ryanozx"},"content":" * @param keyword Keyword to query for","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"ryanozx"},"content":" * @return List of tasks that contain keyword","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"ryanozx"},"content":" public List\u003cTask\u003e getTasksWithKeyword(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"ryanozx"},"content":" List\u003cTask\u003e tasksWithKeyword \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"ryanozx"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"ryanozx"},"content":" if (t.hasKeyword(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"ryanozx"},"content":" tasksWithKeyword.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"ryanozx"},"content":" return tasksWithKeyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"ryanozx"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ryanozx"},"content":" return List.copyOf(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":102}},{"path":"src/main/java/duke/components/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.components;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import java.io.InputStreamReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":" * Class handling interactions with users","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" static final String LOGO \u003d \" _______ _ _____ \\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" \" /\\\\|__ __| | /\\\\ / ____|\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" \" / \\\\ | | | | / \\\\ | (___ \\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" \" / /\\\\ \\\\ | | | | / /\\\\ \\\\ \\\\___ \\\\ \\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" \" / ____ \\\\| | | |____ / ____ \\\\ ____) |\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" \" /_/ \\\\_\\\\_| |______/_/ \\\\_\\\\_____/ \\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" // Chatbot name","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" static final String NAME \u003d \"Atlas\";","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" final BufferedReader inputReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" * Constructs a Ui object","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" public Ui() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" inputReader \u003d new BufferedReader(new InputStreamReader(System.in));","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" * Prints a horizontal line containing the character \u0027-\u0027 of width 80.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" public void printLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" final int consoleWidth \u003d 80;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" final String line \u003d \"_\".repeat(consoleWidth);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":" * Prints error message to screen.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" * @param message Error message to print.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" public void showError(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryanozx"},"content":" * Prints greeting to console.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryanozx"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryanozx"},"content":" System.out.println(LOGO);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryanozx"},"content":" printLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryanozx"},"content":" System.out.printf(\"Hello, I\u0027m %s!\\n\", NAME);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryanozx"},"content":" System.out.println(\"What would you like me to do today?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryanozx"},"content":" printLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryanozx"},"content":" * Reads user input from command line","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryanozx"},"content":" * @return String containing user input","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryanozx"},"content":" * @throws DukeException Exception thrown if I/O error encountered","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryanozx"},"content":" public String readCommand() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryanozx"},"content":" return inputReader.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryanozx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryanozx"},"content":" throw new DukeException(\"I/O error encountered: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryanozx"},"content":" * Prints string to screen","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryanozx"},"content":" * @param s String to be printed","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryanozx"},"content":" public void printToScreen(String s) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryanozx"},"content":" System.out.println(s);","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":78}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":" * Exception class for exceptions that terminate the command and meant to be handled by Duke","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"public class DukeException extends RuntimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":" * Constructs a DukeException exception","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":" * @param errorDetails String containing information about error","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" public DukeException(String errorDetails) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" super(errorDetails);","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" return \"Sorry, I ran into an error! Here\u0027s more info:\\n\" + super.getMessage();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":20}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.components.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":" * Deadline is a task with a deadline date.","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" * Constructs a new Deadline object","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" * @param name Name of deadline","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" * @param by Date of deadline","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" public Deadline(String name, LocalDateTime by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" super(name);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), by.format(Parser.DATETIME_FORMATTER));","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" public String generateSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" return String.format(\"D | %b | %s /by %s\", isDone, name, by.format(Parser.DATETIME_FORMATTER));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" public boolean isOccurringOnDate(LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" return by.toLocalDate().equals(date);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ryanozx":39}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.components.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":" * Event is a task with a start time and end time","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" protected LocalDateTime startTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" protected LocalDateTime endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" * Constructs a new Event object","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" * @param name Name of event","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" * @param startTime Start time of event","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" * @param endTime End time of event","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" public Event(String name, LocalDateTime startTime, LocalDateTime endTime) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" super(name);","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" startTime.format(Parser.DATETIME_FORMATTER), endTime.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" Parser.DATETIME_FORMATTER));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" public String generateSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" return String.format(\"E | %b | %s /from %s /to %s\", isDone, name, startTime.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" Parser.DATETIME_FORMATTER),","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" endTime.format(Parser.DATETIME_FORMATTER));","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":" public boolean isOccurringOnDate(LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" return (!date.isBefore(startTime.toLocalDate()))","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" \u0026\u0026 (!date.isAfter(endTime.toLocalDate()));","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ryanozx":46}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":" * A Task is an object with a name and toggleable status","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":" protected String name;","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" public enum Types {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" * Constructs a new Task with description","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" * Returns icon indicating task\u0027s status","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" * @return \"X\" if task is done, \" \" otherwise","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" return this.isDone? \"X\" : \" \";","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" * Returns task\u0027s name","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" * @return The name of the task","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" public String getName() {","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":" return this.name;","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" * Marks task as done","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":" public void markDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryanozx"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"ryanozx"},"content":" * Marks task as not done","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"ryanozx"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryanozx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryanozx"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryanozx"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.getName());","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryanozx"},"content":" * Returns string representation to save to file","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryanozx"},"content":" * @return String representation written to file","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryanozx"},"content":" public abstract String generateSaveString();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryanozx"},"content":" * Returns whether the task occurs on a given date","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryanozx"},"content":" * @param date Date specified","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryanozx"},"content":" public boolean isOccurringOnDate(LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryanozx"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"ryanozx"},"content":" * Returns whether the task\u0027s name contains the keyword","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"ryanozx"},"content":" * @param keyword Keyword to query for","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"ryanozx"},"content":" * @return True if it contains the keyword, false otherwise","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"ryanozx"},"content":" public boolean hasKeyword(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"ryanozx"},"content":" return name.contains(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ryanozx":87}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":" * Todo is a Task with no dates","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"public class Todo extends Task{","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":" * Constructs a new Todo object","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":" * @param name Name of Todo","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" super(name);","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" * Return string representation of Todo","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" * @return String representation of Todo","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" public String generateSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" return String.format(\"T | %b | %s\", isDone, name);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ryanozx":27}},{"path":"src/test/java/duke/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" final LocalDateTime testDateTime \u003d LocalDateTime.parse(\"2023-08-25T00:00:00\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" public void toString_default() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" Deadline testDeadline \u003d new Deadline(\"Test Deadline\", testDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" assertEquals(testDeadline.toString(), \"[D][ ] Test Deadline (by: 25-08-2023 0000)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" public void toString_checkAndUncheck() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" Deadline testDeadline \u003d new Deadline(\"Test Deadline\", testDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" testDeadline.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" assertEquals(testDeadline.toString(), \"[D][X] Test Deadline (by: 25-08-2023 0000)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" testDeadline.markNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" assertEquals(testDeadline.toString(), \"[D][ ] Test Deadline (by: 25-08-2023 0000)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" public void generateSaveString_unchecked() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" Deadline testDeadline \u003d new Deadline(\"Test Deadline\", testDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" assertEquals(testDeadline.generateSaveString(), \"D | false | Test Deadline /by 25-08-2023 0000\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" public void generateSaveString_checked() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" Deadline testDeadline \u003d new Deadline(\"Test Deadline\", testDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" testDeadline.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" assertEquals(testDeadline.generateSaveString(), \"D | true | Test Deadline /by 25-08-2023 0000\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":" public void isOccurringOnDate() {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" Deadline testDeadline \u003d new Deadline(\"Test Deadline\", testDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" LocalDate testDate1 \u003d LocalDate.parse(\"2023-08-24\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" LocalDate testDate2 \u003d LocalDate.parse(\"2023-08-25\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":" LocalDate testDate3 \u003d LocalDate.parse(\"2023-08-26\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":" assertFalse(testDeadline.isOccurringOnDate(testDate1));","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryanozx"},"content":" assertTrue(testDeadline.isOccurringOnDate(testDate2));","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryanozx"},"content":" assertFalse(testDeadline.isOccurringOnDate(testDate3));","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":51}},{"path":"src/test/java/duke/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" final LocalDateTime testStartTime \u003d LocalDateTime.parse(\"2023-08-25T00:00:00\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" final LocalDateTime testEndTime \u003d LocalDateTime.parse(\"2023-08-25T23:59:59\");","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" public void toString_default() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" Event testEvent \u003d new Event(\"Test Event\", testStartTime, testEndTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" assertEquals(testEvent.toString(), \"[E][ ] Test Event (from: 25-08-2023 0000 to: 25-08-2023 2359)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" public void toString_checkAndUncheck() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" Event testEvent \u003d new Event(\"Test Event\", testStartTime, testEndTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" testEvent.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" assertEquals(testEvent.toString(), \"[E][X] Test Event (from: 25-08-2023 0000 to: 25-08-2023 2359)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" testEvent.markNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" assertEquals(testEvent.toString(), \"[E][ ] Test Event (from: 25-08-2023 0000 to: 25-08-2023 2359)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" public void generateSaveString_unchecked() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" Event testEvent \u003d new Event(\"Test Event\", testStartTime, testEndTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" assertEquals(testEvent.generateSaveString(), \"E | false | Test Event /from 25-08-2023 0000 \"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" + \"/to 25-08-2023 2359\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" public void generateSaveString_checked() {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":" Event testEvent \u003d new Event(\"Test Event\", testStartTime, testEndTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":" testEvent.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" assertEquals(testEvent.generateSaveString(), \"E | true | Test Event /from 25-08-2023 0000 \"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":" + \"/to 25-08-2023 2359\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":" public void isOccurringOnDate() {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":" Event testEvent \u003d new Event(\"Test Event\", testStartTime, testEndTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryanozx"},"content":" LocalDate testDate1 \u003d LocalDate.parse(\"2023-08-24\");","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryanozx"},"content":" LocalDate testDate2 \u003d LocalDate.parse(\"2023-08-25\");","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryanozx"},"content":" LocalDate testDate3 \u003d LocalDate.parse(\"2023-08-26\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryanozx"},"content":" assertFalse(testEvent.isOccurringOnDate(testDate1));","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryanozx"},"content":" assertTrue(testEvent.isOccurringOnDate(testDate2));","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryanozx"},"content":" assertFalse(testEvent.isOccurringOnDate(testDate3));","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":55}},{"path":"src/test/java/duke/tasks/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" public void toString_default() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" Todo testTodo \u003d new Todo(\"Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" assertEquals(testTodo.toString(), \"[T][ ] Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" public void toString_checkAndUncheck() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" Todo testTodo \u003d new Todo(\"Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" testTodo.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" assertEquals(testTodo.toString(), \"[T][X] Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" testTodo.markNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" assertEquals(testTodo.toString(), \"[T][ ] Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" public void generateSaveString_unchecked() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" Todo testTodo \u003d new Todo(\"Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" assertEquals(testTodo.generateSaveString(), \"T | false | Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" public void generateSaveString_checked() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" Todo testTodo \u003d new Todo(\"Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" testTodo.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" assertEquals(testTodo.generateSaveString(), \"T | true | Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":" public void isOccurringOnDate_false() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" Todo testTodo \u003d new Todo(\"Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":" LocalDate testDate1 \u003d LocalDate.parse(\"2023-08-25\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" LocalDate testDate2 \u003d LocalDate.parse(\"2099-12-31\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" assertFalse(testTodo.isOccurringOnDate(testDate1));","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" assertFalse(testTodo.isOccurringOnDate(testDate2));","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":47}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"todo read book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"todo join sports club","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"mark 4","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"delete 3","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"todo","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":"deadline","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"event","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":"unmark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":"mark -1","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":"mark abc","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":"mark 10","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":"unmark -1","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":"unmark abc","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":"unmark 10","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":"delete -1","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":"delete abc","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":"delete 10","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":"boo","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ryanozx":28}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-06"},{"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":"ryanozx"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":"checkstyle {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"ryanozx":6,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import duke.components.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" * Chatbot implementation","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" private final Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" * Constructs a Duke object","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" * @param fileDir Relative path to save task list","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" * @param fileName Name of file to save task list","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" public Duke(String fileDir, String fileName) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" storage \u003d new Storage(fileDir, fileName);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" taskList \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" * Constructs a new Duke instance and runs it","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" * @param args Command-line arguments passed in at startup","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" new Duke(\"./data/\", \"duke.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" * Runs the chatbot, listens to user inputs, and executes commands","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"ryanozx"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryanozx"},"content":" ui.printLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryanozx"},"content":" Command c \u003d parser.parse(fullCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryanozx"},"content":" c.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryanozx"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryanozx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryanozx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryanozx"},"content":" } finally {","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"ryanozx"},"content":" ui.printLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ryanozx":57,"-":3}},{"path":"src/main/java/duke/commands/AddTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" * Command to add task to task list","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"public class AddTaskCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" protected final Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" * Constructs an AddTaskCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" * @param t Task to be added","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" public AddTaskCommand(Task t) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" task \u003d t;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(\"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" + \"\\t\" + task);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(taskList.getCountString());","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" storage.write(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":37}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":" * Abstract Command class that can be executed to perform a command","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" * Types of commands: TODO, DEADLINE, EVENT, MARK, UNMARK, DELETE, DATE, FIND","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" public enum Type {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" TODO, DEADLINE, EVENT, MARK, UNMARK, DELETE, DATE, FIND","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" * Returns whether a command is an Exit command","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" * @return True if command is an Exit Command, false otherwise","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" * Executes command","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" * @param taskList TaskList for containing lists","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" * @param ui Ui to handle interaction with users","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" * @param storage Storage to handle file saving and loading","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":34}},{"path":"src/main/java/duke/commands/DeleteTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" * Command to delete a Task from the TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"public class DeleteTaskCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" private final int idx;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" * Constructs a DeleteTaskCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" * @param idx Index of task to mark","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" public DeleteTaskCommand(int idx) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" this.idx \u003d idx;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" Task t \u003d taskList.deleteTask(idx);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(\"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" + \"\\t\" + t);","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(taskList.getCountString());","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" storage.save(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" ui.showError(String.format(\"%d is not a valid index! Unable to delete task.\", idx + 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":39}},{"path":"src/main/java/duke/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":" * Command to exit the chatbot","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(\"Goodbye!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":20}},{"path":"src/main/java/duke/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.util.List;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" * Command to find all events that contain the keyword","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" private final String keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" * Constructs a FindCommand object","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" * @param keyword Keyword to query for","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" List\u003cTask\u003e tasksWithKeyword \u003d taskList.getTasksWithKeyword(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" int idx \u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" for (Task t : tasksWithKeyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(String.format(\"%d.%s\", ++idx, t.toString()));","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"ryanozx":34}},{"path":"src/main/java/duke/commands/ListByDateCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import java.util.List;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" * Command to list all events that occur on date","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"public class ListByDateCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" private final LocalDate date;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" * Constructs a ListByDateCommand object","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" * @param date Date to query for","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" public ListByDateCommand(LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" List\u003cTask\u003e tasksOnDate \u003d taskList.getTaskOnDate(date);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(\"Here are the tasks occurring on \" + date + \":\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" for (Task t : tasksOnDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(t.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":33}},{"path":"src/main/java/duke/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.util.List;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" * Command to print the contents of the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(\"Here are your tasks:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" List\u003cTask\u003e tasks \u003d taskList.getTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" int taskIdx \u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" System.out.printf(\"%d.%s\\n\", ++taskIdx, t);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":24}},{"path":"src/main/java/duke/commands/MarkTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" * Command to mark a Task in the TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":"public class MarkTaskCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" private final int idx;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" * Constructs a MarkTaskCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" * @param idx Index of task to mark","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" public MarkTaskCommand(int idx) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" this.idx \u003d idx;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" Task t \u003d taskList.markTask(idx);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(\"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" + t);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" storage.save(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" ui.showError(String.format(\"%d is not a valid index! Unable to mark task.\", idx + 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":36}},{"path":"src/main/java/duke/commands/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":" * Command used to handle invalid commands (e.g. bad parsing)","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"public class UnknownCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" private final String errorMsg;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" * Constructs an UnknownCommand object with the default error message","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" public UnknownCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" errorMsg \u003d \"I do not understand this command.\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" + \"Here\u0027s what I can do though: I can create ToDos (todo),\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" + \"Deadlines (deadline), Events (event), print them out (list),\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" + \"print tasks occurring on a specific date (date) as well as \\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" + \"check (mark) and uncheck (unmark) them!\";","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" * Constructs an UnknownCommand object with a specified error message","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" * @param errorMsg Error message to print","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" public UnknownCommand(String errorMsg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" this.errorMsg \u003d errorMsg;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" ui.showError(errorMsg);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":36}},{"path":"src/main/java/duke/commands/UnmarkTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import duke.components.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.components.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import duke.components.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" * Command to unmark a Task in the TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":"public class UnmarkTaskCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" private final int idx;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" * Constructs a MarkTaskCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" * @param idx Index of task to mark","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" public UnmarkTaskCommand(int idx) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" this.idx \u003d idx;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" Task t \u003d taskList.unmarkTask(idx);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" ui.printToScreen(\"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" + t);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" storage.save(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" ui.showError(String.format(\"%d is not a valid index! Unable to unmark task.\", idx + 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":37}},{"path":"src/main/java/duke/components/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.components;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import duke.commands.AddTaskCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"import duke.commands.DeleteTaskCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"import duke.commands.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"import duke.commands.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":"import duke.commands.ListByDateCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"import duke.commands.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":"import duke.commands.MarkTaskCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":"import duke.commands.UnknownCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":"import duke.commands.UnmarkTaskCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" * Class that parses user commands","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" static final String DATE_FORMAT \u003d \"dd-MM-yyyy\";","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" public static final DateTimeFormatter DATE_FORMATTER \u003d DateTimeFormatter.ofPattern(DATE_FORMAT);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" static final String DATETIME_FORMAT \u003d \"dd-MM-yyyy HHmm\";","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" public static final DateTimeFormatter DATETIME_FORMATTER \u003d DateTimeFormatter.ofPattern(DATETIME_FORMAT);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" * Parses the user input into a Command object","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" * @param commandInput String containing user input","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" * @return A Command object that can be executed","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":" public Command parse(String commandInput) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":" String[] splitInput \u003d commandInput.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" String command \u003d splitInput[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" switch (command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" return parseArguments(Command.Type.TODO, splitInput[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":" return parseArguments(Command.Type.DEADLINE, splitInput[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryanozx"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryanozx"},"content":" return parseArguments(Command.Type.EVENT, splitInput[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryanozx"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryanozx"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryanozx"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryanozx"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryanozx"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryanozx"},"content":" return parseArguments(Command.Type.MARK, splitInput[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryanozx"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryanozx"},"content":" return parseArguments(Command.Type.UNMARK, splitInput[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryanozx"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryanozx"},"content":" return parseArguments(Command.Type.DELETE, splitInput[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryanozx"},"content":" case \"date\":","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryanozx"},"content":" return parseArguments(Command.Type.DATE, splitInput[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryanozx"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"ryanozx"},"content":" return parseArguments(Command.Type.FIND, splitInput[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"ryanozx"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryanozx"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryanozx"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryanozx"},"content":" return new UnknownCommand(String.format(\"%s requires additional arguments!\", command));","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryanozx"},"content":" * Parses arguments for commands that require arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryanozx"},"content":" * @param commandType Command Type","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryanozx"},"content":" * @param args String containing the arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryanozx"},"content":" * @return Command of type commandType initialised with parsed arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryanozx"},"content":" protected Command parseArguments(Command.Type commandType, String args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryanozx"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryanozx"},"content":" case TODO:","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryanozx"},"content":" Task newTodo \u003d parseTaskArgs(Task.Types.TODO, args);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryanozx"},"content":" return new AddTaskCommand(newTodo);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryanozx"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ryanozx"},"content":" Task newDeadline \u003d parseTaskArgs(Task.Types.DEADLINE, args);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ryanozx"},"content":" return new AddTaskCommand(newDeadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ryanozx"},"content":" case EVENT:","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ryanozx"},"content":" Task newEvent \u003d parseTaskArgs(Task.Types.EVENT, args);","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ryanozx"},"content":" return new AddTaskCommand(newEvent);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ryanozx"},"content":" case DATE:","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ryanozx"},"content":" LocalDate searchDate \u003d parseDate(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ryanozx"},"content":" return new ListByDateCommand(searchDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ryanozx"},"content":" case MARK:","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ryanozx"},"content":" return new MarkTaskCommand(parseOneBasedIndexToZeroBased(args));","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ryanozx"},"content":" case UNMARK:","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ryanozx"},"content":" return new UnmarkTaskCommand(parseOneBasedIndexToZeroBased(args));","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ryanozx"},"content":" case DELETE:","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ryanozx"},"content":" return new DeleteTaskCommand(parseOneBasedIndexToZeroBased(args));","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ryanozx"},"content":" case FIND:","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"ryanozx"},"content":" return new FindCommand(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"ryanozx"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ryanozx"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ryanozx"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ryanozx"},"content":" return new UnknownCommand(\"I need a positive integer to know which task you\u0027re referring to!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"ryanozx"},"content":" } catch (DateTimeParseException | IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ryanozx"},"content":" return new UnknownCommand(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"ryanozx"},"content":" * Creates a task based on a line read from a save file","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ryanozx"},"content":" * @param fileArgs Line containing task saved data","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"ryanozx"},"content":" * @return Task initialised with arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"ryanozx"},"content":" * @throws UnsupportedTaskType Thrown if task type specified in fileArgs do not match","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"ryanozx"},"content":" * any known task types","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ryanozx"},"content":" * @throws IllegalArgumentException Thrown if line does not have 2 delimiters \" | \"","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"ryanozx"},"content":" public static Task parseFileTasks(String fileArgs) throws UnsupportedTaskType, IllegalArgumentException {","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"ryanozx"},"content":" String[] args \u003d fileArgs.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"ryanozx"},"content":" if (args.length !\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ryanozx"},"content":" throw new IllegalArgumentException(\"Save file is corrupted, skipping line\");","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ryanozx"},"content":" boolean isMarked \u003d args[1].equals(\"true\");","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ryanozx"},"content":" Task loadedTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ryanozx"},"content":" switch (args[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ryanozx"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"ryanozx"},"content":" loadedTask \u003d parseTaskArgs(Task.Types.TODO, args[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"ryanozx"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"ryanozx"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"ryanozx"},"content":" loadedTask \u003d parseTaskArgs(Task.Types.DEADLINE, args[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"ryanozx"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ryanozx"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"ryanozx"},"content":" loadedTask \u003d parseTaskArgs(Task.Types.EVENT, args[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"ryanozx"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ryanozx"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"ryanozx"},"content":" throw new UnsupportedTaskType(args[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"ryanozx"},"content":" if (isMarked) {","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"ryanozx"},"content":" loadedTask.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"ryanozx"},"content":" return loadedTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"ryanozx"},"content":" * Creates a task based on the task type and additional arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"ryanozx"},"content":" * @param taskType Type of task","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"ryanozx"},"content":" * @param args Additional arguments required to create the task","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"ryanozx"},"content":" * @return Task of specified task type initialised with arguments","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"ryanozx"},"content":" * @throws IllegalArgumentException Thrown if arguments could not be parsed correctly","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"ryanozx"},"content":" * @throws UnsupportedTaskType Thrown if task type is not covered (should not happen)","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"ryanozx"},"content":" private static Task parseTaskArgs(Task.Types taskType, String args) throws IllegalArgumentException,","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"ryanozx"},"content":" UnsupportedTaskType {","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"ryanozx"},"content":" String name;","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"ryanozx"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"ryanozx"},"content":" case TODO:","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"ryanozx"},"content":" name \u003d parseNonEmptyString(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"ryanozx"},"content":" return new Todo(name);","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"ryanozx"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"ryanozx"},"content":" String[] deadlineArgs \u003d args.split(\" /by \");","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"ryanozx"},"content":" if (deadlineArgs.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"ryanozx"},"content":" throw new IllegalArgumentException(\"Deadlines should be created with the following format:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"ryanozx"},"content":" + \"deadline [name] /by [date]\");","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"ryanozx"},"content":" name \u003d parseNonEmptyString(deadlineArgs[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"ryanozx"},"content":" LocalDateTime byTime \u003d parseDateTime(deadlineArgs[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"ryanozx"},"content":" return new Deadline(name, byTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"ryanozx"},"content":" case EVENT:","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"ryanozx"},"content":" IllegalArgumentException badFormat \u003d new IllegalArgumentException(\"Events should be created \"","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"ryanozx"},"content":" + \"with the following format:\\n event [name] /from [start time] /to [end time]\");","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"ryanozx"},"content":" String[] splitNameDates \u003d args.split(\" /from \");","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"ryanozx"},"content":" if (splitNameDates.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"ryanozx"},"content":" throw badFormat;","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"ryanozx"},"content":" name \u003d splitNameDates[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"ryanozx"},"content":" String[] splitTime \u003d splitNameDates[1].split(\" /to \");","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"ryanozx"},"content":" if (splitTime.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"ryanozx"},"content":" throw badFormat;","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"ryanozx"},"content":" LocalDateTime startTime \u003d parseDateTime(splitTime[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"ryanozx"},"content":" LocalDateTime endTime \u003d parseDateTime(splitTime[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"ryanozx"},"content":" return new Event(name, startTime, endTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"ryanozx"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"ryanozx"},"content":" throw new UnsupportedTaskType(taskType.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"ryanozx"},"content":" * Exception class for unsupported task types","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"ryanozx"},"content":" public static class UnsupportedTaskType extends RuntimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"ryanozx"},"content":" protected final String taskType;","lastModifiedDate":"2023-09-06"},{"lineNumber":194,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"ryanozx"},"content":" * Constructs an UnsupportedTaskType exception","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"ryanozx"},"content":" * @param taskType Name of illegal task type","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"ryanozx"},"content":" public UnsupportedTaskType(String taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"ryanozx"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"ryanozx"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"ryanozx"},"content":" return taskType;","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"ryanozx"},"content":" * Parses string argument for dates","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"ryanozx"},"content":" * @param dateInput String representation of date in dd-MM-yyyy format","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"ryanozx"},"content":" * @return LocalDate object","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"ryanozx"},"content":" * @throws DateTimeParseException Thrown if string is not of dd-MM-yyyy format","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"ryanozx"},"content":" protected LocalDate parseDate(String dateInput) throws DateTimeParseException {","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"ryanozx"},"content":" return LocalDate.parse(dateInput, DATE_FORMATTER);","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"ryanozx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"ryanozx"},"content":" throw new DateTimeParseException(\"Dates must be of the form \" + DATE_FORMAT,","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"ryanozx"},"content":" e.getParsedString(), e.getErrorIndex());","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"ryanozx"},"content":" * Parses string argument for DateTimes","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"ryanozx"},"content":" * @param dateTimeInput String representation of date in dd-MM-yyyy HHmm format","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"ryanozx"},"content":" * @return LocalDateTime object","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"ryanozx"},"content":" * @throws DateTimeParseException Thrown if string is not of dd-MM-yyyy HHmm format","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"ryanozx"},"content":" protected static LocalDateTime parseDateTime(String dateTimeInput) throws DateTimeParseException {","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"ryanozx"},"content":" return LocalDateTime.parse(dateTimeInput, DATETIME_FORMATTER);","lastModifiedDate":"2023-08-31"},{"lineNumber":232,"author":{"gitId":"ryanozx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"ryanozx"},"content":" throw new DateTimeParseException(\"DateTimes must be of the form \" + DATETIME_FORMAT,","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"ryanozx"},"content":" e.getParsedString(), e.getErrorIndex());","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"ryanozx"},"content":" * Returns input if non-empty, otherwise throws an IllegalArgumentException","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"ryanozx"},"content":" * @param input String input","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"ryanozx"},"content":" * @return input","lastModifiedDate":"2023-08-31"},{"lineNumber":242,"author":{"gitId":"ryanozx"},"content":" * @throws IllegalArgumentException Thrown if input is empty","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"ryanozx"},"content":" protected static String parseNonEmptyString(String input) throws IllegalArgumentException {","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"ryanozx"},"content":" if (input.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"ryanozx"},"content":" throw new IllegalArgumentException(\"I need a name for the task!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"ryanozx"},"content":" return input;","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":250,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":251,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":252,"author":{"gitId":"ryanozx"},"content":" * Parses zero-based index from string representation of one-based index","lastModifiedDate":"2023-08-31"},{"lineNumber":253,"author":{"gitId":"ryanozx"},"content":" * @param input String representation of one-based index","lastModifiedDate":"2023-08-31"},{"lineNumber":254,"author":{"gitId":"ryanozx"},"content":" * @return Zero-based index in integer form","lastModifiedDate":"2023-08-31"},{"lineNumber":255,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":256,"author":{"gitId":"ryanozx"},"content":" protected int parseOneBasedIndexToZeroBased(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":257,"author":{"gitId":"ryanozx"},"content":" return Integer.parseUnsignedInt(input) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":258,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":259,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":259}},{"path":"src/main/java/duke/components/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.components;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" * Handler to load tasks from file and save tasks to file","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" final String fileDir;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" final String fileName;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" * Constructs a storage object","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" * @param fileDir Location of file to save to","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" * @param fileName Name of file to save to","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" public Storage(String fileDir, String fileName) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" this.fileDir \u003d fileDir;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" this.fileName \u003d fileName;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" * Loads tasks from file","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" * @return List of tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" public List\u003cTask\u003e load() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" List\u003cTask\u003e loadedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" File fileToLoad \u003d new File(getFilePath());","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" Scanner listReader \u003d new Scanner(fileToLoad);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":" while (listReader.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" Task newTask \u003d Parser.parseFileTasks(listReader.nextLine());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":" loadedTasks.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" System.out.println(\"Load file is corrupted, skipping task\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" } catch (Parser.UnsupportedTaskType e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":" System.out.printf(\"Unsupported task type %s, skipping task\\n\", e.getTaskType());","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryanozx"},"content":" listReader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryanozx"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryanozx"},"content":" System.out.println(\"Could not find file: \" + getFilePath());","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryanozx"},"content":" return loadedTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryanozx"},"content":" * Returns relative file path of save file","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryanozx"},"content":" * @return Relative file path of save file","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryanozx"},"content":" private String getFilePath() {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryanozx"},"content":" return fileDir + fileName;","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryanozx"},"content":" * Writes task list to file","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryanozx"},"content":" * @param taskList TaskList object containing tasks to write to file","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryanozx"},"content":" * @throws IOException I/O problem encountered, unable to save file","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryanozx"},"content":" public void save(TaskList taskList) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryanozx"},"content":" createFileIfNotExists();","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryanozx"},"content":" try (FileWriter taskListWriter \u003d new FileWriter(getFilePath())) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryanozx"},"content":" for (Task t : taskList.getTasks()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryanozx"},"content":" taskListWriter.write(t.generateSaveString() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryanozx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryanozx"},"content":" throw new IOException(\"Unable to create file: \" + fileName + \"\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryanozx"},"content":" + \"Reason: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryanozx"},"content":" * Writes a single task into the file, useful if adding only a single task","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ryanozx"},"content":" * @param task Task to be written into the file","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ryanozx"},"content":" * @throws IOException Thrown if task cannot be written into file","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ryanozx"},"content":" public void write(Task task) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ryanozx"},"content":" createFileIfNotExists();","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ryanozx"},"content":" try (FileWriter taskListWriter \u003d new FileWriter(getFilePath())) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ryanozx"},"content":" taskListWriter.append(String.format(\"%s\\n\", task.generateSaveString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ryanozx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ryanozx"},"content":" throw new IOException(\"Unable to save task list to destination: \" + getFilePath() + \"\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ryanozx"},"content":" + \"Reason: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ryanozx"},"content":" * Creates file if file is not found at filepath","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ryanozx"},"content":" * @throws IOException Thrown if file cannot be created for some reason","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ryanozx"},"content":" protected void createFileIfNotExists() throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ryanozx"},"content":" File saveDir \u003d new File(fileDir);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ryanozx"},"content":" if (!saveDir.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ryanozx"},"content":" saveDir.mkdirs();","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"ryanozx"},"content":" File saveFile \u003d new File(getFilePath());","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ryanozx"},"content":" saveFile.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":110}},{"path":"src/main/java/duke/components/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.components;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":" * List that contains tasks and methods to interact with the tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" private final List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" * Constructs a TaskList object","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" * @param tasks Destination path of the file to save the list to","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" this.tasks.addAll(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" public void addTask(Task newTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" * Marks task as done","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" * @param idx 0-based task index","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" * @return Task marked as undone","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" public Task markTask(int idx) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" Task selectedTask \u003d tasks.get(idx);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" selectedTask.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" return selectedTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":" * Marks task as not done","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":" * @param idx 0-based task index","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" * @return Task marked as undone","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" public Task unmarkTask(int idx) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" Task selectedTask \u003d tasks.get(idx);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" selectedTask.markNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":" return selectedTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryanozx"},"content":" * Deletes task from task list","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryanozx"},"content":" * @param idx Zero-based index of task to delete","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryanozx"},"content":" * @return Task deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryanozx"},"content":" public Task deleteTask(int idx) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryanozx"},"content":" Task taskToDelete \u003d tasks.get(idx);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryanozx"},"content":" tasks.remove(idx);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryanozx"},"content":" return taskToDelete;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryanozx"},"content":" * Returns string containing the current task count in the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryanozx"},"content":" * @return Message containing the current task count","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryanozx"},"content":" public String getCountString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryanozx"},"content":" return String.format(\"Now you have %d %s in the list.\\n\", tasks.size(),","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryanozx"},"content":" tasks.size() \u003d\u003d 1 ? \"task\" : \"tasks\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryanozx"},"content":" * Returns all tasks occurring on a particular date","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryanozx"},"content":" * @param date LocalDate object","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryanozx"},"content":" * @return List of tasks that occur on date","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryanozx"},"content":" public List\u003cTask\u003e getTaskOnDate(LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryanozx"},"content":" List\u003cTask\u003e tasksOnDate \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryanozx"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryanozx"},"content":" if (t.isOccurringOnDate(date)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryanozx"},"content":" tasksOnDate.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryanozx"},"content":" return tasksOnDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"ryanozx"},"content":" * Returns all tasks containing a particular keyword","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"ryanozx"},"content":" * @param keyword Keyword to query for","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"ryanozx"},"content":" * @return List of tasks that contain keyword","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"ryanozx"},"content":" public List\u003cTask\u003e getTasksWithKeyword(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"ryanozx"},"content":" List\u003cTask\u003e tasksWithKeyword \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"ryanozx"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"ryanozx"},"content":" if (t.hasKeyword(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"ryanozx"},"content":" tasksWithKeyword.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"ryanozx"},"content":" return tasksWithKeyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"ryanozx"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ryanozx"},"content":" return List.copyOf(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":102}},{"path":"src/main/java/duke/components/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.components;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import java.io.InputStreamReader;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":" * Class handling interactions with users","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" static final String LOGO \u003d \" _______ _ _____ \\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" + \" /\\\\|__ __| | /\\\\ / ____|\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" + \" / \\\\ | | | | / \\\\ | (___ \\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" + \" / /\\\\ \\\\ | | | | / /\\\\ \\\\ \\\\___ \\\\ \\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" + \" / ____ \\\\| | | |____ / ____ \\\\ ____) |\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" + \" /_/ \\\\_\\\\_| |______/_/ \\\\_\\\\_____/ \\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" // Chatbot name","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" static final String NAME \u003d \"Atlas\";","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" final BufferedReader inputReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" * Constructs a Ui object","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" public Ui() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" inputReader \u003d new BufferedReader(new InputStreamReader(System.in));","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" * Prints a horizontal line containing the character \u0027-\u0027 of width 80.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" public void printLine() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" final int consoleWidth \u003d 80;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" final String line \u003d \"_\".repeat(consoleWidth);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":" * Prints error message to screen.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" * @param message Error message to print.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" public void showError(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryanozx"},"content":" * Prints greeting to console.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryanozx"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryanozx"},"content":" System.out.println(LOGO);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryanozx"},"content":" printLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryanozx"},"content":" System.out.printf(\"Hello, I\u0027m %s!\\n\", NAME);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryanozx"},"content":" System.out.println(\"What would you like me to do today?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryanozx"},"content":" printLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryanozx"},"content":" * Reads user input from command line","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ryanozx"},"content":" * @return String containing user input","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ryanozx"},"content":" * @throws DukeException Exception thrown if I/O error encountered","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryanozx"},"content":" public String readCommand() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ryanozx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryanozx"},"content":" return inputReader.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ryanozx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ryanozx"},"content":" throw new DukeException(\"I/O error encountered: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryanozx"},"content":" * Prints string to screen","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryanozx"},"content":" * @param s String to be printed","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryanozx"},"content":" public void printToScreen(String s) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryanozx"},"content":" System.out.println(s);","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":78}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":" * Exception class for exceptions that terminate the command and meant to be handled by Duke","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"public class DukeException extends RuntimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":" * Constructs a DukeException exception","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":" * @param errorDetails String containing information about error","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" public DukeException(String errorDetails) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" super(errorDetails);","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" return \"Sorry, I ran into an error! Here\u0027s more info:\\n\" + super.getMessage();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":20}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.components.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":" * Deadline is a task with a deadline date.","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" * Constructs a new Deadline object","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" * @param name Name of deadline","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" * @param by Date of deadline","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" public Deadline(String name, LocalDateTime by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" super(name);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), by.format(Parser.DATETIME_FORMATTER));","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" public String generateSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" return String.format(\"D | %b | %s /by %s\", isDone, name, by.format(Parser.DATETIME_FORMATTER));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" public boolean isOccurringOnDate(LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" return by.toLocalDate().equals(date);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ryanozx":39}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import duke.components.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":" * Event is a task with a start time and end time","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" protected LocalDateTime startTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" protected LocalDateTime endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" * Constructs a new Event object","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" * @param name Name of event","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" * @param startTime Start time of event","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" * @param endTime End time of event","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" public Event(String name, LocalDateTime startTime, LocalDateTime endTime) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" super(name);","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" startTime.format(Parser.DATETIME_FORMATTER), endTime.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" Parser.DATETIME_FORMATTER));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" public String generateSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" return String.format(\"E | %b | %s /from %s /to %s\", isDone, name, startTime.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" Parser.DATETIME_FORMATTER),","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" endTime.format(Parser.DATETIME_FORMATTER));","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":" public boolean isOccurringOnDate(LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" return (!date.isBefore(startTime.toLocalDate()))","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" \u0026\u0026 (!date.isAfter(endTime.toLocalDate()));","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ryanozx":46}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":" * A Task is an object with a name and toggleable status","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":" protected String name;","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" * Types of events (TODO, DEADLINE, EVENT)","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" public enum Types {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" * Constructs a new Task with description","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" * Returns icon indicating task\u0027s status","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" * @return \"X\" if task is done, \" \" otherwise","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" return this.isDone ? \"X\" : \" \";","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" * Returns task\u0027s name","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":" * @return The name of the task","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" public String getName() {","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" return this.name;","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":" * Marks task as done","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"ryanozx"},"content":" public void markDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryanozx"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"ryanozx"},"content":" * Marks task as not done","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"ryanozx"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ryanozx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ryanozx"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ryanozx"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.getName());","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ryanozx"},"content":" * Returns string representation to save to file","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ryanozx"},"content":" * @return String representation written to file","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ryanozx"},"content":" public abstract String generateSaveString();","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ryanozx"},"content":" * Returns whether the task occurs on a given date","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ryanozx"},"content":" * @param date Date specified","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ryanozx"},"content":" public boolean isOccurringOnDate(LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ryanozx"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"ryanozx"},"content":" * Returns whether the task\u0027s name contains the keyword","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"ryanozx"},"content":" * @param keyword Keyword to query for","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"ryanozx"},"content":" * @return True if it contains the keyword, false otherwise","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"ryanozx"},"content":" public boolean hasKeyword(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"ryanozx"},"content":" return name.contains(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ryanozx":90}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":" * Todo is a Task with no dates","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":" * Constructs a new Todo object","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":" * @param name Name of Todo","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" super(name);","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" * Return string representation of Todo","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" * @return String representation of Todo","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" public String generateSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" return String.format(\"T | %b | %s\", isDone, name);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ryanozx":27}},{"path":"src/test/java/duke/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" final LocalDateTime testDateTime \u003d LocalDateTime.parse(\"2023-08-25T00:00:00\");","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" public void toString_default() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" Deadline testDeadline \u003d new Deadline(\"Test Deadline\", testDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" assertEquals(testDeadline.toString(), \"[D][ ] Test Deadline (by: 25-08-2023 0000)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" public void toString_checkAndUncheck() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" Deadline testDeadline \u003d new Deadline(\"Test Deadline\", testDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" testDeadline.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" assertEquals(testDeadline.toString(), \"[D][X] Test Deadline (by: 25-08-2023 0000)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" testDeadline.markNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" assertEquals(testDeadline.toString(), \"[D][ ] Test Deadline (by: 25-08-2023 0000)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" public void generateSaveString_unchecked() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" Deadline testDeadline \u003d new Deadline(\"Test Deadline\", testDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" assertEquals(testDeadline.generateSaveString(), \"D | false | Test Deadline /by 25-08-2023 0000\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" public void generateSaveString_checked() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" Deadline testDeadline \u003d new Deadline(\"Test Deadline\", testDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":" testDeadline.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":" assertEquals(testDeadline.generateSaveString(), \"D | true | Test Deadline /by 25-08-2023 0000\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" public void isOccurringOnDate() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" Deadline testDeadline \u003d new Deadline(\"Test Deadline\", testDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":" LocalDate testDate1 \u003d LocalDate.parse(\"2023-08-24\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":" LocalDate testDate2 \u003d LocalDate.parse(\"2023-08-25\");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryanozx"},"content":" LocalDate testDate3 \u003d LocalDate.parse(\"2023-08-26\");","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryanozx"},"content":" assertFalse(testDeadline.isOccurringOnDate(testDate1));","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryanozx"},"content":" assertTrue(testDeadline.isOccurringOnDate(testDate2));","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryanozx"},"content":" assertFalse(testDeadline.isOccurringOnDate(testDate3));","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":53}},{"path":"src/test/java/duke/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" final LocalDateTime testStartTime \u003d LocalDateTime.parse(\"2023-08-25T00:00:00\");","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" final LocalDateTime testEndTime \u003d LocalDateTime.parse(\"2023-08-25T23:59:59\");","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":" public void toString_default() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" Event testEvent \u003d new Event(\"Test Event\", testStartTime, testEndTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" assertEquals(testEvent.toString(), \"[E][ ] Test Event (from: 25-08-2023 0000 to: 25-08-2023 2359)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" public void toString_checkAndUncheck() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" Event testEvent \u003d new Event(\"Test Event\", testStartTime, testEndTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" testEvent.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":" assertEquals(testEvent.toString(), \"[E][X] Test Event (from: 25-08-2023 0000 to: 25-08-2023 2359)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" testEvent.markNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" assertEquals(testEvent.toString(), \"[E][ ] Test Event (from: 25-08-2023 0000 to: 25-08-2023 2359)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" public void generateSaveString_unchecked() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" Event testEvent \u003d new Event(\"Test Event\", testStartTime, testEndTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" assertEquals(testEvent.generateSaveString(), \"E | false | Test Event /from 25-08-2023 0000 \"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" + \"/to 25-08-2023 2359\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":" public void generateSaveString_checked() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" Event testEvent \u003d new Event(\"Test Event\", testStartTime, testEndTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":" testEvent.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" assertEquals(testEvent.generateSaveString(), \"E | true | Test Event /from 25-08-2023 0000 \"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" + \"/to 25-08-2023 2359\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryanozx"},"content":" public void isOccurringOnDate() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ryanozx"},"content":" Event testEvent \u003d new Event(\"Test Event\", testStartTime, testEndTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ryanozx"},"content":" LocalDate testDate1 \u003d LocalDate.parse(\"2023-08-24\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ryanozx"},"content":" LocalDate testDate2 \u003d LocalDate.parse(\"2023-08-25\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ryanozx"},"content":" LocalDate testDate3 \u003d LocalDate.parse(\"2023-08-26\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ryanozx"},"content":" assertFalse(testEvent.isOccurringOnDate(testDate1));","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ryanozx"},"content":" assertTrue(testEvent.isOccurringOnDate(testDate2));","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ryanozx"},"content":" assertFalse(testEvent.isOccurringOnDate(testDate3));","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":57}},{"path":"src/test/java/duke/tasks/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":" public void toString_default() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":" Todo testTodo \u003d new Todo(\"Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":" assertEquals(testTodo.toString(), \"[T][ ] Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":" public void toString_checkAndUncheck() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":" Todo testTodo \u003d new Todo(\"Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":" testTodo.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":" assertEquals(testTodo.toString(), \"[T][X] Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":" testTodo.markNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":" assertEquals(testTodo.toString(), \"[T][ ] Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":" public void generateSaveString_unchecked() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ryanozx"},"content":" Todo testTodo \u003d new Todo(\"Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ryanozx"},"content":" assertEquals(testTodo.generateSaveString(), \"T | false | Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ryanozx"},"content":" public void generateSaveString_checked() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ryanozx"},"content":" Todo testTodo \u003d new Todo(\"Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ryanozx"},"content":" testTodo.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ryanozx"},"content":" assertEquals(testTodo.generateSaveString(), \"T | true | Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ryanozx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ryanozx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ryanozx"},"content":" public void isOccurringOnDate_false() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ryanozx"},"content":" Todo testTodo \u003d new Todo(\"Test Todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ryanozx"},"content":" LocalDate testDate1 \u003d LocalDate.parse(\"2023-08-25\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ryanozx"},"content":" LocalDate testDate2 \u003d LocalDate.parse(\"2099-12-31\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ryanozx"},"content":" assertFalse(testTodo.isOccurringOnDate(testDate1));","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ryanozx"},"content":" assertFalse(testTodo.isOccurringOnDate(testDate2));","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ryanozx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ryanozx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ryanozx":48}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ryanozx"},"content":"todo read book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"ryanozx"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"ryanozx"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"ryanozx"},"content":"todo join sports club","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"ryanozx"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"ryanozx"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"ryanozx"},"content":"mark 4","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ryanozx"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ryanozx"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ryanozx"},"content":"delete 3","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"ryanozx"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"ryanozx"},"content":"todo","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"ryanozx"},"content":"deadline","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ryanozx"},"content":"event","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"ryanozx"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ryanozx"},"content":"unmark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ryanozx"},"content":"mark -1","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"ryanozx"},"content":"mark abc","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"ryanozx"},"content":"mark 10","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"ryanozx"},"content":"unmark -1","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"ryanozx"},"content":"unmark abc","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"ryanozx"},"content":"unmark 10","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"ryanozx"},"content":"delete -1","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"ryanozx"},"content":"delete abc","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ryanozx"},"content":"delete 10","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ryanozx"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ryanozx"},"content":"boo","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"ryanozx"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ryanozx":28}}] diff --git a/ryanozx_ip_master/commits.json b/ryanozx_ip_master/commits.json index a6633714..43903690 100644 --- a/ryanozx_ip_master/commits.json +++ b/ryanozx_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ryanozx":[{"date":"2023-08-21","commitResults":[{"hash":"8184cb422b25c0b60a93f2ad11adc8840af79955","isMergeCommit":false,"messageTitle":"Renamed bot and implemented greeting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":6}}},{"hash":"e63814ff1b0ab188a43a51ecbbba29fb8c3dd3c4","isMergeCommit":false,"messageTitle":"Added javadoc comments","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"08af000eeecccc2f9bdfbf1e4e1013870e1f1756","isMergeCommit":false,"messageTitle":"Added echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":32,"deletions":1}}},{"hash":"dadeb296060efebb47ac80d92b21368f8bdcca55","isMergeCommit":false,"messageTitle":"Implemented text storing and listing","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":48,"deletions":10}}},{"hash":"afbf70666b4d50d0804ba6f84b96e6c87f1a4524","isMergeCommit":false,"messageTitle":"Created Task class and implemented task status","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":123,"deletions":14}}},{"hash":"1dee73f76df246decadc03dac72deba2b0853dd5","isMergeCommit":false,"messageTitle":"Added Todos, Deadlines, Events as task types","messageBody":"","tags":["Level-4","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":5},"java":{"insertions":203,"deletions":34}}},{"hash":"d205cc8037f6bedbcdf114a94be7bfab48c1b152","isMergeCommit":false,"messageTitle":"Refactored and added more exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":63}}},{"hash":"4ee50ab4bbf0989a8b63eac7568499a2c5062d57","isMergeCommit":false,"messageTitle":"Implemented task deletion","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":2},"java":{"insertions":65,"deletions":25}}},{"hash":"f506459c299bf051173fe55cfe59804b7077229f","isMergeCommit":false,"messageTitle":"Created TaskTypes enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":12}}}]},{"date":"2023-08-31","commitResults":[{"hash":"31f3d46afbfe7821ac03f1379a7e4a18598b1019","isMergeCommit":false,"messageTitle":"Add ability to save and load from file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":161,"deletions":32}}},{"hash":"f56fbd66a258d5c30c9d15ebf742ce12674f9175","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"afd4a23f0f3f4649387375a5f9f2792efbd5982b","isMergeCommit":false,"messageTitle":"Change date types and implement date command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":76,"deletions":13}}},{"hash":"11267f36d508dfa3bf402844254af6ccd2af8a61","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"ce8012cb7f45ce6c0d860087483fb64e6555ddad","isMergeCommit":false,"messageTitle":"Refactor code into multiple classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":774,"deletions":452}}},{"hash":"e2f5d2986cd7ad4211e86456be34876e6dbf5af7","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["More-OOP","A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"17a26cd926bf743c41dd4191c078666f297e7870","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":146,"deletions":32}}},{"hash":"b7c298b7aed39bcad0fc98bf47042df54ba7c3e7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"7846f8ff95967c87b5876c5bd4bb344a2edb28ac","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"828622c4962fb27544b115dbafd455febd8e20d5","isMergeCommit":false,"messageTitle":"Set up gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"6f74929a6fa639ae9267be3f16d7776ded9da53b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"b4b1835bc404ac3111836dd9634cffdf41a381cb","isMergeCommit":false,"messageTitle":"Set up JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":159,"deletions":7}}},{"hash":"948d534cab6f3d49e11d5bf01b535d033efac515","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-JUnit\u0027","messageBody":"","tags":["v0.1","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"0b56160dcedf593be227f994e4e426ce5a4e6e7d","isMergeCommit":false,"messageTitle":"Fix file creation bug","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":17}}},{"hash":"52e1c049b426d3fef77a13fd25f81b86bab90331","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":23}}},{"hash":"edfd67d9f8541b55ac5fa5041054e53ca2de9d95","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"b4b6287b94c1d3c5f320f1818855318f6193df5a","isMergeCommit":false,"messageTitle":"Enforce coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":57}}},{"hash":"eff51348c866e8934f4cebf4147ba407aa6b0bcd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"7fcb01b08cf76e82b81da14fdd77647cc76fb886","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/ryanozx/ip into branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c329bd691377cd642b892ed4d6b75f5ad5a35d5f","isMergeCommit":false,"messageTitle":"Implement find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":1}}},{"hash":"5c32210b7896f4ddd56ead5b794bb7deb6ba5804","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"73b0ba5c6a9d2285dc98820aa849e4a3d215e5c3","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/ryanozx/ip into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fbb31b17c3188a5e6a580525788ce1d69a6a4093","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5b35d8cd83c4666aef840228384a20b73c9253cc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c817e56f70ef3bf154be26eaa33fbf232c329557","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027 of https://github.com/ryanozx/ip into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a72b2c31584394e453fe954224e202a5380e66fd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ryanozx":{"java":1305,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":1,"txt":28}},"authorContributionVariance":{"ryanozx":291634.78},"authorDisplayNameMap":{"ryanozx":"CS2103T-W11-1 RYAN.. XUN"}} +{"authorDailyContributionsMap":{"ryanozx":[{"date":"2023-08-21","commitResults":[{"hash":"8184cb422b25c0b60a93f2ad11adc8840af79955","isMergeCommit":false,"messageTitle":"Renamed bot and implemented greeting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":6}}},{"hash":"e63814ff1b0ab188a43a51ecbbba29fb8c3dd3c4","isMergeCommit":false,"messageTitle":"Added javadoc comments","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"08af000eeecccc2f9bdfbf1e4e1013870e1f1756","isMergeCommit":false,"messageTitle":"Added echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":32,"deletions":1}}},{"hash":"dadeb296060efebb47ac80d92b21368f8bdcca55","isMergeCommit":false,"messageTitle":"Implemented text storing and listing","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":48,"deletions":10}}},{"hash":"afbf70666b4d50d0804ba6f84b96e6c87f1a4524","isMergeCommit":false,"messageTitle":"Created Task class and implemented task status","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":123,"deletions":14}}},{"hash":"1dee73f76df246decadc03dac72deba2b0853dd5","isMergeCommit":false,"messageTitle":"Added Todos, Deadlines, Events as task types","messageBody":"","tags":["Level-4","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":5},"java":{"insertions":203,"deletions":34}}},{"hash":"d205cc8037f6bedbcdf114a94be7bfab48c1b152","isMergeCommit":false,"messageTitle":"Refactored and added more exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":63}}},{"hash":"4ee50ab4bbf0989a8b63eac7568499a2c5062d57","isMergeCommit":false,"messageTitle":"Implemented task deletion","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":2},"java":{"insertions":65,"deletions":25}}},{"hash":"f506459c299bf051173fe55cfe59804b7077229f","isMergeCommit":false,"messageTitle":"Created TaskTypes enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":12}}}]},{"date":"2023-08-31","commitResults":[{"hash":"31f3d46afbfe7821ac03f1379a7e4a18598b1019","isMergeCommit":false,"messageTitle":"Add ability to save and load from file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":161,"deletions":32}}},{"hash":"f56fbd66a258d5c30c9d15ebf742ce12674f9175","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"afd4a23f0f3f4649387375a5f9f2792efbd5982b","isMergeCommit":false,"messageTitle":"Change date types and implement date command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":76,"deletions":13}}},{"hash":"11267f36d508dfa3bf402844254af6ccd2af8a61","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"ce8012cb7f45ce6c0d860087483fb64e6555ddad","isMergeCommit":false,"messageTitle":"Refactor code into multiple classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":774,"deletions":452}}},{"hash":"e2f5d2986cd7ad4211e86456be34876e6dbf5af7","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["More-OOP","A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"17a26cd926bf743c41dd4191c078666f297e7870","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":146,"deletions":32}}},{"hash":"b7c298b7aed39bcad0fc98bf47042df54ba7c3e7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"7846f8ff95967c87b5876c5bd4bb344a2edb28ac","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"828622c4962fb27544b115dbafd455febd8e20d5","isMergeCommit":false,"messageTitle":"Set up gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"6f74929a6fa639ae9267be3f16d7776ded9da53b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"b4b1835bc404ac3111836dd9634cffdf41a381cb","isMergeCommit":false,"messageTitle":"Set up JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":159,"deletions":7}}},{"hash":"948d534cab6f3d49e11d5bf01b535d033efac515","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-JUnit\u0027","messageBody":"","tags":["v0.1","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"0b56160dcedf593be227f994e4e426ce5a4e6e7d","isMergeCommit":false,"messageTitle":"Fix file creation bug","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":17}}},{"hash":"52e1c049b426d3fef77a13fd25f81b86bab90331","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":23}}},{"hash":"edfd67d9f8541b55ac5fa5041054e53ca2de9d95","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"b4b6287b94c1d3c5f320f1818855318f6193df5a","isMergeCommit":false,"messageTitle":"Enforce coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":57}}},{"hash":"eff51348c866e8934f4cebf4147ba407aa6b0bcd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"7fcb01b08cf76e82b81da14fdd77647cc76fb886","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/ryanozx/ip into branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c329bd691377cd642b892ed4d6b75f5ad5a35d5f","isMergeCommit":false,"messageTitle":"Implement find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":1}}},{"hash":"5c32210b7896f4ddd56ead5b794bb7deb6ba5804","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"73b0ba5c6a9d2285dc98820aa849e4a3d215e5c3","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/ryanozx/ip into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fbb31b17c3188a5e6a580525788ce1d69a6a4093","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5b35d8cd83c4666aef840228384a20b73c9253cc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c817e56f70ef3bf154be26eaa33fbf232c329557","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027 of https://github.com/ryanozx/ip into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a72b2c31584394e453fe954224e202a5380e66fd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"5cc2c1ea8282c6e38114ad4e3645b07e385246fe","isMergeCommit":false,"messageTitle":"Add CheckStyle and fix style violations","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":105,"deletions":94}}},{"hash":"008e2bdb59aebbcd9993e8c9b379509705b7b732","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-checkStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ryanozx":{"java":1316,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":6,"txt":28}},"authorContributionVariance":{"ryanozx":224934.22},"authorDisplayNameMap":{"ryanozx":"CS2103T-W11-1 RYAN.. XUN"}} diff --git a/s-peiran_ip_master/authorship.json b/s-peiran_ip_master/authorship.json index 1c0a97c6..fa3a3b09 100644 --- a/s-peiran_ip_master/authorship.json +++ b/s-peiran_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"false deadline return book /by 2019/05/12 1800","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"false event party /from 2020/11/15 2000 /to 2100","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"false event party /from 14/12/2023 2000 /to 2100","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"false deadline homework /by 14/01/2025 2000","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"false event meetup /from 31/12/2024 1500 /to 2000","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"s-peiran":5}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"import commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"import functional.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":" private functional.TaskList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":" private functional.Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" private String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" ui \u003d new functional.Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" tasks \u003d new functional.TaskList\u003cTask\u003e(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" } catch (functional.DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" tasks \u003d new functional.TaskList\u003cTask\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"s-peiran"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-peiran"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-peiran"},"content":" Command c \u003d functional.Parser.parse(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-peiran"},"content":" c.execute(tasks, ui, false, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-peiran"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-peiran"},"content":" } catch (functional.DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-peiran"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-peiran"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-peiran"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":39,"author":{"gitId":"s-peiran"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":41,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-peiran"},"content":" new Duke(\"./data/tasks.txt\").run();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"s-peiran":39,"-":6}},{"path":"src/main/java/commands/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import functional.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import functional.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"import functional.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":"public class AddCommand extends commands.Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" public AddCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" public void execute(TaskList\u003cTask\u003e tasks, Ui ui, boolean marked, boolean load) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" if ((Arrays.asList(\"todo\", \"deadline\", \"event\").contains(ui.get(0)))","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" \u0026\u0026 ui.length() \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" \"☹ OOPS!!! The description of a todo cannot be empty.\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" throw new DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-peiran"},"content":" switch (ui.get(0)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-peiran"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-peiran"},"content":" Task job \u003d new ToDo(ui.getInput(), marked);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-peiran"},"content":" tasks.add(job);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-peiran"},"content":" if (!load) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-peiran"},"content":" System.out.println(job.addTask(tasks.size()));","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-peiran"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-peiran"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-peiran"},"content":" job \u003d new Deadline(ui.getInput(), marked);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-peiran"},"content":" tasks.add(job);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-peiran"},"content":" if (!load) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-peiran"},"content":" System.out.println(job.addTask(tasks.size()));","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-peiran"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-peiran"},"content":" \"☹ OOPS!!! I\u0027m sorry, the format entered was incorrect :-(\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-peiran"},"content":" throw new DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-peiran"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-peiran"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-peiran"},"content":" job \u003d new Event(ui.getInput(), marked);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-peiran"},"content":" tasks.add(job);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-peiran"},"content":" if (!load) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-peiran"},"content":" System.out.println(job.addTask(tasks.size()));","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-peiran"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-peiran"},"content":" \"☹ OOPS!!! I\u0027m sorry, the format entered was incorrect :-(\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-peiran"},"content":" throw new DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"s-peiran"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"s-peiran"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"s-peiran"},"content":" \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"s-peiran"},"content":" throw new DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":72}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import functional.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import functional.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"import functional.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":"public class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" boolean isExit;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" public Command() {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" public void execute(TaskList\u003cTask\u003e tasks, Ui ui, boolean marked, boolean load) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" return this.isExit;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":22}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import functional.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import functional.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"import functional.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":"public class DeleteCommand extends commands.Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" public DeleteCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" public void execute(TaskList tasks, Ui ui, boolean marked, boolean load) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" int index \u003d Integer.parseInt(ui.get(1)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" if (index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" throw new DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" Task job \u003d (Task) tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" \"Noted, I\u0027ve removed this task:\\n\" + job.toString() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" String.format(\"Now you have %d tasks in the list\\n\", tasks.size()) +","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":27}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import functional.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import functional.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" public void execute(TaskList tasks, Ui ui, boolean marked, boolean load) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" super.isExit \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":18}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import functional.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import functional.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" public void execute(TaskList tasks, Ui ui, boolean marked, boolean load) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" \"Here are the tasks in your list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" Task job \u003d (Task) tasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" System.out.println(String.format(\"%d. %s\", i + 1, job.toString()));","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":22}},{"path":"src/main/java/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import functional.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import functional.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"public class MarkCommand extends commands.Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" public MarkCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" public void execute(TaskList\u003cTask\u003e tasks, Ui ui, boolean marked, boolean load) throws functional.DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" int index \u003d Integer.parseInt(ui.get(1)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" if (index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" throw new functional.DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" Task job \u003d (Task) tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" job \u003d job.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" tasks.set(index, job);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" \"OK, I\u0027ve marked this task as done:\\n\" + job.toString() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":25}},{"path":"src/main/java/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import functional.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import functional.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"public class UnmarkCommand extends commands.Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" public UnmarkCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" public void execute(TaskList\u003cTask\u003e tasks, Ui ui, boolean marked, boolean load) throws functional.DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" int index \u003d Integer.parseInt(ui.get(1)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" if (index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" throw new functional.DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" Task job \u003d (Task) tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" job \u003d job.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" tasks.set(index, job);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" \"OK, I\u0027ve marked this task as not done yet:\\n\" + job.toString() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":25}},{"path":"src/main/java/functional/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package functional;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":" public DukeException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" return \" ☹ OOPS!!! \" + getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"s-peiran":14}},{"path":"src/main/java/functional/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package functional;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import commands.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":" public static Command parse(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":" String[] input \u003d fullCommand.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" switch (input[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" return new DeleteCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" return new MarkCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" return new UnmarkCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" return new AddCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":25}},{"path":"src/main/java/functional/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package functional;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":"import java.util.List;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" public List\u003cTask\u003e load() throws functional.DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" functional.TaskList\u003cTask\u003e tl \u003d new functional.TaskList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" String line \u003d s.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":" String[] input \u003d line.split(\" \", 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-peiran"},"content":" Command c \u003d functional.Parser.parse(input[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-peiran"},"content":" Ui ui \u003d new Ui(input[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-peiran"},"content":" c.execute(tl, ui, Boolean.parseBoolean(input[0]), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-peiran"},"content":" // tl.add(new Task(s.nextLine()));","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-peiran"},"content":" // System.out.println(s.nextLine());","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-peiran"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-peiran"},"content":" throw new functional.DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-peiran"},"content":" // System.out.println(\"File not found\");","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"Opening Saved File\");","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-peiran"},"content":" return tl;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-peiran"},"content":" public void save(functional.TaskList\u003cTask\u003e tl) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-peiran"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-peiran"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-peiran"},"content":" f.getParentFile().mkdirs();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"Saving file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-peiran"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-peiran"},"content":" for (Task task : tl) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-peiran"},"content":" fw.write(task.isMarked() + \" \" + task.getContent() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-peiran"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-peiran"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"File successfully Saved\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":61}},{"path":"src/main/java/functional/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package functional;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import java.util.List;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"public class TaskList\u003cTask\u003e extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" public TaskList(List\u003cTask\u003e list) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" super(list);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" return super.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":18}},{"path":"src/main/java/functional/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package functional;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import java.util.NoSuchElementException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":" String[] currentLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" String input;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" public Ui(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" this.input \u003d input;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" this.currentLine \u003d input.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" public Ui() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" \" Hello! I\u0027m Husky\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" \" What can I do for you?\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" public String readCommand() throws functional.DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":" Scanner io \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-peiran"},"content":" String s \u003d io.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-peiran"},"content":" this.currentLine \u003d s.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-peiran"},"content":" this.input \u003d s;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-peiran"},"content":" return s;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-peiran"},"content":" } catch (NoSuchElementException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-peiran"},"content":" throw new functional.DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-peiran"},"content":" public String showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-peiran"},"content":" return \"____________________________________________________________\";","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-peiran"},"content":" public String showError(String s) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-peiran"},"content":" return \"Error\";","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-peiran"},"content":" public String get(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-peiran"},"content":" return currentLine[index];","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-peiran"},"content":" public int length() {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-peiran"},"content":" return currentLine.length;","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-peiran"},"content":" public String getInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-peiran"},"content":" return this.input;","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-peiran"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"No preexisting file\\n\" + \"creating new file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"s-peiran"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":65}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" String[] split1;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" String[] split2;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" String dueDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" public Deadline(String content, boolean status) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" super(content, status);","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" split1 \u003d content.split(\"/\", 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" split2 \u003d split1[1].split(\" \", 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" this.dueDate \u003d LocalDate.parse(split2[1].replace(\"/\", \"-\")).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" this.dueDate \u003d LocalDate.parse(split2[1], formatter).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" } catch (DateTimeException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" this.dueDate \u003d split1[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"s-peiran"},"content":" public Deadline mark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-peiran"},"content":" return new Deadline(super.getContent(), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"s-peiran"},"content":" public Deadline unmark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-peiran"},"content":" return new Deadline(super.getContent(), false);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"s-peiran"},"content":" public String addTask(int listSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-peiran"},"content":" return \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"s-peiran"},"content":" \"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"s-peiran"},"content":" toString() + \"\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"s-peiran"},"content":" String.format(\"Now you have %d tasks in the list,\\n\", listSize) +","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\";","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"s-peiran"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"s-peiran"},"content":" String[] result \u003d split1[0].split(\" \", 2);","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"s-peiran"},"content":" if (!super.isMarked()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-peiran"},"content":" return String.format(\"[D][ ] %s(by: %s)\", result[1], dueDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"s-peiran"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"s-peiran"},"content":" return String.format(\"[D][X] %s(by: %s)\", result[1], dueDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"s-peiran":53}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" String[] split1;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" String[] splitStart;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" String[] splitEnd;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" String startDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" public Event(String content, boolean status) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" super(content, status);","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" split1 \u003d content.split(\"/\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" splitStart \u003d split1[1].split(\" \", 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" String[] split2 \u003d splitStart[2].split(\"/\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" splitEnd \u003d split2[1].split(\" \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" this.startDate \u003d LocalDate.parse(splitStart[1].replace(\"/\", \"-\")).","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \" \" + split2[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" this.startDate \u003d LocalDate.parse(splitStart[1], formatter).","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":" format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \" \" + split2[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"s-peiran"},"content":" } catch (DateTimeException ex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"s-peiran"},"content":" this.startDate \u003d splitStart[1] + \" \" + split2[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"s-peiran"},"content":" public Event mark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-peiran"},"content":" return new Event(super.getContent(), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"s-peiran"},"content":" public Event unmark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-peiran"},"content":" return new Event(super.getContent(), false);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"s-peiran"},"content":" public String addTask(int listSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-peiran"},"content":" return \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"s-peiran"},"content":" \"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"s-peiran"},"content":" toString() + \"\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"s-peiran"},"content":" String.format(\"Now you have %d tasks in the list,\\n\", listSize) +","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\";","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"s-peiran"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"s-peiran"},"content":" String[] result \u003d split1[0].split(\" \", 2);","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"s-peiran"},"content":" if (!super.isMarked()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-peiran"},"content":" return String.format(\"[E][ ] %s(%s: %s%s: %s)\", result[1], splitStart[0], startDate, splitEnd[0], splitEnd[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"s-peiran"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"s-peiran"},"content":" return String.format(\"[E][X] %s(%s: %s%s: %s)\", result[1], splitStart[0], startDate, splitEnd[0], splitEnd[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"s-peiran"},"content":" // main branch commit for Event","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"s-peiran":62}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"public class Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":" private String content;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":" private boolean marked;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":" public Task(String content) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":" this.content \u003d content;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" this.marked \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" public Task(String content, boolean status) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" this.content \u003d content;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" this.marked \u003d status;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" public Task mark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" return new Task(content, true);","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" public Task unmark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" return new Task(content);","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":" public String addTask(int listSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" return \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":" \"added: \" + this.content + \"\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\";","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"s-peiran"},"content":" public String getContent() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-peiran"},"content":" return this.content;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-peiran"},"content":" public boolean isMarked() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-peiran"},"content":" return this.marked;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-peiran"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"s-peiran"},"content":" if (!this.marked) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"s-peiran"},"content":" return String.format(\"[ ] %s\", content);","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"s-peiran"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"s-peiran"},"content":" return String.format(\"[X] %s\", content);","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"s-peiran":46}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":" public ToDo(String content) {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":" super(content, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":" public ToDo(String content, boolean status) {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" super(content, status);","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" public ToDo mark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" return new ToDo(super.getContent(), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" public ToDo unmark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" return new ToDo(super.getContent());","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" public String addTask(int listSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" return \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" \"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" toString() + \"\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" String.format(\"Now you have %d tasks in the list,\\n\", listSize) +","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\";","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"s-peiran"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"s-peiran"},"content":" if (!super.isMarked()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-peiran"},"content":" return String.format(\"[T][ ] %s\", super.getContent());","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-peiran"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"s-peiran"},"content":" return String.format(\"[T][X] %s\", super.getContent());","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"s-peiran":35}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"todo read book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"deadline return book /by 2/12/2019 1800","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"todo join sports club","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"todo borrow book","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"mark 4","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":"todo","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":"blah","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":"delete 4","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":"deadline brite","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":"event brite /by Sunday","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"s-peiran":15}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"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":"s-peiran"},"content":" mainClass.set(\"Duke\")","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"s-peiran"},"content":" archiveFileName \u003d \"duke.jar\"","lastModifiedDate":"2023-09-06"},{"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":{"s-peiran":2,"-":41}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"false deadline return book /by 2019/05/12 1800","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"false event party /from 2020/11/15 2000 /to 2100","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"false event party /from 14/12/2023 2000 /to 2100","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"false deadline homework /by 14/01/2025 2000","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"false event meetup /from 31/12/2024 1500 /to 2000","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"false deadline eat /by 2019/12/31 1500","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"s-peiran":6}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"import commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"import functional.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":" private functional.TaskList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":" private functional.Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" private String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" ui \u003d new functional.Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" tasks \u003d new functional.TaskList\u003cTask\u003e(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" } catch (functional.DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" tasks \u003d new functional.TaskList\u003cTask\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"s-peiran"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-peiran"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-peiran"},"content":" Command c \u003d functional.Parser.parse(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-peiran"},"content":" c.execute(tasks, ui, false, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-peiran"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-peiran"},"content":" } catch (functional.DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-peiran"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-peiran"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-peiran"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":39,"author":{"gitId":"s-peiran"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":41,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-peiran"},"content":" new Duke(\"./data/tasks.txt\").run();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"s-peiran":39,"-":6}},{"path":"src/main/java/commands/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import functional.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import functional.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"import functional.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":"public class AddCommand extends commands.Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" public AddCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" public void execute(TaskList\u003cTask\u003e tasks, Ui ui, boolean marked, boolean load) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" if ((Arrays.asList(\"todo\", \"deadline\", \"event\").contains(ui.get(0)))","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" \u0026\u0026 ui.length() \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" \"☹ OOPS!!! The description of a todo cannot be empty.\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" throw new DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-peiran"},"content":" switch (ui.get(0)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-peiran"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-peiran"},"content":" Task job \u003d new ToDo(ui.getInput(), marked);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-peiran"},"content":" tasks.add(job);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-peiran"},"content":" if (!load) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-peiran"},"content":" System.out.println(job.addTask(tasks.size()));","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-peiran"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-peiran"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-peiran"},"content":" job \u003d new Deadline(ui.getInput(), marked);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-peiran"},"content":" tasks.add(job);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-peiran"},"content":" if (!load) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-peiran"},"content":" System.out.println(job.addTask(tasks.size()));","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-peiran"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-peiran"},"content":" \"☹ OOPS!!! I\u0027m sorry, the format entered was incorrect :-(\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-peiran"},"content":" throw new DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-peiran"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-peiran"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-peiran"},"content":" job \u003d new Event(ui.getInput(), marked);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-peiran"},"content":" tasks.add(job);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-peiran"},"content":" if (!load) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-peiran"},"content":" System.out.println(job.addTask(tasks.size()));","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-peiran"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-peiran"},"content":" \"☹ OOPS!!! I\u0027m sorry, the format entered was incorrect :-(\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-peiran"},"content":" throw new DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"s-peiran"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"s-peiran"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"s-peiran"},"content":" \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"s-peiran"},"content":" throw new DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":72}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import functional.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import functional.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"import functional.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":"public class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" boolean isExit;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" public Command() {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" this.isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" public void execute(TaskList\u003cTask\u003e tasks, Ui ui, boolean marked, boolean load) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" return this.isExit;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":22}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import functional.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import functional.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"import functional.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":"public class DeleteCommand extends commands.Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" public DeleteCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" public void execute(TaskList tasks, Ui ui, boolean marked, boolean load) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" int index \u003d Integer.parseInt(ui.get(1)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" if (index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" throw new DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" Task job \u003d (Task) tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" \"Noted, I\u0027ve removed this task:\\n\" + job.toString() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" String.format(\"Now you have %d tasks in the list\\n\", tasks.size()) +","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":27}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import functional.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import functional.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" public void execute(TaskList tasks, Ui ui, boolean marked, boolean load) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" super.isExit \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":18}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import functional.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import functional.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" public void execute(TaskList tasks, Ui ui, boolean marked, boolean load) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" \"Here are the tasks in your list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" Task job \u003d (Task) tasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" System.out.println(String.format(\"%d. %s\", i + 1, job.toString()));","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":22}},{"path":"src/main/java/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import functional.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import functional.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"public class MarkCommand extends commands.Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" public MarkCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" public void execute(TaskList\u003cTask\u003e tasks, Ui ui, boolean marked, boolean load) throws functional.DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" int index \u003d Integer.parseInt(ui.get(1)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" if (index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" throw new functional.DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" Task job \u003d (Task) tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" job \u003d job.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" tasks.set(index, job);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" \"OK, I\u0027ve marked this task as done:\\n\" + job.toString() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":25}},{"path":"src/main/java/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import functional.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import functional.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"public class UnmarkCommand extends commands.Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" public UnmarkCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" public void execute(TaskList\u003cTask\u003e tasks, Ui ui, boolean marked, boolean load) throws functional.DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" int index \u003d Integer.parseInt(ui.get(1)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" if (index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" throw new functional.DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" Task job \u003d (Task) tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" job \u003d job.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" tasks.set(index, job);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" \"OK, I\u0027ve marked this task as not done yet:\\n\" + job.toString() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":25}},{"path":"src/main/java/functional/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package functional;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":" public DukeException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" return \" ☹ OOPS!!! \" + getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"s-peiran":14}},{"path":"src/main/java/functional/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package functional;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import commands.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":" public static Command parse(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":" String[] input \u003d fullCommand.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" switch (input[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" return new DeleteCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" return new MarkCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" return new UnmarkCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" return new AddCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":25}},{"path":"src/main/java/functional/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package functional;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":"import java.util.List;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" public List\u003cTask\u003e load() throws functional.DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" functional.TaskList\u003cTask\u003e tl \u003d new functional.TaskList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" String line \u003d s.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":" String[] input \u003d line.split(\" \", 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-peiran"},"content":" Command c \u003d functional.Parser.parse(input[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-peiran"},"content":" Ui ui \u003d new Ui(input[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-peiran"},"content":" c.execute(tl, ui, Boolean.parseBoolean(input[0]), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-peiran"},"content":" // tl.add(new Task(s.nextLine()));","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-peiran"},"content":" // System.out.println(s.nextLine());","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-peiran"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-peiran"},"content":" throw new functional.DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-peiran"},"content":" // System.out.println(\"File not found\");","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"Opening Saved File\");","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-peiran"},"content":" return tl;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-peiran"},"content":" public void save(functional.TaskList\u003cTask\u003e tl) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-peiran"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-peiran"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-peiran"},"content":" f.getParentFile().mkdirs();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"Saving file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-peiran"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-peiran"},"content":" for (Task task : tl) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-peiran"},"content":" fw.write(task.isMarked() + \" \" + task.getContent() + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-peiran"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-peiran"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"File successfully Saved\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":61}},{"path":"src/main/java/functional/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package functional;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import java.util.List;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"public class TaskList\u003cTask\u003e extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" public TaskList(List\u003cTask\u003e list) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" super(list);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" return super.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":18}},{"path":"src/main/java/functional/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package functional;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import java.util.NoSuchElementException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":" String[] currentLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" String input;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" public Ui(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" this.input \u003d input;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" this.currentLine \u003d input.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" public Ui() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" \" Hello! I\u0027m Husky\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" \" What can I do for you?\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" public String readCommand() throws functional.DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":" Scanner io \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-peiran"},"content":" String s \u003d io.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-peiran"},"content":" this.currentLine \u003d s.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-peiran"},"content":" this.input \u003d s;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-peiran"},"content":" return s;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-peiran"},"content":" } catch (NoSuchElementException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-peiran"},"content":" throw new functional.DukeException();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-peiran"},"content":" public String showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-peiran"},"content":" return \"____________________________________________________________\";","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-peiran"},"content":" public String showError(String s) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-peiran"},"content":" return \"Error\";","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-peiran"},"content":" public String get(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-peiran"},"content":" return currentLine[index];","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-peiran"},"content":" public int length() {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-peiran"},"content":" return currentLine.length;","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-peiran"},"content":" public String getInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-peiran"},"content":" return this.input;","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-peiran"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-peiran"},"content":" System.out.println(\"No preexisting file\\n\" + \"creating new file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"s-peiran"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-peiran":65}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" String[] split1;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" String[] split2;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" String dueDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" public Deadline(String content, boolean status) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" super(content, status);","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" split1 \u003d content.split(\"/\", 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" split2 \u003d split1[1].split(\" \", 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" this.dueDate \u003d LocalDate.parse(split2[1].replace(\"/\", \"-\")).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" this.dueDate \u003d LocalDate.parse(split2[1], formatter).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" } catch (DateTimeException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" this.dueDate \u003d split1[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"s-peiran"},"content":" public Deadline mark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-peiran"},"content":" return new Deadline(super.getContent(), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"s-peiran"},"content":" public Deadline unmark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-peiran"},"content":" return new Deadline(super.getContent(), false);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"s-peiran"},"content":" public String addTask(int listSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-peiran"},"content":" return \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"s-peiran"},"content":" \"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"s-peiran"},"content":" toString() + \"\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"s-peiran"},"content":" String.format(\"Now you have %d tasks in the list,\\n\", listSize) +","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\";","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"s-peiran"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"s-peiran"},"content":" String[] result \u003d split1[0].split(\" \", 2);","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"s-peiran"},"content":" if (!super.isMarked()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-peiran"},"content":" return String.format(\"[D][ ] %s(by: %s)\", result[1], dueDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"s-peiran"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"s-peiran"},"content":" return String.format(\"[D][X] %s(by: %s)\", result[1], dueDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"s-peiran":53}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" String[] split1;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" String[] splitStart;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" String[] splitEnd;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" String startDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" public Event(String content, boolean status) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" super(content, status);","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" split1 \u003d content.split(\"/\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" splitStart \u003d split1[1].split(\" \", 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" String[] split2 \u003d splitStart[2].split(\"/\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" splitEnd \u003d split2[1].split(\" \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" this.startDate \u003d LocalDate.parse(splitStart[1].replace(\"/\", \"-\")).","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \" \" + split2[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" this.startDate \u003d LocalDate.parse(splitStart[1], formatter).","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":" format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \" \" + split2[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"s-peiran"},"content":" } catch (DateTimeException ex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"s-peiran"},"content":" this.startDate \u003d splitStart[1] + \" \" + split2[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"s-peiran"},"content":" public Event mark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-peiran"},"content":" return new Event(super.getContent(), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"s-peiran"},"content":" public Event unmark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-peiran"},"content":" return new Event(super.getContent(), false);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"s-peiran"},"content":" public String addTask(int listSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-peiran"},"content":" return \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"s-peiran"},"content":" \"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"s-peiran"},"content":" toString() + \"\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"s-peiran"},"content":" String.format(\"Now you have %d tasks in the list,\\n\", listSize) +","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\";","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"s-peiran"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"s-peiran"},"content":" String[] result \u003d split1[0].split(\" \", 2);","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"s-peiran"},"content":" if (!super.isMarked()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-peiran"},"content":" return String.format(\"[E][ ] %s(%s: %s%s: %s)\", result[1], splitStart[0], startDate, splitEnd[0], splitEnd[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"s-peiran"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"s-peiran"},"content":" return String.format(\"[E][X] %s(%s: %s%s: %s)\", result[1], splitStart[0], startDate, splitEnd[0], splitEnd[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"s-peiran"},"content":" // main branch commit for Event","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"s-peiran":62}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"public class Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":" private String content;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":" private boolean marked;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":" public Task(String content) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":" this.content \u003d content;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" this.marked \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" public Task(String content, boolean status) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" this.content \u003d content;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" this.marked \u003d status;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" public Task mark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" return new Task(content, true);","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" public Task unmark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" return new Task(content);","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":" public String addTask(int listSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" return \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":" \"added: \" + this.content + \"\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\";","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"s-peiran"},"content":" public String getContent() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-peiran"},"content":" return this.content;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-peiran"},"content":" public boolean isMarked() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-peiran"},"content":" return this.marked;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-peiran"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"s-peiran"},"content":" if (!this.marked) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"s-peiran"},"content":" return String.format(\"[ ] %s\", content);","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"s-peiran"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"s-peiran"},"content":" return String.format(\"[X] %s\", content);","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"s-peiran":46}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":" public ToDo(String content) {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":" super(content, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":" public ToDo(String content, boolean status) {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" super(content, status);","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" public ToDo mark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":" return new ToDo(super.getContent(), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" public ToDo unmark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" return new ToDo(super.getContent());","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":" public String addTask(int listSize) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-peiran"},"content":" return \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"s-peiran"},"content":" \"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"s-peiran"},"content":" toString() + \"\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"s-peiran"},"content":" String.format(\"Now you have %d tasks in the list,\\n\", listSize) +","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"s-peiran"},"content":" \"____________________________________________________________\";","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"s-peiran"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"s-peiran"},"content":" if (!super.isMarked()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-peiran"},"content":" return String.format(\"[T][ ] %s\", super.getContent());","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-peiran"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"s-peiran"},"content":" return String.format(\"[T][X] %s\", super.getContent());","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"s-peiran":35}},{"path":"src/test/java/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"// package Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"public class DukeTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":" public void dummyTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":" tasks.Deadline d \u003d new tasks.Deadline(\"deadline return book /by 2/12/2019 1800\", false);","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":" System.out.println(d.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":" public void anotherDummyTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"s-peiran"},"content":" tasks.Event e \u003d new tasks.Event(\"event project meeting /from Aug 6th 2pm /to 4pm\", false);","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"s-peiran"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"s-peiran"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"s-peiran"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"s-peiran"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"s-peiran":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"s-peiran"},"content":"todo read book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"s-peiran"},"content":"deadline return book /by 2/12/2019 1800","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-peiran"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"s-peiran"},"content":"todo join sports club","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"s-peiran"},"content":"todo borrow book","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"s-peiran"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"s-peiran"},"content":"mark 4","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"s-peiran"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"s-peiran"},"content":"todo","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"s-peiran"},"content":"blah","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"s-peiran"},"content":"delete 4","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"s-peiran"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"s-peiran"},"content":"deadline brite","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"s-peiran"},"content":"event brite /by Sunday","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"s-peiran"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"s-peiran":15}}] diff --git a/s-peiran_ip_master/commits.json b/s-peiran_ip_master/commits.json index 4fbe5faf..f9cc70b6 100644 --- a/s-peiran_ip_master/commits.json +++ b/s-peiran_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"s-peiran":[{"date":"2023-08-24","commitResults":[{"hash":"2a81b3acdca1e53bfa4b6cf4c7e29bcc6c35edb5","isMergeCommit":false,"messageTitle":"level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}}]},{"date":"2023-08-25","commitResults":[{"hash":"b97016054aea72048996b27adeff5460498ff16c","isMergeCommit":false,"messageTitle":"level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":5}}},{"hash":"1504d883e4cbdd0baf486ff1870a6faec82419ca","isMergeCommit":false,"messageTitle":"update Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"432db48365c25684aa502bc346fe29599ea9b97a","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":3}}}]},{"date":"2023-08-26","commitResults":[{"hash":"895c9d3e235330490632f6a36d1b0f11d94b61f7","isMergeCommit":false,"messageTitle":"complete Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":186,"deletions":31}}},{"hash":"319ddeeefe51092bb9aa3df723c4dfd4d24042f8","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":0,"deletions":15}}}]},{"date":"2023-08-27","commitResults":[{"hash":"87085f56dda0b02cc2e6fa30dd3e98da9558ce23","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":39,"deletions":3}}},{"hash":"3b626375b08aafc8236fab022113516b02cd9a45","isMergeCommit":false,"messageTitle":"Level-6 with Exception enchancements","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":35,"deletions":15}}}]},{"date":"2023-09-02","commitResults":[{"hash":"384d5b00b18bafa53d7f3fb77a032f4b4dc9861c","isMergeCommit":false,"messageTitle":"add save function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":469,"deletions":152},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"7ab11d218d83839a1fd024a9671dba5c4bddee5c","isMergeCommit":false,"messageTitle":"commit to master branch","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":524,"deletions":185}}},{"hash":"5052dfb373ff016240c0afe1c7358afaab2fab15","isMergeCommit":false,"messageTitle":"commit for merging","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3}}}]},{"date":"2023-09-03","commitResults":[{"hash":"7c358f4e8798e01711bc9cf95037cf08b0efbea0","isMergeCommit":false,"messageTitle":"modify deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":7}}},{"hash":"cc807ca1eec66cb59645ae201e73ca56adcdf950","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/functional/DukeException.java\n#\tsrc/main/java/tasks/Deadline.java\n","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"53c33a79cf301568b4eb711b61754714c43a6935","isMergeCommit":false,"messageTitle":"add dateTime to Deadline","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":35,"deletions":26}}},{"hash":"564adc85b4a6c8fc14b030514677230bccb8430b","isMergeCommit":false,"messageTitle":"progress on master branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"ce4a37ee8457e8544613df9e554b202322b2f595","isMergeCommit":false,"messageTitle":"add dateTime for Event","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":1,"deletions":0}}},{"hash":"202458c017a5c5c796bf9541091a89e9031d239f","isMergeCommit":false,"messageTitle":"add event for master branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"b44382550c0d92e385a2ab57bfa904260dd33290","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-8\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/tasks/Deadline.java\n","tags":["Level-8","A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"7fb0af4622257aa3108a34704429f1ce8a3426de","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"s-peiran":{"java":629,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":20}},"authorContributionVariance":{"s-peiran":94714.69},"authorDisplayNameMap":{"s-peiran":"CS2103-W14-2 SHE ..IRAN"}} +{"authorDailyContributionsMap":{"s-peiran":[{"date":"2023-08-24","commitResults":[{"hash":"2a81b3acdca1e53bfa4b6cf4c7e29bcc6c35edb5","isMergeCommit":false,"messageTitle":"level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}}]},{"date":"2023-08-25","commitResults":[{"hash":"b97016054aea72048996b27adeff5460498ff16c","isMergeCommit":false,"messageTitle":"level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":5}}},{"hash":"1504d883e4cbdd0baf486ff1870a6faec82419ca","isMergeCommit":false,"messageTitle":"update Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"432db48365c25684aa502bc346fe29599ea9b97a","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":3}}}]},{"date":"2023-08-26","commitResults":[{"hash":"895c9d3e235330490632f6a36d1b0f11d94b61f7","isMergeCommit":false,"messageTitle":"complete Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":186,"deletions":31}}},{"hash":"319ddeeefe51092bb9aa3df723c4dfd4d24042f8","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":0,"deletions":15}}}]},{"date":"2023-08-27","commitResults":[{"hash":"87085f56dda0b02cc2e6fa30dd3e98da9558ce23","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":39,"deletions":3}}},{"hash":"3b626375b08aafc8236fab022113516b02cd9a45","isMergeCommit":false,"messageTitle":"Level-6 with Exception enchancements","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":35,"deletions":15}}}]},{"date":"2023-09-02","commitResults":[{"hash":"384d5b00b18bafa53d7f3fb77a032f4b4dc9861c","isMergeCommit":false,"messageTitle":"add save function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":469,"deletions":152},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"7ab11d218d83839a1fd024a9671dba5c4bddee5c","isMergeCommit":false,"messageTitle":"commit to master branch","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":524,"deletions":185}}},{"hash":"5052dfb373ff016240c0afe1c7358afaab2fab15","isMergeCommit":false,"messageTitle":"commit for merging","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3}}}]},{"date":"2023-09-03","commitResults":[{"hash":"7c358f4e8798e01711bc9cf95037cf08b0efbea0","isMergeCommit":false,"messageTitle":"modify deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":7}}},{"hash":"cc807ca1eec66cb59645ae201e73ca56adcdf950","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/functional/DukeException.java\n#\tsrc/main/java/tasks/Deadline.java\n","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"53c33a79cf301568b4eb711b61754714c43a6935","isMergeCommit":false,"messageTitle":"add dateTime to Deadline","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":35,"deletions":26}}},{"hash":"564adc85b4a6c8fc14b030514677230bccb8430b","isMergeCommit":false,"messageTitle":"progress on master branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"ce4a37ee8457e8544613df9e554b202322b2f595","isMergeCommit":false,"messageTitle":"add dateTime for Event","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":1,"deletions":0}}},{"hash":"202458c017a5c5c796bf9541091a89e9031d239f","isMergeCommit":false,"messageTitle":"add event for master branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"b44382550c0d92e385a2ab57bfa904260dd33290","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-8\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/tasks/Deadline.java\n","tags":["Level-8","A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"7fb0af4622257aa3108a34704429f1ce8a3426de","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"9a85c2d64cca738f442f8ac4e0e60811079a62b1","isMergeCommit":false,"messageTitle":"test with JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":1,"deletions":0},"java":{"insertions":20,"deletions":0}}},{"hash":"f2f9c11da3b444c9faee18b4f3444b811c63ca85","isMergeCommit":false,"messageTitle":"work on A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"s-peiran":{"java":649,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":2,"txt":21}},"authorContributionVariance":{"s-peiran":86015.45},"authorDisplayNameMap":{"s-peiran":"CS2103-W14-2 SHE ..IRAN"}} diff --git a/siqirua_ip_master/authorship.json b/siqirua_ip_master/authorship.json index 893acf7d..6784e4a1 100644 --- a/siqirua_ip_master/authorship.json +++ b/siqirua_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"/*","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":" * This file was generated by the Gradle \u0027init\u0027 task.","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":" * This is a general purpose Gradle build.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":" * To learn more about Gradle by exploring our Samples at https://docs.gradle.org/8.2/samples","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":" * This project uses @Incubating APIs which are subject to change.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"plugins {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":"dependencies {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" testImplementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":"test {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":"shadowJar {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" archiveFileName \u003d \u0027rua.jar\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":"application {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" mainClass.set(\"rua/Rua\")","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":"run {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" standardInput \u003d System.in","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":"//compile group: \u0027com.joestelmach\u0027, name: \u0027natty\u0027, version: \u00270.6\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":"repositories {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" mavenCentral()","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" maven { url \u0027https://oss.sonatype.org/content/repositories/snapshots/\u0027 }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":48}},{"path":"src/main/data/Rua_copy.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"public class Rua_copy {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" String greeting \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" \" Hello! I\u0027m Rua, your ChatBot\\n\" +","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" \" What can I do for you?\\n\" +","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" \"____________________________________________________________\\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" String goodbye\u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" \"____________________________________________________________\\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" String saveDir \u003d \"src/main/data/\";","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" String saveAddress \u003d \"src/main/data/tasks.txt\";//Note that class path is pointing to the ip directory","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" TaskList taskList \u003d new TaskList(saveAddress);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" System.out.println(greeting);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" while (!command.equals(\"bye\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" System.out.println(\"____________________________________________________________\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" System.out.println(taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" String[] arr \u003d command.split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" if (arr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"todo\");","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" Todo newTodo \u003d new Todo(arr[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" taskList \u003d taskList.add(newTodo);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" String[] arr \u003d command.split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" if (arr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" String[] info \u003d arr[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" if (info.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" Deadline newDeadline \u003d new Deadline(info[0], LocalDate.parse(info[1]));","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" taskList \u003d taskList.add(newDeadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" String[] arr \u003d command.split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" if (arr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"event\");","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" String[] info \u003d arr[1].split(\" /from \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" if (info.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" String[] time \u003d info[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" if (time.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" Event newEvent \u003d new Event(info[0], LocalDate.parse(time[0]), LocalDate.parse(time[1]));","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" taskList \u003d taskList.add(newEvent);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"siqirua"},"content":" String indexStr \u003d command.replaceAll(\"[^0-9]\", \"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"siqirua"},"content":" int index \u003d Integer.parseInt(indexStr);","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"siqirua"},"content":" taskList \u003d taskList.mark(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"siqirua"},"content":" } else if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"siqirua"},"content":" String indexStr \u003d command.replaceAll(\"[^0-9]\", \"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"siqirua"},"content":" int index \u003d Integer.parseInt(indexStr);","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"siqirua"},"content":" taskList \u003d taskList.unmark(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"siqirua"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"siqirua"},"content":" String indexStr \u003d command.replaceAll(\"[^0-9]\", \"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"siqirua"},"content":" int index \u003d Integer.parseInt(indexStr);","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"siqirua"},"content":" taskList \u003d taskList.delete(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"siqirua"},"content":" } else if (command.startsWith(\"date\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"siqirua"},"content":" String[] arr \u003d command.split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"siqirua"},"content":" if (arr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"date search\");","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"siqirua"},"content":" System.out.println(taskList.searchByDate(LocalDate.parse(arr[1])));","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"siqirua"},"content":" else {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"siqirua"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"siqirua"},"content":" catch (FileNotFoundException exp) {","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"siqirua"},"content":" System.out.println(\"Target file not found. Do you want to create it now? Please type yes or no\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"siqirua"},"content":" String create \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"siqirua"},"content":" while (!create.equals(\"yes\") \u0026\u0026 !create.equals(\"no\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"siqirua"},"content":" System.out.println(\"Incorrect input. Please type yes or no\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"siqirua"},"content":" if (create.equals(\"yes\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"siqirua"},"content":" File fileCreator \u003d new File(saveDir);","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"siqirua"},"content":" fileCreator.mkdir();","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"siqirua"},"content":" System.out.println(\"File successfully created. Progress saved.\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"siqirua"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"siqirua"},"content":" taskList.save();","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"siqirua"},"content":" catch (IOException ioExp) {","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"siqirua"},"content":" System.out.println(\"Some error occurs and progress is not saved.\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"siqirua"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"siqirua"},"content":" catch (java.time.format.DateTimeParseException dateFormatExp) {","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"siqirua"},"content":" System.out.println(\"Date format incorrect. Please type the date in the format yyyy-mm-dd and try again\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"siqirua"},"content":" catch (Exception exp) {","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"siqirua"},"content":" System.out.println(exp);","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"siqirua"},"content":" System.out.println(\"____________________________________________________________\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"siqirua"},"content":" command \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"siqirua"},"content":" System.out.println(goodbye);","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":119}},{"path":"src/main/java/rua/Rua.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"public class Rua {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" * Constructs a chatbot Rua object.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" * @param filePath The path to the file which stores the tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" public Rua(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\"Load successfully. Now you have \" + tasks.getTasks().size()","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" + \" tasks in the list.\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" ui.showMessage(tasks.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" new Rua(\"src/main/data/tasks.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" * Runs the chatbot.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" public void run() {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" ui.showLine(); // show the divider line (\"_______\")","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" tasks \u003d c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" ui.showError(e.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" } finally {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":58}},{"path":"src/main/java/rua/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"public class AddCommand implements Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" private final Task task;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" * @return The exit status after this execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof AddCommand)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" AddCommand c \u003d (AddCommand) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" return c.task.equals(this.task);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" * Adds the task into a TaskList and returns the updated TaskList after the execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" * @param ui A UI to show messages to the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" * @param storage A Storage to save and load tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" * @return The updated TaskList after adding the Task.","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" public TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\" Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" TaskList newTasks \u003d tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\" \" + task + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\"Now you have \" + tasks.getTasks().size() + \" tasks in the list.\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" return newTasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":64}},{"path":"src/main/java/rua/command/ClearCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"public class ClearCommand implements Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" * @return The exit status after this execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" * Clears the current TaskList and return an empty TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" * @param ui A UI to show messages to the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" * @param storage A Storage to save and load tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" * @return The empty TaskList after execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" public TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\"Task list cleared.\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" return o instanceof ClearCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":47}},{"path":"src/main/java/rua/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"public interface Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" * Runs the corresponding command and returns the updated TaskList after the execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" * @param ui A UI to show messages to the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" * @param storage A Storage to save and load tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" * @return The updated TaskList after execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" * Returns true for ExitCommand and false for all other cases.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" * @return The exit status after this execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" boolean isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" * Compares the command with other objects and return true if they are the same Deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" boolean equals(Object o);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":33}},{"path":"src/main/java/rua/command/DateSearchCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"public class DateSearchCommand implements Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" private final LocalDate date;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" public DateSearchCommand(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" * @return The exit status after this execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" * Prints the tasks that happens on the given date and return the current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" * @param ui A UI to show messages to the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" * @param storage A Storage to save and load tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" * @return Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" public TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\" These are events happening on that day\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" String result \u003d tasks.searchByDate(date);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" ui.showMessage(result);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof DateSearchCommand)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" DateSearchCommand c \u003d (DateSearchCommand) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" return c.date.isEqual(this.date);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":62}},{"path":"src/main/java/rua/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" private final int index;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" * @return The exit status after this execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" * Removes the task at a given index and return the updated TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" * @param ui A UI to show messages to the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" * @param storage A Storage to save and load tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" * @return The TaskList after removing the Task.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" public TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\" Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\" \" + tasks.getTasks().get(index - 1) + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" TaskList newTasks \u003d tasks.delete(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\"Now you have \" + tasks.getTasks().size()","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" + \" tasks in the list.\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" return newTasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof DeleteCommand)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" DeleteCommand c \u003d (DeleteCommand) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" return c.index \u003d\u003d this.index;","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":61}},{"path":"src/main/java/rua/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"public class ExitCommand implements Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" * @return The exit status after this execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" * Displays goodbye message.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" * @param ui A UI to show messages to the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" * @param storage A Storage to save and load tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" * @return Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" public TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" ui.showGoodbye();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" return o instanceof ExitCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":47}},{"path":"src/main/java/rua/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" * @return The exit status after this execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" * Lists out all the Task objects in the TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" * @param ui A UI to show messages to the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" * @param storage A Storage to save and load tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" * @return Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" public TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" ui.showMessage(tasks.toString() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" return o instanceof ListCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":46}},{"path":"src/main/java/rua/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"public class MarkCommand implements Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" private final Boolean marked;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" private final int index;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" public MarkCommand(int index, Boolean marked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" this.marked \u003d marked;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" * @return The exit status after this execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" * Sets a Task at given index to be marked/unmarked and returns the updated TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" * @param ui A UI to show messages to the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" * @param storage A Storage to save and load tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" * @return The updated TaskList after marking/unmarking the Task.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" public TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" if (marked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\"Nice! I\u0027ve marked this task as done:\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\"OK, I\u0027ve marked this task as not done yet:\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" TaskList newTasks \u003d marked ? tasks.mark(index) : tasks.unmark(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\" \" + tasks.getTasks().get(index - 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" return newTasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof MarkCommand)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" MarkCommand c \u003d (MarkCommand) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" return c.marked.equals(this.marked) \u0026\u0026 c.index \u003d\u003d this.index;","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":65}},{"path":"src/main/java/rua/command/SearchCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"public class SearchCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" private final String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" public SearchCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" public TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\" Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" String result \u003d tasks.search(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" ui.showMessage(result);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof SearchCommand)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" SearchCommand c \u003d (SearchCommand) o;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" return c.keyword.equals(this.keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"siqirua":40}},{"path":"src/main/java/rua/common/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.common;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"import rua.command.ClearCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"import rua.command.DateSearchCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"import rua.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"import rua.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"import rua.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":"import rua.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":"import rua.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":"import rua.command.SearchCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":"import rua.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":"import rua.task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":"import rua.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":"import rua.exception.InvalidCommandException;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":"import rua.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" * Translates the input message into a Command object.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" * @param message The String input from the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" * @return The corresponding Command object.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" * @throws EmptyDescriptionException if there is no description for the string representing the input task.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" * @throws InvalidCommandException if the message is not supported.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" public static Command parse(String message) throws EmptyDescriptionException, InvalidCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" String[] inputs \u003d message.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" String command \u003d inputs[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" Command output;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" switch (command) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" case \"todo\":","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"Todo\");","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" Todo newTodo \u003d new Todo(inputs[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" output \u003d new AddCommand(newTodo);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"Deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" String[] infos \u003d inputs[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" if (infos.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"Deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" Deadline newDdl \u003d new Deadline(infos[0], LocalDate.parse(infos[1]));","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" output \u003d new AddCommand(newDdl);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" case \"event\":","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"Event\");","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" String[] infosEvent \u003d inputs[1].split(\" /from \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" if (infosEvent.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"Event\");","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" String[] durations \u003d infosEvent[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" if (durations.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"Event\");","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"siqirua"},"content":" Event newEvent \u003d new Event(infosEvent[0], LocalDate.parse(durations[0]), LocalDate.parse(durations[1]));","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"siqirua"},"content":" output \u003d new AddCommand(newEvent);","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"siqirua"},"content":" case \"bye\":","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"siqirua"},"content":" output \u003d new ExitCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"siqirua"},"content":" case \"list\":","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"siqirua"},"content":" output \u003d new ListCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"siqirua"},"content":" case \"clear\":","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"siqirua"},"content":" output \u003d new ClearCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"siqirua"},"content":" case \"mark\":","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"siqirua"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"mark\");","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"siqirua"},"content":" int indexMark \u003d Integer.parseInt(inputs[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"siqirua"},"content":" output \u003d new MarkCommand(indexMark, true);","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"siqirua"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"siqirua"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"unmark\");","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"siqirua"},"content":" int indexUnmark \u003d Integer.parseInt(inputs[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"siqirua"},"content":" output \u003d new MarkCommand(indexUnmark, false);","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"siqirua"},"content":" case \"delete\":","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"siqirua"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"delete\");","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"siqirua"},"content":" int indexDelete \u003d Integer.parseInt(inputs[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"siqirua"},"content":" output \u003d new DeleteCommand(indexDelete);","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"siqirua"},"content":" case \"date\":","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"siqirua"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"date search\");","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"siqirua"},"content":" output \u003d new DateSearchCommand(LocalDate.parse(inputs[1]));","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"siqirua"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"siqirua"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"keyword search\");","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"siqirua"},"content":" output \u003d new SearchCommand(inputs[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"siqirua"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"siqirua"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"siqirua"},"content":" return output;","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":116}},{"path":"src/main/java/rua/common/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.common;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":"import rua.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":"import rua.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":"import rua.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":"import rua.exception.InvalidTypeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":"import rua.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" private final String filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" * Constructs a Storage object which reads and writes to a file located at the filePath.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" * @param filePath The path of the file to be loaded and saved.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" * Returns a Task corresponding to a given String.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" * @param str A String that represents a Task object.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" * @return The corresponding Task object.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" * @throws InvalidTypeException if the task type is not supported.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" static Task stringToTask(String str) throws InvalidTypeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" String[] features \u003d str.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" Task output;","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" DateTimeFormatter dateFormat \u003d DateTimeFormatter.ofPattern(\"MM dd yyyy\");","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" switch (features[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" output \u003d new Todo(features[2], features[1].equals(\"1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" output \u003d new Deadline(features[2], LocalDate.parse(features[3], dateFormat),","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" features[1].equals(\"1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" output \u003d new Event(features[2], LocalDate.parse(features[3], dateFormat),","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" LocalDate.parse(features[4], dateFormat), features[1].equals(\"1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" output \u003d null;","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" throw new InvalidTypeException(features[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" return output;","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" * Returns a Task corresponding to a given String.","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" * @param task A Task object that needs to be translated into a String.","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":" * @return The corresponding String.","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"siqirua"},"content":" * @throws InvalidTypeException if the task type is not supported.","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"siqirua"},"content":" static String taskToString(Task task) throws InvalidTypeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"siqirua"},"content":" String output \u003d task.getType() + \" | \" + (task.isMarked() ? 1 : 0)","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"siqirua"},"content":" + \" | \" + task.getDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"siqirua"},"content":" switch (task.getType()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"siqirua"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"siqirua"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"siqirua"},"content":" output +\u003d \" | \" + ((Deadline) task).getDue();","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"siqirua"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"siqirua"},"content":" output +\u003d \" | \" + ((Event) task).getFrom() + \" | \" + ((Event) task).getTo();","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"siqirua"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"siqirua"},"content":" output \u003d null;","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"siqirua"},"content":" throw new InvalidTypeException(task.getType());","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"siqirua"},"content":" return output;","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"siqirua"},"content":" * Returns the ArrayList of tasks represented by the input String located in the filePath.","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"siqirua"},"content":" * @return The corresponding ArrayList of Task objects.","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"siqirua"},"content":" * @throws InvalidTypeException if the task type is not supported.","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"siqirua"},"content":" * @throws FileNotFoundException if the filePath is invalid.","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"siqirua"},"content":" public ArrayList\u003cTask\u003e load() throws InvalidTypeException, FileNotFoundException {","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"siqirua"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"siqirua"},"content":" Scanner sc \u003d new Scanner(f);","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"siqirua"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"siqirua"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"siqirua"},"content":" tasks.add(stringToTask(sc.nextLine()));","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"siqirua"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"siqirua"},"content":" * Saves the string representing a list of tasks at the filePath.","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"siqirua"},"content":" * @param tasks A TaskList object that needs to be translated into String and saved.","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"siqirua"},"content":" * @throws InvalidTypeException if the task type is not supported.","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"siqirua"},"content":" * @throws IOException if the filePath is invalid.","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"siqirua"},"content":" public void save(TaskList tasks) throws InvalidTypeException, IOException {","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"siqirua"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"siqirua"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"siqirua"},"content":" String saveTxt \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"siqirua"},"content":" ArrayList\u003cTask\u003e tasksList \u003d tasks.getTasks();","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"siqirua"},"content":" for (int i \u003d 0; i \u003c tasksList.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"siqirua"},"content":" saveTxt +\u003d taskToString(tasksList.get(i)) + \"\\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"siqirua"},"content":" fw.write(saveTxt);","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"siqirua"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"siqirua"},"content":" } catch (FileNotFoundException exp) {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"siqirua"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"siqirua"},"content":" System.out.println(\"Target file not found. Do you want to create it now? Please type yes or no\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"siqirua"},"content":" String create \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"siqirua"},"content":" while (!create.equals(\"yes\") \u0026\u0026 !create.equals(\"no\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"siqirua"},"content":" System.out.println(\"Incorrect input. Please type yes or no\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"siqirua"},"content":" if (create.equals(\"yes\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"siqirua"},"content":" int index \u003d filePath.lastIndexOf(\"/\");","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"siqirua"},"content":" String saveDir \u003d filePath.substring(0, index);","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"siqirua"},"content":" File fileCreator \u003d new File(saveDir);","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"siqirua"},"content":" fileCreator.mkdir();","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"siqirua"},"content":" System.out.println(\"File successfully created. Progress saved.\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"siqirua"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"siqirua"},"content":" save(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"siqirua"},"content":" } catch (IOException ioExp) {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"siqirua"},"content":" System.out.println(\"Some error occurs and progress is not saved.\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":142}},{"path":"src/main/java/rua/common/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.common;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" private final Scanner in;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" private final PrintStream out;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" public Ui() {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" public Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" this.out \u003d out;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" public void showLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" String greeting \u003d \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" + \" Hello! I\u0027m Rua, your ChatBot\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" + \" What can I do for you?\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" + \"____________________________________________________________\";","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" out.println(greeting);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" public void showGoodbye() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" String goodbye \u003d \" Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" out.println(goodbye);","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" public void showMessage(String str) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" out.println(str);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" out.println(\"You get an error: \" + errorMessage);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" showError(\"Given tasklist cannot be loaded. Now creating a new tasklist instead.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" return in.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":52}},{"path":"src/main/java/rua/exception/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":" private final String type;","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":" public EmptyDescriptionException(String type) {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" super();","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" * Returns the error message of this exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" * @return The error message of this exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" return (\" OOPS!!! The description of a \" + type + \" cannot be empty.\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":19}},{"path":"src/main/java/rua/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":" * Returns the error message of this exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" * @return The error message of this exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" return (\" OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":12}},{"path":"src/main/java/rua/exception/InvalidTypeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"public class InvalidTypeException extends Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":" private final String type;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":" public InvalidTypeException(String type) {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" * Returns the error message of this exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" * @return The error message of this exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" return (\" OOPS!!! I\u0027m sorry, but type \" + type + \" is not supported :-(\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":18}},{"path":"src/main/java/rua/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" private final LocalDate due;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" * Constructs a Deadline object (assuming unmarked).","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" * @param description A String to describe the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" * @param due A LocalDate to represent the due date of the deadline.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" public Deadline(String description, LocalDate due) {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" this.due \u003d due;","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" * Constructs a Deadline object.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" * @param description A String to describe the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" * @param due A LocalDate to represent the due date of the deadline.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" * @param isMarked A boolean to indicate whether it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" public Deadline(String description, LocalDate due, Boolean isMarked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" super(description, isMarked);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" this.due \u003d due;","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" * It returns \"D\" for Deadline type.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" * @return The task type (\"D\" for Deadline type).","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" public String getType() {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" return \"D\";","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" * @return A new Deadline task object with the same description but it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" public Deadline setMarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" return new Deadline(this.description, this.due, true);","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" * @return A new Deadline task object with the same description but it is unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" public Deadline setUnmarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" return new Deadline(this.description, this.due, false);","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"siqirua"},"content":" * @param date A given date which we will check whether this task happens on that date.","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"siqirua"},"content":" * @return A boolean to indicate whether it happens on that day.","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"siqirua"},"content":" public Boolean isHappeningOnThatDate(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"siqirua"},"content":" return date.isEqual(due);","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"siqirua"},"content":" * Returns the due date of this event.","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"siqirua"},"content":" * @return The due date of this event.","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"siqirua"},"content":" public String getDue() {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"siqirua"},"content":" return due.format(DateTimeFormatter.ofPattern(\"MM dd yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"siqirua"},"content":" * Compares the task with other objects and return true if they are the same Deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof Deadline)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"siqirua"},"content":" Deadline c \u003d (Deadline) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"siqirua"},"content":" // Compare the data members and return accordingly","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"siqirua"},"content":" return c.description.equals(this.description)","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"siqirua"},"content":" \u0026\u0026 c.isMarked.equals(this.isMarked)","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"siqirua"},"content":" \u0026\u0026 c.due.isEqual(this.due);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"siqirua"},"content":" * Returns a string to represent this Deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"siqirua"},"content":" * @return A string representing this Deadline task in the format:","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"siqirua"},"content":" * [D][ marked indicator ] description.","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":113,"author":{"gitId":"siqirua"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":114,"author":{"gitId":"siqirua"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"siqirua"},"content":" + due.format(DateTimeFormatter.ofPattern(\"MM dd yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":117,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":117}},{"path":"src/main/java/rua/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" private final LocalDate from;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" private final LocalDate to;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" * Constructs an Event object (assuming unmarked).","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" * @param description A String to describe the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" * @param from A LocalDate to represent the event starting time.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" * @param to A LocalDate to represent the event ending time.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" public Event(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" * Constructs an Event object.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" * @param description A String to describe the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" * @param from A LocalDate to represent the event starting time.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" * @param to A LocalDate to represent the event ending time.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" * @param isMarked A boolean to indicate whether it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" public Event(String description, LocalDate from, LocalDate to, Boolean isMarked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" super(description, isMarked);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" * It returns \"E\" for Event type.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" * @return The task type (\"E\" for Event type).","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" public String getType() {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" return \"E\";","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" * Returns the starting time of this event.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" * @return The starting time of this event.","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" public String getFrom() {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" return this.from.format(DateTimeFormatter.ofPattern(\"MM dd yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" * Returns the ending time of this event.","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" * @return The ending time of this event.","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" public String getTo() {","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" return this.to.format(DateTimeFormatter.ofPattern(\"MM dd yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"siqirua"},"content":" * @return A new Event task object with the same description but it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"siqirua"},"content":" public Event setMarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"siqirua"},"content":" return new Event(this.description, this.from, this.to, true);","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"siqirua"},"content":" * @return A new Event task object with the same description but it is unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":82,"author":{"gitId":"siqirua"},"content":" public Event setUnmarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"siqirua"},"content":" return new Event(this.description, this.from, this.to, false);","lastModifiedDate":"2023-08-22"},{"lineNumber":84,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"siqirua"},"content":" * @param date A given date which we will check whether this task happens on that date.","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"siqirua"},"content":" * @return A boolean to indicate whether it happens on that day.","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"siqirua"},"content":" public Boolean isHappeningOnThatDate(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"siqirua"},"content":" return (date.isEqual(from) || date.isAfter(from))","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"siqirua"},"content":" \u0026\u0026 (date.isEqual(to) || date.isBefore(to));","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"siqirua"},"content":" * Compares the task with other objects and return true if they are the same Event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof Event)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"siqirua"},"content":" Event c \u003d (Event) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"siqirua"},"content":" // Compare the data members and return accordingly","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"siqirua"},"content":" return c.description.equals(this.description)","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"siqirua"},"content":" \u0026\u0026 c.isMarked.equals(this.isMarked)","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"siqirua"},"content":" \u0026\u0026 c.from.isEqual(this.from)","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"siqirua"},"content":" \u0026\u0026 c.to.isEqual(this.to);","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"siqirua"},"content":" * Returns a string to represent this Event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"siqirua"},"content":" * @return A string representing this Event task in the format:","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"siqirua"},"content":" * [E][ marked indicator ] description.","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":129,"author":{"gitId":"siqirua"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":130,"author":{"gitId":"siqirua"},"content":" return \"[E]\" + super.toString() + \" (from: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"siqirua"},"content":" + this.from.format(DateTimeFormatter.ofPattern(\"MM dd yyyy\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"siqirua"},"content":" + \" to: \" + this.to.format(DateTimeFormatter.ofPattern(\"MM dd yyyy\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"siqirua"},"content":" + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":135,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":135}},{"path":"src/main/java/rua/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":" * Represents a Task. A Task object corresponds to","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" * a task represented by a String description and a boolean","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" * to indicate whether it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" protected final String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" protected final Boolean isMarked;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" * Constructs a Task object.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" * @param description A String to describe the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" * @param marked A boolean to indicate whether it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" Task(String description, Boolean marked) {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" this.isMarked \u003d marked;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" * Constructs a Task object (assuming unmarked).","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" * @param description A String to describe the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" this.isMarked \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" * Returns the type of the Task, The type is None by default.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" * @return The task type (None here by default).","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" public String getType() {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" return \"None\";","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" * Returns the description of the Task.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" * @return The task description.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" return this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" * Returns the marked/unmarked status of the Task.","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" * @return A boolean to indicate whether it is marked or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" public Boolean isMarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" return this.isMarked;","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" * Checks whether a task happens on the given date.","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":" * @param date A given date which we will check whether this task happens on that date.","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"siqirua"},"content":" * @return A boolean to indicate whether it happens on that day (False by default if not applicable).","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"siqirua"},"content":" public Boolean isHappeningOnThatDate(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"siqirua"},"content":" * Sets this task to be marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"siqirua"},"content":" * @return A new Task object with the same description but it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"siqirua"},"content":" public Task setMarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"siqirua"},"content":" return new Task(this.description, true);","lastModifiedDate":"2023-08-22"},{"lineNumber":79,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":81,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"siqirua"},"content":" * Sets this task to be unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"siqirua"},"content":" * @return A new Task object with the same description but it is unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"siqirua"},"content":" public Task setUnmarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"siqirua"},"content":" return new Task(this.description, false);","lastModifiedDate":"2023-08-22"},{"lineNumber":88,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":89,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"siqirua"},"content":" * Compares the task with other objects and return true if they are the same task.","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof Task)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"siqirua"},"content":" Task c \u003d (Task) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"siqirua"},"content":" // Compare the data members and return accordingly","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"siqirua"},"content":" return c.description.equals(this.description)","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"siqirua"},"content":" \u0026\u0026 c.isMarked.equals(this.isMarked);","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"siqirua"},"content":" * Returns a string to represent this task.","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"siqirua"},"content":" * @return A string representing this task in the format:","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"siqirua"},"content":" * [ marked indicator ] description.","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"siqirua"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":120,"author":{"gitId":"siqirua"},"content":" return \"[\" + (this.isMarked ? \"X\" : \" \") + \"] \" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":122,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":122}},{"path":"src/main/java/rua/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"public class TaskList {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" * Constructs a TaskList object (with no tasks inside by default).","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" * Constructs a Task object.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" * @param tasks An ArrayList of Task to represent the existing tasks in the TaskList or","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" * tasks that will be added into the TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" * Returns the ArrayList of Task objects in the TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" * @return The ArrayList of Task objects in the TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" return this.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" * Returns a new TaskList object with updated list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" * @param tasks An ArrayList of Task objects in the new TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" * @return The new TaskList object with updated list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" private TaskList update(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" return new TaskList(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" * Adds a Task object to the TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" * @param task A Task object that will be added into the TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" * @return The new TaskList object with the new Task.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" public TaskList add(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" ArrayList\u003cTask\u003e currentTasks \u003d this.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" currentTasks.add(task);","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" return update(currentTasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" * Deletes a Task object with a given index from the TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" * @param index An int index of the Task that will be removed.","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" * @return The new TaskList object after removing the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" public TaskList delete(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" ArrayList\u003cTask\u003e currentTasks \u003d this.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":" currentTasks.remove(index - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"siqirua"},"content":" return update(currentTasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"siqirua"},"content":" * Sets a Task object with a given index in the TaskList to be marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"siqirua"},"content":" * @param index An int index of the Task that will be marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"siqirua"},"content":" * @return The new TaskList object after marking the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"siqirua"},"content":" public TaskList mark(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"siqirua"},"content":" ArrayList\u003cTask\u003e currentTasks \u003d this.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":77,"author":{"gitId":"siqirua"},"content":" Task target \u003d currentTasks.get(index - 1);","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"siqirua"},"content":" currentTasks.set(index - 1, target.setMarked());","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"siqirua"},"content":" return update(currentTasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":81,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":82,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"siqirua"},"content":" * Sets a Task object with a given index in the TaskList to be unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"siqirua"},"content":" * @param index An int index of the Task that will be unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"siqirua"},"content":" * @return The new TaskList object after unmarking the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"siqirua"},"content":" public TaskList unmark(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"siqirua"},"content":" ArrayList\u003cTask\u003e currentTasks \u003d this.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":90,"author":{"gitId":"siqirua"},"content":" Task target \u003d currentTasks.get(index - 1);","lastModifiedDate":"2023-08-22"},{"lineNumber":91,"author":{"gitId":"siqirua"},"content":" currentTasks.set(index - 1, target.setUnmarked());","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"siqirua"},"content":" return update(currentTasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"siqirua"},"content":" * Returns a String with information of all tasks happening on a given date.","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"siqirua"},"content":" * @param date A date that will be searched.","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"siqirua"},"content":" * @return A String with information of all tasks happening on a given date.","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"siqirua"},"content":" public String searchByDate(LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"siqirua"},"content":" String res \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"siqirua"},"content":" int index \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"siqirua"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"siqirua"},"content":" if (tasks.get(i).isHappeningOnThatDate(date)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"siqirua"},"content":" res \u003d res + index","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"siqirua"},"content":" + \": \" + tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"siqirua"},"content":" index +\u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"siqirua"},"content":" return res;","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"siqirua"},"content":" public String search(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"siqirua"},"content":" String res\u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"siqirua"},"content":" int index \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"siqirua"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"siqirua"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"siqirua"},"content":" res \u003d res + index","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"siqirua"},"content":" + \": \" + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"siqirua"},"content":" index +\u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"siqirua"},"content":" return res;","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"siqirua"},"content":" * Returns a string to represent this TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"siqirua"},"content":" * @return A string to represent this TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":133,"author":{"gitId":"siqirua"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":134,"author":{"gitId":"siqirua"},"content":" String result \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-08-22"},{"lineNumber":135,"author":{"gitId":"siqirua"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-22"},{"lineNumber":136,"author":{"gitId":"siqirua"},"content":" result \u003d result + (i + 1) + \": \" + tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":138,"author":{"gitId":"siqirua"},"content":" return result;","lastModifiedDate":"2023-08-22"},{"lineNumber":139,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":140,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":140}},{"path":"src/main/java/rua/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":" * Constructs a Todo object (assuming unmarked).","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" * @param description A String to describe the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" * Constructs a Todo task object.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" * @param description A String to describe the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" * @param isMarked A boolean to indicate whether it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" public Todo(String description, Boolean isMarked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" super(description, isMarked);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" * It returns \"T\" for Todo type.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" * @return The task type (\"T\" for Todo type).","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" public String getType() {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" return \"T\";","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" * @return A new Todo task object with the same description but it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" public Todo setMarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" return new Todo(this.description, true);","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" * @return A new Todo task object with the same description but it is unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" public Todo setUnmarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" return new Todo(this.description, false);","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" * Compares the task with other objects and return true if they are the same Todo task.","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof Todo)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"siqirua"},"content":" Todo c \u003d (Todo) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"siqirua"},"content":" // Compare the data members and return accordingly","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"siqirua"},"content":" return c.description.equals(this.description)","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"siqirua"},"content":" \u0026\u0026 c.isMarked.equals(this.isMarked);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"siqirua"},"content":" * Returns a string to represent this Todo task.","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"siqirua"},"content":" * @return A string representing this Todo task in the format:","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"siqirua"},"content":" * [T][ marked indicator ] description.","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":83,"author":{"gitId":"siqirua"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":84,"author":{"gitId":"siqirua"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":86}},{"path":"src/test/java/rua/common/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.common;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"import rua.command.AddCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":"import rua.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":"import rua.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":"import rua.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":"import rua.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" public void parseStringTest() throws Exception {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" Command expectedAddTodo \u003d new AddCommand(new Todo(\"play\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" Command expectedAddDeadline \u003d new AddCommand(new Deadline(\"quiz\", LocalDate.parse(\"2020-12-12\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" Command expectedAddEvent \u003d new AddCommand(new Event(\"project\", LocalDate.parse(\"2020-12-10\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" LocalDate.parse(\"2020-12-31\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" assertEquals(expectedAddTodo, Parser.parse(\"todo play\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" assertEquals(expectedAddDeadline, Parser.parse(\"deadline quiz /by 2020-12-12\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" assertEquals(expectedAddEvent, Parser.parse(\"event project /from 2020-12-10 /to 2020-12-31\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" public void parseStringTestExceptionThrown() {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" assertEquals(null, Parser.parse(\"todo\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" assertEquals(\" OOPS!!! The description of a Todo cannot be empty.\\n\", e.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":37}},{"path":"src/test/java/rua/common/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.common;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"import rua.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"import rua.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" public void taskToStringTest() throws Exception {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" String expected1 \u003d \"T | 1 | play\";","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" String expected2 \u003d \"D | 0 | test | 11 12 2023\";","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" assertEquals(expected1, Storage.taskToString(new Todo(\"play\", true)));","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" assertEquals(expected2, Storage.taskToString(new Deadline(\"test\", LocalDate.parse(\"2023-11-12\"))));","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" public void stringToTaskTest() throws Exception {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" Todo expected1 \u003d new Todo(\"play\", true);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" Deadline expected2 \u003d new Deadline(\"test\", LocalDate.parse(\"2023-11-12\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" assertEquals(expected1, Storage.stringToTask(\"T | 1 | play\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" assertEquals(expected2, Storage.stringToTask(\"D | 0 | test | 11 12 2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":30}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"todo homework","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"deadline presentation /by Thursday","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"event welcome tea /from next Friday /to next Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":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":"siqirua"},"content":"java -classpath ..\\bin Rua \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-22"},{"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":{"siqirua":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"# DukePro","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"\u003e “Your mind is for having ideas, not holding them.” – David Allen ([source](https://dansilvestre.com/productivity-quotes/))","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"DukePro frees your mind of having to remember things you need to do. It\u0027s,","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"- text-based","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"- easy to learn","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"- ~~FAST~~ SUPER FAST to use","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"All you need to do is,","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":"1. download it from here.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":"2. double-click it.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":"3. add your tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":"4. let it manage your tasks for you 😉","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":"And it is **FREE**!","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":"Features:","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":"- [X] Managing tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":"- [ ] Managing deadlines (coming soon)","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":"- [ ] Reminders (coming soon)","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":"If you Java programmer, you can use it to practice Java too. Here\u0027s the `main` method:","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":"public class Main {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" Application.launch(MainApp.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":"Note that this md is used merely for the intention of practicing GFMD and it does not represent the actual product.","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"siqirua":27,"-":6}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"/*","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":" * This file was generated by the Gradle \u0027init\u0027 task.","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":" * This is a general purpose Gradle build.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":" * To learn more about Gradle by exploring our Samples at https://docs.gradle.org/8.2/samples","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":" * This project uses @Incubating APIs which are subject to change.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"plugins {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":"dependencies {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" testImplementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":"test {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":"shadowJar {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" archiveFileName \u003d \u0027rua.jar\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":"application {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" mainClass.set(\"rua/Rua\")","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":"run {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" standardInput \u003d System.in","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":"//compile group: \u0027com.joestelmach\u0027, name: \u0027natty\u0027, version: \u00270.6\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":"repositories {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" mavenCentral()","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" maven { url \u0027https://oss.sonatype.org/content/repositories/snapshots/\u0027 }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":48}},{"path":"src/main/data/Rua_copy.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"public class Rua_copy {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" String greeting \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" \" Hello! I\u0027m Rua, your ChatBot\\n\" +","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" \" What can I do for you?\\n\" +","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" \"____________________________________________________________\\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" String goodbye\u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" \"____________________________________________________________\\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" String saveDir \u003d \"src/main/data/\";","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" String saveAddress \u003d \"src/main/data/tasks.txt\";//Note that class path is pointing to the ip directory","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" TaskList taskList \u003d new TaskList(saveAddress);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" System.out.println(greeting);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" while (!command.equals(\"bye\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" System.out.println(\"____________________________________________________________\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" System.out.println(taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" String[] arr \u003d command.split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" if (arr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"todo\");","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" Todo newTodo \u003d new Todo(arr[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" taskList \u003d taskList.add(newTodo);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" String[] arr \u003d command.split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" if (arr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" String[] info \u003d arr[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" if (info.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" Deadline newDeadline \u003d new Deadline(info[0], LocalDate.parse(info[1]));","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" taskList \u003d taskList.add(newDeadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" String[] arr \u003d command.split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" if (arr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"event\");","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" String[] info \u003d arr[1].split(\" /from \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" if (info.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" String[] time \u003d info[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" if (time.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" Event newEvent \u003d new Event(info[0], LocalDate.parse(time[0]), LocalDate.parse(time[1]));","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" taskList \u003d taskList.add(newEvent);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"siqirua"},"content":" String indexStr \u003d command.replaceAll(\"[^0-9]\", \"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"siqirua"},"content":" int index \u003d Integer.parseInt(indexStr);","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"siqirua"},"content":" taskList \u003d taskList.mark(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"siqirua"},"content":" } else if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"siqirua"},"content":" String indexStr \u003d command.replaceAll(\"[^0-9]\", \"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"siqirua"},"content":" int index \u003d Integer.parseInt(indexStr);","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"siqirua"},"content":" taskList \u003d taskList.unmark(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"siqirua"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"siqirua"},"content":" String indexStr \u003d command.replaceAll(\"[^0-9]\", \"\");","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"siqirua"},"content":" int index \u003d Integer.parseInt(indexStr);","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"siqirua"},"content":" taskList \u003d taskList.delete(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"siqirua"},"content":" } else if (command.startsWith(\"date\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"siqirua"},"content":" String[] arr \u003d command.split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"siqirua"},"content":" if (arr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"date search\");","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"siqirua"},"content":" System.out.println(taskList.searchByDate(LocalDate.parse(arr[1])));","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"siqirua"},"content":" else {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"siqirua"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"siqirua"},"content":" catch (FileNotFoundException exp) {","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"siqirua"},"content":" System.out.println(\"Target file not found. Do you want to create it now? Please type yes or no\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"siqirua"},"content":" String create \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"siqirua"},"content":" while (!create.equals(\"yes\") \u0026\u0026 !create.equals(\"no\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"siqirua"},"content":" System.out.println(\"Incorrect input. Please type yes or no\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"siqirua"},"content":" if (create.equals(\"yes\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"siqirua"},"content":" File fileCreator \u003d new File(saveDir);","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"siqirua"},"content":" fileCreator.mkdir();","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"siqirua"},"content":" System.out.println(\"File successfully created. Progress saved.\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"siqirua"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"siqirua"},"content":" taskList.save();","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"siqirua"},"content":" catch (IOException ioExp) {","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"siqirua"},"content":" System.out.println(\"Some error occurs and progress is not saved.\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"siqirua"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"siqirua"},"content":" catch (java.time.format.DateTimeParseException dateFormatExp) {","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"siqirua"},"content":" System.out.println(\"Date format incorrect. Please type the date in the format yyyy-mm-dd and try again\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"siqirua"},"content":" catch (Exception exp) {","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"siqirua"},"content":" System.out.println(exp);","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"siqirua"},"content":" System.out.println(\"____________________________________________________________\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"siqirua"},"content":" command \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"siqirua"},"content":" System.out.println(goodbye);","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":119}},{"path":"src/main/java/rua/Rua.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"public class Rua {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" * Constructs a chatbot Rua object.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" * @param filePath The path to the file which stores the tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" public Rua(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\"Load successfully. Now you have \" + tasks.getTasks().size()","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" + \" tasks in the list.\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" ui.showMessage(tasks.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" new Rua(\"src/main/data/tasks.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" * Runs the chatbot.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" public void run() {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" ui.showLine(); // show the divider line (\"_______\")","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" tasks \u003d c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" ui.showError(e.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" } finally {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":58}},{"path":"src/main/java/rua/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"public class AddCommand implements Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" private final Task task;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" * @return The exit status after this execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof AddCommand)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" AddCommand c \u003d (AddCommand) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" return c.task.equals(this.task);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" * Adds the task into a TaskList and returns the updated TaskList after the execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" * @param ui A UI to show messages to the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" * @param storage A Storage to save and load tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" * @return The updated TaskList after adding the Task.","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" public TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\" Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" TaskList newTasks \u003d tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\" \" + task + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\"Now you have \" + tasks.getTasks().size() + \" tasks in the list.\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" return newTasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":64}},{"path":"src/main/java/rua/command/ClearCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"public class ClearCommand implements Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" * @return The exit status after this execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" * Clears the current TaskList and return an empty TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" * @param ui A UI to show messages to the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" * @param storage A Storage to save and load tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" * @return The empty TaskList after execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" public TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\"Task list cleared.\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" return o instanceof ClearCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":47}},{"path":"src/main/java/rua/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"public interface Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" * Runs the corresponding command and returns the updated TaskList after the execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" * @param ui A UI to show messages to the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" * @param storage A Storage to save and load tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" * @return The updated TaskList after execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" * Returns true for ExitCommand and false for all other cases.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" * @return The exit status after this execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" boolean isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" * Compares the command with other objects and return true if they are the same Deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" boolean equals(Object o);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":33}},{"path":"src/main/java/rua/command/DateSearchCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"public class DateSearchCommand implements Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" private final LocalDate date;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" public DateSearchCommand(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" * @return The exit status after this execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" * Prints the tasks that happens on the given date and return the current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" * @param ui A UI to show messages to the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" * @param storage A Storage to save and load tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" * @return Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" public TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\" These are events happening on that day\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" String result \u003d tasks.searchByDate(date);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" ui.showMessage(result);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof DateSearchCommand)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" DateSearchCommand c \u003d (DateSearchCommand) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" return c.date.isEqual(this.date);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":62}},{"path":"src/main/java/rua/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" private final int index;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" * @return The exit status after this execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" * Removes the task at a given index and return the updated TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" * @param ui A UI to show messages to the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" * @param storage A Storage to save and load tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" * @return The TaskList after removing the Task.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" public TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\" Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\" \" + tasks.getTasks().get(index - 1) + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" TaskList newTasks \u003d tasks.delete(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\"Now you have \" + tasks.getTasks().size()","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" + \" tasks in the list.\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" return newTasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof DeleteCommand)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" DeleteCommand c \u003d (DeleteCommand) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" return c.index \u003d\u003d this.index;","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":61}},{"path":"src/main/java/rua/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"public class ExitCommand implements Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" * @return The exit status after this execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" * Displays goodbye message.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" * @param ui A UI to show messages to the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" * @param storage A Storage to save and load tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" * @return Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" public TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" ui.showGoodbye();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" return o instanceof ExitCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":47}},{"path":"src/main/java/rua/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" * @return The exit status after this execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" * Lists out all the Task objects in the TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" * @param ui A UI to show messages to the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" * @param storage A Storage to save and load tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" * @return Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" public TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" ui.showMessage(tasks.toString() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" return o instanceof ListCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":46}},{"path":"src/main/java/rua/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"public class MarkCommand implements Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" private final Boolean marked;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" private final int index;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" public MarkCommand(int index, Boolean marked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" this.marked \u003d marked;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" * @return The exit status after this execution.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" * Sets a Task at given index to be marked/unmarked and returns the updated TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" * @param ui A UI to show messages to the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" * @param storage A Storage to save and load tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" * @return The updated TaskList after marking/unmarking the Task.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" public TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" if (marked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\"Nice! I\u0027ve marked this task as done:\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\"OK, I\u0027ve marked this task as not done yet:\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" TaskList newTasks \u003d marked ? tasks.mark(index) : tasks.unmark(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\" \" + tasks.getTasks().get(index - 1));","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" return newTasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof MarkCommand)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" MarkCommand c \u003d (MarkCommand) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" return c.marked.equals(this.marked) \u0026\u0026 c.index \u003d\u003d this.index;","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":65}},{"path":"src/main/java/rua/command/SearchCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import rua.common.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import rua.common.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"public class SearchCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" private final String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" public SearchCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" public TaskList execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" ui.showMessage(\" Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" String result \u003d tasks.search(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" ui.showMessage(result);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof SearchCommand)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" SearchCommand c \u003d (SearchCommand) o;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" return c.keyword.equals(this.keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"siqirua":40}},{"path":"src/main/java/rua/common/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.common;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import rua.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"import rua.command.ClearCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"import rua.command.DateSearchCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"import rua.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"import rua.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"import rua.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":"import rua.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":"import rua.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":"import rua.command.SearchCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":"import rua.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":"import rua.task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":"import rua.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":"import rua.exception.InvalidCommandException;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":"import rua.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" * Translates the input message into a Command object.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" * @param message The String input from the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" * @return The corresponding Command object.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" * @throws EmptyDescriptionException if there is no description for the string representing the input task.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" * @throws InvalidCommandException if the message is not supported.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" public static Command parse(String message) throws EmptyDescriptionException, InvalidCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" String[] inputs \u003d message.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" String command \u003d inputs[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" Command output;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" switch (command) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" case \"todo\":","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"Todo\");","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" Todo newTodo \u003d new Todo(inputs[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" output \u003d new AddCommand(newTodo);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"Deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" String[] infos \u003d inputs[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" if (infos.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"Deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" Deadline newDdl \u003d new Deadline(infos[0], LocalDate.parse(infos[1]));","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" output \u003d new AddCommand(newDdl);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" case \"event\":","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"Event\");","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" String[] infosEvent \u003d inputs[1].split(\" /from \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" if (infosEvent.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"Event\");","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" String[] durations \u003d infosEvent[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" if (durations.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"Event\");","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"siqirua"},"content":" Event newEvent \u003d new Event(infosEvent[0], LocalDate.parse(durations[0]), LocalDate.parse(durations[1]));","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"siqirua"},"content":" output \u003d new AddCommand(newEvent);","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"siqirua"},"content":" case \"bye\":","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"siqirua"},"content":" output \u003d new ExitCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"siqirua"},"content":" case \"list\":","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"siqirua"},"content":" output \u003d new ListCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"siqirua"},"content":" case \"clear\":","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"siqirua"},"content":" output \u003d new ClearCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"siqirua"},"content":" case \"mark\":","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"siqirua"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"mark\");","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"siqirua"},"content":" int indexMark \u003d Integer.parseInt(inputs[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"siqirua"},"content":" output \u003d new MarkCommand(indexMark, true);","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"siqirua"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"siqirua"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"unmark\");","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"siqirua"},"content":" int indexUnmark \u003d Integer.parseInt(inputs[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"siqirua"},"content":" output \u003d new MarkCommand(indexUnmark, false);","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"siqirua"},"content":" case \"delete\":","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"siqirua"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"delete\");","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"siqirua"},"content":" int indexDelete \u003d Integer.parseInt(inputs[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"siqirua"},"content":" output \u003d new DeleteCommand(indexDelete);","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"siqirua"},"content":" case \"date\":","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"siqirua"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"date search\");","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"siqirua"},"content":" output \u003d new DateSearchCommand(LocalDate.parse(inputs[1]));","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"siqirua"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"siqirua"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"siqirua"},"content":" throw new EmptyDescriptionException(\"keyword search\");","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"siqirua"},"content":" output \u003d new SearchCommand(inputs[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"siqirua"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"siqirua"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"siqirua"},"content":" return output;","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":116}},{"path":"src/main/java/rua/common/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.common;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":"import rua.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":"import rua.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":"import rua.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":"import rua.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":"import rua.exception.InvalidTypeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":"import rua.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" private final String filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" * Constructs a Storage object which reads and writes to a file located at the filePath.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" * @param filePath The path of the file to be loaded and saved.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" * Returns a Task corresponding to a given String.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" * @param str A String that represents a Task object.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" * @return The corresponding Task object.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" * @throws InvalidTypeException if the task type is not supported.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" static Task stringToTask(String str) throws InvalidTypeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" String[] features \u003d str.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" Task output;","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" DateTimeFormatter dateFormat \u003d DateTimeFormatter.ofPattern(\"MM dd yyyy\");","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" switch (features[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" output \u003d new Todo(features[2], features[1].equals(\"1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" output \u003d new Deadline(features[2], LocalDate.parse(features[3], dateFormat),","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" features[1].equals(\"1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" output \u003d new Event(features[2], LocalDate.parse(features[3], dateFormat),","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" LocalDate.parse(features[4], dateFormat), features[1].equals(\"1\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" output \u003d null;","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" throw new InvalidTypeException(features[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" return output;","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" * Returns a Task corresponding to a given String.","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" * @param task A Task object that needs to be translated into a String.","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":" * @return The corresponding String.","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"siqirua"},"content":" * @throws InvalidTypeException if the task type is not supported.","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"siqirua"},"content":" static String taskToString(Task task) throws InvalidTypeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"siqirua"},"content":" String output \u003d task.getType() + \" | \" + (task.isMarked() ? 1 : 0)","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"siqirua"},"content":" + \" | \" + task.getDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"siqirua"},"content":" switch (task.getType()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"siqirua"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"siqirua"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"siqirua"},"content":" output +\u003d \" | \" + ((Deadline) task).getDue();","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"siqirua"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"siqirua"},"content":" output +\u003d \" | \" + ((Event) task).getFrom() + \" | \" + ((Event) task).getTo();","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"siqirua"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"siqirua"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"siqirua"},"content":" output \u003d null;","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"siqirua"},"content":" throw new InvalidTypeException(task.getType());","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"siqirua"},"content":" return output;","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"siqirua"},"content":" * Returns the ArrayList of tasks represented by the input String located in the filePath.","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"siqirua"},"content":" * @return The corresponding ArrayList of Task objects.","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"siqirua"},"content":" * @throws InvalidTypeException if the task type is not supported.","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"siqirua"},"content":" * @throws FileNotFoundException if the filePath is invalid.","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"siqirua"},"content":" public ArrayList\u003cTask\u003e load() throws InvalidTypeException, FileNotFoundException {","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"siqirua"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"siqirua"},"content":" Scanner sc \u003d new Scanner(f);","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"siqirua"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"siqirua"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"siqirua"},"content":" tasks.add(stringToTask(sc.nextLine()));","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"siqirua"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"siqirua"},"content":" * Saves the string representing a list of tasks at the filePath.","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"siqirua"},"content":" * @param tasks A TaskList object that needs to be translated into String and saved.","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"siqirua"},"content":" * @throws InvalidTypeException if the task type is not supported.","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"siqirua"},"content":" * @throws IOException if the filePath is invalid.","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"siqirua"},"content":" public void save(TaskList tasks) throws InvalidTypeException, IOException {","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"siqirua"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"siqirua"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"siqirua"},"content":" String saveTxt \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"siqirua"},"content":" ArrayList\u003cTask\u003e tasksList \u003d tasks.getTasks();","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"siqirua"},"content":" for (int i \u003d 0; i \u003c tasksList.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"siqirua"},"content":" saveTxt +\u003d taskToString(tasksList.get(i)) + \"\\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"siqirua"},"content":" fw.write(saveTxt);","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"siqirua"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"siqirua"},"content":" } catch (FileNotFoundException exp) {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"siqirua"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"siqirua"},"content":" System.out.println(\"Target file not found. Do you want to create it now? Please type yes or no\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"siqirua"},"content":" String create \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"siqirua"},"content":" while (!create.equals(\"yes\") \u0026\u0026 !create.equals(\"no\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"siqirua"},"content":" System.out.println(\"Incorrect input. Please type yes or no\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"siqirua"},"content":" if (create.equals(\"yes\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"siqirua"},"content":" int index \u003d filePath.lastIndexOf(\"/\");","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"siqirua"},"content":" String saveDir \u003d filePath.substring(0, index);","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"siqirua"},"content":" File fileCreator \u003d new File(saveDir);","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"siqirua"},"content":" fileCreator.mkdir();","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"siqirua"},"content":" System.out.println(\"File successfully created. Progress saved.\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"siqirua"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"siqirua"},"content":" save(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"siqirua"},"content":" } catch (IOException ioExp) {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"siqirua"},"content":" System.out.println(\"Some error occurs and progress is not saved.\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":142}},{"path":"src/main/java/rua/common/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.common;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" private final Scanner in;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" private final PrintStream out;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" public Ui() {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" public Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" this.out \u003d out;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" public void showLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" String greeting \u003d \"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" + \" Hello! I\u0027m Rua, your ChatBot\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" + \" What can I do for you?\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" + \"____________________________________________________________\";","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" out.println(greeting);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" public void showGoodbye() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" String goodbye \u003d \" Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" out.println(goodbye);","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" public void showMessage(String str) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" out.println(str);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" out.println(\"You get an error: \" + errorMessage);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" showError(\"Given tasklist cannot be loaded. Now creating a new tasklist instead.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" return in.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":52}},{"path":"src/main/java/rua/exception/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":" private final String type;","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":" public EmptyDescriptionException(String type) {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" super();","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" * Returns the error message of this exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" * @return The error message of this exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" return (\" OOPS!!! The description of a \" + type + \" cannot be empty.\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":19}},{"path":"src/main/java/rua/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":" * Returns the error message of this exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" * @return The error message of this exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" return (\" OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":12}},{"path":"src/main/java/rua/exception/InvalidTypeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"public class InvalidTypeException extends Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":" private final String type;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":" public InvalidTypeException(String type) {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" * Returns the error message of this exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" * @return The error message of this exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" return (\" OOPS!!! I\u0027m sorry, but type \" + type + \" is not supported :-(\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":18}},{"path":"src/main/java/rua/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" private final LocalDate due;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" * Constructs a Deadline object (assuming unmarked).","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" * @param description A String to describe the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" * @param due A LocalDate to represent the due date of the deadline.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" public Deadline(String description, LocalDate due) {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" this.due \u003d due;","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" * Constructs a Deadline object.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" * @param description A String to describe the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" * @param due A LocalDate to represent the due date of the deadline.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" * @param isMarked A boolean to indicate whether it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" public Deadline(String description, LocalDate due, Boolean isMarked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" super(description, isMarked);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" this.due \u003d due;","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" * It returns \"D\" for Deadline type.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" * @return The task type (\"D\" for Deadline type).","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" public String getType() {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" return \"D\";","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" * @return A new Deadline task object with the same description but it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" public Deadline setMarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" return new Deadline(this.description, this.due, true);","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" * @return A new Deadline task object with the same description but it is unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" public Deadline setUnmarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" return new Deadline(this.description, this.due, false);","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"siqirua"},"content":" * @param date A given date which we will check whether this task happens on that date.","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"siqirua"},"content":" * @return A boolean to indicate whether it happens on that day.","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"siqirua"},"content":" public Boolean isHappeningOnThatDate(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"siqirua"},"content":" return date.isEqual(due);","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"siqirua"},"content":" * Returns the due date of this event.","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"siqirua"},"content":" * @return The due date of this event.","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"siqirua"},"content":" public String getDue() {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"siqirua"},"content":" return due.format(DateTimeFormatter.ofPattern(\"MM dd yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"siqirua"},"content":" * Compares the task with other objects and return true if they are the same Deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof Deadline)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"siqirua"},"content":" Deadline c \u003d (Deadline) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"siqirua"},"content":" // Compare the data members and return accordingly","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"siqirua"},"content":" return c.description.equals(this.description)","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"siqirua"},"content":" \u0026\u0026 c.isMarked.equals(this.isMarked)","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"siqirua"},"content":" \u0026\u0026 c.due.isEqual(this.due);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"siqirua"},"content":" * Returns a string to represent this Deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"siqirua"},"content":" * @return A string representing this Deadline task in the format:","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"siqirua"},"content":" * [D][ marked indicator ] description.","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":113,"author":{"gitId":"siqirua"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":114,"author":{"gitId":"siqirua"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"siqirua"},"content":" + due.format(DateTimeFormatter.ofPattern(\"MM dd yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":117,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":117}},{"path":"src/main/java/rua/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" private final LocalDate from;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" private final LocalDate to;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" * Constructs an Event object (assuming unmarked).","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" * @param description A String to describe the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" * @param from A LocalDate to represent the event starting time.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" * @param to A LocalDate to represent the event ending time.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" public Event(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" * Constructs an Event object.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" * @param description A String to describe the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" * @param from A LocalDate to represent the event starting time.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" * @param to A LocalDate to represent the event ending time.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" * @param isMarked A boolean to indicate whether it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" public Event(String description, LocalDate from, LocalDate to, Boolean isMarked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" super(description, isMarked);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" * It returns \"E\" for Event type.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" * @return The task type (\"E\" for Event type).","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" public String getType() {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" return \"E\";","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" * Returns the starting time of this event.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" * @return The starting time of this event.","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" public String getFrom() {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" return this.from.format(DateTimeFormatter.ofPattern(\"MM dd yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" * Returns the ending time of this event.","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" * @return The ending time of this event.","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" public String getTo() {","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" return this.to.format(DateTimeFormatter.ofPattern(\"MM dd yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"siqirua"},"content":" * @return A new Event task object with the same description but it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"siqirua"},"content":" public Event setMarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"siqirua"},"content":" return new Event(this.description, this.from, this.to, true);","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"siqirua"},"content":" * @return A new Event task object with the same description but it is unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":82,"author":{"gitId":"siqirua"},"content":" public Event setUnmarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"siqirua"},"content":" return new Event(this.description, this.from, this.to, false);","lastModifiedDate":"2023-08-22"},{"lineNumber":84,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"siqirua"},"content":" * @param date A given date which we will check whether this task happens on that date.","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"siqirua"},"content":" * @return A boolean to indicate whether it happens on that day.","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"siqirua"},"content":" public Boolean isHappeningOnThatDate(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"siqirua"},"content":" return (date.isEqual(from) || date.isAfter(from))","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"siqirua"},"content":" \u0026\u0026 (date.isEqual(to) || date.isBefore(to));","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"siqirua"},"content":" * Compares the task with other objects and return true if they are the same Event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof Event)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"siqirua"},"content":" Event c \u003d (Event) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"siqirua"},"content":" // Compare the data members and return accordingly","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"siqirua"},"content":" return c.description.equals(this.description)","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"siqirua"},"content":" \u0026\u0026 c.isMarked.equals(this.isMarked)","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"siqirua"},"content":" \u0026\u0026 c.from.isEqual(this.from)","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"siqirua"},"content":" \u0026\u0026 c.to.isEqual(this.to);","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"siqirua"},"content":" * Returns a string to represent this Event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"siqirua"},"content":" * @return A string representing this Event task in the format:","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"siqirua"},"content":" * [E][ marked indicator ] description.","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":129,"author":{"gitId":"siqirua"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":130,"author":{"gitId":"siqirua"},"content":" return \"[E]\" + super.toString() + \" (from: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"siqirua"},"content":" + this.from.format(DateTimeFormatter.ofPattern(\"MM dd yyyy\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"siqirua"},"content":" + \" to: \" + this.to.format(DateTimeFormatter.ofPattern(\"MM dd yyyy\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"siqirua"},"content":" + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":135,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":135}},{"path":"src/main/java/rua/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":" * Represents a Task. A Task object corresponds to","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" * a task represented by a String description and a boolean","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" * to indicate whether it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" protected final String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" protected final Boolean isMarked;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" * Constructs a Task object.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" * @param description A String to describe the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" * @param marked A boolean to indicate whether it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" Task(String description, Boolean marked) {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" this.isMarked \u003d marked;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" * Constructs a Task object (assuming unmarked).","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" * @param description A String to describe the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" this.isMarked \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" * Returns the type of the Task, The type is None by default.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" * @return The task type (None here by default).","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" public String getType() {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" return \"None\";","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" * Returns the description of the Task.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" * @return The task description.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" return this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" * Returns the marked/unmarked status of the Task.","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" * @return A boolean to indicate whether it is marked or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" public Boolean isMarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" return this.isMarked;","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" * Checks whether a task happens on the given date.","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":" * @param date A given date which we will check whether this task happens on that date.","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"siqirua"},"content":" * @return A boolean to indicate whether it happens on that day (False by default if not applicable).","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"siqirua"},"content":" public Boolean isHappeningOnThatDate(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"siqirua"},"content":" * Sets this task to be marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"siqirua"},"content":" * @return A new Task object with the same description but it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"siqirua"},"content":" public Task setMarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"siqirua"},"content":" return new Task(this.description, true);","lastModifiedDate":"2023-08-22"},{"lineNumber":79,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":81,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"siqirua"},"content":" * Sets this task to be unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"siqirua"},"content":" * @return A new Task object with the same description but it is unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"siqirua"},"content":" public Task setUnmarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"siqirua"},"content":" return new Task(this.description, false);","lastModifiedDate":"2023-08-22"},{"lineNumber":88,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":89,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"siqirua"},"content":" * Compares the task with other objects and return true if they are the same task.","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof Task)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"siqirua"},"content":" Task c \u003d (Task) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"siqirua"},"content":" // Compare the data members and return accordingly","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"siqirua"},"content":" return c.description.equals(this.description)","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"siqirua"},"content":" \u0026\u0026 c.isMarked.equals(this.isMarked);","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"siqirua"},"content":" * Returns a string to represent this task.","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"siqirua"},"content":" * @return A string representing this task in the format:","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"siqirua"},"content":" * [ marked indicator ] description.","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"siqirua"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":120,"author":{"gitId":"siqirua"},"content":" return \"[\" + (this.isMarked ? \"X\" : \" \") + \"] \" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":122,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":122}},{"path":"src/main/java/rua/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"public class TaskList {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" * Constructs a TaskList object (with no tasks inside by default).","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" * Constructs a Task object.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" * @param tasks An ArrayList of Task to represent the existing tasks in the TaskList or","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" * tasks that will be added into the TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" * Returns the ArrayList of Task objects in the TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" * @return The ArrayList of Task objects in the TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" return this.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" * Returns a new TaskList object with updated list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" * @param tasks An ArrayList of Task objects in the new TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" * @return The new TaskList object with updated list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" private TaskList update(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" return new TaskList(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" * Adds a Task object to the TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" * @param task A Task object that will be added into the TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" * @return The new TaskList object with the new Task.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" public TaskList add(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" ArrayList\u003cTask\u003e currentTasks \u003d this.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":" currentTasks.add(task);","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" return update(currentTasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" * Deletes a Task object with a given index from the TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" * @param index An int index of the Task that will be removed.","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" * @return The new TaskList object after removing the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" public TaskList delete(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" ArrayList\u003cTask\u003e currentTasks \u003d this.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":" currentTasks.remove(index - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"siqirua"},"content":" return update(currentTasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"siqirua"},"content":" * Sets a Task object with a given index in the TaskList to be marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"siqirua"},"content":" * @param index An int index of the Task that will be marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"siqirua"},"content":" * @return The new TaskList object after marking the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"siqirua"},"content":" public TaskList mark(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"siqirua"},"content":" ArrayList\u003cTask\u003e currentTasks \u003d this.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":77,"author":{"gitId":"siqirua"},"content":" Task target \u003d currentTasks.get(index - 1);","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"siqirua"},"content":" currentTasks.set(index - 1, target.setMarked());","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"siqirua"},"content":" return update(currentTasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":81,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":82,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"siqirua"},"content":" * Sets a Task object with a given index in the TaskList to be unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"siqirua"},"content":" * @param index An int index of the Task that will be unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"siqirua"},"content":" * @return The new TaskList object after unmarking the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"siqirua"},"content":" public TaskList unmark(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"siqirua"},"content":" ArrayList\u003cTask\u003e currentTasks \u003d this.tasks;","lastModifiedDate":"2023-08-22"},{"lineNumber":90,"author":{"gitId":"siqirua"},"content":" Task target \u003d currentTasks.get(index - 1);","lastModifiedDate":"2023-08-22"},{"lineNumber":91,"author":{"gitId":"siqirua"},"content":" currentTasks.set(index - 1, target.setUnmarked());","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"siqirua"},"content":" return update(currentTasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"siqirua"},"content":" * Returns a String with information of all tasks happening on a given date.","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"siqirua"},"content":" * @param date A date that will be searched.","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"siqirua"},"content":" * @return A String with information of all tasks happening on a given date.","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"siqirua"},"content":" public String searchByDate(LocalDate date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"siqirua"},"content":" String res \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"siqirua"},"content":" int index \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"siqirua"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"siqirua"},"content":" if (tasks.get(i).isHappeningOnThatDate(date)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"siqirua"},"content":" res \u003d res + index","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"siqirua"},"content":" + \": \" + tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"siqirua"},"content":" index +\u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"siqirua"},"content":" return res;","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"siqirua"},"content":" public String search(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"siqirua"},"content":" String res\u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"siqirua"},"content":" int index \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"siqirua"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"siqirua"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"siqirua"},"content":" res \u003d res + index","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"siqirua"},"content":" + \": \" + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"siqirua"},"content":" index +\u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"siqirua"},"content":" return res;","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"siqirua"},"content":" * Returns a string to represent this TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"siqirua"},"content":" * @return A string to represent this TaskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":133,"author":{"gitId":"siqirua"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":134,"author":{"gitId":"siqirua"},"content":" String result \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-08-22"},{"lineNumber":135,"author":{"gitId":"siqirua"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-22"},{"lineNumber":136,"author":{"gitId":"siqirua"},"content":" result \u003d result + (i + 1) + \": \" + tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":138,"author":{"gitId":"siqirua"},"content":" return result;","lastModifiedDate":"2023-08-22"},{"lineNumber":139,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":140,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":140}},{"path":"src/main/java/rua/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":" * Constructs a Todo object (assuming unmarked).","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":" * @param description A String to describe the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" * Constructs a Todo task object.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" * @param description A String to describe the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" * @param isMarked A boolean to indicate whether it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" public Todo(String description, Boolean isMarked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" super(description, isMarked);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" * It returns \"T\" for Todo type.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" * @return The task type (\"T\" for Todo type).","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" public String getType() {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" return \"T\";","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":" * @return A new Todo task object with the same description but it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"siqirua"},"content":" public Todo setMarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"siqirua"},"content":" return new Todo(this.description, true);","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"siqirua"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"siqirua"},"content":" * @return A new Todo task object with the same description but it is unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"siqirua"},"content":" public Todo setUnmarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"siqirua"},"content":" return new Todo(this.description, false);","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"siqirua"},"content":" * Compares the task with other objects and return true if they are the same Todo task.","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"siqirua"},"content":" * @param o Another object to be compared with.","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"siqirua"},"content":" * @return A boolean indicating whether they are equal or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"siqirua"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"siqirua"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"siqirua"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"siqirua"},"content":" if (!(o instanceof Todo)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"siqirua"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"siqirua"},"content":" Todo c \u003d (Todo) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"siqirua"},"content":" // Compare the data members and return accordingly","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"siqirua"},"content":" return c.description.equals(this.description)","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"siqirua"},"content":" \u0026\u0026 c.isMarked.equals(this.isMarked);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"siqirua"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"siqirua"},"content":" * Returns a string to represent this Todo task.","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"siqirua"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"siqirua"},"content":" * @return A string representing this Todo task in the format:","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"siqirua"},"content":" * [T][ marked indicator ] description.","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"siqirua"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"siqirua"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":83,"author":{"gitId":"siqirua"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":84,"author":{"gitId":"siqirua"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":86}},{"path":"src/test/java/rua/common/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.common;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"import rua.command.AddCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":"import rua.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":"import rua.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":"import rua.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":"import rua.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" public void parseStringTest() throws Exception {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" Command expectedAddTodo \u003d new AddCommand(new Todo(\"play\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":" Command expectedAddDeadline \u003d new AddCommand(new Deadline(\"quiz\", LocalDate.parse(\"2020-12-12\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" Command expectedAddEvent \u003d new AddCommand(new Event(\"project\", LocalDate.parse(\"2020-12-10\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":" LocalDate.parse(\"2020-12-31\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" assertEquals(expectedAddTodo, Parser.parse(\"todo play\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" assertEquals(expectedAddDeadline, Parser.parse(\"deadline quiz /by 2020-12-12\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" assertEquals(expectedAddEvent, Parser.parse(\"event project /from 2020-12-10 /to 2020-12-31\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" public void parseStringTestExceptionThrown() {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"siqirua"},"content":" assertEquals(null, Parser.parse(\"todo\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"siqirua"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"siqirua"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"siqirua"},"content":" assertEquals(\" OOPS!!! The description of a Todo cannot be empty.\\n\", e.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":37}},{"path":"src/test/java/rua/common/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"package rua.common;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"siqirua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"siqirua"},"content":"import rua.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"siqirua"},"content":"import rua.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"siqirua"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"siqirua"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"siqirua"},"content":" public void taskToStringTest() throws Exception {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"siqirua"},"content":" String expected1 \u003d \"T | 1 | play\";","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"siqirua"},"content":" String expected2 \u003d \"D | 0 | test | 11 12 2023\";","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"siqirua"},"content":" assertEquals(expected1, Storage.taskToString(new Todo(\"play\", true)));","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"siqirua"},"content":" assertEquals(expected2, Storage.taskToString(new Deadline(\"test\", LocalDate.parse(\"2023-11-12\"))));","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"siqirua"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"siqirua"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"siqirua"},"content":" public void stringToTaskTest() throws Exception {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"siqirua"},"content":" Todo expected1 \u003d new Todo(\"play\", true);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"siqirua"},"content":" Deadline expected2 \u003d new Deadline(\"test\", LocalDate.parse(\"2023-11-12\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"siqirua"},"content":" assertEquals(expected1, Storage.stringToTask(\"T | 1 | play\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"siqirua"},"content":" assertEquals(expected2, Storage.stringToTask(\"D | 0 | test | 11 12 2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"siqirua"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"siqirua"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"siqirua":30}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"siqirua"},"content":"todo homework","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"siqirua"},"content":"deadline presentation /by Thursday","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"siqirua"},"content":"event welcome tea /from next Friday /to next Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"siqirua"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"siqirua"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"siqirua"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"siqirua":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":"siqirua"},"content":"java -classpath ..\\bin Rua \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-22"},{"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":{"siqirua":1,"-":20}}] diff --git a/siqirua_ip_master/commits.json b/siqirua_ip_master/commits.json index dda44c74..f371875e 100644 --- a/siqirua_ip_master/commits.json +++ b/siqirua_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"siqirua":[{"date":"2023-08-22","commitResults":[{"hash":"33ee8f618bb1c72a4b4f9a7bd7bde8b68828a2ac","isMergeCommit":false,"messageTitle":"Change Chatbot name and beginning message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"5578cd026bfd4c20c0de049e9c5aad7006771084","isMergeCommit":false,"messageTitle":"Add Echo Feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":5}}},{"hash":"5e7dabd1320543d1a199f328fe9f7fd08289ee88","isMergeCommit":false,"messageTitle":"Add list feature and create TaskList and Task class","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":4}}},{"hash":"bbe56776d9b2946c538b954b934c995d6ce5e62d","isMergeCommit":false,"messageTitle":"Add mark feature","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":11}}},{"hash":"88824b472d9e5e1d0323d6f5e2222273fc1800b1","isMergeCommit":false,"messageTitle":"Add Task Type and implement 3 subclass of Task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":4}}},{"hash":"0fa3baef74211f1c984f8b13930e36f3bd082b16","isMergeCommit":false,"messageTitle":"Edit the SUT","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"c724eaff75249c05cc13c613c4ea2e776ed87eaf","isMergeCommit":false,"messageTitle":"Add two exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":29}}},{"hash":"e27902deebe6126810c4e4ab96b651397075020c","isMergeCommit":false,"messageTitle":"Add delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"7d0cc290af755ad65dbb8ba6b33cad9d18e76bcb","isMergeCommit":true,"messageTitle":"Merge commit \u002753a652449724fb82b59d5384dc000f41897686cf\u0027","messageBody":"","tags":["Level-6.1"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-26","commitResults":[{"hash":"ac273095928c55b3c1dfad16f211ef08dd6a6750","isMergeCommit":false,"messageTitle":"Add save feature","messageBody":"","tags":["Level-7.1"],"fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":12}}},{"hash":"4d03e21abf1334d21d44169f71527ea73a9dd0e6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"6fc47f039365a607f7d7d561c21ccb83dbc68f78","isMergeCommit":false,"messageTitle":"Change the time from String type to LocalDate type","messageBody":"","tags":["Level-8.1"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":13}}},{"hash":"e892e74d8328929da4cb4218044634242f666c75","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"f6118ff49ce298141fe7c5c99353573c8bacbbc5","isMergeCommit":false,"messageTitle":"Add feature of searching by date","messageBody":"","tags":["Level-8.2"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":1}}},{"hash":"665ddd93d1f3d51db38a627d1e3689141780091b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8.3"],"fileTypesAndContributionMap":{}},{"hash":"ea89ff3e8b9e94915f824258ca1b022fa40efb64","isMergeCommit":false,"messageTitle":"Unfinished edit to include more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":182,"deletions":11}}},{"hash":"62540a31d5f8b223bbd7c18ecb8cf82abfe82b4c","isMergeCommit":false,"messageTitle":"Include more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":447,"deletions":190}}},{"hash":"ea8a2fd51ff20207c2a0c163a1c2db3f7dcef9c5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-more-oop\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b0f63937988c2cf23df7f5f999a360020eccec6a","isMergeCommit":false,"messageTitle":"Organize the classes into suitable java packages.","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":63}}},{"hash":"c0ed9b2c228b90dd7b669de133974e0a7ff31350","isMergeCommit":false,"messageTitle":"Set up gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":30,"deletions":0},"java":{"insertions":3,"deletions":3}}},{"hash":"e73c04f521b30273d06e9a40bb67c6fe05b24b8a","isMergeCommit":false,"messageTitle":"Include 2 JUnit Test","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":10,"deletions":0},"java":{"insertions":229,"deletions":11}}},{"hash":"0b007c9c64676efe4663b9a9f24571c5c8259e00","isMergeCommit":false,"messageTitle":"Add JavaDoc for some methods","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0},"java":{"insertions":366,"deletions":51}}},{"hash":"cc0f347b3bc9a28c4df247d23cb15efaabe61d70","isMergeCommit":false,"messageTitle":"Add JavaDoc to some methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":154,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"c1477f31d361407035c58acb9c28919519c2cb6d","isMergeCommit":false,"messageTitle":"Tweak the code to comply with a coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":178,"deletions":167}}},{"hash":"9862ad859d7928db510347ab3b2c0fdf4a31342a","isMergeCommit":false,"messageTitle":"Implement keyword search function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":2}}},{"hash":"48a7137d6f859c51bcccd8d54c9a751b6ecd16c8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"de66cd769a3431bb6cdcd8d4366f79eb21ea7f6c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/rua/Rua.java\n#\tsrc/main/java/rua/command/ClearCommand.java\n#\tsrc/main/java/rua/command/Command.java\n#\tsrc/main/java/rua/common/Storage.java\n#\tsrc/main/java/rua/exception/EmptyDescriptionException.java\n#\tsrc/main/java/rua/exception/InvalidCommandException.java\n#\tsrc/main/java/rua/exception/InvalidTypeException.java\n#\tsrc/main/java/rua/task/Event.java\n#\tsrc/main/java/rua/task/Task.java\n#\tsrc/main/java/rua/task/TaskList.java\n#\tsrc/main/java/rua/task/Todo.java\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"521db9777b93c4afed00894363b0cfee348e6429","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/rua/common/Parser.java\n#\tsrc/main/java/rua/task/TaskList.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"c98018a9888dbf868fba4596cd6b494383d9313a","isMergeCommit":false,"messageTitle":"Use checkStyle to detect coding style violations","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0},"java":{"insertions":65,"deletions":58}}}]}]},"authorFileTypeContributionMap":{"siqirua":{"java":1668,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":48,"txt":6}},"authorContributionVariance":{"siqirua":219566.45},"authorDisplayNameMap":{"siqirua":"CS2103T-W08-2 LI S..SIQI"}} +{"authorDailyContributionsMap":{"siqirua":[{"date":"2023-08-22","commitResults":[{"hash":"33ee8f618bb1c72a4b4f9a7bd7bde8b68828a2ac","isMergeCommit":false,"messageTitle":"Change Chatbot name and beginning message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"5578cd026bfd4c20c0de049e9c5aad7006771084","isMergeCommit":false,"messageTitle":"Add Echo Feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":5}}},{"hash":"5e7dabd1320543d1a199f328fe9f7fd08289ee88","isMergeCommit":false,"messageTitle":"Add list feature and create TaskList and Task class","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":4}}},{"hash":"bbe56776d9b2946c538b954b934c995d6ce5e62d","isMergeCommit":false,"messageTitle":"Add mark feature","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":11}}},{"hash":"88824b472d9e5e1d0323d6f5e2222273fc1800b1","isMergeCommit":false,"messageTitle":"Add Task Type and implement 3 subclass of Task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":4}}},{"hash":"0fa3baef74211f1c984f8b13930e36f3bd082b16","isMergeCommit":false,"messageTitle":"Edit the SUT","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"c724eaff75249c05cc13c613c4ea2e776ed87eaf","isMergeCommit":false,"messageTitle":"Add two exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":29}}},{"hash":"e27902deebe6126810c4e4ab96b651397075020c","isMergeCommit":false,"messageTitle":"Add delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"7d0cc290af755ad65dbb8ba6b33cad9d18e76bcb","isMergeCommit":true,"messageTitle":"Merge commit \u002753a652449724fb82b59d5384dc000f41897686cf\u0027","messageBody":"","tags":["Level-6.1"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-26","commitResults":[{"hash":"ac273095928c55b3c1dfad16f211ef08dd6a6750","isMergeCommit":false,"messageTitle":"Add save feature","messageBody":"","tags":["Level-7.1"],"fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":12}}},{"hash":"4d03e21abf1334d21d44169f71527ea73a9dd0e6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"6fc47f039365a607f7d7d561c21ccb83dbc68f78","isMergeCommit":false,"messageTitle":"Change the time from String type to LocalDate type","messageBody":"","tags":["Level-8.1"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":13}}},{"hash":"e892e74d8328929da4cb4218044634242f666c75","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"f6118ff49ce298141fe7c5c99353573c8bacbbc5","isMergeCommit":false,"messageTitle":"Add feature of searching by date","messageBody":"","tags":["Level-8.2"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":1}}},{"hash":"665ddd93d1f3d51db38a627d1e3689141780091b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8.3"],"fileTypesAndContributionMap":{}},{"hash":"ea89ff3e8b9e94915f824258ca1b022fa40efb64","isMergeCommit":false,"messageTitle":"Unfinished edit to include more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":182,"deletions":11}}},{"hash":"62540a31d5f8b223bbd7c18ecb8cf82abfe82b4c","isMergeCommit":false,"messageTitle":"Include more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":447,"deletions":190}}},{"hash":"ea8a2fd51ff20207c2a0c163a1c2db3f7dcef9c5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-more-oop\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b0f63937988c2cf23df7f5f999a360020eccec6a","isMergeCommit":false,"messageTitle":"Organize the classes into suitable java packages.","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":63}}},{"hash":"c0ed9b2c228b90dd7b669de133974e0a7ff31350","isMergeCommit":false,"messageTitle":"Set up gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":30,"deletions":0},"java":{"insertions":3,"deletions":3}}},{"hash":"e73c04f521b30273d06e9a40bb67c6fe05b24b8a","isMergeCommit":false,"messageTitle":"Include 2 JUnit Test","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":10,"deletions":0},"java":{"insertions":229,"deletions":11}}},{"hash":"0b007c9c64676efe4663b9a9f24571c5c8259e00","isMergeCommit":false,"messageTitle":"Add JavaDoc for some methods","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0},"java":{"insertions":366,"deletions":51}}},{"hash":"cc0f347b3bc9a28c4df247d23cb15efaabe61d70","isMergeCommit":false,"messageTitle":"Add JavaDoc to some methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":154,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"c1477f31d361407035c58acb9c28919519c2cb6d","isMergeCommit":false,"messageTitle":"Tweak the code to comply with a coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":178,"deletions":167}}},{"hash":"9862ad859d7928db510347ab3b2c0fdf4a31342a","isMergeCommit":false,"messageTitle":"Implement keyword search function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":2}}},{"hash":"48a7137d6f859c51bcccd8d54c9a751b6ecd16c8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"de66cd769a3431bb6cdcd8d4366f79eb21ea7f6c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/rua/Rua.java\n#\tsrc/main/java/rua/command/ClearCommand.java\n#\tsrc/main/java/rua/command/Command.java\n#\tsrc/main/java/rua/common/Storage.java\n#\tsrc/main/java/rua/exception/EmptyDescriptionException.java\n#\tsrc/main/java/rua/exception/InvalidCommandException.java\n#\tsrc/main/java/rua/exception/InvalidTypeException.java\n#\tsrc/main/java/rua/task/Event.java\n#\tsrc/main/java/rua/task/Task.java\n#\tsrc/main/java/rua/task/TaskList.java\n#\tsrc/main/java/rua/task/Todo.java\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"521db9777b93c4afed00894363b0cfee348e6429","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/rua/common/Parser.java\n#\tsrc/main/java/rua/task/TaskList.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"c98018a9888dbf868fba4596cd6b494383d9313a","isMergeCommit":false,"messageTitle":"Use checkStyle to detect coding style violations","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0},"java":{"insertions":65,"deletions":58}}}]},{"date":"2023-09-05","commitResults":[{"hash":"df9432dfe58a5dbd8c34c74ef5dff845811deab9","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":33,"deletions":24}}},{"hash":"cae20c31600aeda0f442c875aef5b9ddc5db7a14","isMergeCommit":true,"messageTitle":"Merge pull request #1 from siqirua/patch-1","messageBody":"Update README.md","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"siqirua":{"java":1668,"md":27,"fxml":0,"sh":0,"bat":1,"gradle":48,"txt":6}},"authorContributionVariance":{"siqirua":198600.28},"authorDisplayNameMap":{"siqirua":"CS2103T-W08-2 LI S..SIQI"}} diff --git a/summary.json b/summary.json index 25b44aac..2883d041 100644 --- a/summary.json +++ b/summary.json @@ -1 +1 @@ -{"repoSenseVersion":"3bad16bb3d","reportGeneratedTime":"Tue Sep 5 22:28:43 2023 UTC+08:00","reportGenerationTime":" 1 minute(s) 30.75 second(s)","zoneId":"UTC+08:00","reportTitle":"CS2103 iP Code Dashboard","repos":[{"location":{"location":"https://github.com/remuslum/ip.git","repoName":"ip","organization":"remuslum","domainName":"github"},"branch":"master","displayName":"remuslum/ip[master]","outputFolderName":"remuslum_ip_master"},{"location":{"location":"https://github.com/elhy1999/ip.git","repoName":"ip","organization":"elhy1999","domainName":"github"},"branch":"master","displayName":"elhy1999/ip[master]","outputFolderName":"elhy1999_ip_master"},{"location":{"location":"https://github.com/XihuaZ/ip.git","repoName":"ip","organization":"XihuaZ","domainName":"github"},"branch":"master","displayName":"XihuaZ/ip[master]","outputFolderName":"XihuaZ_ip_master"},{"location":{"location":"https://github.com/bwangpj/ip.git","repoName":"ip","organization":"bwangpj","domainName":"github"},"branch":"master","displayName":"bwangpj/ip[master]","outputFolderName":"bwangpj_ip_master"},{"location":{"location":"https://github.com/shuenj/ip.git","repoName":"ip","organization":"shuenj","domainName":"github"},"branch":"master","displayName":"shuenj/ip[master]","outputFolderName":"shuenj_ip_master"},{"location":{"location":"https://github.com/SungMatt/ip.git","repoName":"ip","organization":"SungMatt","domainName":"github"},"branch":"master","displayName":"SungMatt/ip[master]","outputFolderName":"SungMatt_ip_master"},{"location":{"location":"https://github.com/junhonglow/ip.git","repoName":"ip","organization":"junhonglow","domainName":"github"},"branch":"master","displayName":"junhonglow/ip[master]","outputFolderName":"junhonglow_ip_master"},{"location":{"location":"https://github.com/xavierpok/ip.git","repoName":"ip","organization":"xavierpok","domainName":"github"},"branch":"master","displayName":"xavierpok/ip[master]","outputFolderName":"xavierpok_ip_master"},{"location":{"location":"https://github.com/marcellaantania/ip.git","repoName":"ip","organization":"marcellaantania","domainName":"github"},"branch":"master","displayName":"marcellaantania/ip[master]","outputFolderName":"marcellaantania_ip_master"},{"location":{"location":"https://github.com/felibunnyy/ip.git","repoName":"ip","organization":"felibunnyy","domainName":"github"},"branch":"master","displayName":"felibunnyy/ip[master]","outputFolderName":"felibunnyy_ip_master"},{"location":{"location":"https://github.com/starrylight99/ip.git","repoName":"ip","organization":"starrylight99","domainName":"github"},"branch":"master","displayName":"starrylight99/ip[master]","outputFolderName":"starrylight99_ip_master"},{"location":{"location":"https://github.com/leezhanpeng/ip.git","repoName":"ip","organization":"leezhanpeng","domainName":"github"},"branch":"master","displayName":"leezhanpeng/ip[master]","outputFolderName":"leezhanpeng_ip_master"},{"location":{"location":"https://github.com/sheryew/ip.git","repoName":"ip","organization":"sheryew","domainName":"github"},"branch":"master","displayName":"sheryew/ip[master]","outputFolderName":"sheryew_ip_master"},{"location":{"location":"https://github.com/lihongguang00/ip.git","repoName":"ip","organization":"lihongguang00","domainName":"github"},"branch":"master","displayName":"lihongguang00/ip[master]","outputFolderName":"lihongguang00_ip_master"},{"location":{"location":"https://github.com/nicrandomlee/ip.git","repoName":"ip","organization":"nicrandomlee","domainName":"github"},"branch":"master","displayName":"nicrandomlee/ip[master]","outputFolderName":"nicrandomlee_ip_master"},{"location":{"location":"https://github.com/LuahJunYang/ip.git","repoName":"ip","organization":"LuahJunYang","domainName":"github"},"branch":"master","displayName":"LuahJunYang/ip[master]","outputFolderName":"LuahJunYang_ip_master"},{"location":{"location":"https://github.com/s-peiran/ip.git","repoName":"ip","organization":"s-peiran","domainName":"github"},"branch":"master","displayName":"s-peiran/ip[master]","outputFolderName":"s-peiran_ip_master"},{"location":{"location":"https://github.com/aarontxz/ip.git","repoName":"ip","organization":"aarontxz","domainName":"github"},"branch":"master","displayName":"aarontxz/ip[master]","outputFolderName":"aarontxz_ip_master"},{"location":{"location":"https://github.com/chiayunrong/ip.git","repoName":"ip","organization":"chiayunrong","domainName":"github"},"branch":"master","displayName":"chiayunrong/ip[master]","outputFolderName":"chiayunrong_ip_master"},{"location":{"location":"https://github.com/nixonwidjaja/ip.git","repoName":"ip","organization":"nixonwidjaja","domainName":"github"},"branch":"master","displayName":"nixonwidjaja/ip[master]","outputFolderName":"nixonwidjaja_ip_master"},{"location":{"location":"https://github.com/imkwokyong/ip.git","repoName":"ip","organization":"imkwokyong","domainName":"github"},"branch":"master","displayName":"imkwokyong/ip[master]","outputFolderName":"imkwokyong_ip_master"},{"location":{"location":"https://github.com/mamayuan/ip.git","repoName":"ip","organization":"mamayuan","domainName":"github"},"branch":"master","displayName":"mamayuan/ip[master]","outputFolderName":"mamayuan_ip_master"},{"location":{"location":"https://github.com/geoffong11/ip.git","repoName":"ip","organization":"geoffong11","domainName":"github"},"branch":"master","displayName":"geoffong11/ip[master]","outputFolderName":"geoffong11_ip_master"},{"location":{"location":"https://github.com/vivienherq/ip.git","repoName":"ip","organization":"vivienherq","domainName":"github"},"branch":"master","displayName":"vivienherq/ip[master]","outputFolderName":"vivienherq_ip_master"},{"location":{"location":"https://github.com/johnnythesnake12/ip.git","repoName":"ip","organization":"johnnythesnake12","domainName":"github"},"branch":"master","displayName":"johnnythesnake12/ip[master]","outputFolderName":"johnnythesnake12_ip_master"},{"location":{"location":"https://github.com/Cloud7050/ip.git","repoName":"ip","organization":"Cloud7050","domainName":"github"},"branch":"master","displayName":"Cloud7050/ip[master]","outputFolderName":"Cloud7050_ip_master"},{"location":{"location":"https://github.com/jonyeokj/ip.git","repoName":"ip","organization":"jonyeokj","domainName":"github"},"branch":"master","displayName":"jonyeokj/ip[master]","outputFolderName":"jonyeokj_ip_master"},{"location":{"location":"https://github.com/lipwei1808/ip.git","repoName":"ip","organization":"lipwei1808","domainName":"github"},"branch":"master","displayName":"lipwei1808/ip[master]","outputFolderName":"lipwei1808_ip_master"},{"location":{"location":"https://github.com/zhanyang01/ip.git","repoName":"ip","organization":"zhanyang01","domainName":"github"},"branch":"master","displayName":"zhanyang01/ip[master]","outputFolderName":"zhanyang01_ip_master"},{"location":{"location":"https://github.com/EricXiong420/ip.git","repoName":"ip","organization":"EricXiong420","domainName":"github"},"branch":"master","displayName":"EricXiong420/ip[master]","outputFolderName":"EricXiong420_ip_master"},{"location":{"location":"https://github.com/sp4ce-cowboy/ip.git","repoName":"ip","organization":"sp4ce-cowboy","domainName":"github"},"branch":"master","displayName":"sp4ce-cowboy/ip[master]","outputFolderName":"sp4ce-cowboy_ip_master"},{"location":{"location":"https://github.com/ktzy0305/ip.git","repoName":"ip","organization":"ktzy0305","domainName":"github"},"branch":"master","displayName":"ktzy0305/ip[master]","outputFolderName":"ktzy0305_ip_master"},{"location":{"location":"https://github.com/dom-buri/ip.git","repoName":"ip","organization":"dom-buri","domainName":"github"},"branch":"master","displayName":"dom-buri/ip[master]","outputFolderName":"dom-buri_ip_master"},{"location":{"location":"https://github.com/rayshawntan/ip.git","repoName":"ip","organization":"rayshawntan","domainName":"github"},"branch":"master","displayName":"rayshawntan/ip[master]","outputFolderName":"rayshawntan_ip_master"},{"location":{"location":"https://github.com/Seonlo99/ip.git","repoName":"ip","organization":"Seonlo99","domainName":"github"},"branch":"master","displayName":"Seonlo99/ip[master]","outputFolderName":"Seonlo99_ip_master"},{"location":{"location":"https://github.com/woojiahao/ip.git","repoName":"ip","organization":"woojiahao","domainName":"github"},"branch":"master","displayName":"woojiahao/ip[master]","outputFolderName":"woojiahao_ip_master"},{"location":{"location":"https://github.com/Angelyxx/ip.git","repoName":"ip","organization":"Angelyxx","domainName":"github"},"branch":"master","displayName":"Angelyxx/ip[master]","outputFolderName":"Angelyxx_ip_master"},{"location":{"location":"https://github.com/jamz903/ip.git","repoName":"ip","organization":"jamz903","domainName":"github"},"branch":"master","displayName":"jamz903/ip[master]","outputFolderName":"jamz903_ip_master"},{"location":{"location":"https://github.com/Fallman2/ip.git","repoName":"ip","organization":"Fallman2","domainName":"github"},"branch":"master","displayName":"Fallman2/ip[master]","outputFolderName":"Fallman2_ip_master"},{"location":{"location":"https://github.com/jacobcuison/ip.git","repoName":"ip","organization":"jacobcuison","domainName":"github"},"branch":"master","displayName":"jacobcuison/ip[master]","outputFolderName":"jacobcuison_ip_master"},{"location":{"location":"https://github.com/kenvynKwek/ip.git","repoName":"ip","organization":"kenvynKwek","domainName":"github"},"branch":"master","displayName":"kenvynKwek/ip[master]","outputFolderName":"kenvynKwek_ip_master"},{"location":{"location":"https://github.com/kokrui/ip.git","repoName":"ip","organization":"kokrui","domainName":"github"},"branch":"master","displayName":"kokrui/ip[master]","outputFolderName":"kokrui_ip_master"},{"location":{"location":"https://github.com/ncmathan/ip.git","repoName":"ip","organization":"ncmathan","domainName":"github"},"branch":"master","displayName":"ncmathan/ip[master]","outputFolderName":"ncmathan_ip_master"},{"location":{"location":"https://github.com/xCOLOURx/ip.git","repoName":"ip","organization":"xCOLOURx","domainName":"github"},"branch":"master","displayName":"xCOLOURx/ip[master]","outputFolderName":"xCOLOURx_ip_master"},{"location":{"location":"https://github.com/zhyuhan/ip.git","repoName":"ip","organization":"zhyuhan","domainName":"github"},"branch":"master","displayName":"zhyuhan/ip[master]","outputFolderName":"zhyuhan_ip_master"},{"location":{"location":"https://github.com/ceilingFan456/ip.git","repoName":"ip","organization":"ceilingFan456","domainName":"github"},"branch":"master","displayName":"ceilingFan456/ip[master]","outputFolderName":"ceilingFan456_ip_master"},{"location":{"location":"https://github.com/chuababyy/ip.git","repoName":"ip","organization":"chuababyy","domainName":"github"},"branch":"master","displayName":"chuababyy/ip[master]","outputFolderName":"chuababyy_ip_master"},{"location":{"location":"https://github.com/rocketninja7/ip.git","repoName":"ip","organization":"rocketninja7","domainName":"github"},"branch":"master","displayName":"rocketninja7/ip[master]","outputFolderName":"rocketninja7_ip_master"},{"location":{"location":"https://github.com/marquestye/ip.git","repoName":"ip","organization":"marquestye","domainName":"github"},"branch":"master","displayName":"marquestye/ip[master]","outputFolderName":"marquestye_ip_master"},{"location":{"location":"https://github.com/ruiyangzh/ip.git","repoName":"ip","organization":"ruiyangzh","domainName":"github"},"branch":"master","displayName":"ruiyangzh/ip[master]","outputFolderName":"ruiyangzh_ip_master"},{"location":{"location":"https://github.com/derekjxtan/ip.git","repoName":"ip","organization":"derekjxtan","domainName":"github"},"branch":"master","displayName":"derekjxtan/ip[master]","outputFolderName":"derekjxtan_ip_master"},{"location":{"location":"https://github.com/mounilsankar/ip.git","repoName":"ip","organization":"mounilsankar","domainName":"github"},"branch":"master","displayName":"mounilsankar/ip[master]","outputFolderName":"mounilsankar_ip_master"},{"location":{"location":"https://github.com/wj331/ip.git","repoName":"ip","organization":"wj331","domainName":"github"},"branch":"master","displayName":"wj331/ip[master]","outputFolderName":"wj331_ip_master"},{"location":{"location":"https://github.com/JasonLCY-Temp/ip.git","repoName":"ip","organization":"JasonLCY-Temp","domainName":"github"},"branch":"master","displayName":"JasonLCY-Temp/ip[master]","outputFolderName":"JasonLCY-Temp_ip_master"},{"location":{"location":"https://github.com/lawruixi/ip.git","repoName":"ip","organization":"lawruixi","domainName":"github"},"branch":"master","displayName":"lawruixi/ip[master]","outputFolderName":"lawruixi_ip_master"},{"location":{"location":"https://github.com/wxwern/ip.git","repoName":"ip","organization":"wxwern","domainName":"github"},"branch":"master","displayName":"wxwern/ip[master]","outputFolderName":"wxwern_ip_master"},{"location":{"location":"https://github.com/zekone/ip.git","repoName":"ip","organization":"zekone","domainName":"github"},"branch":"master","displayName":"zekone/ip[master]","outputFolderName":"zekone_ip_master"},{"location":{"location":"https://github.com/wamps-jp/ip.git","repoName":"ip","organization":"wamps-jp","domainName":"github"},"branch":"master","displayName":"wamps-jp/ip[master]","outputFolderName":"wamps-jp_ip_master"},{"location":{"location":"https://github.com/saltedfishxx/ip.git","repoName":"ip","organization":"saltedfishxx","domainName":"github"},"branch":"master","displayName":"saltedfishxx/ip[master]","outputFolderName":"saltedfishxx_ip_master"},{"location":{"location":"https://github.com/winson8222/ip.git","repoName":"ip","organization":"winson8222","domainName":"github"},"branch":"master","displayName":"winson8222/ip[master]","outputFolderName":"winson8222_ip_master"},{"location":{"location":"https://github.com/brandon-nam/ip.git","repoName":"ip","organization":"brandon-nam","domainName":"github"},"branch":"master","displayName":"brandon-nam/ip[master]","outputFolderName":"brandon-nam_ip_master"},{"location":{"location":"https://github.com/p-xp/ip.git","repoName":"ip","organization":"p-xp","domainName":"github"},"branch":"master","displayName":"p-xp/ip[master]","outputFolderName":"p-xp_ip_master"},{"location":{"location":"https://github.com/WeeMingQing/ip.git","repoName":"ip","organization":"WeeMingQing","domainName":"github"},"branch":"master","displayName":"WeeMingQing/ip[master]","outputFolderName":"WeeMingQing_ip_master"},{"location":{"location":"https://github.com/ScarletBlanks/ip.git","repoName":"ip","organization":"ScarletBlanks","domainName":"github"},"branch":"master","displayName":"ScarletBlanks/ip[master]","outputFolderName":"ScarletBlanks_ip_master"},{"location":{"location":"https://github.com/seraphimstreets/ip.git","repoName":"ip","organization":"seraphimstreets","domainName":"github"},"branch":"master","displayName":"seraphimstreets/ip[master]","outputFolderName":"seraphimstreets_ip_master"},{"location":{"location":"https://github.com/devanshubisht/ip.git","repoName":"ip","organization":"devanshubisht","domainName":"github"},"branch":"master","displayName":"devanshubisht/ip[master]","outputFolderName":"devanshubisht_ip_master"},{"location":{"location":"https://github.com/Zjinnnn/ip.git","repoName":"ip","organization":"Zjinnnn","domainName":"github"},"branch":"master","displayName":"Zjinnnn/ip[master]","outputFolderName":"Zjinnnn_ip_master"},{"location":{"location":"https://github.com/brendanneojw/ip.git","repoName":"ip","organization":"brendanneojw","domainName":"github"},"branch":"master","displayName":"brendanneojw/ip[master]","outputFolderName":"brendanneojw_ip_master"},{"location":{"location":"https://github.com/aexolate/ip.git","repoName":"ip","organization":"aexolate","domainName":"github"},"branch":"master","displayName":"aexolate/ip[master]","outputFolderName":"aexolate_ip_master"},{"location":{"location":"https://github.com/techjay-c/ip.git","repoName":"ip","organization":"techjay-c","domainName":"github"},"branch":"master","displayName":"techjay-c/ip[master]","outputFolderName":"techjay-c_ip_master"},{"location":{"location":"https://github.com/SynapseProgramming/ip.git","repoName":"ip","organization":"SynapseProgramming","domainName":"github"},"branch":"master","displayName":"SynapseProgramming/ip[master]","outputFolderName":"SynapseProgramming_ip_master"},{"location":{"location":"https://github.com/TyrusLye/ip.git","repoName":"ip","organization":"TyrusLye","domainName":"github"},"branch":"master","displayName":"TyrusLye/ip[master]","outputFolderName":"TyrusLye_ip_master"},{"location":{"location":"https://github.com/RB9823/ip.git","repoName":"ip","organization":"RB9823","domainName":"github"},"branch":"master","displayName":"RB9823/ip[master]","outputFolderName":"RB9823_ip_master"},{"location":{"location":"https://github.com/jean-cq/ip.git","repoName":"ip","organization":"jean-cq","domainName":"github"},"branch":"master","displayName":"jean-cq/ip[master]","outputFolderName":"jean-cq_ip_master"},{"location":{"location":"https://github.com/Bearypop/ip.git","repoName":"ip","organization":"Bearypop","domainName":"github"},"branch":"master","displayName":"Bearypop/ip[master]","outputFolderName":"Bearypop_ip_master"},{"location":{"location":"https://github.com/andytoh1/ip.git","repoName":"ip","organization":"andytoh1","domainName":"github"},"branch":"master","displayName":"andytoh1/ip[master]","outputFolderName":"andytoh1_ip_master"},{"location":{"location":"https://github.com/siqirua/ip.git","repoName":"ip","organization":"siqirua","domainName":"github"},"branch":"master","displayName":"siqirua/ip[master]","outputFolderName":"siqirua_ip_master"},{"location":{"location":"https://github.com/amosting/ip.git","repoName":"ip","organization":"amosting","domainName":"github"},"branch":"master","displayName":"amosting/ip[master]","outputFolderName":"amosting_ip_master"},{"location":{"location":"https://github.com/JizhuoChen/ip.git","repoName":"ip","organization":"JizhuoChen","domainName":"github"},"branch":"master","displayName":"JizhuoChen/ip[master]","outputFolderName":"JizhuoChen_ip_master"},{"location":{"location":"https://github.com/Tang-Moyan/ip.git","repoName":"ip","organization":"Tang-Moyan","domainName":"github"},"branch":"master","displayName":"Tang-Moyan/ip[master]","outputFolderName":"Tang-Moyan_ip_master"},{"location":{"location":"https://github.com/aliciamichellew/ip.git","repoName":"ip","organization":"aliciamichellew","domainName":"github"},"branch":"master","displayName":"aliciamichellew/ip[master]","outputFolderName":"aliciamichellew_ip_master"},{"location":{"location":"https://github.com/KamiliArsyad/ip.git","repoName":"ip","organization":"KamiliArsyad","domainName":"github"},"branch":"master","displayName":"KamiliArsyad/ip[master]","outputFolderName":"KamiliArsyad_ip_master"},{"location":{"location":"https://github.com/dishenggg/ip.git","repoName":"ip","organization":"dishenggg","domainName":"github"},"branch":"master","displayName":"dishenggg/ip[master]","outputFolderName":"dishenggg_ip_master"},{"location":{"location":"https://github.com/Nixx162/ip.git","repoName":"ip","organization":"Nixx162","domainName":"github"},"branch":"master","displayName":"Nixx162/ip[master]","outputFolderName":"Nixx162_ip_master"},{"location":{"location":"https://github.com/Leb14/ip.git","repoName":"ip","organization":"Leb14","domainName":"github"},"branch":"master","displayName":"Leb14/ip[master]","outputFolderName":"Leb14_ip_master"},{"location":{"location":"https://github.com/Heran9/ip.git","repoName":"ip","organization":"Heran9","domainName":"github"},"branch":"master","displayName":"Heran9/ip[master]","outputFolderName":"Heran9_ip_master"},{"location":{"location":"https://github.com/FerdiHS/ip.git","repoName":"ip","organization":"FerdiHS","domainName":"github"},"branch":"master","displayName":"FerdiHS/ip[master]","outputFolderName":"FerdiHS_ip_master"},{"location":{"location":"https://github.com/StevenLiudw/ip.git","repoName":"ip","organization":"StevenLiudw","domainName":"github"},"branch":"master","displayName":"StevenLiudw/ip[master]","outputFolderName":"StevenLiudw_ip_master"},{"location":{"location":"https://github.com/InfiBeyond/ip.git","repoName":"ip","organization":"InfiBeyond","domainName":"github"},"branch":"master","displayName":"InfiBeyond/ip[master]","outputFolderName":"InfiBeyond_ip_master"},{"location":{"location":"https://github.com/s0ngyang/ip.git","repoName":"ip","organization":"s0ngyang","domainName":"github"},"branch":"master","displayName":"s0ngyang/ip[master]","outputFolderName":"s0ngyang_ip_master"},{"location":{"location":"https://github.com/ivyy-poison/ip.git","repoName":"ip","organization":"ivyy-poison","domainName":"github"},"branch":"master","displayName":"ivyy-poison/ip[master]","outputFolderName":"ivyy-poison_ip_master"},{"location":{"location":"https://github.com/yytan25/ip.git","repoName":"ip","organization":"yytan25","domainName":"github"},"branch":"master","displayName":"yytan25/ip[master]","outputFolderName":"yytan25_ip_master"},{"location":{"location":"https://github.com/tjch-o/ip.git","repoName":"ip","organization":"tjch-o","domainName":"github"},"branch":"master","displayName":"tjch-o/ip[master]","outputFolderName":"tjch-o_ip_master"},{"location":{"location":"https://github.com/jedkohjk/ip.git","repoName":"ip","organization":"jedkohjk","domainName":"github"},"branch":"master","displayName":"jedkohjk/ip[master]","outputFolderName":"jedkohjk_ip_master"},{"location":{"location":"https://github.com/raynertjx/ip.git","repoName":"ip","organization":"raynertjx","domainName":"github"},"branch":"master","displayName":"raynertjx/ip[master]","outputFolderName":"raynertjx_ip_master"},{"location":{"location":"https://github.com/cmHuang777/ip.git","repoName":"ip","organization":"cmHuang777","domainName":"github"},"branch":"master","displayName":"cmHuang777/ip[master]","outputFolderName":"cmHuang777_ip_master"},{"location":{"location":"https://github.com/wui-hong/ip.git","repoName":"ip","organization":"wui-hong","domainName":"github"},"branch":"master","displayName":"wui-hong/ip[master]","outputFolderName":"wui-hong_ip_master"},{"location":{"location":"https://github.com/PohSayKeong/ip.git","repoName":"ip","organization":"PohSayKeong","domainName":"github"},"branch":"master","displayName":"PohSayKeong/ip[master]","outputFolderName":"PohSayKeong_ip_master"},{"location":{"location":"https://github.com/lsyurea/ip.git","repoName":"ip","organization":"lsyurea","domainName":"github"},"branch":"master","displayName":"lsyurea/ip[master]","outputFolderName":"lsyurea_ip_master"},{"location":{"location":"https://github.com/ong-wei-hong/ip.git","repoName":"ip","organization":"ong-wei-hong","domainName":"github"},"branch":"master","displayName":"ong-wei-hong/ip[master]","outputFolderName":"ong-wei-hong_ip_master"},{"location":{"location":"https://github.com/asdfghjkxd/ip.git","repoName":"ip","organization":"asdfghjkxd","domainName":"github"},"branch":"master","displayName":"asdfghjkxd/ip[master]","outputFolderName":"asdfghjkxd_ip_master"},{"location":{"location":"https://github.com/GSgiansen/ip.git","repoName":"ip","organization":"GSgiansen","domainName":"github"},"branch":"master","displayName":"GSgiansen/ip[master]","outputFolderName":"GSgiansen_ip_master"},{"location":{"location":"https://github.com/syamfarh/ip.git","repoName":"ip","organization":"syamfarh","domainName":"github"},"branch":"master","displayName":"syamfarh/ip[master]","outputFolderName":"syamfarh_ip_master"},{"location":{"location":"https://github.com/PetrichorPrecipice/ip.git","repoName":"ip","organization":"PetrichorPrecipice","domainName":"github"},"branch":"master","displayName":"PetrichorPrecipice/ip[master]","outputFolderName":"PetrichorPrecipice_ip_master"},{"location":{"location":"https://github.com/ngeeyonglim/ip.git","repoName":"ip","organization":"ngeeyonglim","domainName":"github"},"branch":"master","displayName":"ngeeyonglim/ip[master]","outputFolderName":"ngeeyonglim_ip_master"},{"location":{"location":"https://github.com/ivanleekk/ip.git","repoName":"ip","organization":"ivanleekk","domainName":"github"},"branch":"master","displayName":"ivanleekk/ip[master]","outputFolderName":"ivanleekk_ip_master"},{"location":{"location":"https://github.com/ryanozx/ip.git","repoName":"ip","organization":"ryanozx","domainName":"github"},"branch":"master","displayName":"ryanozx/ip[master]","outputFolderName":"ryanozx_ip_master"},{"location":{"location":"https://github.com/Jweewee/ip.git","repoName":"ip","organization":"Jweewee","domainName":"github"},"branch":"master","displayName":"Jweewee/ip[master]","outputFolderName":"Jweewee_ip_master"},{"location":{"location":"https://github.com/supermii2/ip.git","repoName":"ip","organization":"supermii2","domainName":"github"},"branch":"master","displayName":"supermii2/ip[master]","outputFolderName":"supermii2_ip_master"},{"location":{"location":"https://github.com/bkjwjason/ip.git","repoName":"ip","organization":"bkjwjason","domainName":"github"},"branch":"master","displayName":"bkjwjason/ip[master]","outputFolderName":"bkjwjason_ip_master"},{"location":{"location":"https://github.com/Sasmik23/ip.git","repoName":"ip","organization":"Sasmik23","domainName":"github"},"branch":"master","displayName":"Sasmik23/ip[master]","outputFolderName":"Sasmik23_ip_master"},{"location":{"location":"https://github.com/nathanielcalimag/ip.git","repoName":"ip","organization":"nathanielcalimag","domainName":"github"},"branch":"master","displayName":"nathanielcalimag/ip[master]","outputFolderName":"nathanielcalimag_ip_master"},{"location":{"location":"https://github.com/AlagappanRa/ip.git","repoName":"ip","organization":"AlagappanRa","domainName":"github"},"branch":"master","displayName":"AlagappanRa/ip[master]","outputFolderName":"AlagappanRa_ip_master"},{"location":{"location":"https://github.com/McNaBry/ip.git","repoName":"ip","organization":"McNaBry","domainName":"github"},"branch":"master","displayName":"McNaBry/ip[master]","outputFolderName":"McNaBry_ip_master"},{"location":{"location":"https://github.com/phiphi-tan/ip.git","repoName":"ip","organization":"phiphi-tan","domainName":"github"},"branch":"master","displayName":"phiphi-tan/ip[master]","outputFolderName":"phiphi-tan_ip_master"},{"location":{"location":"https://github.com/LicongHuang/ip.git","repoName":"ip","organization":"LicongHuang","domainName":"github"},"branch":"master","displayName":"LicongHuang/ip[master]","outputFolderName":"LicongHuang_ip_master"},{"location":{"location":"https://github.com/tanshiyu1999/ip.git","repoName":"ip","organization":"tanshiyu1999","domainName":"github"},"branch":"master","displayName":"tanshiyu1999/ip[master]","outputFolderName":"tanshiyu1999_ip_master"},{"location":{"location":"https://github.com/raydenlim/ip.git","repoName":"ip","organization":"raydenlim","domainName":"github"},"branch":"master","displayName":"raydenlim/ip[master]","outputFolderName":"raydenlim_ip_master"},{"location":{"location":"https://github.com/jianyangg/ip.git","repoName":"ip","organization":"jianyangg","domainName":"github"},"branch":"master","displayName":"jianyangg/ip[master]","outputFolderName":"jianyangg_ip_master"},{"location":{"location":"https://github.com/rionshocker/ip.git","repoName":"ip","organization":"rionshocker","domainName":"github"},"branch":"master","displayName":"rionshocker/ip[master]","outputFolderName":"rionshocker_ip_master"},{"location":{"location":"https://github.com/conradsoon/ip.git","repoName":"ip","organization":"conradsoon","domainName":"github"},"branch":"master","displayName":"conradsoon/ip[master]","outputFolderName":"conradsoon_ip_master"},{"location":{"location":"https://github.com/Jonyxzx/ip.git","repoName":"ip","organization":"Jonyxzx","domainName":"github"},"branch":"master","displayName":"Jonyxzx/ip[master]","outputFolderName":"Jonyxzx_ip_master"},{"location":{"location":"https://github.com/euchangxian/ip.git","repoName":"ip","organization":"euchangxian","domainName":"github"},"branch":"master","displayName":"euchangxian/ip[master]","outputFolderName":"euchangxian_ip_master"},{"location":{"location":"https://github.com/teoks0199/ip.git","repoName":"ip","organization":"teoks0199","domainName":"github"},"branch":"master","displayName":"teoks0199/ip[master]","outputFolderName":"teoks0199_ip_master"},{"location":{"location":"https://github.com/HollaG/ip.git","repoName":"ip","organization":"HollaG","domainName":"github"},"branch":"master","displayName":"HollaG/ip[master]","outputFolderName":"HollaG_ip_master"},{"location":{"location":"https://github.com/leezhengjing/ip.git","repoName":"ip","organization":"leezhengjing","domainName":"github"},"branch":"master","displayName":"leezhengjing/ip[master]","outputFolderName":"leezhengjing_ip_master"},{"location":{"location":"https://github.com/timleow/ip.git","repoName":"ip","organization":"timleow","domainName":"github"},"branch":"master","displayName":"timleow/ip[master]","outputFolderName":"timleow_ip_master"},{"location":{"location":"https://github.com/jacksonyuan256/ip.git","repoName":"ip","organization":"jacksonyuan256","domainName":"github"},"branch":"master","displayName":"jacksonyuan256/ip[master]","outputFolderName":"jacksonyuan256_ip_master"},{"location":{"location":"https://github.com/victorlaiyeeteng/ip.git","repoName":"ip","organization":"victorlaiyeeteng","domainName":"github"},"branch":"master","displayName":"victorlaiyeeteng/ip[master]","outputFolderName":"victorlaiyeeteng_ip_master"},{"location":{"location":"https://github.com/prawnzyy/ip.git","repoName":"ip","organization":"prawnzyy","domainName":"github"},"branch":"master","displayName":"prawnzyy/ip[master]","outputFolderName":"prawnzyy_ip_master"},{"location":{"location":"https://github.com/ryanongwx/ip.git","repoName":"ip","organization":"ryanongwx","domainName":"github"},"branch":"master","displayName":"ryanongwx/ip[master]","outputFolderName":"ryanongwx_ip_master"},{"location":{"location":"https://github.com/tohpinren/ip.git","repoName":"ip","organization":"tohpinren","domainName":"github"},"branch":"master","displayName":"tohpinren/ip[master]","outputFolderName":"tohpinren_ip_master"},{"location":{"location":"https://github.com/DeltonCheng/ip.git","repoName":"ip","organization":"DeltonCheng","domainName":"github"},"branch":"master","displayName":"DeltonCheng/ip[master]","outputFolderName":"DeltonCheng_ip_master"},{"location":{"location":"https://github.com/leontan2/ip.git","repoName":"ip","organization":"leontan2","domainName":"github"},"branch":"master","displayName":"leontan2/ip[master]","outputFolderName":"leontan2_ip_master"},{"location":{"location":"https://github.com/alvinlim277/ip.git","repoName":"ip","organization":"alvinlim277","domainName":"github"},"branch":"master","displayName":"alvinlim277/ip[master]","outputFolderName":"alvinlim277_ip_master"},{"location":{"location":"https://github.com/lshaoqin/ip.git","repoName":"ip","organization":"lshaoqin","domainName":"github"},"branch":"master","displayName":"lshaoqin/ip[master]","outputFolderName":"lshaoqin_ip_master"},{"location":{"location":"https://github.com/ChongWeiJie29/ip.git","repoName":"ip","organization":"ChongWeiJie29","domainName":"github"},"branch":"master","displayName":"ChongWeiJie29/ip[master]","outputFolderName":"ChongWeiJie29_ip_master"},{"location":{"location":"https://github.com/zhonghan721/ip.git","repoName":"ip","organization":"zhonghan721","domainName":"github"},"branch":"master","displayName":"zhonghan721/ip[master]","outputFolderName":"zhonghan721_ip_master"},{"location":{"location":"https://github.com/teozhengyang/ip.git","repoName":"ip","organization":"teozhengyang","domainName":"github"},"branch":"master","displayName":"teozhengyang/ip[master]","outputFolderName":"teozhengyang_ip_master"},{"location":{"location":"https://github.com/garylow2001/ip.git","repoName":"ip","organization":"garylow2001","domainName":"github"},"branch":"master","displayName":"garylow2001/ip[master]","outputFolderName":"garylow2001_ip_master"},{"location":{"location":"https://github.com/Cleon2/ip.git","repoName":"ip","organization":"Cleon2","domainName":"github"},"branch":"master","displayName":"Cleon2/ip[master]","outputFolderName":"Cleon2_ip_master"},{"location":{"location":"https://github.com/limzhenwy/ip.git","repoName":"ip","organization":"limzhenwy","domainName":"github"},"branch":"master","displayName":"limzhenwy/ip[master]","outputFolderName":"limzhenwy_ip_master"},{"location":{"location":"https://github.com/ItsTYtan/ip.git","repoName":"ip","organization":"ItsTYtan","domainName":"github"},"branch":"master","displayName":"ItsTYtan/ip[master]","outputFolderName":"ItsTYtan_ip_master"},{"location":{"location":"https://github.com/owenyeo/ip.git","repoName":"ip","organization":"owenyeo","domainName":"github"},"branch":"master","displayName":"owenyeo/ip[master]","outputFolderName":"owenyeo_ip_master"},{"location":{"location":"https://github.com/jonasongg/ip.git","repoName":"ip","organization":"jonasongg","domainName":"github"},"branch":"master","displayName":"jonasongg/ip[master]","outputFolderName":"jonasongg_ip_master"},{"location":{"location":"https://github.com/Ruizhi2001/ip.git","repoName":"ip","organization":"Ruizhi2001","domainName":"github"},"branch":"master","displayName":"Ruizhi2001/ip[master]","outputFolderName":"Ruizhi2001_ip_master"},{"location":{"location":"https://github.com/Dioclei/ip.git","repoName":"ip","organization":"Dioclei","domainName":"github"},"branch":"master","displayName":"Dioclei/ip[master]","outputFolderName":"Dioclei_ip_master"},{"location":{"location":"https://github.com/bobscodedump/ip.git","repoName":"ip","organization":"bobscodedump","domainName":"github"},"branch":"master","displayName":"bobscodedump/ip[master]","outputFolderName":"bobscodedump_ip_master"},{"location":{"location":"https://github.com/andrefoo/ip.git","repoName":"ip","organization":"andrefoo","domainName":"github"},"branch":"master","displayName":"andrefoo/ip[master]","outputFolderName":"andrefoo_ip_master"},{"location":{"location":"https://github.com/Bombbird2001/ip.git","repoName":"ip","organization":"Bombbird2001","domainName":"github"},"branch":"master","displayName":"Bombbird2001/ip[master]","outputFolderName":"Bombbird2001_ip_master"},{"location":{"location":"https://github.com/chewjh1234/ip.git","repoName":"ip","organization":"chewjh1234","domainName":"github"},"branch":"master","displayName":"chewjh1234/ip[master]","outputFolderName":"chewjh1234_ip_master"},{"location":{"location":"https://github.com/dloh2236/ip.git","repoName":"ip","organization":"dloh2236","domainName":"github"},"branch":"master","displayName":"dloh2236/ip[master]","outputFolderName":"dloh2236_ip_master"},{"location":{"location":"https://github.com/chew01/ip.git","repoName":"ip","organization":"chew01","domainName":"github"},"branch":"master","displayName":"chew01/ip[master]","outputFolderName":"chew01_ip_master"},{"location":{"location":"https://github.com/trgao/ip.git","repoName":"ip","organization":"trgao","domainName":"github"},"branch":"master","displayName":"trgao/ip[master]","outputFolderName":"trgao_ip_master"},{"location":{"location":"https://github.com/richiehx/ip.git","repoName":"ip","organization":"richiehx","domainName":"github"},"branch":"master","displayName":"richiehx/ip[master]","outputFolderName":"richiehx_ip_master"},{"location":{"location":"https://github.com/LoMaply/ip.git","repoName":"ip","organization":"LoMaply","domainName":"github"},"branch":"master","displayName":"LoMaply/ip[master]","outputFolderName":"LoMaply_ip_master"},{"location":{"location":"https://github.com/Originalidk/ip.git","repoName":"ip","organization":"Originalidk","domainName":"github"},"branch":"master","displayName":"Originalidk/ip[master]","outputFolderName":"Originalidk_ip_master"},{"location":{"location":"https://github.com/kiatkat/ip.git","repoName":"ip","organization":"kiatkat","domainName":"github"},"branch":"master","displayName":"kiatkat/ip[master]","outputFolderName":"kiatkat_ip_master"},{"location":{"location":"https://github.com/juliusgambe/ip.git","repoName":"ip","organization":"juliusgambe","domainName":"github"},"branch":"master","displayName":"juliusgambe/ip[master]","outputFolderName":"juliusgambe_ip_master"},{"location":{"location":"https://github.com/jiakai-17/ip.git","repoName":"ip","organization":"jiakai-17","domainName":"github"},"branch":"master","displayName":"jiakai-17/ip[master]","outputFolderName":"jiakai-17_ip_master"},{"location":{"location":"https://github.com/nikele2001/ip.git","repoName":"ip","organization":"nikele2001","domainName":"github"},"branch":"master","displayName":"nikele2001/ip[master]","outputFolderName":"nikele2001_ip_master"},{"location":{"location":"https://github.com/jylow/ip.git","repoName":"ip","organization":"jylow","domainName":"github"},"branch":"master","displayName":"jylow/ip[master]","outputFolderName":"jylow_ip_master"},{"location":{"location":"https://github.com/jx124/ip.git","repoName":"ip","organization":"jx124","domainName":"github"},"branch":"master","displayName":"jx124/ip[master]","outputFolderName":"jx124_ip_master"},{"location":{"location":"https://github.com/Kb-Tay/ip.git","repoName":"ip","organization":"Kb-Tay","domainName":"github"},"branch":"master","displayName":"Kb-Tay/ip[master]","outputFolderName":"Kb-Tay_ip_master"},{"location":{"location":"https://github.com/jinyuan0425/ip.git","repoName":"ip","organization":"jinyuan0425","domainName":"github"},"branch":"master","displayName":"jinyuan0425/ip[master]","outputFolderName":"jinyuan0425_ip_master"},{"location":{"location":"https://github.com/darrentfy/ip.git","repoName":"ip","organization":"darrentfy","domainName":"github"},"branch":"master","displayName":"darrentfy/ip[master]","outputFolderName":"darrentfy_ip_master"},{"location":{"location":"https://github.com/HEEaZ/ip.git","repoName":"ip","organization":"HEEaZ","domainName":"github"},"branch":"master","displayName":"HEEaZ/ip[master]","outputFolderName":"HEEaZ_ip_master"},{"location":{"location":"https://github.com/ji-just-ji/ip.git","repoName":"ip","organization":"ji-just-ji","domainName":"github"},"branch":"master","displayName":"ji-just-ji/ip[master]","outputFolderName":"ji-just-ji_ip_master"},{"location":{"location":"https://github.com/simbayippy/ip.git","repoName":"ip","organization":"simbayippy","domainName":"github"},"branch":"master","displayName":"simbayippy/ip[master]","outputFolderName":"simbayippy_ip_master"},{"location":{"location":"https://github.com/teozern1/ip.git","repoName":"ip","organization":"teozern1","domainName":"github"},"branch":"master","displayName":"teozern1/ip[master]","outputFolderName":"teozern1_ip_master"},{"location":{"location":"https://github.com/brein62/ip.git","repoName":"ip","organization":"brein62","domainName":"github"},"branch":"master","displayName":"brein62/ip[master]","outputFolderName":"brein62_ip_master"},{"location":{"location":"https://github.com/awhb/ip.git","repoName":"ip","organization":"awhb","domainName":"github"},"branch":"master","displayName":"awhb/ip[master]","outputFolderName":"awhb_ip_master"},{"location":{"location":"https://github.com/Mahidharah/ip.git","repoName":"ip","organization":"Mahidharah","domainName":"github"},"branch":"master","displayName":"Mahidharah/ip[master]","outputFolderName":"Mahidharah_ip_master"},{"location":{"location":"https://github.com/timetraveller-123/ip.git","repoName":"ip","organization":"timetraveller-123","domainName":"github"},"branch":"master","displayName":"timetraveller-123/ip[master]","outputFolderName":"timetraveller-123_ip_master"},{"location":{"location":"https://github.com/ElginTZM/ip.git","repoName":"ip","organization":"ElginTZM","domainName":"github"},"branch":"master","displayName":"ElginTZM/ip[master]","outputFolderName":"ElginTZM_ip_master"},{"location":{"location":"https://github.com/ryamgoh/ip.git","repoName":"ip","organization":"ryamgoh","domainName":"github"},"branch":"master","displayName":"ryamgoh/ip[master]","outputFolderName":"ryamgoh_ip_master"},{"location":{"location":"https://github.com/Blizzeracz/ip.git","repoName":"ip","organization":"Blizzeracz","domainName":"github"},"branch":"master","displayName":"Blizzeracz/ip[master]","outputFolderName":"Blizzeracz_ip_master"},{"location":{"location":"https://github.com/kiwibang/ip.git","repoName":"ip","organization":"kiwibang","domainName":"github"},"branch":"master","displayName":"kiwibang/ip[master]","outputFolderName":"kiwibang_ip_master"},{"location":{"location":"https://github.com/redtailedfox/ip.git","repoName":"ip","organization":"redtailedfox","domainName":"github"},"branch":"master","displayName":"redtailedfox/ip[master]","outputFolderName":"redtailedfox_ip_master"},{"location":{"location":"https://github.com/lamchenghou/ip.git","repoName":"ip","organization":"lamchenghou","domainName":"github"},"branch":"master","displayName":"lamchenghou/ip[master]","outputFolderName":"lamchenghou_ip_master"},{"location":{"location":"https://github.com/gongg21/ip.git","repoName":"ip","organization":"gongg21","domainName":"github"},"branch":"master","displayName":"gongg21/ip[master]","outputFolderName":"gongg21_ip_master"},{"location":{"location":"https://github.com/CJ-Lee01/ip.git","repoName":"ip","organization":"CJ-Lee01","domainName":"github"},"branch":"master","displayName":"CJ-Lee01/ip[master]","outputFolderName":"CJ-Lee01_ip_master"},{"location":{"location":"https://github.com/Sheeepen/ip.git","repoName":"ip","organization":"Sheeepen","domainName":"github"},"branch":"master","displayName":"Sheeepen/ip[master]","outputFolderName":"Sheeepen_ip_master"},{"location":{"location":"https://github.com/AaronJT1/ip.git","repoName":"ip","organization":"AaronJT1","domainName":"github"},"branch":"master","displayName":"AaronJT1/ip[master]","outputFolderName":"AaronJT1_ip_master"},{"location":{"location":"https://github.com/Respirayson/ip.git","repoName":"ip","organization":"Respirayson","domainName":"github"},"branch":"master","displayName":"Respirayson/ip[master]","outputFolderName":"Respirayson_ip_master"},{"location":{"location":"https://github.com/dickongwd/ip.git","repoName":"ip","organization":"dickongwd","domainName":"github"},"branch":"master","displayName":"dickongwd/ip[master]","outputFolderName":"dickongwd_ip_master"},{"location":{"location":"https://github.com/nicholascher/ip.git","repoName":"ip","organization":"nicholascher","domainName":"github"},"branch":"master","displayName":"nicholascher/ip[master]","outputFolderName":"nicholascher_ip_master"},{"location":{"location":"https://github.com/et-irl/ip.git","repoName":"ip","organization":"et-irl","domainName":"github"},"branch":"master","displayName":"et-irl/ip[master]","outputFolderName":"et-irl_ip_master"},{"location":{"location":"https://github.com/aslam341/ip.git","repoName":"ip","organization":"aslam341","domainName":"github"},"branch":"master","displayName":"aslam341/ip[master]","outputFolderName":"aslam341_ip_master"},{"location":{"location":"https://github.com/seantehds/ip.git","repoName":"ip","organization":"seantehds","domainName":"github"},"branch":"master","displayName":"seantehds/ip[master]","outputFolderName":"seantehds_ip_master"},{"location":{"location":"https://github.com/jianrong7/ip.git","repoName":"ip","organization":"jianrong7","domainName":"github"},"branch":"master","displayName":"jianrong7/ip[master]","outputFolderName":"jianrong7_ip_master"},{"location":{"location":"https://github.com/TeeRenJing/ip.git","repoName":"ip","organization":"TeeRenJing","domainName":"github"},"branch":"master","displayName":"TeeRenJing/ip[master]","outputFolderName":"TeeRenJing_ip_master"},{"location":{"location":"https://github.com/RoeReRe/ip.git","repoName":"ip","organization":"RoeReRe","domainName":"github"},"branch":"master","displayName":"RoeReRe/ip[master]","outputFolderName":"RoeReRe_ip_master"},{"location":{"location":"https://github.com/zsh-eng/ip.git","repoName":"ip","organization":"zsh-eng","domainName":"github"},"branch":"master","displayName":"zsh-eng/ip[master]","outputFolderName":"zsh-eng_ip_master"},{"location":{"location":"https://github.com/seanpzk/ip.git","repoName":"ip","organization":"seanpzk","domainName":"github"},"branch":"master","displayName":"seanpzk/ip[master]","outputFolderName":"seanpzk_ip_master"},{"location":{"location":"https://github.com/quzhetao01/ip.git","repoName":"ip","organization":"quzhetao01","domainName":"github"},"branch":"master","displayName":"quzhetao01/ip[master]","outputFolderName":"quzhetao01_ip_master"},{"location":{"location":"https://github.com/joel-foo/ip.git","repoName":"ip","organization":"joel-foo","domainName":"github"},"branch":"master","displayName":"joel-foo/ip[master]","outputFolderName":"joel-foo_ip_master"},{"location":{"location":"https://github.com/markgcera/ip.git","repoName":"ip","organization":"markgcera","domainName":"github"},"branch":"master","displayName":"markgcera/ip[master]","outputFolderName":"markgcera_ip_master"},{"location":{"location":"https://github.com/dylkaw/ip.git","repoName":"ip","organization":"dylkaw","domainName":"github"},"branch":"master","displayName":"dylkaw/ip[master]","outputFolderName":"dylkaw_ip_master"},{"location":{"location":"https://github.com/SelwynAng/ip.git","repoName":"ip","organization":"SelwynAng","domainName":"github"},"branch":"master","displayName":"SelwynAng/ip[master]","outputFolderName":"SelwynAng_ip_master"},{"location":{"location":"https://github.com/jinyang628/ip.git","repoName":"ip","organization":"jinyang628","domainName":"github"},"branch":"master","displayName":"jinyang628/ip[master]","outputFolderName":"jinyang628_ip_master"},{"location":{"location":"https://github.com/matochichap/ip.git","repoName":"ip","organization":"matochichap","domainName":"github"},"branch":"master","displayName":"matochichap/ip[master]","outputFolderName":"matochichap_ip_master"},{"location":{"location":"https://github.com/sk2001git/ip.git","repoName":"ip","organization":"sk2001git","domainName":"github"},"branch":"master","displayName":"sk2001git/ip[master]","outputFolderName":"sk2001git_ip_master"},{"location":{"location":"https://github.com/jason-raiin/ip.git","repoName":"ip","organization":"jason-raiin","domainName":"github"},"branch":"master","displayName":"jason-raiin/ip[master]","outputFolderName":"jason-raiin_ip_master"},{"location":{"location":"https://github.com/Sebtey/ip.git","repoName":"ip","organization":"Sebtey","domainName":"github"},"branch":"master","displayName":"Sebtey/ip[master]","outputFolderName":"Sebtey_ip_master"},{"location":{"location":"https://github.com/Jweng88/ip.git","repoName":"ip","organization":"Jweng88","domainName":"github"},"branch":"master","displayName":"Jweng88/ip[master]","outputFolderName":"Jweng88_ip_master"},{"location":{"location":"https://github.com/billieboy7/ip.git","repoName":"ip","organization":"billieboy7","domainName":"github"},"branch":"master","displayName":"billieboy7/ip[master]","outputFolderName":"billieboy7_ip_master"},{"location":{"location":"https://github.com/ldinghan/ip.git","repoName":"ip","organization":"ldinghan","domainName":"github"},"branch":"master","displayName":"ldinghan/ip[master]","outputFolderName":"ldinghan_ip_master"},{"location":{"location":"https://github.com/anthonytamzil/ip.git","repoName":"ip","organization":"anthonytamzil","domainName":"github"},"branch":"master","displayName":"anthonytamzil/ip[master]","outputFolderName":"anthonytamzil_ip_master"},{"location":{"location":"https://github.com/ryantzr1/ip.git","repoName":"ip","organization":"ryantzr1","domainName":"github"},"branch":"master","displayName":"ryantzr1/ip[master]","outputFolderName":"ryantzr1_ip_master"},{"location":{"location":"https://github.com/shuyangk/ip.git","repoName":"ip","organization":"shuyangk","domainName":"github"},"branch":"master","displayName":"shuyangk/ip[master]","outputFolderName":"shuyangk_ip_master"},{"location":{"location":"https://github.com/seewhyjay/ip.git","repoName":"ip","organization":"seewhyjay","domainName":"github"},"branch":"master","displayName":"seewhyjay/ip[master]","outputFolderName":"seewhyjay_ip_master"},{"location":{"location":"https://github.com/waseemingly/ip.git","repoName":"ip","organization":"waseemingly","domainName":"github"},"branch":"master","displayName":"waseemingly/ip[master]","outputFolderName":"waseemingly_ip_master"},{"location":{"location":"https://github.com/DistractedCat/ip.git","repoName":"ip","organization":"DistractedCat","domainName":"github"},"branch":"master","displayName":"DistractedCat/ip[master]","outputFolderName":"DistractedCat_ip_master"},{"location":{"location":"https://github.com/geraldngjx/ip.git","repoName":"ip","organization":"geraldngjx","domainName":"github"},"branch":"master","displayName":"geraldngjx/ip[master]","outputFolderName":"geraldngjx_ip_master"},{"location":{"location":"https://github.com/tayian/ip.git","repoName":"ip","organization":"tayian","domainName":"github"},"branch":"master","displayName":"tayian/ip[master]","outputFolderName":"tayian_ip_master"},{"location":{"location":"https://github.com/AlfredBeNoel/ip.git","repoName":"ip","organization":"AlfredBeNoel","domainName":"github"},"branch":"master","displayName":"AlfredBeNoel/ip[master]","outputFolderName":"AlfredBeNoel_ip_master"},{"location":{"location":"https://github.com/Chen1x/ip.git","repoName":"ip","organization":"Chen1x","domainName":"github"},"branch":"master","displayName":"Chen1x/ip[master]","outputFolderName":"Chen1x_ip_master"},{"location":{"location":"https://github.com/juzzztinsoong/ip.git","repoName":"ip","organization":"juzzztinsoong","domainName":"github"},"branch":"master","displayName":"juzzztinsoong/ip[master]","outputFolderName":"juzzztinsoong_ip_master"},{"location":{"location":"https://github.com/lambraydon/ip.git","repoName":"ip","organization":"lambraydon","domainName":"github"},"branch":"master","displayName":"lambraydon/ip[master]","outputFolderName":"lambraydon_ip_master"},{"location":{"location":"https://github.com/lilozz2/ip.git","repoName":"ip","organization":"lilozz2","domainName":"github"},"branch":"master","displayName":"lilozz2/ip[master]","outputFolderName":"lilozz2_ip_master"},{"location":{"location":"https://github.com/tyouwei/ip.git","repoName":"ip","organization":"tyouwei","domainName":"github"},"branch":"master","displayName":"tyouwei/ip[master]","outputFolderName":"tyouwei_ip_master"},{"location":{"location":"https://github.com/Kailash201/ip.git","repoName":"ip","organization":"Kailash201","domainName":"github"},"branch":"master","displayName":"Kailash201/ip[master]","outputFolderName":"Kailash201_ip_master"},{"location":{"location":"https://github.com/tjingsheng/ip.git","repoName":"ip","organization":"tjingsheng","domainName":"github"},"branch":"master","displayName":"tjingsheng/ip[master]","outputFolderName":"tjingsheng_ip_master"},{"location":{"location":"https://github.com/pangyyen/ip.git","repoName":"ip","organization":"pangyyen","domainName":"github"},"branch":"master","displayName":"pangyyen/ip[master]","outputFolderName":"pangyyen_ip_master"},{"location":{"location":"https://github.com/Khaleelur-Rahman/ip.git","repoName":"ip","organization":"Khaleelur-Rahman","domainName":"github"},"branch":"master","displayName":"Khaleelur-Rahman/ip[master]","outputFolderName":"Khaleelur-Rahman_ip_master"},{"location":{"location":"https://github.com/erohsikivar/ip.git","repoName":"ip","organization":"erohsikivar","domainName":"github"},"branch":"master","displayName":"erohsikivar/ip[master]","outputFolderName":"erohsikivar_ip_master"},{"location":{"location":"https://github.com/shishirbychapur/ip.git","repoName":"ip","organization":"shishirbychapur","domainName":"github"},"branch":"master","displayName":"shishirbychapur/ip[master]","outputFolderName":"shishirbychapur_ip_master"},{"location":{"location":"https://github.com/Badatprogrammiing/ip.git","repoName":"ip","organization":"Badatprogrammiing","domainName":"github"},"branch":"master","displayName":"Badatprogrammiing/ip[master]","outputFolderName":"Badatprogrammiing_ip_master"},{"location":{"location":"https://github.com/ravern/ip.git","repoName":"ip","organization":"ravern","domainName":"github"},"branch":"master","displayName":"ravern/ip[master]","outputFolderName":"ravern_ip_master"},{"location":{"location":"https://github.com/B-enguin/ip.git","repoName":"ip","organization":"B-enguin","domainName":"github"},"branch":"master","displayName":"B-enguin/ip[master]","outputFolderName":"B-enguin_ip_master"},{"location":{"location":"https://github.com/AlyssaPng/ip.git","repoName":"ip","organization":"AlyssaPng","domainName":"github"},"branch":"master","displayName":"AlyssaPng/ip[master]","outputFolderName":"AlyssaPng_ip_master"},{"location":{"location":"https://github.com/flexibo/ip.git","repoName":"ip","organization":"flexibo","domainName":"github"},"branch":"master","displayName":"flexibo/ip[master]","outputFolderName":"flexibo_ip_master"},{"location":{"location":"https://github.com/lordidiot/ip.git","repoName":"ip","organization":"lordidiot","domainName":"github"},"branch":"master","displayName":"lordidiot/ip[master]","outputFolderName":"lordidiot_ip_master"},{"location":{"location":"https://github.com/vansh284/ip.git","repoName":"ip","organization":"vansh284","domainName":"github"},"branch":"master","displayName":"vansh284/ip[master]","outputFolderName":"vansh284_ip_master"},{"location":{"location":"https://github.com/samuelim01/ip.git","repoName":"ip","organization":"samuelim01","domainName":"github"},"branch":"master","displayName":"samuelim01/ip[master]","outputFolderName":"samuelim01_ip_master"},{"location":{"location":"https://github.com/WZWren/ip.git","repoName":"ip","organization":"WZWren","domainName":"github"},"branch":"master","displayName":"WZWren/ip[master]","outputFolderName":"WZWren_ip_master"},{"location":{"location":"https://github.com/cxo05/ip.git","repoName":"ip","organization":"cxo05","domainName":"github"},"branch":"master","displayName":"cxo05/ip[master]","outputFolderName":"cxo05_ip_master"},{"location":{"location":"https://github.com/sudarshan2401/ip.git","repoName":"ip","organization":"sudarshan2401","domainName":"github"},"branch":"master","displayName":"sudarshan2401/ip[master]","outputFolderName":"sudarshan2401_ip_master"},{"location":{"location":"https://github.com/jingyu987/ip.git","repoName":"ip","organization":"jingyu987","domainName":"github"},"branch":"master","displayName":"jingyu987/ip[master]","outputFolderName":"jingyu987_ip_master"},{"location":{"location":"https://github.com/H1410101/ip.git","repoName":"ip","organization":"H1410101","domainName":"github"},"branch":"master","displayName":"H1410101/ip[master]","outputFolderName":"H1410101_ip_master"},{"location":{"location":"https://github.com/MagnificentCreature/ip.git","repoName":"ip","organization":"MagnificentCreature","domainName":"github"},"branch":"master","displayName":"MagnificentCreature/ip[master]","outputFolderName":"MagnificentCreature_ip_master"},{"location":{"location":"https://github.com/shyanyong/ip.git","repoName":"ip","organization":"shyanyong","domainName":"github"},"branch":"master","displayName":"shyanyong/ip[master]","outputFolderName":"shyanyong_ip_master"},{"location":{"location":"https://github.com/peasantbird/ip.git","repoName":"ip","organization":"peasantbird","domainName":"github"},"branch":"master","displayName":"peasantbird/ip[master]","outputFolderName":"peasantbird_ip_master"},{"location":{"location":"https://github.com/tllshan/ip.git","repoName":"ip","organization":"tllshan","domainName":"github"},"branch":"master","displayName":"tllshan/ip[master]","outputFolderName":"tllshan_ip_master"},{"location":{"location":"https://github.com/sushiyade/ip.git","repoName":"ip","organization":"sushiyade","domainName":"github"},"branch":"master","displayName":"sushiyade/ip[master]","outputFolderName":"sushiyade_ip_master"},{"location":{"location":"https://github.com/iyioon/ip.git","repoName":"ip","organization":"iyioon","domainName":"github"},"branch":"master","displayName":"iyioon/ip[master]","outputFolderName":"iyioon_ip_master"},{"location":{"location":"https://github.com/shashahchk/ip.git","repoName":"ip","organization":"shashahchk","domainName":"github"},"branch":"master","displayName":"shashahchk/ip[master]","outputFolderName":"shashahchk_ip_master"},{"location":{"location":"https://github.com/Chandan8186/ip.git","repoName":"ip","organization":"Chandan8186","domainName":"github"},"branch":"master","displayName":"Chandan8186/ip[master]","outputFolderName":"Chandan8186_ip_master"},{"location":{"location":"https://github.com/wesho1107/ip.git","repoName":"ip","organization":"wesho1107","domainName":"github"},"branch":"master","displayName":"wesho1107/ip[master]","outputFolderName":"wesho1107_ip_master"},{"location":{"location":"https://github.com/tim-pipi/ip.git","repoName":"ip","organization":"tim-pipi","domainName":"github"},"branch":"master","displayName":"tim-pipi/ip[master]","outputFolderName":"tim-pipi_ip_master"},{"location":{"location":"https://github.com/emzm2023/ip.git","repoName":"ip","organization":"emzm2023","domainName":"github"},"branch":"master","displayName":"emzm2023/ip[master]","outputFolderName":"emzm2023_ip_master"},{"location":{"location":"https://github.com/dlathyun/ip.git","repoName":"ip","organization":"dlathyun","domainName":"github"},"branch":"master","displayName":"dlathyun/ip[master]","outputFolderName":"dlathyun_ip_master"},{"location":{"location":"https://github.com/tanboonkhong/ip.git","repoName":"ip","organization":"tanboonkhong","domainName":"github"},"branch":"master","displayName":"tanboonkhong/ip[master]","outputFolderName":"tanboonkhong_ip_master"},{"location":{"location":"https://github.com/joeng03/ip.git","repoName":"ip","organization":"joeng03","domainName":"github"},"branch":"master","displayName":"joeng03/ip[master]","outputFolderName":"joeng03_ip_master"},{"location":{"location":"https://github.com/VN-Hao/ip.git","repoName":"ip","organization":"VN-Hao","domainName":"github"},"branch":"master","displayName":"VN-Hao/ip[master]","outputFolderName":"VN-Hao_ip_master"},{"location":{"location":"https://github.com/NgChunMan/ip.git","repoName":"ip","organization":"NgChunMan","domainName":"github"},"branch":"master","displayName":"NgChunMan/ip[master]","outputFolderName":"NgChunMan_ip_master"},{"location":{"location":"https://github.com/TiwKangXu/ip.git","repoName":"ip","organization":"TiwKangXu","domainName":"github"},"branch":"master","displayName":"TiwKangXu/ip[master]","outputFolderName":"TiwKangXu_ip_master"},{"location":{"location":"https://github.com/josepholim/ip.git","repoName":"ip","organization":"josepholim","domainName":"github"},"branch":"master","displayName":"josepholim/ip[master]","outputFolderName":"josepholim_ip_master"},{"location":{"location":"https://github.com/dinde2004/ip.git","repoName":"ip","organization":"dinde2004","domainName":"github"},"branch":"master","displayName":"dinde2004/ip[master]","outputFolderName":"dinde2004_ip_master"},{"location":{"location":"https://github.com/yucongkoo/ip.git","repoName":"ip","organization":"yucongkoo","domainName":"github"},"branch":"master","displayName":"yucongkoo/ip[master]","outputFolderName":"yucongkoo_ip_master"},{"location":{"location":"https://github.com/TohLiYuan/ip.git","repoName":"ip","organization":"TohLiYuan","domainName":"github"},"branch":"master","displayName":"TohLiYuan/ip[master]","outputFolderName":"TohLiYuan_ip_master"},{"location":{"location":"https://github.com/NereusWB922/ip.git","repoName":"ip","organization":"NereusWB922","domainName":"github"},"branch":"master","displayName":"NereusWB922/ip[master]","outputFolderName":"NereusWB922_ip_master"},{"location":{"location":"https://github.com/ph-nathan/ip.git","repoName":"ip","organization":"ph-nathan","domainName":"github"},"branch":"master","displayName":"ph-nathan/ip[master]","outputFolderName":"ph-nathan_ip_master"},{"location":{"location":"https://github.com/antonTan96/ip.git","repoName":"ip","organization":"antonTan96","domainName":"github"},"branch":"master","displayName":"antonTan96/ip[master]","outputFolderName":"antonTan96_ip_master"},{"location":{"location":"https://github.com/WinstonLeonard/ip.git","repoName":"ip","organization":"WinstonLeonard","domainName":"github"},"branch":"master","displayName":"WinstonLeonard/ip[master]","outputFolderName":"WinstonLeonard_ip_master"},{"location":{"location":"https://github.com/TehOPanas/ip.git","repoName":"ip","organization":"TehOPanas","domainName":"github"},"branch":"master","displayName":"TehOPanas/ip[master]","outputFolderName":"TehOPanas_ip_master"},{"location":{"location":"https://github.com/marioalvaro/ip.git","repoName":"ip","organization":"marioalvaro","domainName":"github"},"branch":"master","displayName":"marioalvaro/ip[master]","outputFolderName":"marioalvaro_ip_master"},{"location":{"location":"https://github.com/LINCHENYU2030S/ip.git","repoName":"ip","organization":"LINCHENYU2030S","domainName":"github"},"branch":"master","displayName":"LINCHENYU2030S/ip[master]","outputFolderName":"LINCHENYU2030S_ip_master"},{"location":{"location":"https://github.com/LamJiuFong/ip.git","repoName":"ip","organization":"LamJiuFong","domainName":"github"},"branch":"master","displayName":"LamJiuFong/ip[master]","outputFolderName":"LamJiuFong_ip_master"},{"location":{"location":"https://github.com/AndrewJanong/ip.git","repoName":"ip","organization":"AndrewJanong","domainName":"github"},"branch":"master","displayName":"AndrewJanong/ip[master]","outputFolderName":"AndrewJanong_ip_master"},{"location":{"location":"https://github.com/songfangyl/ip.git","repoName":"ip","organization":"songfangyl","domainName":"github"},"branch":"master","displayName":"songfangyl/ip[master]","outputFolderName":"songfangyl_ip_master"},{"location":{"location":"https://github.com/AriellaCallista/ip.git","repoName":"ip","organization":"AriellaCallista","domainName":"github"},"branch":"master","displayName":"AriellaCallista/ip[master]","outputFolderName":"AriellaCallista_ip_master"},{"location":{"location":"https://github.com/KamJiaYue/ip.git","repoName":"ip","organization":"KamJiaYue","domainName":"github"},"branch":"master","displayName":"KamJiaYue/ip[master]","outputFolderName":"KamJiaYue_ip_master"},{"location":{"location":"https://github.com/feifeiraindrops/ip.git","repoName":"ip","organization":"feifeiraindrops","domainName":"github"},"branch":"master","displayName":"feifeiraindrops/ip[master]","outputFolderName":"feifeiraindrops_ip_master"},{"location":{"location":"https://github.com/czhiruo/ip.git","repoName":"ip","organization":"czhiruo","domainName":"github"},"branch":"master","displayName":"czhiruo/ip[master]","outputFolderName":"czhiruo_ip_master"},{"location":{"location":"https://github.com/butteredyakiimo/ip.git","repoName":"ip","organization":"butteredyakiimo","domainName":"github"},"branch":"master","displayName":"butteredyakiimo/ip[master]","outputFolderName":"butteredyakiimo_ip_master"},{"location":{"location":"https://github.com/RiyaMehta2211/ip.git","repoName":"ip","organization":"RiyaMehta2211","domainName":"github"},"branch":"master","displayName":"RiyaMehta2211/ip[master]","outputFolderName":"RiyaMehta2211_ip_master"},{"location":{"location":"https://github.com/beatricecst/ip.git","repoName":"ip","organization":"beatricecst","domainName":"github"},"branch":"master","displayName":"beatricecst/ip[master]","outputFolderName":"beatricecst_ip_master"},{"location":{"location":"https://github.com/maypfv/ip.git","repoName":"ip","organization":"maypfv","domainName":"github"},"branch":"master","displayName":"maypfv/ip[master]","outputFolderName":"maypfv_ip_master"},{"location":{"location":"https://github.com/pra-navi/ip.git","repoName":"ip","organization":"pra-navi","domainName":"github"},"branch":"master","displayName":"pra-navi/ip[master]","outputFolderName":"pra-navi_ip_master"},{"location":{"location":"https://github.com/xxiaoweii/ip.git","repoName":"ip","organization":"xxiaoweii","domainName":"github"},"branch":"master","displayName":"xxiaoweii/ip[master]","outputFolderName":"xxiaoweii_ip_master"},{"location":{"location":"https://github.com/qyaner/ip.git","repoName":"ip","organization":"qyaner","domainName":"github"},"branch":"master","displayName":"qyaner/ip[master]","outputFolderName":"qyaner_ip_master"},{"location":{"location":"https://github.com/qz1004/ip.git","repoName":"ip","organization":"qz1004","domainName":"github"},"branch":"master","displayName":"qz1004/ip[master]","outputFolderName":"qz1004_ip_master"},{"location":{"location":"https://github.com/miljyy/ip.git","repoName":"ip","organization":"miljyy","domainName":"github"},"branch":"master","displayName":"miljyy/ip[master]","outputFolderName":"miljyy_ip_master"},{"location":{"location":"https://github.com/yihfei/ip.git","repoName":"ip","organization":"yihfei","domainName":"github"},"branch":"master","displayName":"yihfei/ip[master]","outputFolderName":"yihfei_ip_master"},{"location":{"location":"https://github.com/Gabriel4357/ip.git","repoName":"ip","organization":"Gabriel4357","domainName":"github"},"branch":"master","displayName":"Gabriel4357/ip[master]","outputFolderName":"Gabriel4357_ip_master"},{"location":{"location":"https://github.com/saraozn/ip.git","repoName":"ip","organization":"saraozn","domainName":"github"},"branch":"master","displayName":"saraozn/ip[master]","outputFolderName":"saraozn_ip_master"},{"location":{"location":"https://github.com/JeremyYong128/ip.git","repoName":"ip","organization":"JeremyYong128","domainName":"github"},"branch":"master","displayName":"JeremyYong128/ip[master]","outputFolderName":"JeremyYong128_ip_master"},{"location":{"location":"https://github.com/samuelmui8/ip.git","repoName":"ip","organization":"samuelmui8","domainName":"github"},"branch":"master","displayName":"samuelmui8/ip[master]","outputFolderName":"samuelmui8_ip_master"},{"location":{"location":"https://github.com/elaineshijie/ip.git","repoName":"ip","organization":"elaineshijie","domainName":"github"},"branch":"master","displayName":"elaineshijie/ip[master]","outputFolderName":"elaineshijie_ip_master"},{"location":{"location":"https://github.com/zhengyup/ip.git","repoName":"ip","organization":"zhengyup","domainName":"github"},"branch":"master","displayName":"zhengyup/ip[master]","outputFolderName":"zhengyup_ip_master"},{"location":{"location":"https://github.com/ruishanteo/ip.git","repoName":"ip","organization":"ruishanteo","domainName":"github"},"branch":"master","displayName":"ruishanteo/ip[master]","outputFolderName":"ruishanteo_ip_master"},{"location":{"location":"https://github.com/lynnlow175/ip.git","repoName":"ip","organization":"lynnlow175","domainName":"github"},"branch":"master","displayName":"lynnlow175/ip[master]","outputFolderName":"lynnlow175_ip_master"},{"location":{"location":"https://github.com/kohkaijie/ip.git","repoName":"ip","organization":"kohkaijie","domainName":"github"},"branch":"master","displayName":"kohkaijie/ip[master]","outputFolderName":"kohkaijie_ip_master"},{"location":{"location":"https://github.com/CelestineTan03/ip.git","repoName":"ip","organization":"CelestineTan03","domainName":"github"},"branch":"master","displayName":"CelestineTan03/ip[master]","outputFolderName":"CelestineTan03_ip_master"},{"location":{"location":"https://github.com/PearlynnT/ip.git","repoName":"ip","organization":"PearlynnT","domainName":"github"},"branch":"master","displayName":"PearlynnT/ip[master]","outputFolderName":"PearlynnT_ip_master"},{"location":{"location":"https://github.com/Elijah5399/ip.git","repoName":"ip","organization":"Elijah5399","domainName":"github"},"branch":"master","displayName":"Elijah5399/ip[master]","outputFolderName":"Elijah5399_ip_master"},{"location":{"location":"https://github.com/nicleongyj/ip.git","repoName":"ip","organization":"nicleongyj","domainName":"github"},"branch":"master","displayName":"nicleongyj/ip[master]","outputFolderName":"nicleongyj_ip_master"},{"location":{"location":"https://github.com/AnnabelTing/ip.git","repoName":"ip","organization":"AnnabelTing","domainName":"github"},"branch":"master","displayName":"AnnabelTing/ip[master]","outputFolderName":"AnnabelTing_ip_master"},{"location":{"location":"https://github.com/jrchoo/ip.git","repoName":"ip","organization":"jrchoo","domainName":"github"},"branch":"master","displayName":"jrchoo/ip[master]","outputFolderName":"jrchoo_ip_master"},{"location":{"location":"https://github.com/wujy28/ip.git","repoName":"ip","organization":"wujy28","domainName":"github"},"branch":"master","displayName":"wujy28/ip[master]","outputFolderName":"wujy28_ip_master"},{"location":{"location":"https://github.com/Nauxe/ip.git","repoName":"ip","organization":"Nauxe","domainName":"github"},"branch":"master","displayName":"Nauxe/ip[master]","outputFolderName":"Nauxe_ip_master"},{"location":{"location":"https://github.com/yyyaohhh/ip.git","repoName":"ip","organization":"yyyaohhh","domainName":"github"},"branch":"master","displayName":"yyyaohhh/ip[master]","outputFolderName":"yyyaohhh_ip_master"},{"location":{"location":"https://github.com/xenosf/ip.git","repoName":"ip","organization":"xenosf","domainName":"github"},"branch":"master","displayName":"xenosf/ip[master]","outputFolderName":"xenosf_ip_master"},{"location":{"location":"https://github.com/WinSheng1/ip.git","repoName":"ip","organization":"WinSheng1","domainName":"github"},"branch":"master","displayName":"WinSheng1/ip[master]","outputFolderName":"WinSheng1_ip_master"},{"location":{"location":"https://github.com/nreHieW/ip.git","repoName":"ip","organization":"nreHieW","domainName":"github"},"branch":"master","displayName":"nreHieW/ip[master]","outputFolderName":"nreHieW_ip_master"},{"location":{"location":"https://github.com/peiran18/ip.git","repoName":"ip","organization":"peiran18","domainName":"github"},"branch":"master","displayName":"peiran18/ip[master]","outputFolderName":"peiran18_ip_master"},{"location":{"location":"https://github.com/cheeggered/ip.git","repoName":"ip","organization":"cheeggered","domainName":"github"},"branch":"master","displayName":"cheeggered/ip[master]","outputFolderName":"cheeggered_ip_master"},{"location":{"location":"https://github.com/GohTengFong/ip.git","repoName":"ip","organization":"GohTengFong","domainName":"github"},"branch":"master","displayName":"GohTengFong/ip[master]","outputFolderName":"GohTengFong_ip_master"},{"location":{"location":"https://github.com/jibtaf/ip.git","repoName":"ip","organization":"jibtaf","domainName":"github"},"branch":"master","displayName":"jibtaf/ip[master]","outputFolderName":"jibtaf_ip_master"},{"location":{"location":"https://github.com/bhnuka/ip.git","repoName":"ip","organization":"bhnuka","domainName":"github"},"branch":"master","displayName":"bhnuka/ip[master]","outputFolderName":"bhnuka_ip_master"},{"location":{"location":"https://github.com/laurenlim2112/ip.git","repoName":"ip","organization":"laurenlim2112","domainName":"github"},"branch":"master","displayName":"laurenlim2112/ip[master]","outputFolderName":"laurenlim2112_ip_master"},{"location":{"location":"https://github.com/howenc/ip.git","repoName":"ip","organization":"howenc","domainName":"github"},"branch":"master","displayName":"howenc/ip[master]","outputFolderName":"howenc_ip_master"},{"location":{"location":"https://github.com/Kokseng1/ip.git","repoName":"ip","organization":"Kokseng1","domainName":"github"},"branch":"master","displayName":"Kokseng1/ip[master]","outputFolderName":"Kokseng1_ip_master"},{"location":{"location":"https://github.com/yiwen101/ip.git","repoName":"ip","organization":"yiwen101","domainName":"github"},"branch":"master","displayName":"yiwen101/ip[master]","outputFolderName":"yiwen101_ip_master"},{"location":{"location":"https://github.com/Cikguseven/ip.git","repoName":"ip","organization":"Cikguseven","domainName":"github"},"branch":"master","displayName":"Cikguseven/ip[master]","outputFolderName":"Cikguseven_ip_master"},{"location":{"location":"https://github.com/javinchua/ip.git","repoName":"ip","organization":"javinchua","domainName":"github"},"branch":"master","displayName":"javinchua/ip[master]","outputFolderName":"javinchua_ip_master"},{"location":{"location":"https://github.com/frrrrry/ip.git","repoName":"ip","organization":"frrrrry","domainName":"github"},"branch":"master","displayName":"frrrrry/ip[master]","outputFolderName":"frrrrry_ip_master"},{"location":{"location":"https://github.com/YeoBohShin/ip.git","repoName":"ip","organization":"YeoBohShin","domainName":"github"},"branch":"master","displayName":"YeoBohShin/ip[master]","outputFolderName":"YeoBohShin_ip_master"},{"location":{"location":"https://github.com/yongning0310/ip.git","repoName":"ip","organization":"yongning0310","domainName":"github"},"branch":"master","displayName":"yongning0310/ip[master]","outputFolderName":"yongning0310_ip_master"},{"location":{"location":"https://github.com/SimWPEric/ip.git","repoName":"ip","organization":"SimWPEric","domainName":"github"},"branch":"master","displayName":"SimWPEric/ip[master]","outputFolderName":"SimWPEric_ip_master"},{"location":{"location":"https://github.com/sopa301/ip.git","repoName":"ip","organization":"sopa301","domainName":"github"},"branch":"master","displayName":"sopa301/ip[master]","outputFolderName":"sopa301_ip_master"},{"location":{"location":"https://github.com/nananakx-x/ip.git","repoName":"ip","organization":"nananakx-x","domainName":"github"},"branch":"master","displayName":"nananakx-x/ip[master]","outputFolderName":"nananakx-x_ip_master"},{"location":{"location":"https://github.com/LuoZYi/ip.git","repoName":"ip","organization":"LuoZYi","domainName":"github"},"branch":"master","displayName":"LuoZYi/ip[master]","outputFolderName":"LuoZYi_ip_master"},{"location":{"location":"https://github.com/LinWanLeii/ip.git","repoName":"ip","organization":"LinWanLeii","domainName":"github"},"branch":"master","displayName":"LinWanLeii/ip[master]","outputFolderName":"LinWanLeii_ip_master"},{"location":{"location":"https://github.com/mingyuanc/ip.git","repoName":"ip","organization":"mingyuanc","domainName":"github"},"branch":"master","displayName":"mingyuanc/ip[master]","outputFolderName":"mingyuanc_ip_master"},{"location":{"location":"https://github.com/chonguschonguschongus/ip.git","repoName":"ip","organization":"chonguschonguschongus","domainName":"github"},"branch":"master","displayName":"chonguschonguschongus/ip[master]","outputFolderName":"chonguschonguschongus_ip_master"},{"location":{"location":"https://github.com/yanghengtang/ip.git","repoName":"ip","organization":"yanghengtang","domainName":"github"},"branch":"master","displayName":"yanghengtang/ip[master]","outputFolderName":"yanghengtang_ip_master"},{"location":{"location":"https://github.com/victorpengmx/ip.git","repoName":"ip","organization":"victorpengmx","domainName":"github"},"branch":"master","displayName":"victorpengmx/ip[master]","outputFolderName":"victorpengmx_ip_master"},{"location":{"location":"https://github.com/kanna-1/ip.git","repoName":"ip","organization":"kanna-1","domainName":"github"},"branch":"master","displayName":"kanna-1/ip[master]","outputFolderName":"kanna-1_ip_master"},{"location":{"location":"https://github.com/ncduy0303/ip.git","repoName":"ip","organization":"ncduy0303","domainName":"github"},"branch":"master","displayName":"ncduy0303/ip[master]","outputFolderName":"ncduy0303_ip_master"},{"location":{"location":"https://github.com/jannnice/ip.git","repoName":"ip","organization":"jannnice","domainName":"github"},"branch":"master","displayName":"jannnice/ip[master]","outputFolderName":"jannnice_ip_master"},{"location":{"location":"https://github.com/itssisi/ip.git","repoName":"ip","organization":"itssisi","domainName":"github"},"branch":"master","displayName":"itssisi/ip[master]","outputFolderName":"itssisi_ip_master"},{"location":{"location":"https://github.com/freddychenyouren2/ip.git","repoName":"ip","organization":"freddychenyouren2","domainName":"github"},"branch":"master","displayName":"freddychenyouren2/ip[master]","outputFolderName":"freddychenyouren2_ip_master"},{"location":{"location":"https://github.com/Vanessamae23/ip.git","repoName":"ip","organization":"Vanessamae23","domainName":"github"},"branch":"master","displayName":"Vanessamae23/ip[master]","outputFolderName":"Vanessamae23_ip_master"},{"location":{"location":"https://github.com/cbj252/ip.git","repoName":"ip","organization":"cbj252","domainName":"github"},"branch":"master","displayName":"cbj252/ip[master]","outputFolderName":"cbj252_ip_master"},{"location":{"location":"https://github.com/freshcabbage123/ip.git","repoName":"ip","organization":"freshcabbage123","domainName":"github"},"branch":"master","displayName":"freshcabbage123/ip[master]","outputFolderName":"freshcabbage123_ip_master"},{"location":{"location":"https://github.com/thienmy0/ip.git","repoName":"ip","organization":"thienmy0","domainName":"github"},"branch":"master","displayName":"thienmy0/ip[master]","outputFolderName":"thienmy0_ip_master"},{"location":{"location":"https://github.com/glenngnng/ip.git","repoName":"ip","organization":"glenngnng","domainName":"github"},"branch":"master","displayName":"glenngnng/ip[master]","outputFolderName":"glenngnng_ip_master"},{"location":{"location":"https://github.com/Darren159/ip.git","repoName":"ip","organization":"Darren159","domainName":"github"},"branch":"master","displayName":"Darren159/ip[master]","outputFolderName":"Darren159_ip_master"},{"location":{"location":"https://github.com/J-hta-n/ip.git","repoName":"ip","organization":"J-hta-n","domainName":"github"},"branch":"master","displayName":"J-hta-n/ip[master]","outputFolderName":"J-hta-n_ip_master"},{"location":{"location":"https://github.com/evanyan13/ip.git","repoName":"ip","organization":"evanyan13","domainName":"github"},"branch":"master","displayName":"evanyan13/ip[master]","outputFolderName":"evanyan13_ip_master"},{"location":{"location":"https://github.com/tanveersingh10/ip.git","repoName":"ip","organization":"tanveersingh10","domainName":"github"},"branch":"master","displayName":"tanveersingh10/ip[master]","outputFolderName":"tanveersingh10_ip_master"},{"location":{"location":"https://github.com/neyapraveen/ip.git","repoName":"ip","organization":"neyapraveen","domainName":"github"},"branch":"master","displayName":"neyapraveen/ip[master]","outputFolderName":"neyapraveen_ip_master"},{"location":{"location":"https://github.com/weeweh/ip.git","repoName":"ip","organization":"weeweh","domainName":"github"},"branch":"master","displayName":"weeweh/ip[master]","outputFolderName":"weeweh_ip_master"},{"location":{"location":"https://github.com/HugeNoob/ip.git","repoName":"ip","organization":"HugeNoob","domainName":"github"},"branch":"master","displayName":"HugeNoob/ip[master]","outputFolderName":"HugeNoob_ip_master"},{"location":{"location":"https://github.com/wasjoe1/ip.git","repoName":"ip","organization":"wasjoe1","domainName":"github"},"branch":"master","displayName":"wasjoe1/ip[master]","outputFolderName":"wasjoe1_ip_master"},{"location":{"location":"https://github.com/s-kybound/ip.git","repoName":"ip","organization":"s-kybound","domainName":"github"},"branch":"master","displayName":"s-kybound/ip[master]","outputFolderName":"s-kybound_ip_master"},{"location":{"location":"https://github.com/Singa-pirate/ip.git","repoName":"ip","organization":"Singa-pirate","domainName":"github"},"branch":"master","displayName":"Singa-pirate/ip[master]","outputFolderName":"Singa-pirate_ip_master"},{"location":{"location":"https://github.com/wanghejin/ip.git","repoName":"ip","organization":"wanghejin","domainName":"github"},"branch":"master","displayName":"wanghejin/ip[master]","outputFolderName":"wanghejin_ip_master"},{"location":{"location":"https://github.com/yarnmengnus/ip.git","repoName":"ip","organization":"yarnmengnus","domainName":"github"},"branch":"master","displayName":"yarnmengnus/ip[master]","outputFolderName":"yarnmengnus_ip_master"},{"location":{"location":"https://github.com/Kurtyjlee/ip.git","repoName":"ip","organization":"Kurtyjlee","domainName":"github"},"branch":"master","displayName":"Kurtyjlee/ip[master]","outputFolderName":"Kurtyjlee_ip_master"},{"location":{"location":"https://github.com/jellywaiyan/ip.git","repoName":"ip","organization":"jellywaiyan","domainName":"github"},"branch":"master","displayName":"jellywaiyan/ip[master]","outputFolderName":"jellywaiyan_ip_master"},{"location":{"location":"https://github.com/ylyma/ip.git","repoName":"ip","organization":"ylyma","domainName":"github"},"branch":"master","displayName":"ylyma/ip[master]","outputFolderName":"ylyma_ip_master"},{"location":{"location":"https://github.com/revdrag/ip.git","repoName":"ip","organization":"revdrag","domainName":"github"},"branch":"master","displayName":"revdrag/ip[master]","outputFolderName":"revdrag_ip_master"},{"location":{"location":"https://github.com/vijay-shankaranand/ip.git","repoName":"ip","organization":"vijay-shankaranand","domainName":"github"},"branch":"master","displayName":"vijay-shankaranand/ip[master]","outputFolderName":"vijay-shankaranand_ip_master"},{"location":{"location":"https://github.com/lerxuann/ip.git","repoName":"ip","organization":"lerxuann","domainName":"github"},"branch":"master","displayName":"lerxuann/ip[master]","outputFolderName":"lerxuann_ip_master"},{"location":{"location":"https://github.com/yuxunn/ip.git","repoName":"ip","organization":"yuxunn","domainName":"github"},"branch":"master","displayName":"yuxunn/ip[master]","outputFolderName":"yuxunn_ip_master"},{"location":{"location":"https://github.com/zannloo/ip.git","repoName":"ip","organization":"zannloo","domainName":"github"},"branch":"master","displayName":"zannloo/ip[master]","outputFolderName":"zannloo_ip_master"},{"location":{"location":"https://github.com/AryanG01/ip.git","repoName":"ip","organization":"AryanG01","domainName":"github"},"branch":"master","displayName":"AryanG01/ip[master]","outputFolderName":"AryanG01_ip_master"},{"location":{"location":"https://github.com/oeggy03/ip.git","repoName":"ip","organization":"oeggy03","domainName":"github"},"branch":"master","displayName":"oeggy03/ip[master]","outputFolderName":"oeggy03_ip_master"},{"location":{"location":"https://github.com/jeffrey-jian/ip.git","repoName":"ip","organization":"jeffrey-jian","domainName":"github"},"branch":"master","displayName":"jeffrey-jian/ip[master]","outputFolderName":"jeffrey-jian_ip_master"},{"location":{"location":"https://github.com/nicholastng010601/ip.git","repoName":"ip","organization":"nicholastng010601","domainName":"github"},"branch":"master","displayName":"nicholastng010601/ip[master]","outputFolderName":"nicholastng010601_ip_master"},{"location":{"location":"https://github.com/Weiennn/ip.git","repoName":"ip","organization":"Weiennn","domainName":"github"},"branch":"master","displayName":"Weiennn/ip[master]","outputFolderName":"Weiennn_ip_master"},{"location":{"location":"https://github.com/tayruxin/ip.git","repoName":"ip","organization":"tayruxin","domainName":"github"},"branch":"master","displayName":"tayruxin/ip[master]","outputFolderName":"tayruxin_ip_master"},{"location":{"location":"https://github.com/xyT-T/ip.git","repoName":"ip","organization":"xyT-T","domainName":"github"},"branch":"master","displayName":"xyT-T/ip[master]","outputFolderName":"xyT-T_ip_master"},{"location":{"location":"https://github.com/lunaroddity/ip.git","repoName":"ip","organization":"lunaroddity","domainName":"github"},"branch":"master","displayName":"lunaroddity/ip[master]","outputFolderName":"lunaroddity_ip_master"},{"location":{"location":"https://github.com/nabonitasen/ip.git","repoName":"ip","organization":"nabonitasen","domainName":"github"},"branch":"master","displayName":"nabonitasen/ip[master]","outputFolderName":"nabonitasen_ip_master"},{"location":{"location":"https://github.com/inezkok/ip.git","repoName":"ip","organization":"inezkok","domainName":"github"},"branch":"master","displayName":"inezkok/ip[master]","outputFolderName":"inezkok_ip_master"},{"location":{"location":"https://github.com/nknguyenhc/ip.git","repoName":"ip","organization":"nknguyenhc","domainName":"github"},"branch":"master","displayName":"nknguyenhc/ip[master]","outputFolderName":"nknguyenhc_ip_master"},{"location":{"location":"https://github.com/keaganpzh/ip.git","repoName":"ip","organization":"keaganpzh","domainName":"github"},"branch":"master","displayName":"keaganpzh/ip[master]","outputFolderName":"keaganpzh_ip_master"},{"location":{"location":"https://github.com/lululwtv/ip.git","repoName":"ip","organization":"lululwtv","domainName":"github"},"branch":"master","displayName":"lululwtv/ip[master]","outputFolderName":"lululwtv_ip_master"},{"location":{"location":"https://github.com/hcs1203/ip.git","repoName":"ip","organization":"hcs1203","domainName":"github"},"branch":"master","displayName":"hcs1203/ip[master]","outputFolderName":"hcs1203_ip_master"},{"location":{"location":"https://github.com/migfoo02/ip.git","repoName":"ip","organization":"migfoo02","domainName":"github"},"branch":"master","displayName":"migfoo02/ip[master]","outputFolderName":"migfoo02_ip_master"},{"location":{"location":"https://github.com/papataco14/ip.git","repoName":"ip","organization":"papataco14","domainName":"github"},"branch":"master","displayName":"papataco14/ip[master]","outputFolderName":"papataco14_ip_master"},{"location":{"location":"https://github.com/coderhuang559/ip.git","repoName":"ip","organization":"coderhuang559","domainName":"github"},"branch":"master","displayName":"coderhuang559/ip[master]","outputFolderName":"coderhuang559_ip_master"},{"location":{"location":"https://github.com/craigtonlian/ip.git","repoName":"ip","organization":"craigtonlian","domainName":"github"},"branch":"master","displayName":"craigtonlian/ip[master]","outputFolderName":"craigtonlian_ip_master"},{"location":{"location":"https://github.com/adammangzijun/ip.git","repoName":"ip","organization":"adammangzijun","domainName":"github"},"branch":"master","displayName":"adammangzijun/ip[master]","outputFolderName":"adammangzijun_ip_master"},{"location":{"location":"https://github.com/AlainS87/ip.git","repoName":"ip","organization":"AlainS87","domainName":"github"},"branch":"master","displayName":"AlainS87/ip[master]","outputFolderName":"AlainS87_ip_master"},{"location":{"location":"https://github.com/tanyyyming/ip.git","repoName":"ip","organization":"tanyyyming","domainName":"github"},"branch":"master","displayName":"tanyyyming/ip[master]","outputFolderName":"tanyyyming_ip_master"},{"location":{"location":"https://github.com/Saezenn/ip.git","repoName":"ip","organization":"Saezenn","domainName":"github"},"branch":"master","displayName":"Saezenn/ip[master]","outputFolderName":"Saezenn_ip_master"},{"location":{"location":"https://github.com/kayabuttertoastt/ip.git","repoName":"ip","organization":"kayabuttertoastt","domainName":"github"},"branch":"master","displayName":"kayabuttertoastt/ip[master]","outputFolderName":"kayabuttertoastt_ip_master"},{"location":{"location":"https://github.com/limjunxian1/ip.git","repoName":"ip","organization":"limjunxian1","domainName":"github"},"branch":"master","displayName":"limjunxian1/ip[master]","outputFolderName":"limjunxian1_ip_master"},{"location":{"location":"https://github.com/andrechuakj/ip.git","repoName":"ip","organization":"andrechuakj","domainName":"github"},"branch":"master","displayName":"andrechuakj/ip[master]","outputFolderName":"andrechuakj_ip_master"},{"location":{"location":"https://github.com/kwangthiag/ip.git","repoName":"ip","organization":"kwangthiag","domainName":"github"},"branch":"master","displayName":"kwangthiag/ip[master]","outputFolderName":"kwangthiag_ip_master"},{"location":{"location":"https://github.com/ricketytoc/ip.git","repoName":"ip","organization":"ricketytoc","domainName":"github"},"branch":"master","displayName":"ricketytoc/ip[master]","outputFolderName":"ricketytoc_ip_master"},{"location":{"location":"https://github.com/applepiofmyeye/ip.git","repoName":"ip","organization":"applepiofmyeye","domainName":"github"},"branch":"master","displayName":"applepiofmyeye/ip[master]","outputFolderName":"applepiofmyeye_ip_master"},{"location":{"location":"https://github.com/nubnubyas/ip.git","repoName":"ip","organization":"nubnubyas","domainName":"github"},"branch":"master","displayName":"nubnubyas/ip[master]","outputFolderName":"nubnubyas_ip_master"},{"location":{"location":"https://github.com/WeeeHung/ip.git","repoName":"ip","organization":"WeeeHung","domainName":"github"},"branch":"master","displayName":"WeeeHung/ip[master]","outputFolderName":"WeeeHung_ip_master"},{"location":{"location":"https://github.com/Eola-Z/ip.git","repoName":"ip","organization":"Eola-Z","domainName":"github"},"branch":"master","displayName":"Eola-Z/ip[master]","outputFolderName":"Eola-Z_ip_master"},{"location":{"location":"https://github.com/jordankanghm/ip.git","repoName":"ip","organization":"jordankanghm","domainName":"github"},"branch":"master","displayName":"jordankanghm/ip[master]","outputFolderName":"jordankanghm_ip_master"},{"location":{"location":"https://github.com/zacwong2151/ip.git","repoName":"ip","organization":"zacwong2151","domainName":"github"},"branch":"master","displayName":"zacwong2151/ip[master]","outputFolderName":"zacwong2151_ip_master"},{"location":{"location":"https://github.com/m1oojv/ip.git","repoName":"ip","organization":"m1oojv","domainName":"github"},"branch":"master","displayName":"m1oojv/ip[master]","outputFolderName":"m1oojv_ip_master"},{"location":{"location":"https://github.com/JCSnap/ip.git","repoName":"ip","organization":"JCSnap","domainName":"github"},"branch":"master","displayName":"JCSnap/ip[master]","outputFolderName":"JCSnap_ip_master"},{"location":{"location":"https://github.com/Nid21cs/ip.git","repoName":"ip","organization":"Nid21cs","domainName":"github"},"branch":"master","displayName":"Nid21cs/ip[master]","outputFolderName":"Nid21cs_ip_master"},{"location":{"location":"https://github.com/mfjkri/ip.git","repoName":"ip","organization":"mfjkri","domainName":"github"},"branch":"master","displayName":"mfjkri/ip[master]","outputFolderName":"mfjkri_ip_master"},{"location":{"location":"https://github.com/Choonyan02/ip.git","repoName":"ip","organization":"Choonyan02","domainName":"github"},"branch":"master","displayName":"Choonyan02/ip[master]","outputFolderName":"Choonyan02_ip_master"},{"location":{"location":"https://github.com/rayyan35p/ip.git","repoName":"ip","organization":"rayyan35p","domainName":"github"},"branch":"master","displayName":"rayyan35p/ip[master]","outputFolderName":"rayyan35p_ip_master"},{"location":{"location":"https://github.com/dhruvir29/ip.git","repoName":"ip","organization":"dhruvir29","domainName":"github"},"branch":"master","displayName":"dhruvir29/ip[master]","outputFolderName":"dhruvir29_ip_master"},{"location":{"location":"https://github.com/Mohammed-Faizzzz/ip.git","repoName":"ip","organization":"Mohammed-Faizzzz","domainName":"github"},"branch":"master","displayName":"Mohammed-Faizzzz/ip[master]","outputFolderName":"Mohammed-Faizzzz_ip_master"},{"location":{"location":"https://github.com/ruo-x/ip.git","repoName":"ip","organization":"ruo-x","domainName":"github"},"branch":"master","displayName":"ruo-x/ip[master]","outputFolderName":"ruo-x_ip_master"},{"location":{"location":"https://github.com/DonovanJJ/ip.git","repoName":"ip","organization":"DonovanJJ","domainName":"github"},"branch":"master","displayName":"DonovanJJ/ip[master]","outputFolderName":"DonovanJJ_ip_master"},{"location":{"location":"https://github.com/kristayeo/ip.git","repoName":"ip","organization":"kristayeo","domainName":"github"},"branch":"master","displayName":"kristayeo/ip[master]","outputFolderName":"kristayeo_ip_master"},{"location":{"location":"https://github.com/ZD292/ip.git","repoName":"ip","organization":"ZD292","domainName":"github"},"branch":"master","displayName":"ZD292/ip[master]","outputFolderName":"ZD292_ip_master"},{"location":{"location":"https://github.com/jingjie88/ip.git","repoName":"ip","organization":"jingjie88","domainName":"github"},"branch":"master","displayName":"jingjie88/ip[master]","outputFolderName":"jingjie88_ip_master"},{"location":{"location":"https://github.com/iantsaii/ip.git","repoName":"ip","organization":"iantsaii","domainName":"github"},"branch":"master","displayName":"iantsaii/ip[master]","outputFolderName":"iantsaii_ip_master"},{"location":{"location":"https://github.com/jingting1412/ip.git","repoName":"ip","organization":"jingting1412","domainName":"github"},"branch":"master","displayName":"jingting1412/ip[master]","outputFolderName":"jingting1412_ip_master"},{"location":{"location":"https://github.com/wnchan/ip.git","repoName":"ip","organization":"wnchan","domainName":"github"},"branch":"master","displayName":"wnchan/ip[master]","outputFolderName":"wnchan_ip_master"},{"location":{"location":"https://github.com/jack1e0/ip.git","repoName":"ip","organization":"jack1e0","domainName":"github"},"branch":"master","displayName":"jack1e0/ip[master]","outputFolderName":"jack1e0_ip_master"},{"location":{"location":"https://github.com/mingyu-wan/ip.git","repoName":"ip","organization":"mingyu-wan","domainName":"github"},"branch":"master","displayName":"mingyu-wan/ip[master]","outputFolderName":"mingyu-wan_ip_master"},{"location":{"location":"https://github.com/nicolengk/ip.git","repoName":"ip","organization":"nicolengk","domainName":"github"},"branch":"master","displayName":"nicolengk/ip[master]","outputFolderName":"nicolengk_ip_master"},{"location":{"location":"https://github.com/cyaoxuan/ip.git","repoName":"ip","organization":"cyaoxuan","domainName":"github"},"branch":"master","displayName":"cyaoxuan/ip[master]","outputFolderName":"cyaoxuan_ip_master"},{"location":{"location":"https://github.com/sunzihan23/ip.git","repoName":"ip","organization":"sunzihan23","domainName":"github"},"branch":"master","displayName":"sunzihan23/ip[master]","outputFolderName":"sunzihan23_ip_master"},{"location":{"location":"https://github.com/Goh-Li-Ting/ip.git","repoName":"ip","organization":"Goh-Li-Ting","domainName":"github"},"branch":"master","displayName":"Goh-Li-Ting/ip[master]","outputFolderName":"Goh-Li-Ting_ip_master"},{"location":{"location":"https://github.com/wjayee/ip.git","repoName":"ip","organization":"wjayee","domainName":"github"},"branch":"master","displayName":"wjayee/ip[master]","outputFolderName":"wjayee_ip_master"},{"location":{"location":"https://github.com/fuyiqiao/ip.git","repoName":"ip","organization":"fuyiqiao","domainName":"github"},"branch":"master","displayName":"fuyiqiao/ip[master]","outputFolderName":"fuyiqiao_ip_master"},{"location":{"location":"https://github.com/GlendaChong/ip.git","repoName":"ip","organization":"GlendaChong","domainName":"github"},"branch":"master","displayName":"GlendaChong/ip[master]","outputFolderName":"GlendaChong_ip_master"},{"location":{"location":"https://github.com/hyc17003/ip.git","repoName":"ip","organization":"hyc17003","domainName":"github"},"branch":"master","displayName":"hyc17003/ip[master]","outputFolderName":"hyc17003_ip_master"},{"location":{"location":"https://github.com/spatuly/ip.git","repoName":"ip","organization":"spatuly","domainName":"github"},"branch":"master","displayName":"spatuly/ip[master]","outputFolderName":"spatuly_ip_master"},{"location":{"location":"https://github.com/tanteckfang/ip.git","repoName":"ip","organization":"tanteckfang","domainName":"github"},"branch":"master","displayName":"tanteckfang/ip[master]","outputFolderName":"tanteckfang_ip_master"},{"location":{"location":"https://github.com/Clin-lyx/ip.git","repoName":"ip","organization":"Clin-lyx","domainName":"github"},"branch":"master","displayName":"Clin-lyx/ip[master]","outputFolderName":"Clin-lyx_ip_master"},{"location":{"location":"https://github.com/lyuanww/ip.git","repoName":"ip","organization":"lyuanww","domainName":"github"},"branch":"master","displayName":"lyuanww/ip[master]","outputFolderName":"lyuanww_ip_master"},{"location":{"location":"https://github.com/LimJH2002/ip.git","repoName":"ip","organization":"LimJH2002","domainName":"github"},"branch":"master","displayName":"LimJH2002/ip[master]","outputFolderName":"LimJH2002_ip_master"},{"location":{"location":"https://github.com/LWZ19/ip.git","repoName":"ip","organization":"LWZ19","domainName":"github"},"branch":"master","displayName":"LWZ19/ip[master]","outputFolderName":"LWZ19_ip_master"},{"location":{"location":"https://github.com/Gavino3o/ip.git","repoName":"ip","organization":"Gavino3o","domainName":"github"},"branch":"master","displayName":"Gavino3o/ip[master]","outputFolderName":"Gavino3o_ip_master"},{"location":{"location":"https://github.com/suryanshkushwaha/ip.git","repoName":"ip","organization":"suryanshkushwaha","domainName":"github"},"branch":"master","displayName":"suryanshkushwaha/ip[master]","outputFolderName":"suryanshkushwaha_ip_master"},{"location":{"location":"https://github.com/JasonRay168/ip.git","repoName":"ip","organization":"JasonRay168","domainName":"github"},"branch":"master","displayName":"JasonRay168/ip[master]","outputFolderName":"JasonRay168_ip_master"},{"location":{"location":"https://github.com/jovkusuma/ip.git","repoName":"ip","organization":"jovkusuma","domainName":"github"},"branch":"master","displayName":"jovkusuma/ip[master]","outputFolderName":"jovkusuma_ip_master"},{"location":{"location":"https://github.com/Chrainx/ip.git","repoName":"ip","organization":"Chrainx","domainName":"github"},"branch":"master","displayName":"Chrainx/ip[master]","outputFolderName":"Chrainx_ip_master"},{"location":{"location":"https://github.com/Propene-Dan/ip.git","repoName":"ip","organization":"Propene-Dan","domainName":"github"},"branch":"master","displayName":"Propene-Dan/ip[master]","outputFolderName":"Propene-Dan_ip_master"},{"location":{"location":"https://github.com/Daphne789/ip.git","repoName":"ip","organization":"Daphne789","domainName":"github"},"branch":"master","displayName":"Daphne789/ip[master]","outputFolderName":"Daphne789_ip_master"},{"location":{"location":"https://github.com/ChuanXinNg/ip.git","repoName":"ip","organization":"ChuanXinNg","domainName":"github"},"branch":"master","displayName":"ChuanXinNg/ip[master]","outputFolderName":"ChuanXinNg_ip_master"},{"location":{"location":"https://github.com/LHeng1/ip.git","repoName":"ip","organization":"LHeng1","domainName":"github"},"branch":"master","displayName":"LHeng1/ip[master]","outputFolderName":"LHeng1_ip_master"},{"location":{"location":"https://github.com/wr1159/ip.git","repoName":"ip","organization":"wr1159","domainName":"github"},"branch":"master","displayName":"wr1159/ip[master]","outputFolderName":"wr1159_ip_master"},{"location":{"location":"https://github.com/wjacobw/ip.git","repoName":"ip","organization":"wjacobw","domainName":"github"},"branch":"master","displayName":"wjacobw/ip[master]","outputFolderName":"wjacobw_ip_master"},{"location":{"location":"https://github.com/tiongjjyi/ip.git","repoName":"ip","organization":"tiongjjyi","domainName":"github"},"branch":"master","displayName":"tiongjjyi/ip[master]","outputFolderName":"tiongjjyi_ip_master"},{"location":{"location":"https://github.com/longnguyentan/ip.git","repoName":"ip","organization":"longnguyentan","domainName":"github"},"branch":"master","displayName":"longnguyentan/ip[master]","outputFolderName":"longnguyentan_ip_master"},{"location":{"location":"https://github.com/proto-aiken-13/ip.git","repoName":"ip","organization":"proto-aiken-13","domainName":"github"},"branch":"master","displayName":"proto-aiken-13/ip[master]","outputFolderName":"proto-aiken-13_ip_master"},{"location":{"location":"https://github.com/junnengsoo/ip.git","repoName":"ip","organization":"junnengsoo","domainName":"github"},"branch":"master","displayName":"junnengsoo/ip[master]","outputFolderName":"junnengsoo_ip_master"},{"location":{"location":"https://github.com/yezkez10/ip.git","repoName":"ip","organization":"yezkez10","domainName":"github"},"branch":"master","displayName":"yezkez10/ip[master]","outputFolderName":"yezkez10_ip_master"},{"location":{"location":"https://github.com/jamesebond/ip.git","repoName":"ip","organization":"jamesebond","domainName":"github"},"branch":"master","displayName":"jamesebond/ip[master]","outputFolderName":"jamesebond_ip_master"},{"location":{"location":"https://github.com/alyssaongyx/ip.git","repoName":"ip","organization":"alyssaongyx","domainName":"github"},"branch":"master","displayName":"alyssaongyx/ip[master]","outputFolderName":"alyssaongyx_ip_master"},{"location":{"location":"https://github.com/Carlintyj/ip.git","repoName":"ip","organization":"Carlintyj","domainName":"github"},"branch":"master","displayName":"Carlintyj/ip[master]","outputFolderName":"Carlintyj_ip_master"},{"location":{"location":"https://github.com/ruth-lim/ip.git","repoName":"ip","organization":"ruth-lim","domainName":"github"},"branch":"master","displayName":"ruth-lim/ip[master]","outputFolderName":"ruth-lim_ip_master"},{"location":{"location":"https://github.com/licongshen12/ip.git","repoName":"ip","organization":"licongshen12","domainName":"github"},"branch":"master","displayName":"licongshen12/ip[master]","outputFolderName":"licongshen12_ip_master"},{"location":{"location":"https://github.com/thaddeusong/ip.git","repoName":"ip","organization":"thaddeusong","domainName":"github"},"branch":"master","displayName":"thaddeusong/ip[master]","outputFolderName":"thaddeusong_ip_master"},{"location":{"location":"https://github.com/LordSaumya/ip.git","repoName":"ip","organization":"LordSaumya","domainName":"github"},"branch":"master","displayName":"LordSaumya/ip[master]","outputFolderName":"LordSaumya_ip_master"},{"location":{"location":"https://github.com/Kevin-Liusx/ip.git","repoName":"ip","organization":"Kevin-Liusx","domainName":"github"},"branch":"master","displayName":"Kevin-Liusx/ip[master]","outputFolderName":"Kevin-Liusx_ip_master"},{"location":{"location":"https://github.com/Ken-Lai/ip.git","repoName":"ip","organization":"Ken-Lai","domainName":"github"},"branch":"master","displayName":"Ken-Lai/ip[master]","outputFolderName":"Ken-Lai_ip_master"},{"location":{"location":"https://github.com/KumChaiYin/ip.git","repoName":"ip","organization":"KumChaiYin","domainName":"github"},"branch":"master","displayName":"KumChaiYin/ip[master]","outputFolderName":"KumChaiYin_ip_master"},{"location":{"location":"https://github.com/pzl111/ip.git","repoName":"ip","organization":"pzl111","domainName":"github"},"branch":"master","displayName":"pzl111/ip[master]","outputFolderName":"pzl111_ip_master"},{"location":{"location":"https://github.com/alientian/ip.git","repoName":"ip","organization":"alientian","domainName":"github"},"branch":"master","displayName":"alientian/ip[master]","outputFolderName":"alientian_ip_master"},{"location":{"location":"https://github.com/eyelessrhyme7/ip.git","repoName":"ip","organization":"eyelessrhyme7","domainName":"github"},"branch":"master","displayName":"eyelessrhyme7/ip[master]","outputFolderName":"eyelessrhyme7_ip_master"},{"location":{"location":"https://github.com/AprupKale/ip.git","repoName":"ip","organization":"AprupKale","domainName":"github"},"branch":"master","displayName":"AprupKale/ip[master]","outputFolderName":"AprupKale_ip_master"},{"location":{"location":"https://github.com/kimshitong/ip.git","repoName":"ip","organization":"kimshitong","domainName":"github"},"branch":"master","displayName":"kimshitong/ip[master]","outputFolderName":"kimshitong_ip_master"},{"location":{"location":"https://github.com/Bryan-Goh/ip.git","repoName":"ip","organization":"Bryan-Goh","domainName":"github"},"branch":"master","displayName":"Bryan-Goh/ip[master]","outputFolderName":"Bryan-Goh_ip_master"},{"location":{"location":"https://github.com/tiif/ip.git","repoName":"ip","organization":"tiif","domainName":"github"},"branch":"master","displayName":"tiif/ip[master]","outputFolderName":"tiif_ip_master"},{"location":{"location":"https://github.com/angkyakdifp/ip.git","repoName":"ip","organization":"angkyakdifp","domainName":"github"},"branch":"master","displayName":"angkyakdifp/ip[master]","outputFolderName":"angkyakdifp_ip_master"},{"location":{"location":"https://github.com/Chen-Kuei/ip.git","repoName":"ip","organization":"Chen-Kuei","domainName":"github"},"branch":"master","displayName":"Chen-Kuei/ip[master]","outputFolderName":"Chen-Kuei_ip_master"},{"location":{"location":"https://github.com/SinhaVedant/ip.git","repoName":"ip","organization":"SinhaVedant","domainName":"github"},"branch":"master","displayName":"SinhaVedant/ip[master]","outputFolderName":"SinhaVedant_ip_master"},{"location":{"location":"https://github.com/D-Limiter/ip.git","repoName":"ip","organization":"D-Limiter","domainName":"github"},"branch":"master","displayName":"D-Limiter/ip[master]","outputFolderName":"D-Limiter_ip_master"},{"location":{"location":"https://github.com/larrywang0701/ip.git","repoName":"ip","organization":"larrywang0701","domainName":"github"},"branch":"master","displayName":"larrywang0701/ip[master]","outputFolderName":"larrywang0701_ip_master"},{"location":{"location":"https://github.com/Song-Mengfei/ip.git","repoName":"ip","organization":"Song-Mengfei","domainName":"github"},"branch":"master","displayName":"Song-Mengfei/ip[master]","outputFolderName":"Song-Mengfei_ip_master"},{"location":{"location":"https://github.com/ChangruHenryQian/ip.git","repoName":"ip","organization":"ChangruHenryQian","domainName":"github"},"branch":"master","displayName":"ChangruHenryQian/ip[master]","outputFolderName":"ChangruHenryQian_ip_master"},{"location":{"location":"https://github.com/ketweeen/ip.git","repoName":"ip","organization":"ketweeen","domainName":"github"},"branch":"master","displayName":"ketweeen/ip[master]","outputFolderName":"ketweeen_ip_master"},{"location":{"location":"https://github.com/RSXIX/ip.git","repoName":"ip","organization":"RSXIX","domainName":"github"},"branch":"master","displayName":"RSXIX/ip[master]","outputFolderName":"RSXIX_ip_master"},{"location":{"location":"https://github.com/songgthu/ip.git","repoName":"ip","organization":"songgthu","domainName":"github"},"branch":"master","displayName":"songgthu/ip[master]","outputFolderName":"songgthu_ip_master"},{"location":{"location":"https://github.com/maj0-0/ip.git","repoName":"ip","organization":"maj0-0","domainName":"github"},"branch":"master","displayName":"maj0-0/ip[master]","outputFolderName":"maj0-0_ip_master"},{"location":{"location":"https://github.com/tiongMax/ip.git","repoName":"ip","organization":"tiongMax","domainName":"github"},"branch":"master","displayName":"tiongMax/ip[master]","outputFolderName":"tiongMax_ip_master"},{"location":{"location":"https://github.com/A1WAYSD/ip.git","repoName":"ip","organization":"A1WAYSD","domainName":"github"},"branch":"master","displayName":"A1WAYSD/ip[master]","outputFolderName":"A1WAYSD_ip_master"},{"location":{"location":"https://github.com/hjoneweek/ip.git","repoName":"ip","organization":"hjoneweek","domainName":"github"},"branch":"master","displayName":"hjoneweek/ip[master]","outputFolderName":"hjoneweek_ip_master"},{"location":{"location":"https://github.com/itsNatTan/ip.git","repoName":"ip","organization":"itsNatTan","domainName":"github"},"branch":"master","displayName":"itsNatTan/ip[master]","outputFolderName":"itsNatTan_ip_master"},{"location":{"location":"https://github.com/AustinHuang1203/ip.git","repoName":"ip","organization":"AustinHuang1203","domainName":"github"},"branch":"master","displayName":"AustinHuang1203/ip[master]","outputFolderName":"AustinHuang1203_ip_master"},{"location":{"location":"https://github.com/WangCheng0116/ip.git","repoName":"ip","organization":"WangCheng0116","domainName":"github"},"branch":"master","displayName":"WangCheng0116/ip[master]","outputFolderName":"WangCheng0116_ip_master"},{"location":{"location":"https://github.com/Tim-Siu/ip.git","repoName":"ip","organization":"Tim-Siu","domainName":"github"},"branch":"master","displayName":"Tim-Siu/ip[master]","outputFolderName":"Tim-Siu_ip_master"},{"location":{"location":"https://github.com/newway1814/ip.git","repoName":"ip","organization":"newway1814","domainName":"github"},"branch":"master","displayName":"newway1814/ip[master]","outputFolderName":"newway1814_ip_master"},{"location":{"location":"https://github.com/li-rongzhi/ip.git","repoName":"ip","organization":"li-rongzhi","domainName":"github"},"branch":"master","displayName":"li-rongzhi/ip[master]","outputFolderName":"li-rongzhi_ip_master"},{"location":{"location":"https://github.com/adhigop13/ip.git","repoName":"ip","organization":"adhigop13","domainName":"github"},"branch":"master","displayName":"adhigop13/ip[master]","outputFolderName":"adhigop13_ip_master"},{"location":{"location":"https://github.com/MadLamprey/ip.git","repoName":"ip","organization":"MadLamprey","domainName":"github"},"branch":"master","displayName":"MadLamprey/ip[master]","outputFolderName":"MadLamprey_ip_master"}],"errorSet":[],"sinceDate":"2023-08-18","untilDate":"2023-09-05","isSinceDateProvided":true,"isUntilDateProvided":false,"supportedDomainUrlMap":{"NOT_RECOGNIZED":{"BRANCH":"","REPO_URL":"UNSUPPORTED","BASE_URL":"UNSUPPORTED","HISTORY_PATH":"","COMMIT_PATH":"","BLAME_PATH":""},"github":{"BRANCH":"tree/$BRANCH","REPO_URL":"https://github.com/$ORGANIZATION/$REPO_NAME/","BASE_URL":"https://github.com/","HISTORY_PATH":"commits/$BRANCH/$FILE_PATH","COMMIT_PATH":"commit/$COMMIT_HASH","BLAME_PATH":"blame/$BRANCH/$FILE_PATH"}}} +{"repoSenseVersion":"3bad16bb3d","reportGeneratedTime":"Wed Sep 6 09:12:39 2023 UTC+08:00","reportGenerationTime":" 1 minute(s) 35.19 second(s)","zoneId":"UTC+08:00","reportTitle":"CS2103 iP Code Dashboard","repos":[{"location":{"location":"https://github.com/remuslum/ip.git","repoName":"ip","organization":"remuslum","domainName":"github"},"branch":"master","displayName":"remuslum/ip[master]","outputFolderName":"remuslum_ip_master"},{"location":{"location":"https://github.com/elhy1999/ip.git","repoName":"ip","organization":"elhy1999","domainName":"github"},"branch":"master","displayName":"elhy1999/ip[master]","outputFolderName":"elhy1999_ip_master"},{"location":{"location":"https://github.com/XihuaZ/ip.git","repoName":"ip","organization":"XihuaZ","domainName":"github"},"branch":"master","displayName":"XihuaZ/ip[master]","outputFolderName":"XihuaZ_ip_master"},{"location":{"location":"https://github.com/bwangpj/ip.git","repoName":"ip","organization":"bwangpj","domainName":"github"},"branch":"master","displayName":"bwangpj/ip[master]","outputFolderName":"bwangpj_ip_master"},{"location":{"location":"https://github.com/shuenj/ip.git","repoName":"ip","organization":"shuenj","domainName":"github"},"branch":"master","displayName":"shuenj/ip[master]","outputFolderName":"shuenj_ip_master"},{"location":{"location":"https://github.com/SungMatt/ip.git","repoName":"ip","organization":"SungMatt","domainName":"github"},"branch":"master","displayName":"SungMatt/ip[master]","outputFolderName":"SungMatt_ip_master"},{"location":{"location":"https://github.com/junhonglow/ip.git","repoName":"ip","organization":"junhonglow","domainName":"github"},"branch":"master","displayName":"junhonglow/ip[master]","outputFolderName":"junhonglow_ip_master"},{"location":{"location":"https://github.com/xavierpok/ip.git","repoName":"ip","organization":"xavierpok","domainName":"github"},"branch":"master","displayName":"xavierpok/ip[master]","outputFolderName":"xavierpok_ip_master"},{"location":{"location":"https://github.com/marcellaantania/ip.git","repoName":"ip","organization":"marcellaantania","domainName":"github"},"branch":"master","displayName":"marcellaantania/ip[master]","outputFolderName":"marcellaantania_ip_master"},{"location":{"location":"https://github.com/felibunnyy/ip.git","repoName":"ip","organization":"felibunnyy","domainName":"github"},"branch":"master","displayName":"felibunnyy/ip[master]","outputFolderName":"felibunnyy_ip_master"},{"location":{"location":"https://github.com/starrylight99/ip.git","repoName":"ip","organization":"starrylight99","domainName":"github"},"branch":"master","displayName":"starrylight99/ip[master]","outputFolderName":"starrylight99_ip_master"},{"location":{"location":"https://github.com/leezhanpeng/ip.git","repoName":"ip","organization":"leezhanpeng","domainName":"github"},"branch":"master","displayName":"leezhanpeng/ip[master]","outputFolderName":"leezhanpeng_ip_master"},{"location":{"location":"https://github.com/sheryew/ip.git","repoName":"ip","organization":"sheryew","domainName":"github"},"branch":"master","displayName":"sheryew/ip[master]","outputFolderName":"sheryew_ip_master"},{"location":{"location":"https://github.com/lihongguang00/ip.git","repoName":"ip","organization":"lihongguang00","domainName":"github"},"branch":"master","displayName":"lihongguang00/ip[master]","outputFolderName":"lihongguang00_ip_master"},{"location":{"location":"https://github.com/nicrandomlee/ip.git","repoName":"ip","organization":"nicrandomlee","domainName":"github"},"branch":"master","displayName":"nicrandomlee/ip[master]","outputFolderName":"nicrandomlee_ip_master"},{"location":{"location":"https://github.com/LuahJunYang/ip.git","repoName":"ip","organization":"LuahJunYang","domainName":"github"},"branch":"master","displayName":"LuahJunYang/ip[master]","outputFolderName":"LuahJunYang_ip_master"},{"location":{"location":"https://github.com/s-peiran/ip.git","repoName":"ip","organization":"s-peiran","domainName":"github"},"branch":"master","displayName":"s-peiran/ip[master]","outputFolderName":"s-peiran_ip_master"},{"location":{"location":"https://github.com/aarontxz/ip.git","repoName":"ip","organization":"aarontxz","domainName":"github"},"branch":"master","displayName":"aarontxz/ip[master]","outputFolderName":"aarontxz_ip_master"},{"location":{"location":"https://github.com/chiayunrong/ip.git","repoName":"ip","organization":"chiayunrong","domainName":"github"},"branch":"master","displayName":"chiayunrong/ip[master]","outputFolderName":"chiayunrong_ip_master"},{"location":{"location":"https://github.com/nixonwidjaja/ip.git","repoName":"ip","organization":"nixonwidjaja","domainName":"github"},"branch":"master","displayName":"nixonwidjaja/ip[master]","outputFolderName":"nixonwidjaja_ip_master"},{"location":{"location":"https://github.com/imkwokyong/ip.git","repoName":"ip","organization":"imkwokyong","domainName":"github"},"branch":"master","displayName":"imkwokyong/ip[master]","outputFolderName":"imkwokyong_ip_master"},{"location":{"location":"https://github.com/mamayuan/ip.git","repoName":"ip","organization":"mamayuan","domainName":"github"},"branch":"master","displayName":"mamayuan/ip[master]","outputFolderName":"mamayuan_ip_master"},{"location":{"location":"https://github.com/geoffong11/ip.git","repoName":"ip","organization":"geoffong11","domainName":"github"},"branch":"master","displayName":"geoffong11/ip[master]","outputFolderName":"geoffong11_ip_master"},{"location":{"location":"https://github.com/vivienherq/ip.git","repoName":"ip","organization":"vivienherq","domainName":"github"},"branch":"master","displayName":"vivienherq/ip[master]","outputFolderName":"vivienherq_ip_master"},{"location":{"location":"https://github.com/johnnythesnake12/ip.git","repoName":"ip","organization":"johnnythesnake12","domainName":"github"},"branch":"master","displayName":"johnnythesnake12/ip[master]","outputFolderName":"johnnythesnake12_ip_master"},{"location":{"location":"https://github.com/Cloud7050/ip.git","repoName":"ip","organization":"Cloud7050","domainName":"github"},"branch":"master","displayName":"Cloud7050/ip[master]","outputFolderName":"Cloud7050_ip_master"},{"location":{"location":"https://github.com/jonyeokj/ip.git","repoName":"ip","organization":"jonyeokj","domainName":"github"},"branch":"master","displayName":"jonyeokj/ip[master]","outputFolderName":"jonyeokj_ip_master"},{"location":{"location":"https://github.com/lipwei1808/ip.git","repoName":"ip","organization":"lipwei1808","domainName":"github"},"branch":"master","displayName":"lipwei1808/ip[master]","outputFolderName":"lipwei1808_ip_master"},{"location":{"location":"https://github.com/zhanyang01/ip.git","repoName":"ip","organization":"zhanyang01","domainName":"github"},"branch":"master","displayName":"zhanyang01/ip[master]","outputFolderName":"zhanyang01_ip_master"},{"location":{"location":"https://github.com/EricXiong420/ip.git","repoName":"ip","organization":"EricXiong420","domainName":"github"},"branch":"master","displayName":"EricXiong420/ip[master]","outputFolderName":"EricXiong420_ip_master"},{"location":{"location":"https://github.com/sp4ce-cowboy/ip.git","repoName":"ip","organization":"sp4ce-cowboy","domainName":"github"},"branch":"master","displayName":"sp4ce-cowboy/ip[master]","outputFolderName":"sp4ce-cowboy_ip_master"},{"location":{"location":"https://github.com/ktzy0305/ip.git","repoName":"ip","organization":"ktzy0305","domainName":"github"},"branch":"master","displayName":"ktzy0305/ip[master]","outputFolderName":"ktzy0305_ip_master"},{"location":{"location":"https://github.com/dom-buri/ip.git","repoName":"ip","organization":"dom-buri","domainName":"github"},"branch":"master","displayName":"dom-buri/ip[master]","outputFolderName":"dom-buri_ip_master"},{"location":{"location":"https://github.com/rayshawntan/ip.git","repoName":"ip","organization":"rayshawntan","domainName":"github"},"branch":"master","displayName":"rayshawntan/ip[master]","outputFolderName":"rayshawntan_ip_master"},{"location":{"location":"https://github.com/Seonlo99/ip.git","repoName":"ip","organization":"Seonlo99","domainName":"github"},"branch":"master","displayName":"Seonlo99/ip[master]","outputFolderName":"Seonlo99_ip_master"},{"location":{"location":"https://github.com/woojiahao/ip.git","repoName":"ip","organization":"woojiahao","domainName":"github"},"branch":"master","displayName":"woojiahao/ip[master]","outputFolderName":"woojiahao_ip_master"},{"location":{"location":"https://github.com/Angelyxx/ip.git","repoName":"ip","organization":"Angelyxx","domainName":"github"},"branch":"master","displayName":"Angelyxx/ip[master]","outputFolderName":"Angelyxx_ip_master"},{"location":{"location":"https://github.com/jamz903/ip.git","repoName":"ip","organization":"jamz903","domainName":"github"},"branch":"master","displayName":"jamz903/ip[master]","outputFolderName":"jamz903_ip_master"},{"location":{"location":"https://github.com/Fallman2/ip.git","repoName":"ip","organization":"Fallman2","domainName":"github"},"branch":"master","displayName":"Fallman2/ip[master]","outputFolderName":"Fallman2_ip_master"},{"location":{"location":"https://github.com/jacobcuison/ip.git","repoName":"ip","organization":"jacobcuison","domainName":"github"},"branch":"master","displayName":"jacobcuison/ip[master]","outputFolderName":"jacobcuison_ip_master"},{"location":{"location":"https://github.com/kenvynKwek/ip.git","repoName":"ip","organization":"kenvynKwek","domainName":"github"},"branch":"master","displayName":"kenvynKwek/ip[master]","outputFolderName":"kenvynKwek_ip_master"},{"location":{"location":"https://github.com/kokrui/ip.git","repoName":"ip","organization":"kokrui","domainName":"github"},"branch":"master","displayName":"kokrui/ip[master]","outputFolderName":"kokrui_ip_master"},{"location":{"location":"https://github.com/ncmathan/ip.git","repoName":"ip","organization":"ncmathan","domainName":"github"},"branch":"master","displayName":"ncmathan/ip[master]","outputFolderName":"ncmathan_ip_master"},{"location":{"location":"https://github.com/xCOLOURx/ip.git","repoName":"ip","organization":"xCOLOURx","domainName":"github"},"branch":"master","displayName":"xCOLOURx/ip[master]","outputFolderName":"xCOLOURx_ip_master"},{"location":{"location":"https://github.com/zhyuhan/ip.git","repoName":"ip","organization":"zhyuhan","domainName":"github"},"branch":"master","displayName":"zhyuhan/ip[master]","outputFolderName":"zhyuhan_ip_master"},{"location":{"location":"https://github.com/ceilingFan456/ip.git","repoName":"ip","organization":"ceilingFan456","domainName":"github"},"branch":"master","displayName":"ceilingFan456/ip[master]","outputFolderName":"ceilingFan456_ip_master"},{"location":{"location":"https://github.com/chuababyy/ip.git","repoName":"ip","organization":"chuababyy","domainName":"github"},"branch":"master","displayName":"chuababyy/ip[master]","outputFolderName":"chuababyy_ip_master"},{"location":{"location":"https://github.com/rocketninja7/ip.git","repoName":"ip","organization":"rocketninja7","domainName":"github"},"branch":"master","displayName":"rocketninja7/ip[master]","outputFolderName":"rocketninja7_ip_master"},{"location":{"location":"https://github.com/marquestye/ip.git","repoName":"ip","organization":"marquestye","domainName":"github"},"branch":"master","displayName":"marquestye/ip[master]","outputFolderName":"marquestye_ip_master"},{"location":{"location":"https://github.com/ruiyangzh/ip.git","repoName":"ip","organization":"ruiyangzh","domainName":"github"},"branch":"master","displayName":"ruiyangzh/ip[master]","outputFolderName":"ruiyangzh_ip_master"},{"location":{"location":"https://github.com/derekjxtan/ip.git","repoName":"ip","organization":"derekjxtan","domainName":"github"},"branch":"master","displayName":"derekjxtan/ip[master]","outputFolderName":"derekjxtan_ip_master"},{"location":{"location":"https://github.com/mounilsankar/ip.git","repoName":"ip","organization":"mounilsankar","domainName":"github"},"branch":"master","displayName":"mounilsankar/ip[master]","outputFolderName":"mounilsankar_ip_master"},{"location":{"location":"https://github.com/wj331/ip.git","repoName":"ip","organization":"wj331","domainName":"github"},"branch":"master","displayName":"wj331/ip[master]","outputFolderName":"wj331_ip_master"},{"location":{"location":"https://github.com/JasonLCY-Temp/ip.git","repoName":"ip","organization":"JasonLCY-Temp","domainName":"github"},"branch":"master","displayName":"JasonLCY-Temp/ip[master]","outputFolderName":"JasonLCY-Temp_ip_master"},{"location":{"location":"https://github.com/lawruixi/ip.git","repoName":"ip","organization":"lawruixi","domainName":"github"},"branch":"master","displayName":"lawruixi/ip[master]","outputFolderName":"lawruixi_ip_master"},{"location":{"location":"https://github.com/wxwern/ip.git","repoName":"ip","organization":"wxwern","domainName":"github"},"branch":"master","displayName":"wxwern/ip[master]","outputFolderName":"wxwern_ip_master"},{"location":{"location":"https://github.com/zekone/ip.git","repoName":"ip","organization":"zekone","domainName":"github"},"branch":"master","displayName":"zekone/ip[master]","outputFolderName":"zekone_ip_master"},{"location":{"location":"https://github.com/wamps-jp/ip.git","repoName":"ip","organization":"wamps-jp","domainName":"github"},"branch":"master","displayName":"wamps-jp/ip[master]","outputFolderName":"wamps-jp_ip_master"},{"location":{"location":"https://github.com/saltedfishxx/ip.git","repoName":"ip","organization":"saltedfishxx","domainName":"github"},"branch":"master","displayName":"saltedfishxx/ip[master]","outputFolderName":"saltedfishxx_ip_master"},{"location":{"location":"https://github.com/winson8222/ip.git","repoName":"ip","organization":"winson8222","domainName":"github"},"branch":"master","displayName":"winson8222/ip[master]","outputFolderName":"winson8222_ip_master"},{"location":{"location":"https://github.com/brandon-nam/ip.git","repoName":"ip","organization":"brandon-nam","domainName":"github"},"branch":"master","displayName":"brandon-nam/ip[master]","outputFolderName":"brandon-nam_ip_master"},{"location":{"location":"https://github.com/p-xp/ip.git","repoName":"ip","organization":"p-xp","domainName":"github"},"branch":"master","displayName":"p-xp/ip[master]","outputFolderName":"p-xp_ip_master"},{"location":{"location":"https://github.com/WeeMingQing/ip.git","repoName":"ip","organization":"WeeMingQing","domainName":"github"},"branch":"master","displayName":"WeeMingQing/ip[master]","outputFolderName":"WeeMingQing_ip_master"},{"location":{"location":"https://github.com/ScarletBlanks/ip.git","repoName":"ip","organization":"ScarletBlanks","domainName":"github"},"branch":"master","displayName":"ScarletBlanks/ip[master]","outputFolderName":"ScarletBlanks_ip_master"},{"location":{"location":"https://github.com/seraphimstreets/ip.git","repoName":"ip","organization":"seraphimstreets","domainName":"github"},"branch":"master","displayName":"seraphimstreets/ip[master]","outputFolderName":"seraphimstreets_ip_master"},{"location":{"location":"https://github.com/devanshubisht/ip.git","repoName":"ip","organization":"devanshubisht","domainName":"github"},"branch":"master","displayName":"devanshubisht/ip[master]","outputFolderName":"devanshubisht_ip_master"},{"location":{"location":"https://github.com/Zjinnnn/ip.git","repoName":"ip","organization":"Zjinnnn","domainName":"github"},"branch":"master","displayName":"Zjinnnn/ip[master]","outputFolderName":"Zjinnnn_ip_master"},{"location":{"location":"https://github.com/brendanneojw/ip.git","repoName":"ip","organization":"brendanneojw","domainName":"github"},"branch":"master","displayName":"brendanneojw/ip[master]","outputFolderName":"brendanneojw_ip_master"},{"location":{"location":"https://github.com/aexolate/ip.git","repoName":"ip","organization":"aexolate","domainName":"github"},"branch":"master","displayName":"aexolate/ip[master]","outputFolderName":"aexolate_ip_master"},{"location":{"location":"https://github.com/techjay-c/ip.git","repoName":"ip","organization":"techjay-c","domainName":"github"},"branch":"master","displayName":"techjay-c/ip[master]","outputFolderName":"techjay-c_ip_master"},{"location":{"location":"https://github.com/SynapseProgramming/ip.git","repoName":"ip","organization":"SynapseProgramming","domainName":"github"},"branch":"master","displayName":"SynapseProgramming/ip[master]","outputFolderName":"SynapseProgramming_ip_master"},{"location":{"location":"https://github.com/TyrusLye/ip.git","repoName":"ip","organization":"TyrusLye","domainName":"github"},"branch":"master","displayName":"TyrusLye/ip[master]","outputFolderName":"TyrusLye_ip_master"},{"location":{"location":"https://github.com/RB9823/ip.git","repoName":"ip","organization":"RB9823","domainName":"github"},"branch":"master","displayName":"RB9823/ip[master]","outputFolderName":"RB9823_ip_master"},{"location":{"location":"https://github.com/jean-cq/ip.git","repoName":"ip","organization":"jean-cq","domainName":"github"},"branch":"master","displayName":"jean-cq/ip[master]","outputFolderName":"jean-cq_ip_master"},{"location":{"location":"https://github.com/Bearypop/ip.git","repoName":"ip","organization":"Bearypop","domainName":"github"},"branch":"master","displayName":"Bearypop/ip[master]","outputFolderName":"Bearypop_ip_master"},{"location":{"location":"https://github.com/andytoh1/ip.git","repoName":"ip","organization":"andytoh1","domainName":"github"},"branch":"master","displayName":"andytoh1/ip[master]","outputFolderName":"andytoh1_ip_master"},{"location":{"location":"https://github.com/siqirua/ip.git","repoName":"ip","organization":"siqirua","domainName":"github"},"branch":"master","displayName":"siqirua/ip[master]","outputFolderName":"siqirua_ip_master"},{"location":{"location":"https://github.com/amosting/ip.git","repoName":"ip","organization":"amosting","domainName":"github"},"branch":"master","displayName":"amosting/ip[master]","outputFolderName":"amosting_ip_master"},{"location":{"location":"https://github.com/JizhuoChen/ip.git","repoName":"ip","organization":"JizhuoChen","domainName":"github"},"branch":"master","displayName":"JizhuoChen/ip[master]","outputFolderName":"JizhuoChen_ip_master"},{"location":{"location":"https://github.com/Tang-Moyan/ip.git","repoName":"ip","organization":"Tang-Moyan","domainName":"github"},"branch":"master","displayName":"Tang-Moyan/ip[master]","outputFolderName":"Tang-Moyan_ip_master"},{"location":{"location":"https://github.com/aliciamichellew/ip.git","repoName":"ip","organization":"aliciamichellew","domainName":"github"},"branch":"master","displayName":"aliciamichellew/ip[master]","outputFolderName":"aliciamichellew_ip_master"},{"location":{"location":"https://github.com/KamiliArsyad/ip.git","repoName":"ip","organization":"KamiliArsyad","domainName":"github"},"branch":"master","displayName":"KamiliArsyad/ip[master]","outputFolderName":"KamiliArsyad_ip_master"},{"location":{"location":"https://github.com/dishenggg/ip.git","repoName":"ip","organization":"dishenggg","domainName":"github"},"branch":"master","displayName":"dishenggg/ip[master]","outputFolderName":"dishenggg_ip_master"},{"location":{"location":"https://github.com/Nixx162/ip.git","repoName":"ip","organization":"Nixx162","domainName":"github"},"branch":"master","displayName":"Nixx162/ip[master]","outputFolderName":"Nixx162_ip_master"},{"location":{"location":"https://github.com/Leb14/ip.git","repoName":"ip","organization":"Leb14","domainName":"github"},"branch":"master","displayName":"Leb14/ip[master]","outputFolderName":"Leb14_ip_master"},{"location":{"location":"https://github.com/Heran9/ip.git","repoName":"ip","organization":"Heran9","domainName":"github"},"branch":"master","displayName":"Heran9/ip[master]","outputFolderName":"Heran9_ip_master"},{"location":{"location":"https://github.com/FerdiHS/ip.git","repoName":"ip","organization":"FerdiHS","domainName":"github"},"branch":"master","displayName":"FerdiHS/ip[master]","outputFolderName":"FerdiHS_ip_master"},{"location":{"location":"https://github.com/StevenLiudw/ip.git","repoName":"ip","organization":"StevenLiudw","domainName":"github"},"branch":"master","displayName":"StevenLiudw/ip[master]","outputFolderName":"StevenLiudw_ip_master"},{"location":{"location":"https://github.com/InfiBeyond/ip.git","repoName":"ip","organization":"InfiBeyond","domainName":"github"},"branch":"master","displayName":"InfiBeyond/ip[master]","outputFolderName":"InfiBeyond_ip_master"},{"location":{"location":"https://github.com/s0ngyang/ip.git","repoName":"ip","organization":"s0ngyang","domainName":"github"},"branch":"master","displayName":"s0ngyang/ip[master]","outputFolderName":"s0ngyang_ip_master"},{"location":{"location":"https://github.com/ivyy-poison/ip.git","repoName":"ip","organization":"ivyy-poison","domainName":"github"},"branch":"master","displayName":"ivyy-poison/ip[master]","outputFolderName":"ivyy-poison_ip_master"},{"location":{"location":"https://github.com/yytan25/ip.git","repoName":"ip","organization":"yytan25","domainName":"github"},"branch":"master","displayName":"yytan25/ip[master]","outputFolderName":"yytan25_ip_master"},{"location":{"location":"https://github.com/tjch-o/ip.git","repoName":"ip","organization":"tjch-o","domainName":"github"},"branch":"master","displayName":"tjch-o/ip[master]","outputFolderName":"tjch-o_ip_master"},{"location":{"location":"https://github.com/jedkohjk/ip.git","repoName":"ip","organization":"jedkohjk","domainName":"github"},"branch":"master","displayName":"jedkohjk/ip[master]","outputFolderName":"jedkohjk_ip_master"},{"location":{"location":"https://github.com/raynertjx/ip.git","repoName":"ip","organization":"raynertjx","domainName":"github"},"branch":"master","displayName":"raynertjx/ip[master]","outputFolderName":"raynertjx_ip_master"},{"location":{"location":"https://github.com/cmHuang777/ip.git","repoName":"ip","organization":"cmHuang777","domainName":"github"},"branch":"master","displayName":"cmHuang777/ip[master]","outputFolderName":"cmHuang777_ip_master"},{"location":{"location":"https://github.com/wui-hong/ip.git","repoName":"ip","organization":"wui-hong","domainName":"github"},"branch":"master","displayName":"wui-hong/ip[master]","outputFolderName":"wui-hong_ip_master"},{"location":{"location":"https://github.com/PohSayKeong/ip.git","repoName":"ip","organization":"PohSayKeong","domainName":"github"},"branch":"master","displayName":"PohSayKeong/ip[master]","outputFolderName":"PohSayKeong_ip_master"},{"location":{"location":"https://github.com/lsyurea/ip.git","repoName":"ip","organization":"lsyurea","domainName":"github"},"branch":"master","displayName":"lsyurea/ip[master]","outputFolderName":"lsyurea_ip_master"},{"location":{"location":"https://github.com/ong-wei-hong/ip.git","repoName":"ip","organization":"ong-wei-hong","domainName":"github"},"branch":"master","displayName":"ong-wei-hong/ip[master]","outputFolderName":"ong-wei-hong_ip_master"},{"location":{"location":"https://github.com/asdfghjkxd/ip.git","repoName":"ip","organization":"asdfghjkxd","domainName":"github"},"branch":"master","displayName":"asdfghjkxd/ip[master]","outputFolderName":"asdfghjkxd_ip_master"},{"location":{"location":"https://github.com/GSgiansen/ip.git","repoName":"ip","organization":"GSgiansen","domainName":"github"},"branch":"master","displayName":"GSgiansen/ip[master]","outputFolderName":"GSgiansen_ip_master"},{"location":{"location":"https://github.com/syamfarh/ip.git","repoName":"ip","organization":"syamfarh","domainName":"github"},"branch":"master","displayName":"syamfarh/ip[master]","outputFolderName":"syamfarh_ip_master"},{"location":{"location":"https://github.com/PetrichorPrecipice/ip.git","repoName":"ip","organization":"PetrichorPrecipice","domainName":"github"},"branch":"master","displayName":"PetrichorPrecipice/ip[master]","outputFolderName":"PetrichorPrecipice_ip_master"},{"location":{"location":"https://github.com/ngeeyonglim/ip.git","repoName":"ip","organization":"ngeeyonglim","domainName":"github"},"branch":"master","displayName":"ngeeyonglim/ip[master]","outputFolderName":"ngeeyonglim_ip_master"},{"location":{"location":"https://github.com/ivanleekk/ip.git","repoName":"ip","organization":"ivanleekk","domainName":"github"},"branch":"master","displayName":"ivanleekk/ip[master]","outputFolderName":"ivanleekk_ip_master"},{"location":{"location":"https://github.com/ryanozx/ip.git","repoName":"ip","organization":"ryanozx","domainName":"github"},"branch":"master","displayName":"ryanozx/ip[master]","outputFolderName":"ryanozx_ip_master"},{"location":{"location":"https://github.com/Jweewee/ip.git","repoName":"ip","organization":"Jweewee","domainName":"github"},"branch":"master","displayName":"Jweewee/ip[master]","outputFolderName":"Jweewee_ip_master"},{"location":{"location":"https://github.com/supermii2/ip.git","repoName":"ip","organization":"supermii2","domainName":"github"},"branch":"master","displayName":"supermii2/ip[master]","outputFolderName":"supermii2_ip_master"},{"location":{"location":"https://github.com/bkjwjason/ip.git","repoName":"ip","organization":"bkjwjason","domainName":"github"},"branch":"master","displayName":"bkjwjason/ip[master]","outputFolderName":"bkjwjason_ip_master"},{"location":{"location":"https://github.com/Sasmik23/ip.git","repoName":"ip","organization":"Sasmik23","domainName":"github"},"branch":"master","displayName":"Sasmik23/ip[master]","outputFolderName":"Sasmik23_ip_master"},{"location":{"location":"https://github.com/nathanielcalimag/ip.git","repoName":"ip","organization":"nathanielcalimag","domainName":"github"},"branch":"master","displayName":"nathanielcalimag/ip[master]","outputFolderName":"nathanielcalimag_ip_master"},{"location":{"location":"https://github.com/AlagappanRa/ip.git","repoName":"ip","organization":"AlagappanRa","domainName":"github"},"branch":"master","displayName":"AlagappanRa/ip[master]","outputFolderName":"AlagappanRa_ip_master"},{"location":{"location":"https://github.com/McNaBry/ip.git","repoName":"ip","organization":"McNaBry","domainName":"github"},"branch":"master","displayName":"McNaBry/ip[master]","outputFolderName":"McNaBry_ip_master"},{"location":{"location":"https://github.com/phiphi-tan/ip.git","repoName":"ip","organization":"phiphi-tan","domainName":"github"},"branch":"master","displayName":"phiphi-tan/ip[master]","outputFolderName":"phiphi-tan_ip_master"},{"location":{"location":"https://github.com/LicongHuang/ip.git","repoName":"ip","organization":"LicongHuang","domainName":"github"},"branch":"master","displayName":"LicongHuang/ip[master]","outputFolderName":"LicongHuang_ip_master"},{"location":{"location":"https://github.com/tanshiyu1999/ip.git","repoName":"ip","organization":"tanshiyu1999","domainName":"github"},"branch":"master","displayName":"tanshiyu1999/ip[master]","outputFolderName":"tanshiyu1999_ip_master"},{"location":{"location":"https://github.com/raydenlim/ip.git","repoName":"ip","organization":"raydenlim","domainName":"github"},"branch":"master","displayName":"raydenlim/ip[master]","outputFolderName":"raydenlim_ip_master"},{"location":{"location":"https://github.com/jianyangg/ip.git","repoName":"ip","organization":"jianyangg","domainName":"github"},"branch":"master","displayName":"jianyangg/ip[master]","outputFolderName":"jianyangg_ip_master"},{"location":{"location":"https://github.com/rionshocker/ip.git","repoName":"ip","organization":"rionshocker","domainName":"github"},"branch":"master","displayName":"rionshocker/ip[master]","outputFolderName":"rionshocker_ip_master"},{"location":{"location":"https://github.com/conradsoon/ip.git","repoName":"ip","organization":"conradsoon","domainName":"github"},"branch":"master","displayName":"conradsoon/ip[master]","outputFolderName":"conradsoon_ip_master"},{"location":{"location":"https://github.com/Jonyxzx/ip.git","repoName":"ip","organization":"Jonyxzx","domainName":"github"},"branch":"master","displayName":"Jonyxzx/ip[master]","outputFolderName":"Jonyxzx_ip_master"},{"location":{"location":"https://github.com/euchangxian/ip.git","repoName":"ip","organization":"euchangxian","domainName":"github"},"branch":"master","displayName":"euchangxian/ip[master]","outputFolderName":"euchangxian_ip_master"},{"location":{"location":"https://github.com/teoks0199/ip.git","repoName":"ip","organization":"teoks0199","domainName":"github"},"branch":"master","displayName":"teoks0199/ip[master]","outputFolderName":"teoks0199_ip_master"},{"location":{"location":"https://github.com/HollaG/ip.git","repoName":"ip","organization":"HollaG","domainName":"github"},"branch":"master","displayName":"HollaG/ip[master]","outputFolderName":"HollaG_ip_master"},{"location":{"location":"https://github.com/leezhengjing/ip.git","repoName":"ip","organization":"leezhengjing","domainName":"github"},"branch":"master","displayName":"leezhengjing/ip[master]","outputFolderName":"leezhengjing_ip_master"},{"location":{"location":"https://github.com/timleow/ip.git","repoName":"ip","organization":"timleow","domainName":"github"},"branch":"master","displayName":"timleow/ip[master]","outputFolderName":"timleow_ip_master"},{"location":{"location":"https://github.com/jacksonyuan256/ip.git","repoName":"ip","organization":"jacksonyuan256","domainName":"github"},"branch":"master","displayName":"jacksonyuan256/ip[master]","outputFolderName":"jacksonyuan256_ip_master"},{"location":{"location":"https://github.com/victorlaiyeeteng/ip.git","repoName":"ip","organization":"victorlaiyeeteng","domainName":"github"},"branch":"master","displayName":"victorlaiyeeteng/ip[master]","outputFolderName":"victorlaiyeeteng_ip_master"},{"location":{"location":"https://github.com/prawnzyy/ip.git","repoName":"ip","organization":"prawnzyy","domainName":"github"},"branch":"master","displayName":"prawnzyy/ip[master]","outputFolderName":"prawnzyy_ip_master"},{"location":{"location":"https://github.com/ryanongwx/ip.git","repoName":"ip","organization":"ryanongwx","domainName":"github"},"branch":"master","displayName":"ryanongwx/ip[master]","outputFolderName":"ryanongwx_ip_master"},{"location":{"location":"https://github.com/tohpinren/ip.git","repoName":"ip","organization":"tohpinren","domainName":"github"},"branch":"master","displayName":"tohpinren/ip[master]","outputFolderName":"tohpinren_ip_master"},{"location":{"location":"https://github.com/DeltonCheng/ip.git","repoName":"ip","organization":"DeltonCheng","domainName":"github"},"branch":"master","displayName":"DeltonCheng/ip[master]","outputFolderName":"DeltonCheng_ip_master"},{"location":{"location":"https://github.com/leontan2/ip.git","repoName":"ip","organization":"leontan2","domainName":"github"},"branch":"master","displayName":"leontan2/ip[master]","outputFolderName":"leontan2_ip_master"},{"location":{"location":"https://github.com/alvinlim277/ip.git","repoName":"ip","organization":"alvinlim277","domainName":"github"},"branch":"master","displayName":"alvinlim277/ip[master]","outputFolderName":"alvinlim277_ip_master"},{"location":{"location":"https://github.com/lshaoqin/ip.git","repoName":"ip","organization":"lshaoqin","domainName":"github"},"branch":"master","displayName":"lshaoqin/ip[master]","outputFolderName":"lshaoqin_ip_master"},{"location":{"location":"https://github.com/ChongWeiJie29/ip.git","repoName":"ip","organization":"ChongWeiJie29","domainName":"github"},"branch":"master","displayName":"ChongWeiJie29/ip[master]","outputFolderName":"ChongWeiJie29_ip_master"},{"location":{"location":"https://github.com/zhonghan721/ip.git","repoName":"ip","organization":"zhonghan721","domainName":"github"},"branch":"master","displayName":"zhonghan721/ip[master]","outputFolderName":"zhonghan721_ip_master"},{"location":{"location":"https://github.com/teozhengyang/ip.git","repoName":"ip","organization":"teozhengyang","domainName":"github"},"branch":"master","displayName":"teozhengyang/ip[master]","outputFolderName":"teozhengyang_ip_master"},{"location":{"location":"https://github.com/garylow2001/ip.git","repoName":"ip","organization":"garylow2001","domainName":"github"},"branch":"master","displayName":"garylow2001/ip[master]","outputFolderName":"garylow2001_ip_master"},{"location":{"location":"https://github.com/Cleon2/ip.git","repoName":"ip","organization":"Cleon2","domainName":"github"},"branch":"master","displayName":"Cleon2/ip[master]","outputFolderName":"Cleon2_ip_master"},{"location":{"location":"https://github.com/limzhenwy/ip.git","repoName":"ip","organization":"limzhenwy","domainName":"github"},"branch":"master","displayName":"limzhenwy/ip[master]","outputFolderName":"limzhenwy_ip_master"},{"location":{"location":"https://github.com/ItsTYtan/ip.git","repoName":"ip","organization":"ItsTYtan","domainName":"github"},"branch":"master","displayName":"ItsTYtan/ip[master]","outputFolderName":"ItsTYtan_ip_master"},{"location":{"location":"https://github.com/owenyeo/ip.git","repoName":"ip","organization":"owenyeo","domainName":"github"},"branch":"master","displayName":"owenyeo/ip[master]","outputFolderName":"owenyeo_ip_master"},{"location":{"location":"https://github.com/jonasongg/ip.git","repoName":"ip","organization":"jonasongg","domainName":"github"},"branch":"master","displayName":"jonasongg/ip[master]","outputFolderName":"jonasongg_ip_master"},{"location":{"location":"https://github.com/Ruizhi2001/ip.git","repoName":"ip","organization":"Ruizhi2001","domainName":"github"},"branch":"master","displayName":"Ruizhi2001/ip[master]","outputFolderName":"Ruizhi2001_ip_master"},{"location":{"location":"https://github.com/Dioclei/ip.git","repoName":"ip","organization":"Dioclei","domainName":"github"},"branch":"master","displayName":"Dioclei/ip[master]","outputFolderName":"Dioclei_ip_master"},{"location":{"location":"https://github.com/bobscodedump/ip.git","repoName":"ip","organization":"bobscodedump","domainName":"github"},"branch":"master","displayName":"bobscodedump/ip[master]","outputFolderName":"bobscodedump_ip_master"},{"location":{"location":"https://github.com/andrefoo/ip.git","repoName":"ip","organization":"andrefoo","domainName":"github"},"branch":"master","displayName":"andrefoo/ip[master]","outputFolderName":"andrefoo_ip_master"},{"location":{"location":"https://github.com/Bombbird2001/ip.git","repoName":"ip","organization":"Bombbird2001","domainName":"github"},"branch":"master","displayName":"Bombbird2001/ip[master]","outputFolderName":"Bombbird2001_ip_master"},{"location":{"location":"https://github.com/chewjh1234/ip.git","repoName":"ip","organization":"chewjh1234","domainName":"github"},"branch":"master","displayName":"chewjh1234/ip[master]","outputFolderName":"chewjh1234_ip_master"},{"location":{"location":"https://github.com/dloh2236/ip.git","repoName":"ip","organization":"dloh2236","domainName":"github"},"branch":"master","displayName":"dloh2236/ip[master]","outputFolderName":"dloh2236_ip_master"},{"location":{"location":"https://github.com/chew01/ip.git","repoName":"ip","organization":"chew01","domainName":"github"},"branch":"master","displayName":"chew01/ip[master]","outputFolderName":"chew01_ip_master"},{"location":{"location":"https://github.com/trgao/ip.git","repoName":"ip","organization":"trgao","domainName":"github"},"branch":"master","displayName":"trgao/ip[master]","outputFolderName":"trgao_ip_master"},{"location":{"location":"https://github.com/richiehx/ip.git","repoName":"ip","organization":"richiehx","domainName":"github"},"branch":"master","displayName":"richiehx/ip[master]","outputFolderName":"richiehx_ip_master"},{"location":{"location":"https://github.com/LoMaply/ip.git","repoName":"ip","organization":"LoMaply","domainName":"github"},"branch":"master","displayName":"LoMaply/ip[master]","outputFolderName":"LoMaply_ip_master"},{"location":{"location":"https://github.com/Originalidk/ip.git","repoName":"ip","organization":"Originalidk","domainName":"github"},"branch":"master","displayName":"Originalidk/ip[master]","outputFolderName":"Originalidk_ip_master"},{"location":{"location":"https://github.com/kiatkat/ip.git","repoName":"ip","organization":"kiatkat","domainName":"github"},"branch":"master","displayName":"kiatkat/ip[master]","outputFolderName":"kiatkat_ip_master"},{"location":{"location":"https://github.com/juliusgambe/ip.git","repoName":"ip","organization":"juliusgambe","domainName":"github"},"branch":"master","displayName":"juliusgambe/ip[master]","outputFolderName":"juliusgambe_ip_master"},{"location":{"location":"https://github.com/jiakai-17/ip.git","repoName":"ip","organization":"jiakai-17","domainName":"github"},"branch":"master","displayName":"jiakai-17/ip[master]","outputFolderName":"jiakai-17_ip_master"},{"location":{"location":"https://github.com/nikele2001/ip.git","repoName":"ip","organization":"nikele2001","domainName":"github"},"branch":"master","displayName":"nikele2001/ip[master]","outputFolderName":"nikele2001_ip_master"},{"location":{"location":"https://github.com/jylow/ip.git","repoName":"ip","organization":"jylow","domainName":"github"},"branch":"master","displayName":"jylow/ip[master]","outputFolderName":"jylow_ip_master"},{"location":{"location":"https://github.com/jx124/ip.git","repoName":"ip","organization":"jx124","domainName":"github"},"branch":"master","displayName":"jx124/ip[master]","outputFolderName":"jx124_ip_master"},{"location":{"location":"https://github.com/Kb-Tay/ip.git","repoName":"ip","organization":"Kb-Tay","domainName":"github"},"branch":"master","displayName":"Kb-Tay/ip[master]","outputFolderName":"Kb-Tay_ip_master"},{"location":{"location":"https://github.com/jinyuan0425/ip.git","repoName":"ip","organization":"jinyuan0425","domainName":"github"},"branch":"master","displayName":"jinyuan0425/ip[master]","outputFolderName":"jinyuan0425_ip_master"},{"location":{"location":"https://github.com/darrentfy/ip.git","repoName":"ip","organization":"darrentfy","domainName":"github"},"branch":"master","displayName":"darrentfy/ip[master]","outputFolderName":"darrentfy_ip_master"},{"location":{"location":"https://github.com/HEEaZ/ip.git","repoName":"ip","organization":"HEEaZ","domainName":"github"},"branch":"master","displayName":"HEEaZ/ip[master]","outputFolderName":"HEEaZ_ip_master"},{"location":{"location":"https://github.com/ji-just-ji/ip.git","repoName":"ip","organization":"ji-just-ji","domainName":"github"},"branch":"master","displayName":"ji-just-ji/ip[master]","outputFolderName":"ji-just-ji_ip_master"},{"location":{"location":"https://github.com/simbayippy/ip.git","repoName":"ip","organization":"simbayippy","domainName":"github"},"branch":"master","displayName":"simbayippy/ip[master]","outputFolderName":"simbayippy_ip_master"},{"location":{"location":"https://github.com/teozern1/ip.git","repoName":"ip","organization":"teozern1","domainName":"github"},"branch":"master","displayName":"teozern1/ip[master]","outputFolderName":"teozern1_ip_master"},{"location":{"location":"https://github.com/brein62/ip.git","repoName":"ip","organization":"brein62","domainName":"github"},"branch":"master","displayName":"brein62/ip[master]","outputFolderName":"brein62_ip_master"},{"location":{"location":"https://github.com/awhb/ip.git","repoName":"ip","organization":"awhb","domainName":"github"},"branch":"master","displayName":"awhb/ip[master]","outputFolderName":"awhb_ip_master"},{"location":{"location":"https://github.com/Mahidharah/ip.git","repoName":"ip","organization":"Mahidharah","domainName":"github"},"branch":"master","displayName":"Mahidharah/ip[master]","outputFolderName":"Mahidharah_ip_master"},{"location":{"location":"https://github.com/timetraveller-123/ip.git","repoName":"ip","organization":"timetraveller-123","domainName":"github"},"branch":"master","displayName":"timetraveller-123/ip[master]","outputFolderName":"timetraveller-123_ip_master"},{"location":{"location":"https://github.com/ElginTZM/ip.git","repoName":"ip","organization":"ElginTZM","domainName":"github"},"branch":"master","displayName":"ElginTZM/ip[master]","outputFolderName":"ElginTZM_ip_master"},{"location":{"location":"https://github.com/ryamgoh/ip.git","repoName":"ip","organization":"ryamgoh","domainName":"github"},"branch":"master","displayName":"ryamgoh/ip[master]","outputFolderName":"ryamgoh_ip_master"},{"location":{"location":"https://github.com/Blizzeracz/ip.git","repoName":"ip","organization":"Blizzeracz","domainName":"github"},"branch":"master","displayName":"Blizzeracz/ip[master]","outputFolderName":"Blizzeracz_ip_master"},{"location":{"location":"https://github.com/kiwibang/ip.git","repoName":"ip","organization":"kiwibang","domainName":"github"},"branch":"master","displayName":"kiwibang/ip[master]","outputFolderName":"kiwibang_ip_master"},{"location":{"location":"https://github.com/redtailedfox/ip.git","repoName":"ip","organization":"redtailedfox","domainName":"github"},"branch":"master","displayName":"redtailedfox/ip[master]","outputFolderName":"redtailedfox_ip_master"},{"location":{"location":"https://github.com/lamchenghou/ip.git","repoName":"ip","organization":"lamchenghou","domainName":"github"},"branch":"master","displayName":"lamchenghou/ip[master]","outputFolderName":"lamchenghou_ip_master"},{"location":{"location":"https://github.com/gongg21/ip.git","repoName":"ip","organization":"gongg21","domainName":"github"},"branch":"master","displayName":"gongg21/ip[master]","outputFolderName":"gongg21_ip_master"},{"location":{"location":"https://github.com/CJ-Lee01/ip.git","repoName":"ip","organization":"CJ-Lee01","domainName":"github"},"branch":"master","displayName":"CJ-Lee01/ip[master]","outputFolderName":"CJ-Lee01_ip_master"},{"location":{"location":"https://github.com/Sheeepen/ip.git","repoName":"ip","organization":"Sheeepen","domainName":"github"},"branch":"master","displayName":"Sheeepen/ip[master]","outputFolderName":"Sheeepen_ip_master"},{"location":{"location":"https://github.com/AaronJT1/ip.git","repoName":"ip","organization":"AaronJT1","domainName":"github"},"branch":"master","displayName":"AaronJT1/ip[master]","outputFolderName":"AaronJT1_ip_master"},{"location":{"location":"https://github.com/Respirayson/ip.git","repoName":"ip","organization":"Respirayson","domainName":"github"},"branch":"master","displayName":"Respirayson/ip[master]","outputFolderName":"Respirayson_ip_master"},{"location":{"location":"https://github.com/dickongwd/ip.git","repoName":"ip","organization":"dickongwd","domainName":"github"},"branch":"master","displayName":"dickongwd/ip[master]","outputFolderName":"dickongwd_ip_master"},{"location":{"location":"https://github.com/nicholascher/ip.git","repoName":"ip","organization":"nicholascher","domainName":"github"},"branch":"master","displayName":"nicholascher/ip[master]","outputFolderName":"nicholascher_ip_master"},{"location":{"location":"https://github.com/et-irl/ip.git","repoName":"ip","organization":"et-irl","domainName":"github"},"branch":"master","displayName":"et-irl/ip[master]","outputFolderName":"et-irl_ip_master"},{"location":{"location":"https://github.com/aslam341/ip.git","repoName":"ip","organization":"aslam341","domainName":"github"},"branch":"master","displayName":"aslam341/ip[master]","outputFolderName":"aslam341_ip_master"},{"location":{"location":"https://github.com/seantehds/ip.git","repoName":"ip","organization":"seantehds","domainName":"github"},"branch":"master","displayName":"seantehds/ip[master]","outputFolderName":"seantehds_ip_master"},{"location":{"location":"https://github.com/jianrong7/ip.git","repoName":"ip","organization":"jianrong7","domainName":"github"},"branch":"master","displayName":"jianrong7/ip[master]","outputFolderName":"jianrong7_ip_master"},{"location":{"location":"https://github.com/TeeRenJing/ip.git","repoName":"ip","organization":"TeeRenJing","domainName":"github"},"branch":"master","displayName":"TeeRenJing/ip[master]","outputFolderName":"TeeRenJing_ip_master"},{"location":{"location":"https://github.com/RoeReRe/ip.git","repoName":"ip","organization":"RoeReRe","domainName":"github"},"branch":"master","displayName":"RoeReRe/ip[master]","outputFolderName":"RoeReRe_ip_master"},{"location":{"location":"https://github.com/zsh-eng/ip.git","repoName":"ip","organization":"zsh-eng","domainName":"github"},"branch":"master","displayName":"zsh-eng/ip[master]","outputFolderName":"zsh-eng_ip_master"},{"location":{"location":"https://github.com/seanpzk/ip.git","repoName":"ip","organization":"seanpzk","domainName":"github"},"branch":"master","displayName":"seanpzk/ip[master]","outputFolderName":"seanpzk_ip_master"},{"location":{"location":"https://github.com/quzhetao01/ip.git","repoName":"ip","organization":"quzhetao01","domainName":"github"},"branch":"master","displayName":"quzhetao01/ip[master]","outputFolderName":"quzhetao01_ip_master"},{"location":{"location":"https://github.com/joel-foo/ip.git","repoName":"ip","organization":"joel-foo","domainName":"github"},"branch":"master","displayName":"joel-foo/ip[master]","outputFolderName":"joel-foo_ip_master"},{"location":{"location":"https://github.com/markgcera/ip.git","repoName":"ip","organization":"markgcera","domainName":"github"},"branch":"master","displayName":"markgcera/ip[master]","outputFolderName":"markgcera_ip_master"},{"location":{"location":"https://github.com/dylkaw/ip.git","repoName":"ip","organization":"dylkaw","domainName":"github"},"branch":"master","displayName":"dylkaw/ip[master]","outputFolderName":"dylkaw_ip_master"},{"location":{"location":"https://github.com/SelwynAng/ip.git","repoName":"ip","organization":"SelwynAng","domainName":"github"},"branch":"master","displayName":"SelwynAng/ip[master]","outputFolderName":"SelwynAng_ip_master"},{"location":{"location":"https://github.com/jinyang628/ip.git","repoName":"ip","organization":"jinyang628","domainName":"github"},"branch":"master","displayName":"jinyang628/ip[master]","outputFolderName":"jinyang628_ip_master"},{"location":{"location":"https://github.com/matochichap/ip.git","repoName":"ip","organization":"matochichap","domainName":"github"},"branch":"master","displayName":"matochichap/ip[master]","outputFolderName":"matochichap_ip_master"},{"location":{"location":"https://github.com/sk2001git/ip.git","repoName":"ip","organization":"sk2001git","domainName":"github"},"branch":"master","displayName":"sk2001git/ip[master]","outputFolderName":"sk2001git_ip_master"},{"location":{"location":"https://github.com/jason-raiin/ip.git","repoName":"ip","organization":"jason-raiin","domainName":"github"},"branch":"master","displayName":"jason-raiin/ip[master]","outputFolderName":"jason-raiin_ip_master"},{"location":{"location":"https://github.com/Sebtey/ip.git","repoName":"ip","organization":"Sebtey","domainName":"github"},"branch":"master","displayName":"Sebtey/ip[master]","outputFolderName":"Sebtey_ip_master"},{"location":{"location":"https://github.com/Jweng88/ip.git","repoName":"ip","organization":"Jweng88","domainName":"github"},"branch":"master","displayName":"Jweng88/ip[master]","outputFolderName":"Jweng88_ip_master"},{"location":{"location":"https://github.com/billieboy7/ip.git","repoName":"ip","organization":"billieboy7","domainName":"github"},"branch":"master","displayName":"billieboy7/ip[master]","outputFolderName":"billieboy7_ip_master"},{"location":{"location":"https://github.com/ldinghan/ip.git","repoName":"ip","organization":"ldinghan","domainName":"github"},"branch":"master","displayName":"ldinghan/ip[master]","outputFolderName":"ldinghan_ip_master"},{"location":{"location":"https://github.com/anthonytamzil/ip.git","repoName":"ip","organization":"anthonytamzil","domainName":"github"},"branch":"master","displayName":"anthonytamzil/ip[master]","outputFolderName":"anthonytamzil_ip_master"},{"location":{"location":"https://github.com/ryantzr1/ip.git","repoName":"ip","organization":"ryantzr1","domainName":"github"},"branch":"master","displayName":"ryantzr1/ip[master]","outputFolderName":"ryantzr1_ip_master"},{"location":{"location":"https://github.com/shuyangk/ip.git","repoName":"ip","organization":"shuyangk","domainName":"github"},"branch":"master","displayName":"shuyangk/ip[master]","outputFolderName":"shuyangk_ip_master"},{"location":{"location":"https://github.com/seewhyjay/ip.git","repoName":"ip","organization":"seewhyjay","domainName":"github"},"branch":"master","displayName":"seewhyjay/ip[master]","outputFolderName":"seewhyjay_ip_master"},{"location":{"location":"https://github.com/waseemingly/ip.git","repoName":"ip","organization":"waseemingly","domainName":"github"},"branch":"master","displayName":"waseemingly/ip[master]","outputFolderName":"waseemingly_ip_master"},{"location":{"location":"https://github.com/DistractedCat/ip.git","repoName":"ip","organization":"DistractedCat","domainName":"github"},"branch":"master","displayName":"DistractedCat/ip[master]","outputFolderName":"DistractedCat_ip_master"},{"location":{"location":"https://github.com/geraldngjx/ip.git","repoName":"ip","organization":"geraldngjx","domainName":"github"},"branch":"master","displayName":"geraldngjx/ip[master]","outputFolderName":"geraldngjx_ip_master"},{"location":{"location":"https://github.com/tayian/ip.git","repoName":"ip","organization":"tayian","domainName":"github"},"branch":"master","displayName":"tayian/ip[master]","outputFolderName":"tayian_ip_master"},{"location":{"location":"https://github.com/AlfredBeNoel/ip.git","repoName":"ip","organization":"AlfredBeNoel","domainName":"github"},"branch":"master","displayName":"AlfredBeNoel/ip[master]","outputFolderName":"AlfredBeNoel_ip_master"},{"location":{"location":"https://github.com/Chen1x/ip.git","repoName":"ip","organization":"Chen1x","domainName":"github"},"branch":"master","displayName":"Chen1x/ip[master]","outputFolderName":"Chen1x_ip_master"},{"location":{"location":"https://github.com/juzzztinsoong/ip.git","repoName":"ip","organization":"juzzztinsoong","domainName":"github"},"branch":"master","displayName":"juzzztinsoong/ip[master]","outputFolderName":"juzzztinsoong_ip_master"},{"location":{"location":"https://github.com/lambraydon/ip.git","repoName":"ip","organization":"lambraydon","domainName":"github"},"branch":"master","displayName":"lambraydon/ip[master]","outputFolderName":"lambraydon_ip_master"},{"location":{"location":"https://github.com/lilozz2/ip.git","repoName":"ip","organization":"lilozz2","domainName":"github"},"branch":"master","displayName":"lilozz2/ip[master]","outputFolderName":"lilozz2_ip_master"},{"location":{"location":"https://github.com/tyouwei/ip.git","repoName":"ip","organization":"tyouwei","domainName":"github"},"branch":"master","displayName":"tyouwei/ip[master]","outputFolderName":"tyouwei_ip_master"},{"location":{"location":"https://github.com/Kailash201/ip.git","repoName":"ip","organization":"Kailash201","domainName":"github"},"branch":"master","displayName":"Kailash201/ip[master]","outputFolderName":"Kailash201_ip_master"},{"location":{"location":"https://github.com/tjingsheng/ip.git","repoName":"ip","organization":"tjingsheng","domainName":"github"},"branch":"master","displayName":"tjingsheng/ip[master]","outputFolderName":"tjingsheng_ip_master"},{"location":{"location":"https://github.com/pangyyen/ip.git","repoName":"ip","organization":"pangyyen","domainName":"github"},"branch":"master","displayName":"pangyyen/ip[master]","outputFolderName":"pangyyen_ip_master"},{"location":{"location":"https://github.com/Khaleelur-Rahman/ip.git","repoName":"ip","organization":"Khaleelur-Rahman","domainName":"github"},"branch":"master","displayName":"Khaleelur-Rahman/ip[master]","outputFolderName":"Khaleelur-Rahman_ip_master"},{"location":{"location":"https://github.com/erohsikivar/ip.git","repoName":"ip","organization":"erohsikivar","domainName":"github"},"branch":"master","displayName":"erohsikivar/ip[master]","outputFolderName":"erohsikivar_ip_master"},{"location":{"location":"https://github.com/shishirbychapur/ip.git","repoName":"ip","organization":"shishirbychapur","domainName":"github"},"branch":"master","displayName":"shishirbychapur/ip[master]","outputFolderName":"shishirbychapur_ip_master"},{"location":{"location":"https://github.com/Badatprogrammiing/ip.git","repoName":"ip","organization":"Badatprogrammiing","domainName":"github"},"branch":"master","displayName":"Badatprogrammiing/ip[master]","outputFolderName":"Badatprogrammiing_ip_master"},{"location":{"location":"https://github.com/ravern/ip.git","repoName":"ip","organization":"ravern","domainName":"github"},"branch":"master","displayName":"ravern/ip[master]","outputFolderName":"ravern_ip_master"},{"location":{"location":"https://github.com/B-enguin/ip.git","repoName":"ip","organization":"B-enguin","domainName":"github"},"branch":"master","displayName":"B-enguin/ip[master]","outputFolderName":"B-enguin_ip_master"},{"location":{"location":"https://github.com/AlyssaPng/ip.git","repoName":"ip","organization":"AlyssaPng","domainName":"github"},"branch":"master","displayName":"AlyssaPng/ip[master]","outputFolderName":"AlyssaPng_ip_master"},{"location":{"location":"https://github.com/flexibo/ip.git","repoName":"ip","organization":"flexibo","domainName":"github"},"branch":"master","displayName":"flexibo/ip[master]","outputFolderName":"flexibo_ip_master"},{"location":{"location":"https://github.com/lordidiot/ip.git","repoName":"ip","organization":"lordidiot","domainName":"github"},"branch":"master","displayName":"lordidiot/ip[master]","outputFolderName":"lordidiot_ip_master"},{"location":{"location":"https://github.com/vansh284/ip.git","repoName":"ip","organization":"vansh284","domainName":"github"},"branch":"master","displayName":"vansh284/ip[master]","outputFolderName":"vansh284_ip_master"},{"location":{"location":"https://github.com/samuelim01/ip.git","repoName":"ip","organization":"samuelim01","domainName":"github"},"branch":"master","displayName":"samuelim01/ip[master]","outputFolderName":"samuelim01_ip_master"},{"location":{"location":"https://github.com/WZWren/ip.git","repoName":"ip","organization":"WZWren","domainName":"github"},"branch":"master","displayName":"WZWren/ip[master]","outputFolderName":"WZWren_ip_master"},{"location":{"location":"https://github.com/cxo05/ip.git","repoName":"ip","organization":"cxo05","domainName":"github"},"branch":"master","displayName":"cxo05/ip[master]","outputFolderName":"cxo05_ip_master"},{"location":{"location":"https://github.com/sudarshan2401/ip.git","repoName":"ip","organization":"sudarshan2401","domainName":"github"},"branch":"master","displayName":"sudarshan2401/ip[master]","outputFolderName":"sudarshan2401_ip_master"},{"location":{"location":"https://github.com/jingyu987/ip.git","repoName":"ip","organization":"jingyu987","domainName":"github"},"branch":"master","displayName":"jingyu987/ip[master]","outputFolderName":"jingyu987_ip_master"},{"location":{"location":"https://github.com/H1410101/ip.git","repoName":"ip","organization":"H1410101","domainName":"github"},"branch":"master","displayName":"H1410101/ip[master]","outputFolderName":"H1410101_ip_master"},{"location":{"location":"https://github.com/MagnificentCreature/ip.git","repoName":"ip","organization":"MagnificentCreature","domainName":"github"},"branch":"master","displayName":"MagnificentCreature/ip[master]","outputFolderName":"MagnificentCreature_ip_master"},{"location":{"location":"https://github.com/shyanyong/ip.git","repoName":"ip","organization":"shyanyong","domainName":"github"},"branch":"master","displayName":"shyanyong/ip[master]","outputFolderName":"shyanyong_ip_master"},{"location":{"location":"https://github.com/peasantbird/ip.git","repoName":"ip","organization":"peasantbird","domainName":"github"},"branch":"master","displayName":"peasantbird/ip[master]","outputFolderName":"peasantbird_ip_master"},{"location":{"location":"https://github.com/tllshan/ip.git","repoName":"ip","organization":"tllshan","domainName":"github"},"branch":"master","displayName":"tllshan/ip[master]","outputFolderName":"tllshan_ip_master"},{"location":{"location":"https://github.com/sushiyade/ip.git","repoName":"ip","organization":"sushiyade","domainName":"github"},"branch":"master","displayName":"sushiyade/ip[master]","outputFolderName":"sushiyade_ip_master"},{"location":{"location":"https://github.com/iyioon/ip.git","repoName":"ip","organization":"iyioon","domainName":"github"},"branch":"master","displayName":"iyioon/ip[master]","outputFolderName":"iyioon_ip_master"},{"location":{"location":"https://github.com/shashahchk/ip.git","repoName":"ip","organization":"shashahchk","domainName":"github"},"branch":"master","displayName":"shashahchk/ip[master]","outputFolderName":"shashahchk_ip_master"},{"location":{"location":"https://github.com/Chandan8186/ip.git","repoName":"ip","organization":"Chandan8186","domainName":"github"},"branch":"master","displayName":"Chandan8186/ip[master]","outputFolderName":"Chandan8186_ip_master"},{"location":{"location":"https://github.com/wesho1107/ip.git","repoName":"ip","organization":"wesho1107","domainName":"github"},"branch":"master","displayName":"wesho1107/ip[master]","outputFolderName":"wesho1107_ip_master"},{"location":{"location":"https://github.com/tim-pipi/ip.git","repoName":"ip","organization":"tim-pipi","domainName":"github"},"branch":"master","displayName":"tim-pipi/ip[master]","outputFolderName":"tim-pipi_ip_master"},{"location":{"location":"https://github.com/emzm2023/ip.git","repoName":"ip","organization":"emzm2023","domainName":"github"},"branch":"master","displayName":"emzm2023/ip[master]","outputFolderName":"emzm2023_ip_master"},{"location":{"location":"https://github.com/dlathyun/ip.git","repoName":"ip","organization":"dlathyun","domainName":"github"},"branch":"master","displayName":"dlathyun/ip[master]","outputFolderName":"dlathyun_ip_master"},{"location":{"location":"https://github.com/tanboonkhong/ip.git","repoName":"ip","organization":"tanboonkhong","domainName":"github"},"branch":"master","displayName":"tanboonkhong/ip[master]","outputFolderName":"tanboonkhong_ip_master"},{"location":{"location":"https://github.com/joeng03/ip.git","repoName":"ip","organization":"joeng03","domainName":"github"},"branch":"master","displayName":"joeng03/ip[master]","outputFolderName":"joeng03_ip_master"},{"location":{"location":"https://github.com/VN-Hao/ip.git","repoName":"ip","organization":"VN-Hao","domainName":"github"},"branch":"master","displayName":"VN-Hao/ip[master]","outputFolderName":"VN-Hao_ip_master"},{"location":{"location":"https://github.com/NgChunMan/ip.git","repoName":"ip","organization":"NgChunMan","domainName":"github"},"branch":"master","displayName":"NgChunMan/ip[master]","outputFolderName":"NgChunMan_ip_master"},{"location":{"location":"https://github.com/TiwKangXu/ip.git","repoName":"ip","organization":"TiwKangXu","domainName":"github"},"branch":"master","displayName":"TiwKangXu/ip[master]","outputFolderName":"TiwKangXu_ip_master"},{"location":{"location":"https://github.com/josepholim/ip.git","repoName":"ip","organization":"josepholim","domainName":"github"},"branch":"master","displayName":"josepholim/ip[master]","outputFolderName":"josepholim_ip_master"},{"location":{"location":"https://github.com/dinde2004/ip.git","repoName":"ip","organization":"dinde2004","domainName":"github"},"branch":"master","displayName":"dinde2004/ip[master]","outputFolderName":"dinde2004_ip_master"},{"location":{"location":"https://github.com/yucongkoo/ip.git","repoName":"ip","organization":"yucongkoo","domainName":"github"},"branch":"master","displayName":"yucongkoo/ip[master]","outputFolderName":"yucongkoo_ip_master"},{"location":{"location":"https://github.com/TohLiYuan/ip.git","repoName":"ip","organization":"TohLiYuan","domainName":"github"},"branch":"master","displayName":"TohLiYuan/ip[master]","outputFolderName":"TohLiYuan_ip_master"},{"location":{"location":"https://github.com/NereusWB922/ip.git","repoName":"ip","organization":"NereusWB922","domainName":"github"},"branch":"master","displayName":"NereusWB922/ip[master]","outputFolderName":"NereusWB922_ip_master"},{"location":{"location":"https://github.com/ph-nathan/ip.git","repoName":"ip","organization":"ph-nathan","domainName":"github"},"branch":"master","displayName":"ph-nathan/ip[master]","outputFolderName":"ph-nathan_ip_master"},{"location":{"location":"https://github.com/antonTan96/ip.git","repoName":"ip","organization":"antonTan96","domainName":"github"},"branch":"master","displayName":"antonTan96/ip[master]","outputFolderName":"antonTan96_ip_master"},{"location":{"location":"https://github.com/WinstonLeonard/ip.git","repoName":"ip","organization":"WinstonLeonard","domainName":"github"},"branch":"master","displayName":"WinstonLeonard/ip[master]","outputFolderName":"WinstonLeonard_ip_master"},{"location":{"location":"https://github.com/TehOPanas/ip.git","repoName":"ip","organization":"TehOPanas","domainName":"github"},"branch":"master","displayName":"TehOPanas/ip[master]","outputFolderName":"TehOPanas_ip_master"},{"location":{"location":"https://github.com/marioalvaro/ip.git","repoName":"ip","organization":"marioalvaro","domainName":"github"},"branch":"master","displayName":"marioalvaro/ip[master]","outputFolderName":"marioalvaro_ip_master"},{"location":{"location":"https://github.com/LINCHENYU2030S/ip.git","repoName":"ip","organization":"LINCHENYU2030S","domainName":"github"},"branch":"master","displayName":"LINCHENYU2030S/ip[master]","outputFolderName":"LINCHENYU2030S_ip_master"},{"location":{"location":"https://github.com/LamJiuFong/ip.git","repoName":"ip","organization":"LamJiuFong","domainName":"github"},"branch":"master","displayName":"LamJiuFong/ip[master]","outputFolderName":"LamJiuFong_ip_master"},{"location":{"location":"https://github.com/AndrewJanong/ip.git","repoName":"ip","organization":"AndrewJanong","domainName":"github"},"branch":"master","displayName":"AndrewJanong/ip[master]","outputFolderName":"AndrewJanong_ip_master"},{"location":{"location":"https://github.com/songfangyl/ip.git","repoName":"ip","organization":"songfangyl","domainName":"github"},"branch":"master","displayName":"songfangyl/ip[master]","outputFolderName":"songfangyl_ip_master"},{"location":{"location":"https://github.com/AriellaCallista/ip.git","repoName":"ip","organization":"AriellaCallista","domainName":"github"},"branch":"master","displayName":"AriellaCallista/ip[master]","outputFolderName":"AriellaCallista_ip_master"},{"location":{"location":"https://github.com/KamJiaYue/ip.git","repoName":"ip","organization":"KamJiaYue","domainName":"github"},"branch":"master","displayName":"KamJiaYue/ip[master]","outputFolderName":"KamJiaYue_ip_master"},{"location":{"location":"https://github.com/feifeiraindrops/ip.git","repoName":"ip","organization":"feifeiraindrops","domainName":"github"},"branch":"master","displayName":"feifeiraindrops/ip[master]","outputFolderName":"feifeiraindrops_ip_master"},{"location":{"location":"https://github.com/czhiruo/ip.git","repoName":"ip","organization":"czhiruo","domainName":"github"},"branch":"master","displayName":"czhiruo/ip[master]","outputFolderName":"czhiruo_ip_master"},{"location":{"location":"https://github.com/butteredyakiimo/ip.git","repoName":"ip","organization":"butteredyakiimo","domainName":"github"},"branch":"master","displayName":"butteredyakiimo/ip[master]","outputFolderName":"butteredyakiimo_ip_master"},{"location":{"location":"https://github.com/RiyaMehta2211/ip.git","repoName":"ip","organization":"RiyaMehta2211","domainName":"github"},"branch":"master","displayName":"RiyaMehta2211/ip[master]","outputFolderName":"RiyaMehta2211_ip_master"},{"location":{"location":"https://github.com/beatricecst/ip.git","repoName":"ip","organization":"beatricecst","domainName":"github"},"branch":"master","displayName":"beatricecst/ip[master]","outputFolderName":"beatricecst_ip_master"},{"location":{"location":"https://github.com/maypfv/ip.git","repoName":"ip","organization":"maypfv","domainName":"github"},"branch":"master","displayName":"maypfv/ip[master]","outputFolderName":"maypfv_ip_master"},{"location":{"location":"https://github.com/pra-navi/ip.git","repoName":"ip","organization":"pra-navi","domainName":"github"},"branch":"master","displayName":"pra-navi/ip[master]","outputFolderName":"pra-navi_ip_master"},{"location":{"location":"https://github.com/xxiaoweii/ip.git","repoName":"ip","organization":"xxiaoweii","domainName":"github"},"branch":"master","displayName":"xxiaoweii/ip[master]","outputFolderName":"xxiaoweii_ip_master"},{"location":{"location":"https://github.com/qyaner/ip.git","repoName":"ip","organization":"qyaner","domainName":"github"},"branch":"master","displayName":"qyaner/ip[master]","outputFolderName":"qyaner_ip_master"},{"location":{"location":"https://github.com/qz1004/ip.git","repoName":"ip","organization":"qz1004","domainName":"github"},"branch":"master","displayName":"qz1004/ip[master]","outputFolderName":"qz1004_ip_master"},{"location":{"location":"https://github.com/miljyy/ip.git","repoName":"ip","organization":"miljyy","domainName":"github"},"branch":"master","displayName":"miljyy/ip[master]","outputFolderName":"miljyy_ip_master"},{"location":{"location":"https://github.com/yihfei/ip.git","repoName":"ip","organization":"yihfei","domainName":"github"},"branch":"master","displayName":"yihfei/ip[master]","outputFolderName":"yihfei_ip_master"},{"location":{"location":"https://github.com/Gabriel4357/ip.git","repoName":"ip","organization":"Gabriel4357","domainName":"github"},"branch":"master","displayName":"Gabriel4357/ip[master]","outputFolderName":"Gabriel4357_ip_master"},{"location":{"location":"https://github.com/saraozn/ip.git","repoName":"ip","organization":"saraozn","domainName":"github"},"branch":"master","displayName":"saraozn/ip[master]","outputFolderName":"saraozn_ip_master"},{"location":{"location":"https://github.com/JeremyYong128/ip.git","repoName":"ip","organization":"JeremyYong128","domainName":"github"},"branch":"master","displayName":"JeremyYong128/ip[master]","outputFolderName":"JeremyYong128_ip_master"},{"location":{"location":"https://github.com/samuelmui8/ip.git","repoName":"ip","organization":"samuelmui8","domainName":"github"},"branch":"master","displayName":"samuelmui8/ip[master]","outputFolderName":"samuelmui8_ip_master"},{"location":{"location":"https://github.com/elaineshijie/ip.git","repoName":"ip","organization":"elaineshijie","domainName":"github"},"branch":"master","displayName":"elaineshijie/ip[master]","outputFolderName":"elaineshijie_ip_master"},{"location":{"location":"https://github.com/zhengyup/ip.git","repoName":"ip","organization":"zhengyup","domainName":"github"},"branch":"master","displayName":"zhengyup/ip[master]","outputFolderName":"zhengyup_ip_master"},{"location":{"location":"https://github.com/ruishanteo/ip.git","repoName":"ip","organization":"ruishanteo","domainName":"github"},"branch":"master","displayName":"ruishanteo/ip[master]","outputFolderName":"ruishanteo_ip_master"},{"location":{"location":"https://github.com/lynnlow175/ip.git","repoName":"ip","organization":"lynnlow175","domainName":"github"},"branch":"master","displayName":"lynnlow175/ip[master]","outputFolderName":"lynnlow175_ip_master"},{"location":{"location":"https://github.com/kohkaijie/ip.git","repoName":"ip","organization":"kohkaijie","domainName":"github"},"branch":"master","displayName":"kohkaijie/ip[master]","outputFolderName":"kohkaijie_ip_master"},{"location":{"location":"https://github.com/CelestineTan03/ip.git","repoName":"ip","organization":"CelestineTan03","domainName":"github"},"branch":"master","displayName":"CelestineTan03/ip[master]","outputFolderName":"CelestineTan03_ip_master"},{"location":{"location":"https://github.com/PearlynnT/ip.git","repoName":"ip","organization":"PearlynnT","domainName":"github"},"branch":"master","displayName":"PearlynnT/ip[master]","outputFolderName":"PearlynnT_ip_master"},{"location":{"location":"https://github.com/Elijah5399/ip.git","repoName":"ip","organization":"Elijah5399","domainName":"github"},"branch":"master","displayName":"Elijah5399/ip[master]","outputFolderName":"Elijah5399_ip_master"},{"location":{"location":"https://github.com/nicleongyj/ip.git","repoName":"ip","organization":"nicleongyj","domainName":"github"},"branch":"master","displayName":"nicleongyj/ip[master]","outputFolderName":"nicleongyj_ip_master"},{"location":{"location":"https://github.com/AnnabelTing/ip.git","repoName":"ip","organization":"AnnabelTing","domainName":"github"},"branch":"master","displayName":"AnnabelTing/ip[master]","outputFolderName":"AnnabelTing_ip_master"},{"location":{"location":"https://github.com/jrchoo/ip.git","repoName":"ip","organization":"jrchoo","domainName":"github"},"branch":"master","displayName":"jrchoo/ip[master]","outputFolderName":"jrchoo_ip_master"},{"location":{"location":"https://github.com/wujy28/ip.git","repoName":"ip","organization":"wujy28","domainName":"github"},"branch":"master","displayName":"wujy28/ip[master]","outputFolderName":"wujy28_ip_master"},{"location":{"location":"https://github.com/Nauxe/ip.git","repoName":"ip","organization":"Nauxe","domainName":"github"},"branch":"master","displayName":"Nauxe/ip[master]","outputFolderName":"Nauxe_ip_master"},{"location":{"location":"https://github.com/yyyaohhh/ip.git","repoName":"ip","organization":"yyyaohhh","domainName":"github"},"branch":"master","displayName":"yyyaohhh/ip[master]","outputFolderName":"yyyaohhh_ip_master"},{"location":{"location":"https://github.com/xenosf/ip.git","repoName":"ip","organization":"xenosf","domainName":"github"},"branch":"master","displayName":"xenosf/ip[master]","outputFolderName":"xenosf_ip_master"},{"location":{"location":"https://github.com/WinSheng1/ip.git","repoName":"ip","organization":"WinSheng1","domainName":"github"},"branch":"master","displayName":"WinSheng1/ip[master]","outputFolderName":"WinSheng1_ip_master"},{"location":{"location":"https://github.com/nreHieW/ip.git","repoName":"ip","organization":"nreHieW","domainName":"github"},"branch":"master","displayName":"nreHieW/ip[master]","outputFolderName":"nreHieW_ip_master"},{"location":{"location":"https://github.com/peiran18/ip.git","repoName":"ip","organization":"peiran18","domainName":"github"},"branch":"master","displayName":"peiran18/ip[master]","outputFolderName":"peiran18_ip_master"},{"location":{"location":"https://github.com/cheeggered/ip.git","repoName":"ip","organization":"cheeggered","domainName":"github"},"branch":"master","displayName":"cheeggered/ip[master]","outputFolderName":"cheeggered_ip_master"},{"location":{"location":"https://github.com/GohTengFong/ip.git","repoName":"ip","organization":"GohTengFong","domainName":"github"},"branch":"master","displayName":"GohTengFong/ip[master]","outputFolderName":"GohTengFong_ip_master"},{"location":{"location":"https://github.com/jibtaf/ip.git","repoName":"ip","organization":"jibtaf","domainName":"github"},"branch":"master","displayName":"jibtaf/ip[master]","outputFolderName":"jibtaf_ip_master"},{"location":{"location":"https://github.com/bhnuka/ip.git","repoName":"ip","organization":"bhnuka","domainName":"github"},"branch":"master","displayName":"bhnuka/ip[master]","outputFolderName":"bhnuka_ip_master"},{"location":{"location":"https://github.com/laurenlim2112/ip.git","repoName":"ip","organization":"laurenlim2112","domainName":"github"},"branch":"master","displayName":"laurenlim2112/ip[master]","outputFolderName":"laurenlim2112_ip_master"},{"location":{"location":"https://github.com/howenc/ip.git","repoName":"ip","organization":"howenc","domainName":"github"},"branch":"master","displayName":"howenc/ip[master]","outputFolderName":"howenc_ip_master"},{"location":{"location":"https://github.com/Kokseng1/ip.git","repoName":"ip","organization":"Kokseng1","domainName":"github"},"branch":"master","displayName":"Kokseng1/ip[master]","outputFolderName":"Kokseng1_ip_master"},{"location":{"location":"https://github.com/yiwen101/ip.git","repoName":"ip","organization":"yiwen101","domainName":"github"},"branch":"master","displayName":"yiwen101/ip[master]","outputFolderName":"yiwen101_ip_master"},{"location":{"location":"https://github.com/Cikguseven/ip.git","repoName":"ip","organization":"Cikguseven","domainName":"github"},"branch":"master","displayName":"Cikguseven/ip[master]","outputFolderName":"Cikguseven_ip_master"},{"location":{"location":"https://github.com/javinchua/ip.git","repoName":"ip","organization":"javinchua","domainName":"github"},"branch":"master","displayName":"javinchua/ip[master]","outputFolderName":"javinchua_ip_master"},{"location":{"location":"https://github.com/frrrrry/ip.git","repoName":"ip","organization":"frrrrry","domainName":"github"},"branch":"master","displayName":"frrrrry/ip[master]","outputFolderName":"frrrrry_ip_master"},{"location":{"location":"https://github.com/YeoBohShin/ip.git","repoName":"ip","organization":"YeoBohShin","domainName":"github"},"branch":"master","displayName":"YeoBohShin/ip[master]","outputFolderName":"YeoBohShin_ip_master"},{"location":{"location":"https://github.com/yongning0310/ip.git","repoName":"ip","organization":"yongning0310","domainName":"github"},"branch":"master","displayName":"yongning0310/ip[master]","outputFolderName":"yongning0310_ip_master"},{"location":{"location":"https://github.com/SimWPEric/ip.git","repoName":"ip","organization":"SimWPEric","domainName":"github"},"branch":"master","displayName":"SimWPEric/ip[master]","outputFolderName":"SimWPEric_ip_master"},{"location":{"location":"https://github.com/sopa301/ip.git","repoName":"ip","organization":"sopa301","domainName":"github"},"branch":"master","displayName":"sopa301/ip[master]","outputFolderName":"sopa301_ip_master"},{"location":{"location":"https://github.com/nananakx-x/ip.git","repoName":"ip","organization":"nananakx-x","domainName":"github"},"branch":"master","displayName":"nananakx-x/ip[master]","outputFolderName":"nananakx-x_ip_master"},{"location":{"location":"https://github.com/LuoZYi/ip.git","repoName":"ip","organization":"LuoZYi","domainName":"github"},"branch":"master","displayName":"LuoZYi/ip[master]","outputFolderName":"LuoZYi_ip_master"},{"location":{"location":"https://github.com/LinWanLeii/ip.git","repoName":"ip","organization":"LinWanLeii","domainName":"github"},"branch":"master","displayName":"LinWanLeii/ip[master]","outputFolderName":"LinWanLeii_ip_master"},{"location":{"location":"https://github.com/mingyuanc/ip.git","repoName":"ip","organization":"mingyuanc","domainName":"github"},"branch":"master","displayName":"mingyuanc/ip[master]","outputFolderName":"mingyuanc_ip_master"},{"location":{"location":"https://github.com/chonguschonguschongus/ip.git","repoName":"ip","organization":"chonguschonguschongus","domainName":"github"},"branch":"master","displayName":"chonguschonguschongus/ip[master]","outputFolderName":"chonguschonguschongus_ip_master"},{"location":{"location":"https://github.com/yanghengtang/ip.git","repoName":"ip","organization":"yanghengtang","domainName":"github"},"branch":"master","displayName":"yanghengtang/ip[master]","outputFolderName":"yanghengtang_ip_master"},{"location":{"location":"https://github.com/victorpengmx/ip.git","repoName":"ip","organization":"victorpengmx","domainName":"github"},"branch":"master","displayName":"victorpengmx/ip[master]","outputFolderName":"victorpengmx_ip_master"},{"location":{"location":"https://github.com/kanna-1/ip.git","repoName":"ip","organization":"kanna-1","domainName":"github"},"branch":"master","displayName":"kanna-1/ip[master]","outputFolderName":"kanna-1_ip_master"},{"location":{"location":"https://github.com/ncduy0303/ip.git","repoName":"ip","organization":"ncduy0303","domainName":"github"},"branch":"master","displayName":"ncduy0303/ip[master]","outputFolderName":"ncduy0303_ip_master"},{"location":{"location":"https://github.com/jannnice/ip.git","repoName":"ip","organization":"jannnice","domainName":"github"},"branch":"master","displayName":"jannnice/ip[master]","outputFolderName":"jannnice_ip_master"},{"location":{"location":"https://github.com/itssisi/ip.git","repoName":"ip","organization":"itssisi","domainName":"github"},"branch":"master","displayName":"itssisi/ip[master]","outputFolderName":"itssisi_ip_master"},{"location":{"location":"https://github.com/freddychenyouren2/ip.git","repoName":"ip","organization":"freddychenyouren2","domainName":"github"},"branch":"master","displayName":"freddychenyouren2/ip[master]","outputFolderName":"freddychenyouren2_ip_master"},{"location":{"location":"https://github.com/Vanessamae23/ip.git","repoName":"ip","organization":"Vanessamae23","domainName":"github"},"branch":"master","displayName":"Vanessamae23/ip[master]","outputFolderName":"Vanessamae23_ip_master"},{"location":{"location":"https://github.com/cbj252/ip.git","repoName":"ip","organization":"cbj252","domainName":"github"},"branch":"master","displayName":"cbj252/ip[master]","outputFolderName":"cbj252_ip_master"},{"location":{"location":"https://github.com/freshcabbage123/ip.git","repoName":"ip","organization":"freshcabbage123","domainName":"github"},"branch":"master","displayName":"freshcabbage123/ip[master]","outputFolderName":"freshcabbage123_ip_master"},{"location":{"location":"https://github.com/thienmy0/ip.git","repoName":"ip","organization":"thienmy0","domainName":"github"},"branch":"master","displayName":"thienmy0/ip[master]","outputFolderName":"thienmy0_ip_master"},{"location":{"location":"https://github.com/glenngnng/ip.git","repoName":"ip","organization":"glenngnng","domainName":"github"},"branch":"master","displayName":"glenngnng/ip[master]","outputFolderName":"glenngnng_ip_master"},{"location":{"location":"https://github.com/Darren159/ip.git","repoName":"ip","organization":"Darren159","domainName":"github"},"branch":"master","displayName":"Darren159/ip[master]","outputFolderName":"Darren159_ip_master"},{"location":{"location":"https://github.com/J-hta-n/ip.git","repoName":"ip","organization":"J-hta-n","domainName":"github"},"branch":"master","displayName":"J-hta-n/ip[master]","outputFolderName":"J-hta-n_ip_master"},{"location":{"location":"https://github.com/evanyan13/ip.git","repoName":"ip","organization":"evanyan13","domainName":"github"},"branch":"master","displayName":"evanyan13/ip[master]","outputFolderName":"evanyan13_ip_master"},{"location":{"location":"https://github.com/tanveersingh10/ip.git","repoName":"ip","organization":"tanveersingh10","domainName":"github"},"branch":"master","displayName":"tanveersingh10/ip[master]","outputFolderName":"tanveersingh10_ip_master"},{"location":{"location":"https://github.com/neyapraveen/ip.git","repoName":"ip","organization":"neyapraveen","domainName":"github"},"branch":"master","displayName":"neyapraveen/ip[master]","outputFolderName":"neyapraveen_ip_master"},{"location":{"location":"https://github.com/weeweh/ip.git","repoName":"ip","organization":"weeweh","domainName":"github"},"branch":"master","displayName":"weeweh/ip[master]","outputFolderName":"weeweh_ip_master"},{"location":{"location":"https://github.com/HugeNoob/ip.git","repoName":"ip","organization":"HugeNoob","domainName":"github"},"branch":"master","displayName":"HugeNoob/ip[master]","outputFolderName":"HugeNoob_ip_master"},{"location":{"location":"https://github.com/wasjoe1/ip.git","repoName":"ip","organization":"wasjoe1","domainName":"github"},"branch":"master","displayName":"wasjoe1/ip[master]","outputFolderName":"wasjoe1_ip_master"},{"location":{"location":"https://github.com/s-kybound/ip.git","repoName":"ip","organization":"s-kybound","domainName":"github"},"branch":"master","displayName":"s-kybound/ip[master]","outputFolderName":"s-kybound_ip_master"},{"location":{"location":"https://github.com/Singa-pirate/ip.git","repoName":"ip","organization":"Singa-pirate","domainName":"github"},"branch":"master","displayName":"Singa-pirate/ip[master]","outputFolderName":"Singa-pirate_ip_master"},{"location":{"location":"https://github.com/wanghejin/ip.git","repoName":"ip","organization":"wanghejin","domainName":"github"},"branch":"master","displayName":"wanghejin/ip[master]","outputFolderName":"wanghejin_ip_master"},{"location":{"location":"https://github.com/yarnmengnus/ip.git","repoName":"ip","organization":"yarnmengnus","domainName":"github"},"branch":"master","displayName":"yarnmengnus/ip[master]","outputFolderName":"yarnmengnus_ip_master"},{"location":{"location":"https://github.com/Kurtyjlee/ip.git","repoName":"ip","organization":"Kurtyjlee","domainName":"github"},"branch":"master","displayName":"Kurtyjlee/ip[master]","outputFolderName":"Kurtyjlee_ip_master"},{"location":{"location":"https://github.com/jellywaiyan/ip.git","repoName":"ip","organization":"jellywaiyan","domainName":"github"},"branch":"master","displayName":"jellywaiyan/ip[master]","outputFolderName":"jellywaiyan_ip_master"},{"location":{"location":"https://github.com/ylyma/ip.git","repoName":"ip","organization":"ylyma","domainName":"github"},"branch":"master","displayName":"ylyma/ip[master]","outputFolderName":"ylyma_ip_master"},{"location":{"location":"https://github.com/revdrag/ip.git","repoName":"ip","organization":"revdrag","domainName":"github"},"branch":"master","displayName":"revdrag/ip[master]","outputFolderName":"revdrag_ip_master"},{"location":{"location":"https://github.com/vijay-shankaranand/ip.git","repoName":"ip","organization":"vijay-shankaranand","domainName":"github"},"branch":"master","displayName":"vijay-shankaranand/ip[master]","outputFolderName":"vijay-shankaranand_ip_master"},{"location":{"location":"https://github.com/lerxuann/ip.git","repoName":"ip","organization":"lerxuann","domainName":"github"},"branch":"master","displayName":"lerxuann/ip[master]","outputFolderName":"lerxuann_ip_master"},{"location":{"location":"https://github.com/yuxunn/ip.git","repoName":"ip","organization":"yuxunn","domainName":"github"},"branch":"master","displayName":"yuxunn/ip[master]","outputFolderName":"yuxunn_ip_master"},{"location":{"location":"https://github.com/zannloo/ip.git","repoName":"ip","organization":"zannloo","domainName":"github"},"branch":"master","displayName":"zannloo/ip[master]","outputFolderName":"zannloo_ip_master"},{"location":{"location":"https://github.com/AryanG01/ip.git","repoName":"ip","organization":"AryanG01","domainName":"github"},"branch":"master","displayName":"AryanG01/ip[master]","outputFolderName":"AryanG01_ip_master"},{"location":{"location":"https://github.com/oeggy03/ip.git","repoName":"ip","organization":"oeggy03","domainName":"github"},"branch":"master","displayName":"oeggy03/ip[master]","outputFolderName":"oeggy03_ip_master"},{"location":{"location":"https://github.com/jeffrey-jian/ip.git","repoName":"ip","organization":"jeffrey-jian","domainName":"github"},"branch":"master","displayName":"jeffrey-jian/ip[master]","outputFolderName":"jeffrey-jian_ip_master"},{"location":{"location":"https://github.com/nicholastng010601/ip.git","repoName":"ip","organization":"nicholastng010601","domainName":"github"},"branch":"master","displayName":"nicholastng010601/ip[master]","outputFolderName":"nicholastng010601_ip_master"},{"location":{"location":"https://github.com/Weiennn/ip.git","repoName":"ip","organization":"Weiennn","domainName":"github"},"branch":"master","displayName":"Weiennn/ip[master]","outputFolderName":"Weiennn_ip_master"},{"location":{"location":"https://github.com/tayruxin/ip.git","repoName":"ip","organization":"tayruxin","domainName":"github"},"branch":"master","displayName":"tayruxin/ip[master]","outputFolderName":"tayruxin_ip_master"},{"location":{"location":"https://github.com/xyT-T/ip.git","repoName":"ip","organization":"xyT-T","domainName":"github"},"branch":"master","displayName":"xyT-T/ip[master]","outputFolderName":"xyT-T_ip_master"},{"location":{"location":"https://github.com/lunaroddity/ip.git","repoName":"ip","organization":"lunaroddity","domainName":"github"},"branch":"master","displayName":"lunaroddity/ip[master]","outputFolderName":"lunaroddity_ip_master"},{"location":{"location":"https://github.com/nabonitasen/ip.git","repoName":"ip","organization":"nabonitasen","domainName":"github"},"branch":"master","displayName":"nabonitasen/ip[master]","outputFolderName":"nabonitasen_ip_master"},{"location":{"location":"https://github.com/inezkok/ip.git","repoName":"ip","organization":"inezkok","domainName":"github"},"branch":"master","displayName":"inezkok/ip[master]","outputFolderName":"inezkok_ip_master"},{"location":{"location":"https://github.com/nknguyenhc/ip.git","repoName":"ip","organization":"nknguyenhc","domainName":"github"},"branch":"master","displayName":"nknguyenhc/ip[master]","outputFolderName":"nknguyenhc_ip_master"},{"location":{"location":"https://github.com/keaganpzh/ip.git","repoName":"ip","organization":"keaganpzh","domainName":"github"},"branch":"master","displayName":"keaganpzh/ip[master]","outputFolderName":"keaganpzh_ip_master"},{"location":{"location":"https://github.com/lululwtv/ip.git","repoName":"ip","organization":"lululwtv","domainName":"github"},"branch":"master","displayName":"lululwtv/ip[master]","outputFolderName":"lululwtv_ip_master"},{"location":{"location":"https://github.com/hcs1203/ip.git","repoName":"ip","organization":"hcs1203","domainName":"github"},"branch":"master","displayName":"hcs1203/ip[master]","outputFolderName":"hcs1203_ip_master"},{"location":{"location":"https://github.com/migfoo02/ip.git","repoName":"ip","organization":"migfoo02","domainName":"github"},"branch":"master","displayName":"migfoo02/ip[master]","outputFolderName":"migfoo02_ip_master"},{"location":{"location":"https://github.com/papataco14/ip.git","repoName":"ip","organization":"papataco14","domainName":"github"},"branch":"master","displayName":"papataco14/ip[master]","outputFolderName":"papataco14_ip_master"},{"location":{"location":"https://github.com/coderhuang559/ip.git","repoName":"ip","organization":"coderhuang559","domainName":"github"},"branch":"master","displayName":"coderhuang559/ip[master]","outputFolderName":"coderhuang559_ip_master"},{"location":{"location":"https://github.com/craigtonlian/ip.git","repoName":"ip","organization":"craigtonlian","domainName":"github"},"branch":"master","displayName":"craigtonlian/ip[master]","outputFolderName":"craigtonlian_ip_master"},{"location":{"location":"https://github.com/adammangzijun/ip.git","repoName":"ip","organization":"adammangzijun","domainName":"github"},"branch":"master","displayName":"adammangzijun/ip[master]","outputFolderName":"adammangzijun_ip_master"},{"location":{"location":"https://github.com/AlainS87/ip.git","repoName":"ip","organization":"AlainS87","domainName":"github"},"branch":"master","displayName":"AlainS87/ip[master]","outputFolderName":"AlainS87_ip_master"},{"location":{"location":"https://github.com/tanyyyming/ip.git","repoName":"ip","organization":"tanyyyming","domainName":"github"},"branch":"master","displayName":"tanyyyming/ip[master]","outputFolderName":"tanyyyming_ip_master"},{"location":{"location":"https://github.com/Saezenn/ip.git","repoName":"ip","organization":"Saezenn","domainName":"github"},"branch":"master","displayName":"Saezenn/ip[master]","outputFolderName":"Saezenn_ip_master"},{"location":{"location":"https://github.com/kayabuttertoastt/ip.git","repoName":"ip","organization":"kayabuttertoastt","domainName":"github"},"branch":"master","displayName":"kayabuttertoastt/ip[master]","outputFolderName":"kayabuttertoastt_ip_master"},{"location":{"location":"https://github.com/limjunxian1/ip.git","repoName":"ip","organization":"limjunxian1","domainName":"github"},"branch":"master","displayName":"limjunxian1/ip[master]","outputFolderName":"limjunxian1_ip_master"},{"location":{"location":"https://github.com/andrechuakj/ip.git","repoName":"ip","organization":"andrechuakj","domainName":"github"},"branch":"master","displayName":"andrechuakj/ip[master]","outputFolderName":"andrechuakj_ip_master"},{"location":{"location":"https://github.com/kwangthiag/ip.git","repoName":"ip","organization":"kwangthiag","domainName":"github"},"branch":"master","displayName":"kwangthiag/ip[master]","outputFolderName":"kwangthiag_ip_master"},{"location":{"location":"https://github.com/ricketytoc/ip.git","repoName":"ip","organization":"ricketytoc","domainName":"github"},"branch":"master","displayName":"ricketytoc/ip[master]","outputFolderName":"ricketytoc_ip_master"},{"location":{"location":"https://github.com/applepiofmyeye/ip.git","repoName":"ip","organization":"applepiofmyeye","domainName":"github"},"branch":"master","displayName":"applepiofmyeye/ip[master]","outputFolderName":"applepiofmyeye_ip_master"},{"location":{"location":"https://github.com/nubnubyas/ip.git","repoName":"ip","organization":"nubnubyas","domainName":"github"},"branch":"master","displayName":"nubnubyas/ip[master]","outputFolderName":"nubnubyas_ip_master"},{"location":{"location":"https://github.com/WeeeHung/ip.git","repoName":"ip","organization":"WeeeHung","domainName":"github"},"branch":"master","displayName":"WeeeHung/ip[master]","outputFolderName":"WeeeHung_ip_master"},{"location":{"location":"https://github.com/Eola-Z/ip.git","repoName":"ip","organization":"Eola-Z","domainName":"github"},"branch":"master","displayName":"Eola-Z/ip[master]","outputFolderName":"Eola-Z_ip_master"},{"location":{"location":"https://github.com/jordankanghm/ip.git","repoName":"ip","organization":"jordankanghm","domainName":"github"},"branch":"master","displayName":"jordankanghm/ip[master]","outputFolderName":"jordankanghm_ip_master"},{"location":{"location":"https://github.com/zacwong2151/ip.git","repoName":"ip","organization":"zacwong2151","domainName":"github"},"branch":"master","displayName":"zacwong2151/ip[master]","outputFolderName":"zacwong2151_ip_master"},{"location":{"location":"https://github.com/m1oojv/ip.git","repoName":"ip","organization":"m1oojv","domainName":"github"},"branch":"master","displayName":"m1oojv/ip[master]","outputFolderName":"m1oojv_ip_master"},{"location":{"location":"https://github.com/JCSnap/ip.git","repoName":"ip","organization":"JCSnap","domainName":"github"},"branch":"master","displayName":"JCSnap/ip[master]","outputFolderName":"JCSnap_ip_master"},{"location":{"location":"https://github.com/Nid21cs/ip.git","repoName":"ip","organization":"Nid21cs","domainName":"github"},"branch":"master","displayName":"Nid21cs/ip[master]","outputFolderName":"Nid21cs_ip_master"},{"location":{"location":"https://github.com/mfjkri/ip.git","repoName":"ip","organization":"mfjkri","domainName":"github"},"branch":"master","displayName":"mfjkri/ip[master]","outputFolderName":"mfjkri_ip_master"},{"location":{"location":"https://github.com/Choonyan02/ip.git","repoName":"ip","organization":"Choonyan02","domainName":"github"},"branch":"master","displayName":"Choonyan02/ip[master]","outputFolderName":"Choonyan02_ip_master"},{"location":{"location":"https://github.com/rayyan35p/ip.git","repoName":"ip","organization":"rayyan35p","domainName":"github"},"branch":"master","displayName":"rayyan35p/ip[master]","outputFolderName":"rayyan35p_ip_master"},{"location":{"location":"https://github.com/dhruvir29/ip.git","repoName":"ip","organization":"dhruvir29","domainName":"github"},"branch":"master","displayName":"dhruvir29/ip[master]","outputFolderName":"dhruvir29_ip_master"},{"location":{"location":"https://github.com/Mohammed-Faizzzz/ip.git","repoName":"ip","organization":"Mohammed-Faizzzz","domainName":"github"},"branch":"master","displayName":"Mohammed-Faizzzz/ip[master]","outputFolderName":"Mohammed-Faizzzz_ip_master"},{"location":{"location":"https://github.com/ruo-x/ip.git","repoName":"ip","organization":"ruo-x","domainName":"github"},"branch":"master","displayName":"ruo-x/ip[master]","outputFolderName":"ruo-x_ip_master"},{"location":{"location":"https://github.com/DonovanJJ/ip.git","repoName":"ip","organization":"DonovanJJ","domainName":"github"},"branch":"master","displayName":"DonovanJJ/ip[master]","outputFolderName":"DonovanJJ_ip_master"},{"location":{"location":"https://github.com/kristayeo/ip.git","repoName":"ip","organization":"kristayeo","domainName":"github"},"branch":"master","displayName":"kristayeo/ip[master]","outputFolderName":"kristayeo_ip_master"},{"location":{"location":"https://github.com/ZD292/ip.git","repoName":"ip","organization":"ZD292","domainName":"github"},"branch":"master","displayName":"ZD292/ip[master]","outputFolderName":"ZD292_ip_master"},{"location":{"location":"https://github.com/jingjie88/ip.git","repoName":"ip","organization":"jingjie88","domainName":"github"},"branch":"master","displayName":"jingjie88/ip[master]","outputFolderName":"jingjie88_ip_master"},{"location":{"location":"https://github.com/iantsaii/ip.git","repoName":"ip","organization":"iantsaii","domainName":"github"},"branch":"master","displayName":"iantsaii/ip[master]","outputFolderName":"iantsaii_ip_master"},{"location":{"location":"https://github.com/jingting1412/ip.git","repoName":"ip","organization":"jingting1412","domainName":"github"},"branch":"master","displayName":"jingting1412/ip[master]","outputFolderName":"jingting1412_ip_master"},{"location":{"location":"https://github.com/wnchan/ip.git","repoName":"ip","organization":"wnchan","domainName":"github"},"branch":"master","displayName":"wnchan/ip[master]","outputFolderName":"wnchan_ip_master"},{"location":{"location":"https://github.com/jack1e0/ip.git","repoName":"ip","organization":"jack1e0","domainName":"github"},"branch":"master","displayName":"jack1e0/ip[master]","outputFolderName":"jack1e0_ip_master"},{"location":{"location":"https://github.com/mingyu-wan/ip.git","repoName":"ip","organization":"mingyu-wan","domainName":"github"},"branch":"master","displayName":"mingyu-wan/ip[master]","outputFolderName":"mingyu-wan_ip_master"},{"location":{"location":"https://github.com/nicolengk/ip.git","repoName":"ip","organization":"nicolengk","domainName":"github"},"branch":"master","displayName":"nicolengk/ip[master]","outputFolderName":"nicolengk_ip_master"},{"location":{"location":"https://github.com/cyaoxuan/ip.git","repoName":"ip","organization":"cyaoxuan","domainName":"github"},"branch":"master","displayName":"cyaoxuan/ip[master]","outputFolderName":"cyaoxuan_ip_master"},{"location":{"location":"https://github.com/sunzihan23/ip.git","repoName":"ip","organization":"sunzihan23","domainName":"github"},"branch":"master","displayName":"sunzihan23/ip[master]","outputFolderName":"sunzihan23_ip_master"},{"location":{"location":"https://github.com/Goh-Li-Ting/ip.git","repoName":"ip","organization":"Goh-Li-Ting","domainName":"github"},"branch":"master","displayName":"Goh-Li-Ting/ip[master]","outputFolderName":"Goh-Li-Ting_ip_master"},{"location":{"location":"https://github.com/wjayee/ip.git","repoName":"ip","organization":"wjayee","domainName":"github"},"branch":"master","displayName":"wjayee/ip[master]","outputFolderName":"wjayee_ip_master"},{"location":{"location":"https://github.com/fuyiqiao/ip.git","repoName":"ip","organization":"fuyiqiao","domainName":"github"},"branch":"master","displayName":"fuyiqiao/ip[master]","outputFolderName":"fuyiqiao_ip_master"},{"location":{"location":"https://github.com/GlendaChong/ip.git","repoName":"ip","organization":"GlendaChong","domainName":"github"},"branch":"master","displayName":"GlendaChong/ip[master]","outputFolderName":"GlendaChong_ip_master"},{"location":{"location":"https://github.com/hyc17003/ip.git","repoName":"ip","organization":"hyc17003","domainName":"github"},"branch":"master","displayName":"hyc17003/ip[master]","outputFolderName":"hyc17003_ip_master"},{"location":{"location":"https://github.com/spatuly/ip.git","repoName":"ip","organization":"spatuly","domainName":"github"},"branch":"master","displayName":"spatuly/ip[master]","outputFolderName":"spatuly_ip_master"},{"location":{"location":"https://github.com/tanteckfang/ip.git","repoName":"ip","organization":"tanteckfang","domainName":"github"},"branch":"master","displayName":"tanteckfang/ip[master]","outputFolderName":"tanteckfang_ip_master"},{"location":{"location":"https://github.com/Clin-lyx/ip.git","repoName":"ip","organization":"Clin-lyx","domainName":"github"},"branch":"master","displayName":"Clin-lyx/ip[master]","outputFolderName":"Clin-lyx_ip_master"},{"location":{"location":"https://github.com/lyuanww/ip.git","repoName":"ip","organization":"lyuanww","domainName":"github"},"branch":"master","displayName":"lyuanww/ip[master]","outputFolderName":"lyuanww_ip_master"},{"location":{"location":"https://github.com/LimJH2002/ip.git","repoName":"ip","organization":"LimJH2002","domainName":"github"},"branch":"master","displayName":"LimJH2002/ip[master]","outputFolderName":"LimJH2002_ip_master"},{"location":{"location":"https://github.com/LWZ19/ip.git","repoName":"ip","organization":"LWZ19","domainName":"github"},"branch":"master","displayName":"LWZ19/ip[master]","outputFolderName":"LWZ19_ip_master"},{"location":{"location":"https://github.com/Gavino3o/ip.git","repoName":"ip","organization":"Gavino3o","domainName":"github"},"branch":"master","displayName":"Gavino3o/ip[master]","outputFolderName":"Gavino3o_ip_master"},{"location":{"location":"https://github.com/suryanshkushwaha/ip.git","repoName":"ip","organization":"suryanshkushwaha","domainName":"github"},"branch":"master","displayName":"suryanshkushwaha/ip[master]","outputFolderName":"suryanshkushwaha_ip_master"},{"location":{"location":"https://github.com/JasonRay168/ip.git","repoName":"ip","organization":"JasonRay168","domainName":"github"},"branch":"master","displayName":"JasonRay168/ip[master]","outputFolderName":"JasonRay168_ip_master"},{"location":{"location":"https://github.com/jovkusuma/ip.git","repoName":"ip","organization":"jovkusuma","domainName":"github"},"branch":"master","displayName":"jovkusuma/ip[master]","outputFolderName":"jovkusuma_ip_master"},{"location":{"location":"https://github.com/Chrainx/ip.git","repoName":"ip","organization":"Chrainx","domainName":"github"},"branch":"master","displayName":"Chrainx/ip[master]","outputFolderName":"Chrainx_ip_master"},{"location":{"location":"https://github.com/Propene-Dan/ip.git","repoName":"ip","organization":"Propene-Dan","domainName":"github"},"branch":"master","displayName":"Propene-Dan/ip[master]","outputFolderName":"Propene-Dan_ip_master"},{"location":{"location":"https://github.com/Daphne789/ip.git","repoName":"ip","organization":"Daphne789","domainName":"github"},"branch":"master","displayName":"Daphne789/ip[master]","outputFolderName":"Daphne789_ip_master"},{"location":{"location":"https://github.com/ChuanXinNg/ip.git","repoName":"ip","organization":"ChuanXinNg","domainName":"github"},"branch":"master","displayName":"ChuanXinNg/ip[master]","outputFolderName":"ChuanXinNg_ip_master"},{"location":{"location":"https://github.com/LHeng1/ip.git","repoName":"ip","organization":"LHeng1","domainName":"github"},"branch":"master","displayName":"LHeng1/ip[master]","outputFolderName":"LHeng1_ip_master"},{"location":{"location":"https://github.com/wr1159/ip.git","repoName":"ip","organization":"wr1159","domainName":"github"},"branch":"master","displayName":"wr1159/ip[master]","outputFolderName":"wr1159_ip_master"},{"location":{"location":"https://github.com/wjacobw/ip.git","repoName":"ip","organization":"wjacobw","domainName":"github"},"branch":"master","displayName":"wjacobw/ip[master]","outputFolderName":"wjacobw_ip_master"},{"location":{"location":"https://github.com/tiongjjyi/ip.git","repoName":"ip","organization":"tiongjjyi","domainName":"github"},"branch":"master","displayName":"tiongjjyi/ip[master]","outputFolderName":"tiongjjyi_ip_master"},{"location":{"location":"https://github.com/longnguyentan/ip.git","repoName":"ip","organization":"longnguyentan","domainName":"github"},"branch":"master","displayName":"longnguyentan/ip[master]","outputFolderName":"longnguyentan_ip_master"},{"location":{"location":"https://github.com/proto-aiken-13/ip.git","repoName":"ip","organization":"proto-aiken-13","domainName":"github"},"branch":"master","displayName":"proto-aiken-13/ip[master]","outputFolderName":"proto-aiken-13_ip_master"},{"location":{"location":"https://github.com/junnengsoo/ip.git","repoName":"ip","organization":"junnengsoo","domainName":"github"},"branch":"master","displayName":"junnengsoo/ip[master]","outputFolderName":"junnengsoo_ip_master"},{"location":{"location":"https://github.com/yezkez10/ip.git","repoName":"ip","organization":"yezkez10","domainName":"github"},"branch":"master","displayName":"yezkez10/ip[master]","outputFolderName":"yezkez10_ip_master"},{"location":{"location":"https://github.com/jamesebond/ip.git","repoName":"ip","organization":"jamesebond","domainName":"github"},"branch":"master","displayName":"jamesebond/ip[master]","outputFolderName":"jamesebond_ip_master"},{"location":{"location":"https://github.com/alyssaongyx/ip.git","repoName":"ip","organization":"alyssaongyx","domainName":"github"},"branch":"master","displayName":"alyssaongyx/ip[master]","outputFolderName":"alyssaongyx_ip_master"},{"location":{"location":"https://github.com/Carlintyj/ip.git","repoName":"ip","organization":"Carlintyj","domainName":"github"},"branch":"master","displayName":"Carlintyj/ip[master]","outputFolderName":"Carlintyj_ip_master"},{"location":{"location":"https://github.com/ruth-lim/ip.git","repoName":"ip","organization":"ruth-lim","domainName":"github"},"branch":"master","displayName":"ruth-lim/ip[master]","outputFolderName":"ruth-lim_ip_master"},{"location":{"location":"https://github.com/licongshen12/ip.git","repoName":"ip","organization":"licongshen12","domainName":"github"},"branch":"master","displayName":"licongshen12/ip[master]","outputFolderName":"licongshen12_ip_master"},{"location":{"location":"https://github.com/thaddeusong/ip.git","repoName":"ip","organization":"thaddeusong","domainName":"github"},"branch":"master","displayName":"thaddeusong/ip[master]","outputFolderName":"thaddeusong_ip_master"},{"location":{"location":"https://github.com/LordSaumya/ip.git","repoName":"ip","organization":"LordSaumya","domainName":"github"},"branch":"master","displayName":"LordSaumya/ip[master]","outputFolderName":"LordSaumya_ip_master"},{"location":{"location":"https://github.com/Kevin-Liusx/ip.git","repoName":"ip","organization":"Kevin-Liusx","domainName":"github"},"branch":"master","displayName":"Kevin-Liusx/ip[master]","outputFolderName":"Kevin-Liusx_ip_master"},{"location":{"location":"https://github.com/Ken-Lai/ip.git","repoName":"ip","organization":"Ken-Lai","domainName":"github"},"branch":"master","displayName":"Ken-Lai/ip[master]","outputFolderName":"Ken-Lai_ip_master"},{"location":{"location":"https://github.com/KumChaiYin/ip.git","repoName":"ip","organization":"KumChaiYin","domainName":"github"},"branch":"master","displayName":"KumChaiYin/ip[master]","outputFolderName":"KumChaiYin_ip_master"},{"location":{"location":"https://github.com/pzl111/ip.git","repoName":"ip","organization":"pzl111","domainName":"github"},"branch":"master","displayName":"pzl111/ip[master]","outputFolderName":"pzl111_ip_master"},{"location":{"location":"https://github.com/alientian/ip.git","repoName":"ip","organization":"alientian","domainName":"github"},"branch":"master","displayName":"alientian/ip[master]","outputFolderName":"alientian_ip_master"},{"location":{"location":"https://github.com/eyelessrhyme7/ip.git","repoName":"ip","organization":"eyelessrhyme7","domainName":"github"},"branch":"master","displayName":"eyelessrhyme7/ip[master]","outputFolderName":"eyelessrhyme7_ip_master"},{"location":{"location":"https://github.com/AprupKale/ip.git","repoName":"ip","organization":"AprupKale","domainName":"github"},"branch":"master","displayName":"AprupKale/ip[master]","outputFolderName":"AprupKale_ip_master"},{"location":{"location":"https://github.com/kimshitong/ip.git","repoName":"ip","organization":"kimshitong","domainName":"github"},"branch":"master","displayName":"kimshitong/ip[master]","outputFolderName":"kimshitong_ip_master"},{"location":{"location":"https://github.com/Bryan-Goh/ip.git","repoName":"ip","organization":"Bryan-Goh","domainName":"github"},"branch":"master","displayName":"Bryan-Goh/ip[master]","outputFolderName":"Bryan-Goh_ip_master"},{"location":{"location":"https://github.com/tiif/ip.git","repoName":"ip","organization":"tiif","domainName":"github"},"branch":"master","displayName":"tiif/ip[master]","outputFolderName":"tiif_ip_master"},{"location":{"location":"https://github.com/angkyakdifp/ip.git","repoName":"ip","organization":"angkyakdifp","domainName":"github"},"branch":"master","displayName":"angkyakdifp/ip[master]","outputFolderName":"angkyakdifp_ip_master"},{"location":{"location":"https://github.com/Chen-Kuei/ip.git","repoName":"ip","organization":"Chen-Kuei","domainName":"github"},"branch":"master","displayName":"Chen-Kuei/ip[master]","outputFolderName":"Chen-Kuei_ip_master"},{"location":{"location":"https://github.com/SinhaVedant/ip.git","repoName":"ip","organization":"SinhaVedant","domainName":"github"},"branch":"master","displayName":"SinhaVedant/ip[master]","outputFolderName":"SinhaVedant_ip_master"},{"location":{"location":"https://github.com/D-Limiter/ip.git","repoName":"ip","organization":"D-Limiter","domainName":"github"},"branch":"master","displayName":"D-Limiter/ip[master]","outputFolderName":"D-Limiter_ip_master"},{"location":{"location":"https://github.com/larrywang0701/ip.git","repoName":"ip","organization":"larrywang0701","domainName":"github"},"branch":"master","displayName":"larrywang0701/ip[master]","outputFolderName":"larrywang0701_ip_master"},{"location":{"location":"https://github.com/Song-Mengfei/ip.git","repoName":"ip","organization":"Song-Mengfei","domainName":"github"},"branch":"master","displayName":"Song-Mengfei/ip[master]","outputFolderName":"Song-Mengfei_ip_master"},{"location":{"location":"https://github.com/ChangruHenryQian/ip.git","repoName":"ip","organization":"ChangruHenryQian","domainName":"github"},"branch":"master","displayName":"ChangruHenryQian/ip[master]","outputFolderName":"ChangruHenryQian_ip_master"},{"location":{"location":"https://github.com/ketweeen/ip.git","repoName":"ip","organization":"ketweeen","domainName":"github"},"branch":"master","displayName":"ketweeen/ip[master]","outputFolderName":"ketweeen_ip_master"},{"location":{"location":"https://github.com/RSXIX/ip.git","repoName":"ip","organization":"RSXIX","domainName":"github"},"branch":"master","displayName":"RSXIX/ip[master]","outputFolderName":"RSXIX_ip_master"},{"location":{"location":"https://github.com/songgthu/ip.git","repoName":"ip","organization":"songgthu","domainName":"github"},"branch":"master","displayName":"songgthu/ip[master]","outputFolderName":"songgthu_ip_master"},{"location":{"location":"https://github.com/maj0-0/ip.git","repoName":"ip","organization":"maj0-0","domainName":"github"},"branch":"master","displayName":"maj0-0/ip[master]","outputFolderName":"maj0-0_ip_master"},{"location":{"location":"https://github.com/tiongMax/ip.git","repoName":"ip","organization":"tiongMax","domainName":"github"},"branch":"master","displayName":"tiongMax/ip[master]","outputFolderName":"tiongMax_ip_master"},{"location":{"location":"https://github.com/A1WAYSD/ip.git","repoName":"ip","organization":"A1WAYSD","domainName":"github"},"branch":"master","displayName":"A1WAYSD/ip[master]","outputFolderName":"A1WAYSD_ip_master"},{"location":{"location":"https://github.com/hjoneweek/ip.git","repoName":"ip","organization":"hjoneweek","domainName":"github"},"branch":"master","displayName":"hjoneweek/ip[master]","outputFolderName":"hjoneweek_ip_master"},{"location":{"location":"https://github.com/itsNatTan/ip.git","repoName":"ip","organization":"itsNatTan","domainName":"github"},"branch":"master","displayName":"itsNatTan/ip[master]","outputFolderName":"itsNatTan_ip_master"},{"location":{"location":"https://github.com/AustinHuang1203/ip.git","repoName":"ip","organization":"AustinHuang1203","domainName":"github"},"branch":"master","displayName":"AustinHuang1203/ip[master]","outputFolderName":"AustinHuang1203_ip_master"},{"location":{"location":"https://github.com/WangCheng0116/ip.git","repoName":"ip","organization":"WangCheng0116","domainName":"github"},"branch":"master","displayName":"WangCheng0116/ip[master]","outputFolderName":"WangCheng0116_ip_master"},{"location":{"location":"https://github.com/Tim-Siu/ip.git","repoName":"ip","organization":"Tim-Siu","domainName":"github"},"branch":"master","displayName":"Tim-Siu/ip[master]","outputFolderName":"Tim-Siu_ip_master"},{"location":{"location":"https://github.com/newway1814/ip.git","repoName":"ip","organization":"newway1814","domainName":"github"},"branch":"master","displayName":"newway1814/ip[master]","outputFolderName":"newway1814_ip_master"},{"location":{"location":"https://github.com/li-rongzhi/ip.git","repoName":"ip","organization":"li-rongzhi","domainName":"github"},"branch":"master","displayName":"li-rongzhi/ip[master]","outputFolderName":"li-rongzhi_ip_master"},{"location":{"location":"https://github.com/adhigop13/ip.git","repoName":"ip","organization":"adhigop13","domainName":"github"},"branch":"master","displayName":"adhigop13/ip[master]","outputFolderName":"adhigop13_ip_master"},{"location":{"location":"https://github.com/MadLamprey/ip.git","repoName":"ip","organization":"MadLamprey","domainName":"github"},"branch":"master","displayName":"MadLamprey/ip[master]","outputFolderName":"MadLamprey_ip_master"}],"errorSet":[],"sinceDate":"2023-08-18","untilDate":"2023-09-06","isSinceDateProvided":true,"isUntilDateProvided":false,"supportedDomainUrlMap":{"NOT_RECOGNIZED":{"BRANCH":"","REPO_URL":"UNSUPPORTED","BASE_URL":"UNSUPPORTED","HISTORY_PATH":"","COMMIT_PATH":"","BLAME_PATH":""},"github":{"BRANCH":"tree/$BRANCH","REPO_URL":"https://github.com/$ORGANIZATION/$REPO_NAME/","BASE_URL":"https://github.com/","HISTORY_PATH":"commits/$BRANCH/$FILE_PATH","COMMIT_PATH":"commit/$COMMIT_HASH","BLAME_PATH":"blame/$BRANCH/$FILE_PATH"}}} diff --git a/tanshiyu1999_ip_master/authorship.json b/tanshiyu1999_ip_master/authorship.json index cb8e12b6..a7be9d8a 100644 --- a/tanshiyu1999_ip_master/authorship.json +++ b/tanshiyu1999_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"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-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"tanshiyu1999":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":"tanshiyu1999"},"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":"tanshiyu1999"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"javafx {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" version \u003d \"17.0.7\"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" maven { url \u0027https://oss.sonatype.org/content/repositories/snapshots/\u0027 }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":" mainClassName \u003d \"duke.Duke\"","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":65,"author":{"gitId":"tanshiyu1999"},"content":" archiveFileName \u003d \"duke.jar\"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":69,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"tanshiyu1999":27,"-":43}},{"path":"src/main/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"D | 0 | test | now","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"T | 0 | 1","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":2}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"tanshiyu1999"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"tanshiyu1999"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"tanshiyu1999"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"tanshiyu1999"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"tanshiyu1999"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"tanshiyu1999":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import duke.taskList.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" * A chatbot inspired by the Java Mascot: duke.Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"public class Duke {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" private String dukeCurrOutput;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":" * Constructor for duke.Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" public Duke() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" storage.load(this.tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" * This runs the duke programs main chat functionality,","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" * the while loop continues until user types bye.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" while (true) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":" boolean isBye \u003d parser.parseCommand(command, tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":" if (isBye) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"tanshiyu1999"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"tanshiyu1999"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"tanshiyu1999"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"tanshiyu1999"},"content":" return \"Duke heard: \" + input;","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"tanshiyu1999"},"content":" public String getCommandResponse(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"tanshiyu1999"},"content":"// parser.parseCommand(command, tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"tanshiyu1999"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"tanshiyu1999"},"content":"// bob.ui.printStart();","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"tanshiyu1999"},"content":"// bob.run();","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"tanshiyu1999"},"content":"// bob.ui.printEnd();","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"tanshiyu1999"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":76,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"tanshiyu1999":74,"-":2}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":" ","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"tanshiyu1999":33}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":"import duke.taskList.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" printStart();","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"tanshiyu1999"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"tanshiyu1999"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"tanshiyu1999"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"tanshiyu1999"},"content":" String response \u003d duke.getCommandResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"tanshiyu1999"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"tanshiyu1999"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"tanshiyu1999"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"tanshiyu1999"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"tanshiyu1999"},"content":" private void printStart() {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"tanshiyu1999"},"content":" String input \u003d \"Hello, I am Bob! What can I do for you?\";","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"tanshiyu1999"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"tanshiyu1999"},"content":" DialogBox.getDukeDialog(input, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"tanshiyu1999"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"tanshiyu1999":78}},{"path":"src/main/java/duke/command/Commands.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":" * An enum of commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"public enum Commands {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":" LIST, MARK, UNMARK, DEADLINE, TODO, EVENT, DELETE, FIND","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":10}},{"path":"src/main/java/duke/dukeException/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.dukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":" * A general exception that catches all the error that duke.Duke might make.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":" * DukeException constructor.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" * @param errMsg The error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":" public DukeException(String errMsg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" super(errMsg);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":18}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import duke.command.Commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"import duke.dukeException.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"import duke.taskList.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" * deals with making sense of the user duke.command.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" private Pattern listRegex \u003d Pattern.compile(\"^\" + Commands.LIST, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" private Pattern markRegex \u003d Pattern.compile(\"^\" + Commands.MARK, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" private Pattern unmarkRegex \u003d Pattern.compile(\"^\" + Commands.UNMARK, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":" private Pattern deadlineRegex \u003d Pattern.compile(\"^\" + Commands.DEADLINE, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" private Pattern todoRegex \u003d Pattern.compile(\"^\" + Commands.TODO, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" private Pattern eventRegex \u003d Pattern.compile(\"^\" + Commands.EVENT, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" private Pattern deleteRegex \u003d Pattern.compile(\"^\" + Commands.DELETE, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" private Pattern findRegex \u003d Pattern.compile(\"^\" + Commands.FIND, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" * The constructor for the Parser class.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" public Parser() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" * This will be responsible for parsing user duke.command","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" * and the duke.command will be acted out on the TaskList input.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" * @param command User input to be parsed by duke.parser.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" * @param taskList The Tasklist that the duke.command would be used on.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":" * @return boolean Returns true if user inputs \"bye\".","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" public boolean parseCommand(String command, TaskList taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" return true; // when returning 0, the application closes","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" } else if (listRegex.matcher(command).find()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" taskList.printList();","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":" } else if (markRegex.matcher(command).find()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" int curr \u003d Integer.parseInt(command.substring(5)) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" taskList.markCurrentTaskDone(curr);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" } else if (unmarkRegex.matcher(command).find()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":" int curr \u003d Integer.parseInt(command.substring(7)) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":" taskList.markCurrentTaskUndone(curr);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":" } else if (deadlineRegex.matcher(command).find()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"tanshiyu1999"},"content":" taskList.addDeadline(command);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"tanshiyu1999"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"tanshiyu1999"},"content":" } else if (todoRegex.matcher(command).find()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"tanshiyu1999"},"content":" taskList.addTodo(command);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"tanshiyu1999"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"tanshiyu1999"},"content":" } else if (eventRegex.matcher(command).find()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"tanshiyu1999"},"content":" taskList.addEvent(command);","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"tanshiyu1999"},"content":" } else if (deleteRegex.matcher(command).find()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"tanshiyu1999"},"content":" taskList.deleteTask(command);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"tanshiyu1999"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"tanshiyu1999"},"content":" } else if (findRegex.matcher(command).find()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"tanshiyu1999"},"content":" taskList.findTasks(command);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"tanshiyu1999"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"tanshiyu1999"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Invalid Response\");","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"tanshiyu1999"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"tanshiyu1999"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"tanshiyu1999"},"content":" public Pattern getListRegex() {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"tanshiyu1999"},"content":" return this.listRegex;","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"tanshiyu1999"},"content":" public Pattern getFindRegex() {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"tanshiyu1999"},"content":" return this.findRegex;","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"tanshiyu1999":82}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":"import duke.taskList.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" * deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" * The constructor of the Storage class.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" public Storage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":" * Load the data from duke.txt into the TaskList inside of the program.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" * @param list the TaskList that the data is loaded to from duke.txt.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" public void load(TaskList list) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" File theDir \u003d new File(\"./src/main/data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" if (!theDir.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" theDir.mkdirs();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" File myObj \u003d new File(\"./src/main/data/duke.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" Scanner myReader \u003d new Scanner(myObj);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" while (myReader.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" String data \u003d myReader.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" String type \u003d data.substring(0, 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":" Todo.readData(list.getList(), data);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" Deadline.readData(list.getList(), data);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":" Event.readData(list.getList(), data);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"tanshiyu1999"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"tanshiyu1999"},"content":" myReader.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"tanshiyu1999"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"tanshiyu1999"},"content":" File myObj \u003d new File(\"./src/main/data/duke.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"tanshiyu1999":60}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" * The Deadline class, which is a type of class.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" protected String by;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" protected LocalDate date;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" * A constructor of the Deadline class, which can parse","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" * a deadline with input of description and by.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":" * @param by The deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" this.date \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" * A constructor of the Deadline class, which can parse","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" * a deadline with input of description, by and a date.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":" * @param by The deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" * @param date A date in LocalDate format.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" public Deadline(String description, String by, LocalDate date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" * Read the Task data and add it into ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" * @param list An ArrayList of Tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" * @param data Data to be read and stored in list.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":" public static void readData(ArrayList\u003cTask\u003e list, String data) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" String splitDeadline[] \u003d data.split(\" \\\\| \");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"tanshiyu1999"},"content":" Task deadlineTask;","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"tanshiyu1999"},"content":" LocalDate d1 \u003d LocalDate.parse(splitDeadline[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"tanshiyu1999"},"content":" deadlineTask \u003d new Deadline(splitDeadline[2] + \" \", splitDeadline[3], d1);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"tanshiyu1999"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"tanshiyu1999"},"content":" deadlineTask \u003d new Deadline(splitDeadline[2], splitDeadline[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"tanshiyu1999"},"content":" list.add(deadlineTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"tanshiyu1999"},"content":" if (splitDeadline[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"tanshiyu1999"},"content":" list.get(list.size() - 1).markDoneNoPrint();","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"tanshiyu1999"},"content":" * Default System.out when this function is called.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"tanshiyu1999"},"content":" * @return string information in the Deadline instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"tanshiyu1999"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"tanshiyu1999"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"tanshiyu1999"},"content":" if (this.date \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"tanshiyu1999"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"tanshiyu1999"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"tanshiyu1999"},"content":" return \"[D]\" + super.toString() + getDate();","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"tanshiyu1999"},"content":" * Get a string representation of date in the MMM d yyyy format.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"tanshiyu1999"},"content":" * @return A string representation of date in MMM d yyyy format.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"tanshiyu1999"},"content":" public String getDate() {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"tanshiyu1999"},"content":" return this.date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":86}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":" * The Event class, which is a type of Task class.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" protected String from;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" protected String to;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" * A constructor for the Event class.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" * @param from When the event starts.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":" * @param to When the event ends.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" * Read the Task data and add it into ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" * @param list An ArrayList of Tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" * @param data Data to be read and stored in list.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" public static void readData(ArrayList\u003cTask\u003e list, String data) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" String[] splitEvent \u003d data.split(\" \\\\| \");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" Task eventTask \u003d new Event(splitEvent[2], splitEvent[3] + \" \", splitEvent[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" list.add(eventTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" if (splitEvent[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" list.get(list.size() - 1).markDoneNoPrint();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" * Default System.out when this function is called.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" * @return string information in the Event instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from + \"to: \" + this.to + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":50}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":" * The Task class, which contains information pertaining to","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":" * Tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"public class Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":" protected String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" * Constructor of Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":" * @param description Description of a Task instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" public Task(String description) {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" * A constructor of duke.task. It is called by there is no description input.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":" public Task() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" this.description \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" * Get the status icon to whether if the duke.task is done or not.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" * @return string String representation of whether the duke.task is done.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" return (isDone ? \"X\" : \" \"); // mark done duke.task with X","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" * Get the description of the class.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" * @return string The string representation of the class description.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" return this.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" * This method prints a horizonyal line.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" public static void printHorizontalLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":" for (int i \u003d 0; i \u003c 50; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" System.out.print(\"_\");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"tanshiyu1999"},"content":" * Mark the duke.task as done if it has been done.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"tanshiyu1999"},"content":" public void markDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":" if (isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"tanshiyu1999"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"tanshiyu1999"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"tanshiyu1999"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"Nice! I\u0027ve marked this duke.task as done:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"[\" + this.getStatusIcon() + \"] \" + this.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"tanshiyu1999"},"content":" * Mark the duke.task as done without printing it.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"tanshiyu1999"},"content":" public void markDoneNoPrint() {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"tanshiyu1999"},"content":" if (isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"tanshiyu1999"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"tanshiyu1999"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"tanshiyu1999"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"tanshiyu1999"},"content":" * Mark the duke.task as undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"tanshiyu1999"},"content":" public void markUndone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"tanshiyu1999"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"OK, I\u0027ve marked this duke.task as not done yet:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"[\" + this.getStatusIcon() + \"] \" + this.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"tanshiyu1999"},"content":" * Default System.out for Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"tanshiyu1999"},"content":" * @return The System.out for the class.","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"tanshiyu1999"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"tanshiyu1999"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"tanshiyu1999"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":100}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":" * The Todo class, which is a type of Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":" * The constructor of Todo","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" * @param description The description of todo.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" * Read the Task data and add it into ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" * @param list An ArrayList of Tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":" * @param data Data to be read and stored in list.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":" public static void readData(ArrayList\u003cTask\u003e list, String data) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" String[] splitTodo \u003d data.split(\" \\\\| \");","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" Task todoTask \u003d new Todo(splitTodo[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" list.add(todoTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" if (splitTodo[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" list.get(list.size() - 1).markDoneNoPrint();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" * Default System.out when this function is called.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" * @return string information in the Todo instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":42}},{"path":"src/main/java/duke/taskList/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"import duke.dukeException.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" * Contains the duke.task list e.g., it has operations to add/delete tasks in the list","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":" private ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":" * Constructor for TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":" * Get the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" * @return ArrayList returns the ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" return this.list;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":" * Prints a horizontal line.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" public static void printHorizontalLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" for (int i \u003d 0; i \u003c 50; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" System.out.print(\"_\");","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"tanshiyu1999"},"content":" * Deletes a duke.task from ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"tanshiyu1999"},"content":" * @param command The duke.command specifying which duke.task to delete.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"tanshiyu1999"},"content":" public void deleteTask(String command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"tanshiyu1999"},"content":" String[] splitCommand \u003d command.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":" if (splitCommand.length !\u003d 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please insert a numerical value to delete\");","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"tanshiyu1999"},"content":" Pattern pattern \u003d Pattern.compile(\"-?\\\\d+(\\\\.\\\\d+)?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"tanshiyu1999"},"content":" if (!pattern.matcher(splitCommand[1]).matches()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please enter a numerical value\");","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"tanshiyu1999"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"tanshiyu1999"},"content":" if (Integer.parseInt(splitCommand[1]) \u003e list.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"The delete value is out of range\");","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"tanshiyu1999"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"tanshiyu1999"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"Noted. I\u0027ve removed this duke.task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"tanshiyu1999"},"content":" int indexToRemove \u003d Integer.parseInt(command.substring(7)) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"tanshiyu1999"},"content":" Task taskToRemove \u003d list.get(indexToRemove);","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(taskToRemove);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"tanshiyu1999"},"content":" list.remove(indexToRemove);","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"tanshiyu1999"},"content":" File myObj \u003d new File(\"./src/main/data/tmpDuke.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"tanshiyu1999"},"content":" myObj.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"tanshiyu1999"},"content":" int currLine \u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"tanshiyu1999"},"content":" File currFile \u003d new File(\"./src/main/data/duke.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"tanshiyu1999"},"content":" Scanner myReader \u003d new Scanner(currFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"tanshiyu1999"},"content":" while (myReader.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"tanshiyu1999"},"content":" if (indexToRemove \u003d\u003d currLine) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"tanshiyu1999"},"content":" String data \u003d myReader.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"tanshiyu1999"},"content":" currLine++;","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"tanshiyu1999"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"tanshiyu1999"},"content":" currLine++;","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"tanshiyu1999"},"content":" String data \u003d myReader.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"tanshiyu1999"},"content":" if (data.equals(\"\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"tanshiyu1999"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"tanshiyu1999"},"content":" FileWriter myWriter \u003d new FileWriter(\"./src/main/data/tmpDuke.txt\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"tanshiyu1999"},"content":" myWriter.write(data + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"tanshiyu1999"},"content":" myWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"tanshiyu1999"},"content":" myReader.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"tanshiyu1999"},"content":" new File(\"./src/main/data/tmpDuke.txt\").renameTo(currFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"tanshiyu1999"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"An error occurred.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"tanshiyu1999"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"tanshiyu1999"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"An error occurred.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"tanshiyu1999"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"tanshiyu1999"},"content":" * Adds a event into ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"tanshiyu1999"},"content":" * @param command The duke.command specifying what Event to add.","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"tanshiyu1999"},"content":" public void addEvent(String command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"tanshiyu1999"},"content":" String[] splitCommand \u003d command.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"tanshiyu1999"},"content":" boolean hasFrom \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"tanshiyu1999"},"content":" boolean hasTo \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"tanshiyu1999"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"duke.task.Event Argument Empty\");","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"tanshiyu1999"},"content":" for (int i \u003d 0; i \u003c splitCommand.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"tanshiyu1999"},"content":" if (splitCommand[i].equals(\"/from\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"tanshiyu1999"},"content":" hasFrom \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"tanshiyu1999"},"content":" if (i \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"There is no description\");","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"tanshiyu1999"},"content":" if (i \u003d\u003d splitCommand.length - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please insert /from dates\");","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"tanshiyu1999"},"content":" if (splitCommand[i + 1].equals(\"/to\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please insert /from dates\");","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"tanshiyu1999"},"content":" if (hasFrom \u0026\u0026 splitCommand[i].equals(\"/to\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"tanshiyu1999"},"content":" hasTo \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"tanshiyu1999"},"content":" if (i \u003d\u003d splitCommand.length - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please insert /to dates\");","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"tanshiyu1999"},"content":" if (hasFrom \u003d\u003d false) {","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please insert event is /from when\");","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"tanshiyu1999"},"content":" } else if (hasTo \u003d\u003d false) {","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please insert event is /to when\");","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"tanshiyu1999"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"tanshiyu1999"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"Got it, I\u0027ve added this event.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"tanshiyu1999"},"content":" String currStr \u003d command.substring(6);","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"tanshiyu1999"},"content":" int fromIndex \u003d currStr.indexOf(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"tanshiyu1999"},"content":" String description \u003d currStr.substring(0, fromIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"tanshiyu1999"},"content":" currStr \u003d currStr.substring(fromIndex + 6);","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"tanshiyu1999"},"content":" int toIndex \u003d currStr.indexOf(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"tanshiyu1999"},"content":" String from \u003d currStr.substring(0, toIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"tanshiyu1999"},"content":" String to \u003d currStr.substring(toIndex + 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"tanshiyu1999"},"content":" Task eventTask \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"tanshiyu1999"},"content":" list.add(eventTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"tanshiyu1999"},"content":" FileWriter myWriter \u003d new FileWriter(\"./src/main/data/duke.txt\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"tanshiyu1999"},"content":" myWriter.write(\"E | 0 | \" + description + \"| \" + from + \"| \" + to + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"tanshiyu1999"},"content":" myWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"tanshiyu1999"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"An error occurred.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"tanshiyu1999"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(eventTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"tanshiyu1999"},"content":" * Add a Todo into the ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"tanshiyu1999"},"content":" * @param command The duke.command specifying what todo to add.","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"tanshiyu1999"},"content":" public void addTodo(String command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"tanshiyu1999"},"content":" String[] splitCommand \u003d command.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":198,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"tanshiyu1999"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"tanshiyu1999"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":204,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"tanshiyu1999"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"Got it, I\u0027ve added this duke.task.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"tanshiyu1999"},"content":" String description \u003d command.substring(5);","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"tanshiyu1999"},"content":" Task todoTask \u003d new Todo(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"tanshiyu1999"},"content":" FileWriter myWriter \u003d new FileWriter(\"./src/main/data/duke.txt\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"tanshiyu1999"},"content":" myWriter.write(\"T | 0 | \" + description + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"tanshiyu1999"},"content":" myWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"tanshiyu1999"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"An error occurred.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"tanshiyu1999"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"tanshiyu1999"},"content":" list.add(todoTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(todoTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"tanshiyu1999"},"content":" * Add a deadline into the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"tanshiyu1999"},"content":" * @param command Command specifying what deadline to add.","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"tanshiyu1999"},"content":" public void addDeadline(String command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"tanshiyu1999"},"content":" String[] splitCommand \u003d command.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":234,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"tanshiyu1999"},"content":" boolean hasBy \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"tanshiyu1999"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"duke.task.Deadline Argument Empty\");","lastModifiedDate":"2023-09-01"},{"lineNumber":240,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":241,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":242,"author":{"gitId":"tanshiyu1999"},"content":" for (int i \u003d 0; i \u003c splitCommand.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"tanshiyu1999"},"content":" if (splitCommand[i].equals(\"/by\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"tanshiyu1999"},"content":" hasBy \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":246,"author":{"gitId":"tanshiyu1999"},"content":" if (i \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":247,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"There is no description\");","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":249,"author":{"gitId":"tanshiyu1999"},"content":" if (i \u003d\u003d splitCommand.length - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":250,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please insert the deadline\");","lastModifiedDate":"2023-09-01"},{"lineNumber":251,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":252,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":253,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":254,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":255,"author":{"gitId":"tanshiyu1999"},"content":" if (hasBy \u003d\u003d false) {","lastModifiedDate":"2023-09-01"},{"lineNumber":256,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please insert deadline is /by when\");","lastModifiedDate":"2023-09-01"},{"lineNumber":257,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":258,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":259,"author":{"gitId":"tanshiyu1999"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":260,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":261,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":262,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":263,"author":{"gitId":"tanshiyu1999"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":264,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":265,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":266,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"Got it, I\u0027ve added this deadline.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":267,"author":{"gitId":"tanshiyu1999"},"content":" String currStr \u003d command.substring(9);","lastModifiedDate":"2023-09-01"},{"lineNumber":268,"author":{"gitId":"tanshiyu1999"},"content":" int dateIndex \u003d currStr.indexOf(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":269,"author":{"gitId":"tanshiyu1999"},"content":" String date \u003d currStr.substring(dateIndex + 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":270,"author":{"gitId":"tanshiyu1999"},"content":" String description \u003d currStr.substring(0, dateIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":271,"author":{"gitId":"tanshiyu1999"},"content":" Task deadlineTask;","lastModifiedDate":"2023-09-01"},{"lineNumber":272,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":273,"author":{"gitId":"tanshiyu1999"},"content":" LocalDate d1 \u003d LocalDate.parse(date);","lastModifiedDate":"2023-09-01"},{"lineNumber":274,"author":{"gitId":"tanshiyu1999"},"content":" deadlineTask \u003d new Deadline(description, date, d1);","lastModifiedDate":"2023-09-01"},{"lineNumber":275,"author":{"gitId":"tanshiyu1999"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":276,"author":{"gitId":"tanshiyu1999"},"content":" deadlineTask \u003d new Deadline(description, date);;","lastModifiedDate":"2023-09-01"},{"lineNumber":277,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":278,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":279,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":280,"author":{"gitId":"tanshiyu1999"},"content":" FileWriter myWriter \u003d new FileWriter(\"./src/main/data/duke.txt\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":281,"author":{"gitId":"tanshiyu1999"},"content":" myWriter.write(\"D | 0 | \" + description + \"| \" + date + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":282,"author":{"gitId":"tanshiyu1999"},"content":" myWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":283,"author":{"gitId":"tanshiyu1999"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":284,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"An error occurred.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":285,"author":{"gitId":"tanshiyu1999"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":286,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":287,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":288,"author":{"gitId":"tanshiyu1999"},"content":" list.add(deadlineTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":289,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(deadlineTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":290,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":291,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":292,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":293,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":294,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":295,"author":{"gitId":"tanshiyu1999"},"content":" * Mark the duke.task if duke.task is undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":296,"author":{"gitId":"tanshiyu1999"},"content":" * @param index Specifying which duke.task in the ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":297,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":298,"author":{"gitId":"tanshiyu1999"},"content":" public void markCurrentTaskUndone(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":299,"author":{"gitId":"tanshiyu1999"},"content":" list.get(index).markUndone();","lastModifiedDate":"2023-09-01"},{"lineNumber":300,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":301,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":302,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":303,"author":{"gitId":"tanshiyu1999"},"content":" * Mark the duke.task if duke.task is done,","lastModifiedDate":"2023-09-01"},{"lineNumber":304,"author":{"gitId":"tanshiyu1999"},"content":" * @param index Specifying which duke.task in the ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":305,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":306,"author":{"gitId":"tanshiyu1999"},"content":" public void markCurrentTaskDone(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":307,"author":{"gitId":"tanshiyu1999"},"content":" list.get(index).markDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":308,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":309,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":310,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":311,"author":{"gitId":"tanshiyu1999"},"content":" * Print out all the tasks in the ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":312,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":313,"author":{"gitId":"tanshiyu1999"},"content":" public void printList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":314,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":315,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":316,"author":{"gitId":"tanshiyu1999"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":317,"author":{"gitId":"tanshiyu1999"},"content":" int printIndex \u003d i + 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":318,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(printIndex + \".\" + list.get(i).toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":319,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":320,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":321,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":322,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":323,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":324,"author":{"gitId":"tanshiyu1999"},"content":" * Finds the tasks in the command and print them out.","lastModifiedDate":"2023-09-01"},{"lineNumber":325,"author":{"gitId":"tanshiyu1999"},"content":" * @param command The command specifying the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":326,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":327,"author":{"gitId":"tanshiyu1999"},"content":" public void findTasks(String command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":328,"author":{"gitId":"tanshiyu1999"},"content":" String[] splitCommand \u003d command.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":329,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":330,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":331,"author":{"gitId":"tanshiyu1999"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":332,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":333,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":334,"author":{"gitId":"tanshiyu1999"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":335,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":336,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":337,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":338,"author":{"gitId":"tanshiyu1999"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":339,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":340,"author":{"gitId":"tanshiyu1999"},"content":" String toFind \u003d command.substring(5);","lastModifiedDate":"2023-09-01"},{"lineNumber":341,"author":{"gitId":"tanshiyu1999"},"content":" int printIndex \u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":342,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":343,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"Here are the matching tasks in your list: \");","lastModifiedDate":"2023-09-01"},{"lineNumber":344,"author":{"gitId":"tanshiyu1999"},"content":" for (Task task : list) {","lastModifiedDate":"2023-09-01"},{"lineNumber":345,"author":{"gitId":"tanshiyu1999"},"content":" if (task.getDescription().contains(toFind)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":346,"author":{"gitId":"tanshiyu1999"},"content":" printIndex \u003d printIndex + 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":347,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(printIndex + \".\" + task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":348,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":349,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":350,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":351,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":352,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":353,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":354,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":355,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":355}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":" * Deals with interactions with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":" * Constructor for Ui.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" public Ui() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" * Prints a horizontal line.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" public void printHorizontalLine() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" for (int i \u003d 0; i \u003c 50; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" System.out.print(\"_\");","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" * Print the welcome message when the user launch the program.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" public void printStart() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" String name \u003d \"BOB\";","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"Hello! I\u0027m \" + name);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" * Print the goodbye message when the user logs out.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" public void printEnd() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"Bye. Hope to see you soon again soon!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"tanshiyu1999":49}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"tanshiyu1999":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"tanshiyu1999":19}},{"path":"src/test/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":" private Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" public void listRegex_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":" assertEquals(true, parser.getListRegex().matcher(\"list deez nuts\").find());","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" public void findRegex_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":" assertEquals(true, parser.getFindRegex().matcher(\"find deez nuts\").find());","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":19}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":" private Task task \u003d new Task(\"Test class\");","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" public void testGetDescription_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":" assertEquals(\"Test class\", task.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" public void testToString_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" assertEquals(\"[ ] Test class\", task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"list","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"tanshiyu1999":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":"tanshiyu1999"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"tanshiyu1999":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"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-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"tanshiyu1999":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":"tanshiyu1999"},"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":"tanshiyu1999"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"javafx {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" version \u003d \"17.0.7\"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" maven { url \u0027https://oss.sonatype.org/content/repositories/snapshots/\u0027 }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":" mainClassName \u003d \"duke.Duke\"","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":65,"author":{"gitId":"tanshiyu1999"},"content":" archiveFileName \u003d \"duke.jar\"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":69,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"tanshiyu1999":27,"-":43}},{"path":"src/main/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"D | 0 | test | now","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"D | 0 | cs2202 | 22 jan","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"E | 0 | jcf | today | tmr","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"T | 0 | help","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"T | 0 | no","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"T | 0 | meow","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"T | 0 | help","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"tanshiyu1999":7}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"tanshiyu1999"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"tanshiyu1999"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"tanshiyu1999"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"tanshiyu1999"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"tanshiyu1999"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"tanshiyu1999":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import duke.taskList.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" * A chatbot inspired by the Java Mascot: duke.Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"public class Duke {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" private String dukeCurrOutput;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":" Parser parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" * Constructor for duke.Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" public Duke() {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":" storage.load(this.tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" * This runs the duke programs main chat functionality,","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" * the while loop continues until user types bye.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" while (true) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":" String stringToPrint \u003d parser.parseCommand(command, tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"tanshiyu1999"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"tanshiyu1999"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"tanshiyu1999"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"tanshiyu1999"},"content":" return \"Duke heard: \" + input;","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"tanshiyu1999"},"content":" public String getCommandResponse(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"tanshiyu1999"},"content":" return parser.parseCommand(command, tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"tanshiyu1999"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"tanshiyu1999"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":69,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"tanshiyu1999":67,"-":2}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":" ","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"tanshiyu1999":33}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"import duke.taskList.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":" printStart();","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"tanshiyu1999"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"tanshiyu1999"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"tanshiyu1999"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"tanshiyu1999"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"tanshiyu1999"},"content":" String response \u003d duke.getCommandResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"tanshiyu1999"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"tanshiyu1999"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"tanshiyu1999"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"tanshiyu1999"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"tanshiyu1999"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"tanshiyu1999"},"content":" if (response.equals(\"bye\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"tanshiyu1999"},"content":" Platform.exit();","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"tanshiyu1999"},"content":" private void printStart() {","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"tanshiyu1999"},"content":" String input \u003d \"Hello, I am Bob! What can I do for you?\";","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"tanshiyu1999"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"tanshiyu1999"},"content":" DialogBox.getDukeDialog(input, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"tanshiyu1999"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"tanshiyu1999":83}},{"path":"src/main/java/duke/command/Commands.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":" * An enum of commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"public enum Commands {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":" LIST, MARK, UNMARK, DEADLINE, TODO, EVENT, DELETE, FIND","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":10}},{"path":"src/main/java/duke/dukeException/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.dukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":" * A general exception that catches all the error that duke.Duke might make.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":" * DukeException constructor.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" * @param errMsg The error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":" public DukeException(String errMsg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" super(errMsg);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":18}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import duke.command.Commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"import duke.dukeException.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"import duke.taskList.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" * deals with making sense of the user duke.command.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" private Pattern listRegex \u003d Pattern.compile(\"^\" + Commands.LIST, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" private Pattern markRegex \u003d Pattern.compile(\"^\" + Commands.MARK, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" private Pattern unmarkRegex \u003d Pattern.compile(\"^\" + Commands.UNMARK, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":" private Pattern deadlineRegex \u003d Pattern.compile(\"^\" + Commands.DEADLINE, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" private Pattern todoRegex \u003d Pattern.compile(\"^\" + Commands.TODO, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" private Pattern eventRegex \u003d Pattern.compile(\"^\" + Commands.EVENT, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" private Pattern deleteRegex \u003d Pattern.compile(\"^\" + Commands.DELETE, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" private Pattern findRegex \u003d Pattern.compile(\"^\" + Commands.FIND, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" * The constructor for the Parser class.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" public Parser() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" * This will be responsible for parsing user duke.command","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" * and the duke.command will be acted out on the TaskList input.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" * @param command User input to be parsed by duke.parser.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" * @param taskList The Tasklist that the duke.command would be used on.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":" * @return boolean Returns true if user inputs \"bye\".","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" public String parseCommand(String command, TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" return \"bye\"; // when returning 0, the application closes","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" } else if (listRegex.matcher(command).find()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" return taskList.printList();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" } else if (markRegex.matcher(command).find()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":" int curr \u003d Integer.parseInt(command.substring(5)) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" return taskList.markCurrentTaskDone(curr);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" } else if (unmarkRegex.matcher(command).find()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" int curr \u003d Integer.parseInt(command.substring(7)) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" return taskList.markCurrentTaskUndone(curr);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":" } else if (deadlineRegex.matcher(command).find()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":" return taskList.addDeadline(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" } else if (todoRegex.matcher(command).find()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":" return taskList.addTodo(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"tanshiyu1999"},"content":" } else if (eventRegex.matcher(command).find()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"tanshiyu1999"},"content":" return taskList.addEvent(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"tanshiyu1999"},"content":" } else if (deleteRegex.matcher(command).find()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"tanshiyu1999"},"content":" return taskList.deleteTask(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"tanshiyu1999"},"content":" } else if (findRegex.matcher(command).find()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"tanshiyu1999"},"content":" return taskList.findTasks(command);","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"tanshiyu1999"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Invalid Response\");","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"tanshiyu1999"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"tanshiyu1999"},"content":" return \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"tanshiyu1999"},"content":" public Pattern getListRegex() {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"tanshiyu1999"},"content":" return this.listRegex;","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"tanshiyu1999"},"content":" public Pattern getFindRegex() {","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"tanshiyu1999"},"content":" return this.findRegex;","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"tanshiyu1999":73}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":"import duke.taskList.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" * deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" * The constructor of the Storage class.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" public Storage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":" * Load the data from duke.txt into the TaskList inside of the program.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" * @param list the TaskList that the data is loaded to from duke.txt.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" public void load(TaskList list) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" File theDir \u003d new File(\"./src/main/data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" if (!theDir.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" theDir.mkdirs();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" File myObj \u003d new File(\"./src/main/data/duke.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" Scanner myReader \u003d new Scanner(myObj);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" while (myReader.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" String data \u003d myReader.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" String type \u003d data.substring(0, 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":" Todo.readData(list.getList(), data);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" Deadline.readData(list.getList(), data);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":" Event.readData(list.getList(), data);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"tanshiyu1999"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"tanshiyu1999"},"content":" myReader.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"tanshiyu1999"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"tanshiyu1999"},"content":" File myObj \u003d new File(\"./src/main/data/duke.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"tanshiyu1999":60}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" * The Deadline class, which is a type of class.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" protected String by;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" protected LocalDate date;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" * A constructor of the Deadline class, which can parse","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" * a deadline with input of description and by.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":" * @param by The deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" this.date \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" * A constructor of the Deadline class, which can parse","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" * a deadline with input of description, by and a date.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":" * @param by The deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" * @param date A date in LocalDate format.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" public Deadline(String description, String by, LocalDate date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" * Read the Task data and add it into ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" * @param list An ArrayList of Tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" * @param data Data to be read and stored in list.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":" public static void readData(ArrayList\u003cTask\u003e list, String data) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" String splitDeadline[] \u003d data.split(\" \\\\| \");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"tanshiyu1999"},"content":" Task deadlineTask;","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"tanshiyu1999"},"content":" LocalDate d1 \u003d LocalDate.parse(splitDeadline[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"tanshiyu1999"},"content":" deadlineTask \u003d new Deadline(splitDeadline[2] + \" \", splitDeadline[3], d1);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"tanshiyu1999"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"tanshiyu1999"},"content":" deadlineTask \u003d new Deadline(splitDeadline[2], splitDeadline[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"tanshiyu1999"},"content":" list.add(deadlineTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"tanshiyu1999"},"content":" if (splitDeadline[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"tanshiyu1999"},"content":" list.get(list.size() - 1).markDoneNoPrint();","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"tanshiyu1999"},"content":" * Default System.out when this function is called.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"tanshiyu1999"},"content":" * @return string information in the Deadline instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"tanshiyu1999"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"tanshiyu1999"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"tanshiyu1999"},"content":" if (this.date \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"tanshiyu1999"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"tanshiyu1999"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"tanshiyu1999"},"content":" return \"[D]\" + super.toString() + getDate();","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"tanshiyu1999"},"content":" * Get a string representation of date in the MMM d yyyy format.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"tanshiyu1999"},"content":" * @return A string representation of date in MMM d yyyy format.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"tanshiyu1999"},"content":" public String getDate() {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"tanshiyu1999"},"content":" return this.date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":86}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":" * The Event class, which is a type of Task class.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" protected String from;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" protected String to;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" * A constructor for the Event class.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" * @param from When the event starts.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":" * @param to When the event ends.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" * Read the Task data and add it into ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" * @param list An ArrayList of Tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" * @param data Data to be read and stored in list.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" public static void readData(ArrayList\u003cTask\u003e list, String data) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" String[] splitEvent \u003d data.split(\" \\\\| \");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" Task eventTask \u003d new Event(splitEvent[2], splitEvent[3] + \" \", splitEvent[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" list.add(eventTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" if (splitEvent[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" list.get(list.size() - 1).markDoneNoPrint();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" * Default System.out when this function is called.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" * @return string information in the Event instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from + \"to: \" + this.to + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":50}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":" * The Task class, which contains information pertaining to","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":" * Tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"public class Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":" protected String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" * Constructor of Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":" * @param description Description of a Task instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" public Task(String description) {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" * A constructor of duke.task. It is called by there is no description input.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":" public Task() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" this.description \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" * Get the status icon to whether if the duke.task is done or not.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" * @return string String representation of whether the duke.task is done.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" return (isDone ? \"X\" : \" \"); // mark done duke.task with X","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" * Get the description of the class.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" * @return string The string representation of the class description.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" return this.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" * This method prints a horizonyal line.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" public static void printHorizontalLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":" for (int i \u003d 0; i \u003c 50; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" System.out.print(\"_\");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"tanshiyu1999"},"content":" * Mark the duke.task as done if it has been done.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"tanshiyu1999"},"content":" public String markDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":" String strToPrint \u003d \"Nice! I\u0027ve marked this duke.task as done:\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"tanshiyu1999"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"tanshiyu1999"},"content":" strToPrint +\u003d (\"[\" + this.getStatusIcon() + \"] \" + this.getDescription());","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"tanshiyu1999"},"content":" return strToPrint;","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"tanshiyu1999"},"content":" * Mark the duke.task as done without printing it.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"tanshiyu1999"},"content":" public void markDoneNoPrint() {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"tanshiyu1999"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"tanshiyu1999"},"content":" * Mark the duke.task as undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"tanshiyu1999"},"content":" public String markUndone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"tanshiyu1999"},"content":" String strToPrint \u003d \"OK, I\u0027ve marked this duke.task as not done yet:\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"tanshiyu1999"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"tanshiyu1999"},"content":" return strToPrint + (\"[\" + this.getStatusIcon() + \"] \" + this.getDescription());","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"tanshiyu1999"},"content":" * Default System.out for Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"tanshiyu1999"},"content":" * @return The System.out for the class.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"tanshiyu1999"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"tanshiyu1999"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"tanshiyu1999"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":90}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":" * The Todo class, which is a type of Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":" * The constructor of Todo","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" * @param description The description of todo.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" * Read the Task data and add it into ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" * @param list An ArrayList of Tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":" * @param data Data to be read and stored in list.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":" public static void readData(ArrayList\u003cTask\u003e list, String data) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" String[] splitTodo \u003d data.split(\" \\\\| \");","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" Task todoTask \u003d new Todo(splitTodo[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" list.add(todoTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" if (splitTodo[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" list.get(list.size() - 1).markDoneNoPrint();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" * Default System.out when this function is called.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" * @return string information in the Todo instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":42}},{"path":"src/main/java/duke/taskList/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"import duke.dukeException.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" * Contains the duke.task list e.g., it has operations to add/delete tasks in the list","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":" private ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":" * Constructor for TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":" * Get the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" * @return ArrayList returns the ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" return this.list;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":" * Prints a horizontal line.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" public static void printHorizontalLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" for (int i \u003d 0; i \u003c 50; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":" System.out.print(\"_\");","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"tanshiyu1999"},"content":" * Deletes a duke.task from ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"tanshiyu1999"},"content":" * @param command The duke.command specifying which duke.task to delete.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"tanshiyu1999"},"content":" public String deleteTask(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"tanshiyu1999"},"content":" String[] splitCommand \u003d command.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"tanshiyu1999"},"content":" String strToPrint \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"tanshiyu1999"},"content":" if (splitCommand.length !\u003d 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please insert a numerical value to delete\");","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"tanshiyu1999"},"content":" Pattern pattern \u003d Pattern.compile(\"-?\\\\d+(\\\\.\\\\d+)?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"tanshiyu1999"},"content":" if (!pattern.matcher(splitCommand[1]).matches()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please enter a numerical value\");","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"tanshiyu1999"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"tanshiyu1999"},"content":" if (Integer.parseInt(splitCommand[1]) \u003e list.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"The delete value is out of range\");","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"tanshiyu1999"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"tanshiyu1999"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"tanshiyu1999"},"content":" strToPrint +\u003d (\"Noted. I\u0027ve removed this duke.task:\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"tanshiyu1999"},"content":" int indexToRemove \u003d Integer.parseInt(command.substring(7)) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"tanshiyu1999"},"content":" Task taskToRemove \u003d list.get(indexToRemove);","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"tanshiyu1999"},"content":" strToPrint +\u003d (taskToRemove) + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"tanshiyu1999"},"content":" list.remove(indexToRemove);","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"tanshiyu1999"},"content":" File myObj \u003d new File(\"./src/main/data/tmpDuke.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"tanshiyu1999"},"content":" myObj.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"tanshiyu1999"},"content":" int currLine \u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"tanshiyu1999"},"content":" File currFile \u003d new File(\"./src/main/data/duke.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"tanshiyu1999"},"content":" Scanner myReader \u003d new Scanner(currFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"tanshiyu1999"},"content":" while (myReader.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"tanshiyu1999"},"content":" if (indexToRemove \u003d\u003d currLine) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"tanshiyu1999"},"content":" String data \u003d myReader.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"tanshiyu1999"},"content":" currLine++;","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"tanshiyu1999"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"tanshiyu1999"},"content":" currLine++;","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"tanshiyu1999"},"content":" String data \u003d myReader.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"tanshiyu1999"},"content":" if (data.equals(\"\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"tanshiyu1999"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"tanshiyu1999"},"content":" FileWriter myWriter \u003d new FileWriter(\"./src/main/data/tmpDuke.txt\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"tanshiyu1999"},"content":" myWriter.write(data + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"tanshiyu1999"},"content":" myWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"tanshiyu1999"},"content":" myReader.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"tanshiyu1999"},"content":" new File(\"./src/main/data/tmpDuke.txt\").renameTo(currFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"tanshiyu1999"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"An error occurred.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"tanshiyu1999"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"tanshiyu1999"},"content":" return \"An error occurred\";","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"tanshiyu1999"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"An error occurred.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"tanshiyu1999"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"tanshiyu1999"},"content":" return \"An error occurred\";","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"tanshiyu1999"},"content":" return strToPrint +\u003d (\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"tanshiyu1999"},"content":" * Adds a event into ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"tanshiyu1999"},"content":" * @param command The duke.command specifying what Event to add.","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"tanshiyu1999"},"content":" public String addEvent(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"tanshiyu1999"},"content":" String[] splitCommand \u003d command.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"tanshiyu1999"},"content":" String strToPrint \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"tanshiyu1999"},"content":" boolean hasFrom \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"tanshiyu1999"},"content":" boolean hasTo \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"tanshiyu1999"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"duke.task.Event Argument Empty\");","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"tanshiyu1999"},"content":" for (int i \u003d 0; i \u003c splitCommand.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"tanshiyu1999"},"content":" if (splitCommand[i].equals(\"/from\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"tanshiyu1999"},"content":" hasFrom \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"tanshiyu1999"},"content":" if (i \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"There is no description\");","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"tanshiyu1999"},"content":" if (i \u003d\u003d splitCommand.length - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please insert /from dates\");","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"tanshiyu1999"},"content":" if (splitCommand[i + 1].equals(\"/to\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please insert /from dates\");","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"tanshiyu1999"},"content":" if (hasFrom \u0026\u0026 splitCommand[i].equals(\"/to\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"tanshiyu1999"},"content":" hasTo \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"tanshiyu1999"},"content":" if (i \u003d\u003d splitCommand.length - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please insert /to dates\");","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"tanshiyu1999"},"content":" if (hasFrom \u003d\u003d false) {","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please insert event is /from when\");","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"tanshiyu1999"},"content":" } else if (hasTo \u003d\u003d false) {","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please insert event is /to when\");","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"tanshiyu1999"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"tanshiyu1999"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"tanshiyu1999"},"content":" strToPrint +\u003d (\"Got it, I\u0027ve added this event.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"tanshiyu1999"},"content":" String currStr \u003d command.substring(6);","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"tanshiyu1999"},"content":" int fromIndex \u003d currStr.indexOf(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"tanshiyu1999"},"content":" String description \u003d currStr.substring(0, fromIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"tanshiyu1999"},"content":" currStr \u003d currStr.substring(fromIndex + 6);","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"tanshiyu1999"},"content":" int toIndex \u003d currStr.indexOf(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"tanshiyu1999"},"content":" String from \u003d currStr.substring(0, toIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"tanshiyu1999"},"content":" String to \u003d currStr.substring(toIndex + 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"tanshiyu1999"},"content":" Task eventTask \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"tanshiyu1999"},"content":" list.add(eventTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"tanshiyu1999"},"content":" FileWriter myWriter \u003d new FileWriter(\"./src/main/data/duke.txt\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"tanshiyu1999"},"content":" myWriter.write(\"E | 0 | \" + description + \"| \" + from + \"| \" + to + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"tanshiyu1999"},"content":" myWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"tanshiyu1999"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"An error occurred.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"tanshiyu1999"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"tanshiyu1999"},"content":" return \"An error occurred\";","lastModifiedDate":"2023-09-05"},{"lineNumber":186,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"tanshiyu1999"},"content":" strToPrint +\u003d (eventTask) + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":188,"author":{"gitId":"tanshiyu1999"},"content":" return strToPrint +\u003d (\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":189,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"tanshiyu1999"},"content":" * Add a Todo into the ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"tanshiyu1999"},"content":" * @param command The duke.command specifying what todo to add.","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"tanshiyu1999"},"content":" public String addTodo(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":197,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"tanshiyu1999"},"content":" String[] splitCommand \u003d command.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":199,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"tanshiyu1999"},"content":" String strToPrint \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":201,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":202,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"tanshiyu1999"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"tanshiyu1999"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":207,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"tanshiyu1999"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":211,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"tanshiyu1999"},"content":" strToPrint +\u003d (\"Got it, I\u0027ve added this duke.task.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":213,"author":{"gitId":"tanshiyu1999"},"content":" String description \u003d command.substring(5);","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"tanshiyu1999"},"content":" Task todoTask \u003d new Todo(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"tanshiyu1999"},"content":" FileWriter myWriter \u003d new FileWriter(\"./src/main/data/duke.txt\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"tanshiyu1999"},"content":" myWriter.write(\"T | 0 | \" + description + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"tanshiyu1999"},"content":" myWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"tanshiyu1999"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"An error occurred.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"tanshiyu1999"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"tanshiyu1999"},"content":" return \"An error occurred\";","lastModifiedDate":"2023-09-05"},{"lineNumber":223,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"tanshiyu1999"},"content":" list.add(todoTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"tanshiyu1999"},"content":" strToPrint +\u003d (todoTask) + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":227,"author":{"gitId":"tanshiyu1999"},"content":" return strToPrint +\u003d (\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":228,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"tanshiyu1999"},"content":" * Add a deadline into the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"tanshiyu1999"},"content":" * @param command Command specifying what deadline to add.","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":234,"author":{"gitId":"tanshiyu1999"},"content":" public String addDeadline(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":235,"author":{"gitId":"tanshiyu1999"},"content":" String[] splitCommand \u003d command.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":236,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"tanshiyu1999"},"content":" String strToPrint \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":238,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":239,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":240,"author":{"gitId":"tanshiyu1999"},"content":" boolean hasBy \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":241,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":242,"author":{"gitId":"tanshiyu1999"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"duke.task.Deadline Argument Empty\");","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":246,"author":{"gitId":"tanshiyu1999"},"content":" for (int i \u003d 0; i \u003c splitCommand.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":247,"author":{"gitId":"tanshiyu1999"},"content":" if (splitCommand[i].equals(\"/by\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"tanshiyu1999"},"content":" hasBy \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":249,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":250,"author":{"gitId":"tanshiyu1999"},"content":" if (i \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":251,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"There is no description\");","lastModifiedDate":"2023-09-01"},{"lineNumber":252,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":253,"author":{"gitId":"tanshiyu1999"},"content":" if (i \u003d\u003d splitCommand.length - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":254,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please insert the deadline\");","lastModifiedDate":"2023-09-01"},{"lineNumber":255,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":256,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":257,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":258,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":259,"author":{"gitId":"tanshiyu1999"},"content":" if (hasBy \u003d\u003d false) {","lastModifiedDate":"2023-09-01"},{"lineNumber":260,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"Please insert deadline is /by when\");","lastModifiedDate":"2023-09-01"},{"lineNumber":261,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":262,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":263,"author":{"gitId":"tanshiyu1999"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":264,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":265,"author":{"gitId":"tanshiyu1999"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":266,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":267,"author":{"gitId":"tanshiyu1999"},"content":" strToPrint +\u003d (\"Got it, I\u0027ve added this deadline.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":268,"author":{"gitId":"tanshiyu1999"},"content":" String currStr \u003d command.substring(9);","lastModifiedDate":"2023-09-01"},{"lineNumber":269,"author":{"gitId":"tanshiyu1999"},"content":" int dateIndex \u003d currStr.indexOf(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":270,"author":{"gitId":"tanshiyu1999"},"content":" String date \u003d currStr.substring(dateIndex + 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":271,"author":{"gitId":"tanshiyu1999"},"content":" String description \u003d currStr.substring(0, dateIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":272,"author":{"gitId":"tanshiyu1999"},"content":" Task deadlineTask;","lastModifiedDate":"2023-09-01"},{"lineNumber":273,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":274,"author":{"gitId":"tanshiyu1999"},"content":" LocalDate d1 \u003d LocalDate.parse(date);","lastModifiedDate":"2023-09-01"},{"lineNumber":275,"author":{"gitId":"tanshiyu1999"},"content":" deadlineTask \u003d new Deadline(description, date, d1);","lastModifiedDate":"2023-09-01"},{"lineNumber":276,"author":{"gitId":"tanshiyu1999"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":277,"author":{"gitId":"tanshiyu1999"},"content":" deadlineTask \u003d new Deadline(description, date);;","lastModifiedDate":"2023-09-01"},{"lineNumber":278,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":279,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":280,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":281,"author":{"gitId":"tanshiyu1999"},"content":" FileWriter myWriter \u003d new FileWriter(\"./src/main/data/duke.txt\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":282,"author":{"gitId":"tanshiyu1999"},"content":" myWriter.write(\"D | 0 | \" + description + \"| \" + date + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":283,"author":{"gitId":"tanshiyu1999"},"content":" myWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":284,"author":{"gitId":"tanshiyu1999"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":285,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"An error occurred.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":286,"author":{"gitId":"tanshiyu1999"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":287,"author":{"gitId":"tanshiyu1999"},"content":" return \"An error occurred\";","lastModifiedDate":"2023-09-05"},{"lineNumber":288,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":289,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":290,"author":{"gitId":"tanshiyu1999"},"content":" list.add(deadlineTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":291,"author":{"gitId":"tanshiyu1999"},"content":" strToPrint +\u003d (deadlineTask) + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":292,"author":{"gitId":"tanshiyu1999"},"content":" return strToPrint +\u003d (\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":293,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":294,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":295,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":296,"author":{"gitId":"tanshiyu1999"},"content":" * Mark the duke.task if duke.task is undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":297,"author":{"gitId":"tanshiyu1999"},"content":" * @param index Specifying which duke.task in the ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":298,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":299,"author":{"gitId":"tanshiyu1999"},"content":" public String markCurrentTaskUndone(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":300,"author":{"gitId":"tanshiyu1999"},"content":" return list.get(index).markUndone();","lastModifiedDate":"2023-09-05"},{"lineNumber":301,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":302,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":303,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":304,"author":{"gitId":"tanshiyu1999"},"content":" * Mark the duke.task if duke.task is done,","lastModifiedDate":"2023-09-01"},{"lineNumber":305,"author":{"gitId":"tanshiyu1999"},"content":" * @param index Specifying which duke.task in the ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":306,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":307,"author":{"gitId":"tanshiyu1999"},"content":" public String markCurrentTaskDone(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":308,"author":{"gitId":"tanshiyu1999"},"content":" list.get(index).markDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":309,"author":{"gitId":"tanshiyu1999"},"content":" return list.get(index).markDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":310,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":311,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":312,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":313,"author":{"gitId":"tanshiyu1999"},"content":" * Print out all the tasks in the ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":314,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":315,"author":{"gitId":"tanshiyu1999"},"content":" public String printList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":316,"author":{"gitId":"tanshiyu1999"},"content":" String strToPrint \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":317,"author":{"gitId":"tanshiyu1999"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":318,"author":{"gitId":"tanshiyu1999"},"content":" int printIndex \u003d i + 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":319,"author":{"gitId":"tanshiyu1999"},"content":" strToPrint \u003d strToPrint + (printIndex + \".\" + list.get(i).toString() + \"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":320,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":321,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":322,"author":{"gitId":"tanshiyu1999"},"content":" return strToPrint;","lastModifiedDate":"2023-09-05"},{"lineNumber":323,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":324,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":325,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":326,"author":{"gitId":"tanshiyu1999"},"content":" * Finds the tasks in the command and print them out.","lastModifiedDate":"2023-09-01"},{"lineNumber":327,"author":{"gitId":"tanshiyu1999"},"content":" * @param command The command specifying the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":328,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":329,"author":{"gitId":"tanshiyu1999"},"content":" public String findTasks(String command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":330,"author":{"gitId":"tanshiyu1999"},"content":" String[] splitCommand \u003d command.split(\" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":331,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":332,"author":{"gitId":"tanshiyu1999"},"content":" String strToPrint \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":333,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":334,"author":{"gitId":"tanshiyu1999"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":335,"author":{"gitId":"tanshiyu1999"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":336,"author":{"gitId":"tanshiyu1999"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":337,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":338,"author":{"gitId":"tanshiyu1999"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":339,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":340,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":341,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":342,"author":{"gitId":"tanshiyu1999"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":343,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":344,"author":{"gitId":"tanshiyu1999"},"content":" String toFind \u003d command.substring(5);","lastModifiedDate":"2023-09-01"},{"lineNumber":345,"author":{"gitId":"tanshiyu1999"},"content":" int printIndex \u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":346,"author":{"gitId":"tanshiyu1999"},"content":" strToPrint +\u003d (\"Here are the matching tasks in your list: \\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":347,"author":{"gitId":"tanshiyu1999"},"content":" for (Task task : list) {","lastModifiedDate":"2023-09-01"},{"lineNumber":348,"author":{"gitId":"tanshiyu1999"},"content":" if (task.getDescription().contains(toFind)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":349,"author":{"gitId":"tanshiyu1999"},"content":" printIndex \u003d printIndex + 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":350,"author":{"gitId":"tanshiyu1999"},"content":" strToPrint +\u003d (printIndex + \".\" + task.toString()) + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":351,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":352,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":353,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":354,"author":{"gitId":"tanshiyu1999"},"content":" return strToPrint;","lastModifiedDate":"2023-09-05"},{"lineNumber":355,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":356,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":357,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":358,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":358}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":" * Deals with interactions with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":" * Constructor for Ui.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" public Ui() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" * Prints a horizontal line.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" public void printHorizontalLine() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":" for (int i \u003d 0; i \u003c 50; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"tanshiyu1999"},"content":" System.out.print(\"_\");","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tanshiyu1999"},"content":" * Print the welcome message when the user launch the program.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tanshiyu1999"},"content":" public void printStart() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"tanshiyu1999"},"content":" String name \u003d \"BOB\";","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"Hello! I\u0027m \" + name);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"tanshiyu1999"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tanshiyu1999"},"content":" * Print the goodbye message when the user logs out.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"tanshiyu1999"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"tanshiyu1999"},"content":" public void printEnd() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"tanshiyu1999"},"content":" System.out.println(\"Bye. Hope to see you soon again soon!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"tanshiyu1999"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"tanshiyu1999":49}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"-Infinity\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"tanshiyu1999":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" maxHeight\u003d\"-Infinity\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"tanshiyu1999":19}},{"path":"src/test/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":" private Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" public void listRegex_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":" assertEquals(true, parser.getListRegex().matcher(\"list deez nuts\").find());","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" public void findRegex_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":" assertEquals(true, parser.getFindRegex().matcher(\"find deez nuts\").find());","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":19}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tanshiyu1999"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tanshiyu1999"},"content":"class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tanshiyu1999"},"content":" private Task task \u003d new Task(\"Test class\");","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tanshiyu1999"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"tanshiyu1999"},"content":" public void testGetDescription_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tanshiyu1999"},"content":" assertEquals(\"Test class\", task.getDescription());","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"tanshiyu1999"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"tanshiyu1999"},"content":" public void testToString_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"tanshiyu1999"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"tanshiyu1999"},"content":" assertEquals(\"[ ] Test class\", task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"tanshiyu1999"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"tanshiyu1999"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tanshiyu1999":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tanshiyu1999"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"tanshiyu1999"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"tanshiyu1999"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"tanshiyu1999"},"content":"list","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"tanshiyu1999":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":"tanshiyu1999"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"tanshiyu1999":1,"-":20}}] diff --git a/tanshiyu1999_ip_master/commits.json b/tanshiyu1999_ip_master/commits.json index 9328b30a..fc8994d2 100644 --- a/tanshiyu1999_ip_master/commits.json +++ b/tanshiyu1999_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"tanshiyu1999":[{"date":"2023-08-19","commitResults":[{"hash":"0e1a62c71160c9794efa9b6f0a972d1715dda10a","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":6}}},{"hash":"1c9b9524e6134e44475560c2a8e5c5e0f9eae77f","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":1}}}]},{"date":"2023-08-20","commitResults":[{"hash":"5e578beac6ee7931d96a45e0a28607fca88ebe48","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":1}}},{"hash":"9ff508f56817f2df41a953695bb60fb8ca4e489b","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":9}}}]},{"date":"2023-08-21","commitResults":[{"hash":"19ce3ef99089c8f6952b1627eaed728d163f0f2e","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":21}}},{"hash":"3c532bb8dbf91846307a248f44d9740e7778c568","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}},{"hash":"21d4162cfe3fa2ff1dd8c99d960e2c29df8187f8","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":21}}}]},{"date":"2023-08-22","commitResults":[{"hash":"b9a0dea1ac7d07e37ce2c174249b5d17070aa90f","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":18}}},{"hash":"0558010688adebdb59b1998f151dc43028f80a51","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"c0628ede09dea6de0046b4140bbaa60e2f7533ef","isMergeCommit":false,"messageTitle":"Improvement to Error Handling \u0026 Enum","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":227,"deletions":94}}}]},{"date":"2023-08-28","commitResults":[{"hash":"8d8cea01658e1f09b13259a2e8144d4586db4c75","isMergeCommit":false,"messageTitle":"Level-7 code done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":146,"deletions":8}}},{"hash":"01ad289952f35651082fecca7eedfab986dffa01","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"Level 7 Completed\n","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"6918332d9ae967e4975924f3da28b7665ed942c1","isMergeCommit":false,"messageTitle":"Level-8 Branch Minimal Task Done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":27}}},{"hash":"e0a2eb9aa5e0232d0818d7091aa8e50b1034f5be","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"facb8a9e349875a6301b03893f19263ae421fa49","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":268,"deletions":136}}},{"hash":"716e726de889dd0bfa5093bb342d3900d458e618","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"7f374d9c9f0e5a02dad90466dcc57ddfa93f076b","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"9603068d83b6b7ca423b95fb84b324239d3084b5","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"2b38bb428dc33509ee91bf25839bff229abc4fd6","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"txt":{"insertions":3,"deletions":0},"java":{"insertions":796,"deletions":551},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"b4744167fd3ab4be667d5cf36e6707024d2438ae","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"efc830dae31b2fd329218bf913a543c21bb206b6","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"bbf764736be7e851008edb1f3f88d74c3302f87b","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"357b05c24b9e03c75c3d7f7eaef170c5dd89a8e6","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"92649f8b062dd997cd64c4397c0ee0c16096f786","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-05","commitResults":[{"hash":"3bb59a9729a99381425dda35e142627a0d3b413a","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":1},"txt":{"insertions":0,"deletions":1},"java":{"insertions":82,"deletions":77}}},{"hash":"45d2b3a27937506965adffc91ad72b20016d3c2e","isMergeCommit":false,"messageTitle":"GUI setup complete","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":22,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":199,"deletions":4}}}]}]},"authorFileTypeContributionMap":{"tanshiyu1999":{"java":1137,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":27,"txt":6}},"authorContributionVariance":{"tanshiyu1999":103160.97},"authorDisplayNameMap":{"tanshiyu1999":"CS2103T-W08-3 TAN ..I YU"}} +{"authorDailyContributionsMap":{"tanshiyu1999":[{"date":"2023-08-19","commitResults":[{"hash":"0e1a62c71160c9794efa9b6f0a972d1715dda10a","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":6}}},{"hash":"1c9b9524e6134e44475560c2a8e5c5e0f9eae77f","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":1}}}]},{"date":"2023-08-20","commitResults":[{"hash":"5e578beac6ee7931d96a45e0a28607fca88ebe48","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":1}}},{"hash":"9ff508f56817f2df41a953695bb60fb8ca4e489b","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":9}}}]},{"date":"2023-08-21","commitResults":[{"hash":"19ce3ef99089c8f6952b1627eaed728d163f0f2e","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":21}}},{"hash":"3c532bb8dbf91846307a248f44d9740e7778c568","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}},{"hash":"21d4162cfe3fa2ff1dd8c99d960e2c29df8187f8","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":21}}}]},{"date":"2023-08-22","commitResults":[{"hash":"b9a0dea1ac7d07e37ce2c174249b5d17070aa90f","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":18}}},{"hash":"0558010688adebdb59b1998f151dc43028f80a51","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"c0628ede09dea6de0046b4140bbaa60e2f7533ef","isMergeCommit":false,"messageTitle":"Improvement to Error Handling \u0026 Enum","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":227,"deletions":94}}}]},{"date":"2023-08-28","commitResults":[{"hash":"8d8cea01658e1f09b13259a2e8144d4586db4c75","isMergeCommit":false,"messageTitle":"Level-7 code done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":146,"deletions":8}}},{"hash":"01ad289952f35651082fecca7eedfab986dffa01","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"Level 7 Completed\n","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"6918332d9ae967e4975924f3da28b7665ed942c1","isMergeCommit":false,"messageTitle":"Level-8 Branch Minimal Task Done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":27}}},{"hash":"e0a2eb9aa5e0232d0818d7091aa8e50b1034f5be","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"facb8a9e349875a6301b03893f19263ae421fa49","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":268,"deletions":136}}},{"hash":"716e726de889dd0bfa5093bb342d3900d458e618","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"7f374d9c9f0e5a02dad90466dcc57ddfa93f076b","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"9603068d83b6b7ca423b95fb84b324239d3084b5","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"2b38bb428dc33509ee91bf25839bff229abc4fd6","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"txt":{"insertions":3,"deletions":0},"java":{"insertions":796,"deletions":551},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"b4744167fd3ab4be667d5cf36e6707024d2438ae","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"efc830dae31b2fd329218bf913a543c21bb206b6","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"bbf764736be7e851008edb1f3f88d74c3302f87b","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"357b05c24b9e03c75c3d7f7eaef170c5dd89a8e6","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"92649f8b062dd997cd64c4397c0ee0c16096f786","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-05","commitResults":[{"hash":"3bb59a9729a99381425dda35e142627a0d3b413a","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":1},"txt":{"insertions":0,"deletions":1},"java":{"insertions":82,"deletions":77}}},{"hash":"45d2b3a27937506965adffc91ad72b20016d3c2e","isMergeCommit":false,"messageTitle":"GUI setup complete","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":22,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":199,"deletions":4}}},{"hash":"550ece4581b3bb38e1a853ee77b4e48dace779ac","isMergeCommit":false,"messageTitle":"Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":1},"fxml":{"insertions":2,"deletions":2},"java":{"insertions":72,"deletions":91}}},{"hash":"48ca6ede8ae3c2872dd9718a1af44111c2c40b7a","isMergeCommit":false,"messageTitle":"Added GUI closure after bye command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":4}}}]}]},"authorFileTypeContributionMap":{"tanshiyu1999":{"java":1119,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":27,"txt":11}},"authorContributionVariance":{"tanshiyu1999":109816.9},"authorDisplayNameMap":{"tanshiyu1999":"CS2103T-W08-3 TAN ..I YU"}} diff --git a/techjay-c_ip_master/authorship.json b/techjay-c_ip_master/authorship.json index b034f991..95748bda 100644 --- a/techjay-c_ip_master/authorship.json +++ b/techjay-c_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":"techjay-c"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-02"},{"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,"techjay-c":2}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"T | 1 | buy food","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"T | 1 | buy groceries","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"T | 0 | buy cheese","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"T | 1 | buy food","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"T | 0 | eat food","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"techjay-c":5}},{"path":"src/main/java/duke/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":" * Represents a base class for commands in the Duke application.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":" * Subclasses of Command define specific actions that can be executed by the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" * Enumeration of possible command types.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" public enum CommandType {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" TODO,","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" DEADLINE,","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" EVENT,","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" LIST,","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" MARK,","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" DELETE,","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" BYE","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" * Executes the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList object that stores the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" * @param ui The Ui object responsible for user interface interactions.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" * @param storage The Storage object responsible for reading and writing data to a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":31}},{"path":"src/main/java/duke/DateTimeValidator.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":" * A utility class for validating dates using a specified format.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"public class DateTimeValidator {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" private DateTimeFormatter formatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" * Constructs a DateTimeValidator with the accepted date format.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" * @param acceptedFormat The format string for the accepted date format.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" public DateTimeValidator(String acceptedFormat) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" this.formatter \u003d DateTimeFormatter.ofPattern(acceptedFormat);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" * Validates a date string against the accepted date format.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" * @param date The date string to be validated.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" * @return True if the date string is valid; false otherwise.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" boolean validateDate(String date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" formatter.parse(date);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"techjay-c":35}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by https://stackoverflow.com/questions/47150081/while-loop-for-multiple-inputs","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by ChatGPT, to solve the issue in the else block of incrementing the num_items counter to add","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"// the new item subsequently.","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"/* Solution below inspired by ChatGPT, to solve the issue for the command list, to show the separators only at the start","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":"and end, by moving","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"the statement outside the for loop","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by ChatGPT, regarding the method .contains(\"mark\"), as it might be a bug if the input contains mark,","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":"// without a corresponding integer.","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by https://stackoverflow.com/questions/12973871/read-multiple-user-input-words-and-split-them","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by ChatGPT, employed its help to solve my indexing problem. (ie mark 1 and unmark 1 refers to","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":"// diff items)","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":"/* Solution below inspired by ChatGPT, employed its help to solve the list not updating and showing the items with their","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":"correct status icon, by creating a new task array of tasks instead of a string array.","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by https://stackoverflow.com/questions/10405789/regex-append-or-replace-only-the-first-letter-of-each-word","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by https://www.programiz.com/java-programming/library/string/replacefirst","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":"// Solution below adapted by ChatGPT, to solve the exception error when invoking last line of the loop. when there is no next line.","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by https://stackoverflow.com/questions/32733084/pass-a-simple-enum-into-a-constructor-in-java","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired from ChatGPT, seeked clarification if the enums have to be passed into the child classes of parent class Task\u0027s constructor","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" * The main class for the Duke application.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" * Duke is a task management application that allows users to manage their tasks, including todos, deadlines, and events.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" private static String filePath \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" * The main entry point of the Duke application.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" * @param args Command-line arguments (not used in this application).","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" public static void main(String[] args) throws DukeException.NoSuchItemException, DukeException.ToDoException, IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" Storage storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" tasks \u003d storage.loadTasks(); // Load tasks from file","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" taskList.setTasks(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Error loading tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":" ui.displayWelcomeText();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"techjay-c"},"content":" // int num_items \u003d tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"techjay-c"},"content":" String user_text \u003d sc.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"techjay-c"},"content":" while (!user_text.isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"techjay-c"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"techjay-c"},"content":" Command command \u003d parser.parseCommand(user_text);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"techjay-c"},"content":" command.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.ToDoException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"techjay-c"},"content":" ui.printToDoException();","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.NoSuchItemException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"techjay-c"},"content":" ui.printNoSuchElementException();","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.EventException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"techjay-c"},"content":" ui.printEventException();","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.DeadlineException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"techjay-c"},"content":" ui.printDeadlineException();","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.MarkException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"techjay-c"},"content":" ui.printMarkException();","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.UnmarkException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"techjay-c"},"content":" ui.printUnmarkException();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.DeadlineFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"techjay-c"},"content":" ui.printDeadlineFormatException();","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.EventFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"techjay-c"},"content":" ui.printEventFormatException();","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.SearchException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"techjay-c"},"content":" ui.printSearchException();","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"techjay-c"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"techjay-c"},"content":" user_text \u003d sc.hasNextLine() ? sc.nextLine() : \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":88,"author":{"gitId":"techjay-c"},"content":" sc.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":90,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":3,"techjay-c":87}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by https://stackify.com/specify-handle-exceptions-java/","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":" * Custom exceptions used in the Duke application.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" * Constructs a DukeException with the specified error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" * @param message The error message associated with the exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user attempts to create a todo task with an empty description.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" public static class ToDoException extends DukeException{","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" public ToDoException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" super(\"todo cannot be empty\");","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user provides an invalid command.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" public static class NoSuchItemException extends DukeException{","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" public NoSuchItemException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" super(\"invalid command\");","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user attempts to create an event task with an empty description.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" public static class EventException extends DukeException{","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" public EventException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" super(\"event cannot be empty\");","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user attempts to create a deadline task with an empty description.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" public static class DeadlineException extends DukeException{","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" public DeadlineException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":" super(\"deadline cannot be empty\");","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user attempts to mark a task without specifying the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"techjay-c"},"content":" public static class MarkException extends DukeException{","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"techjay-c"},"content":" public MarkException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"techjay-c"},"content":" super(\"Task to mark not specified\");","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user attempts to unmark a task without specifying the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"techjay-c"},"content":" public static class UnmarkException extends DukeException{","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"techjay-c"},"content":" public UnmarkException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"techjay-c"},"content":" super(\"Task to unmark not specified\");","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user attemps a search in an incorrect format.","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"techjay-c"},"content":" public static class SearchException extends DukeException{","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"techjay-c"},"content":" public SearchException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"techjay-c"},"content":" super(\"Task to search for not specified\");","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user provides a deadline in an incorrect format.","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"techjay-c"},"content":" public static class DeadlineFormatException extends DukeException{","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"techjay-c"},"content":" public DeadlineFormatException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"techjay-c"},"content":" super(\"Deadline not in the correct format\");","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user provides an event in an incorrect format.","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"techjay-c"},"content":" public static class EventFormatException extends DukeException{","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"techjay-c"},"content":" public EventFormatException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"techjay-c"},"content":" super(\"Event not in the correct format\");","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"techjay-c":98}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"import duke.command.SearchCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"// Solution below adapted and inspired by https://chat.openai.com/share/7f037351-3be6-4105-b138-77f68d428c84","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" * Parses user input to create and return the corresponding command object.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" * Parses the user input command and returns the corresponding command object.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" * @param userInput The user\u0027s input command as a string.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" * @return A command object corresponding to the user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" * @throws DukeException If there is an issue parsing the command or if the command is invalid.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" public static Command parseCommand(String userInput) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" String[] split \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" String command \u003d split[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" String arguments \u003d userInput.replaceFirst(command, \"\").trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" switch (command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" case \"search\":","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" if (arguments.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.SearchException();","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" return new SearchCommand(arguments);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" int indexToDelete \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" return new DeleteCommand(indexToDelete);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" if (arguments.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.ToDoException();","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" return new AddCommand(AddCommand.TaskType.TODO, arguments);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":" if (arguments.isEmpty() || !arguments.contains(\"/from\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.EventException();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":" String userCommandE \u003d userInput.split(\" \")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":" String argsE \u003d userInput.replaceFirst(userCommandE, \"\").trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"techjay-c"},"content":" String[] splitTheArgumentsE \u003d argsE.split(\"/from\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"techjay-c"},"content":" if (splitTheArgumentsE.length !\u003d 2 || !splitTheArgumentsE[1].contains(\"/to\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.EventFormatException();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"techjay-c"},"content":" String the_descriptionE \u003d splitTheArgumentsE[0].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"techjay-c"},"content":" String[] theDateTimeE \u003d splitTheArgumentsE[1].trim().split(\"/to\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"techjay-c"},"content":" String fromDateTime \u003d theDateTimeE[0].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"techjay-c"},"content":" String toDateTime \u003d theDateTimeE[1].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"techjay-c"},"content":" DateTimeValidator validator_e \u003d new DateTimeValidator(\"yyyy/MM/dd HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"techjay-c"},"content":" boolean isDateValid_e \u003d validator_e.validateDate(fromDateTime) \u0026\u0026 validator_e.validateDate(toDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"techjay-c"},"content":" if (isDateValid_e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"techjay-c"},"content":" LocalDateTime parsedFromDate \u003d LocalDateTime.parse(fromDateTime, DateTimeFormatter.ofPattern(\"yyyy/MM/dd HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"techjay-c"},"content":" LocalDateTime parsedToDate \u003d LocalDateTime.parse(toDateTime, DateTimeFormatter.ofPattern(\"yyyy/MM/dd HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"techjay-c"},"content":" return new AddCommand(AddCommand.TaskType.EVENT, the_descriptionE, parsedFromDate, parsedToDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"techjay-c"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"techjay-c"},"content":" // Solution below adapted and inspired by https://chat.openai.com/share/b706b4df-ab30-4d0f-93eb-b85617616319","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"techjay-c"},"content":" if (arguments.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.DeadlineException();","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"techjay-c"},"content":" String userCommandD \u003d userInput.split(\" \")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"techjay-c"},"content":" String argsD \u003d userInput.replaceFirst(userCommandD, \"\").trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"techjay-c"},"content":" String[] splitTheArgumentsD \u003d argsD.split(\"/by\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"techjay-c"},"content":" if (splitTheArgumentsD.length !\u003d 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.DeadlineFormatException();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"techjay-c"},"content":" String the_descriptionD \u003d splitTheArgumentsD[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"techjay-c"},"content":" String[] theDateTimeD \u003d splitTheArgumentsD[1].trim().split(\" \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"techjay-c"},"content":" String date \u003d theDateTimeD[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"techjay-c"},"content":" String time \u003d theDateTimeD[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"techjay-c"},"content":" DateTimeValidator validator \u003d new DateTimeValidator(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"techjay-c"},"content":" boolean isDateValid \u003d validator.validateDate(date + \" \" + time);","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"techjay-c"},"content":" if (isDateValid) {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"techjay-c"},"content":" LocalDateTime parsedDateTime \u003d LocalDateTime.parse(date + \" \" + time,","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"techjay-c"},"content":" DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"techjay-c"},"content":" return new AddCommand(AddCommand.TaskType.DEADLINE, the_descriptionD, parsedDateTime);","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"techjay-c"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"techjay-c"},"content":" if (arguments.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.UnmarkException();","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"techjay-c"},"content":" int indexToUnmark \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"techjay-c"},"content":" return new UnmarkCommand(indexToUnmark);","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"techjay-c"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"techjay-c"},"content":" if (arguments.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.MarkException();","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"techjay-c"},"content":" int indexToMark \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"techjay-c"},"content":" return new MarkCommand(indexToMark);","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"techjay-c"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.NoSuchItemException();","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":121}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" * Handles saving and loading tasks to and from a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" static String filePath \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" * @param filePath The file path for storing tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" // Solution below adapted and inspired by https://chat.openai.com/share/7f037351-3be6-4105-b138-77f68d428c84","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" * Saves a list of tasks to the file specified by the file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" * @param tasks The list of tasks to be saved.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" public static void saveTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" try (FileWriter writer \u003d new FileWriter(filePath)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" String taskType \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" if (task instanceof Event) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" taskType \u003d \"Event\";","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" } else if (task instanceof Todo) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" taskType \u003d \"Todo\";","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":" taskType \u003d \"Deadline\";","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":" String statusIcon \u003d (task.getStatusIcon().equals(\"X\")) ? \"1\" : \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":" if (taskType.equals(\"Event\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"techjay-c"},"content":" LocalDateTime fromDateTime \u003d event.fromDateAndTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"techjay-c"},"content":" LocalDateTime toDateTime \u003d event.toDateAndTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"techjay-c"},"content":" String formattedFromDateTime \u003d fromDateTime.format(DateTimeFormatter.ofPattern(\"MMMM d yyyy ha\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"techjay-c"},"content":" String formattedToDateTime \u003d toDateTime.format(DateTimeFormatter.ofPattern(\"MMMM d yyyy ha\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"techjay-c"},"content":" writer.write(\"E \" + \"| \" + statusIcon + \" | \" + event.description +","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"techjay-c"},"content":" \" | \" + formattedFromDateTime + \" - \" + formattedToDateTime + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"techjay-c"},"content":" } else if (taskType.equals(\"Deadline\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"techjay-c"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"techjay-c"},"content":" LocalDateTime dateTime \u003d deadline.DateAndTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"techjay-c"},"content":" String formattedDateTime \u003d dateTime.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mma\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"techjay-c"},"content":" writer.write(\"D \" + \"| \" + statusIcon + \" | \" + deadline.description","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"techjay-c"},"content":" + \" | \" + formattedDateTime + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"techjay-c"},"content":" } else if (taskType.equals(\"Todo\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"techjay-c"},"content":" Todo todo \u003d (Todo) task;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"techjay-c"},"content":" writer.write(\"T \" + \"| \" + statusIcon + \" | \" + todo.description + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"techjay-c"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Error writing to: \" + filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"techjay-c"},"content":" // Solution adapted and inspired by https://stackoverflow.com/questions/3090761/how-to-create-a-new-file-together-with-missing-parent-directories","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"techjay-c"},"content":" // Solution below adapted and inspired by https://www.guru99.com/buffered-reader-in-java.html","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"techjay-c"},"content":" // Solution below adapted and inspired by https://chat.openai.com/share/4f6c03e6-99d5-47c0-8887-1762a36b15fb","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"techjay-c"},"content":" * Loads tasks from the file specified by the file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"techjay-c"},"content":" * @return An ArrayList of Task objects loaded from the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"techjay-c"},"content":" * @throws IOException If there is an issue reading from the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"techjay-c"},"content":" static ArrayList\u003cTask\u003e loadTasks() throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"techjay-c"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"techjay-c"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"techjay-c"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"techjay-c"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"techjay-c"},"content":" // Handling data file to be in a specific folder","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"techjay-c"},"content":" if (file.getParentFile() !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"techjay-c"},"content":" // Solution below adapted from","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"techjay-c"},"content":" // https://www.oreilly.com/library/view/java-cookbook/0596001703/ch10s10.html#:~:text\u003dOf%20the%20two%20methods%20used,%2Fian%2Fbin%22).","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"techjay-c"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"techjay-c"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"techjay-c"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"techjay-c"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(filePath));","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"techjay-c"},"content":" String dataToWrite;","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"techjay-c"},"content":" while ((dataToWrite \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"techjay-c"},"content":" System.out.println(dataToWrite); // Debug line","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"techjay-c"},"content":" String[] sections \u003d dataToWrite.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"techjay-c"},"content":" if (sections.length \u003e\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"techjay-c"},"content":" String taskType \u003d sections[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"techjay-c"},"content":" String taskStatus \u003d sections[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"techjay-c"},"content":" String taskDescription \u003d sections[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"techjay-c"},"content":" String taskOtherInfo \u003d sections.length \u003e 3 ? sections[3] : \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"techjay-c"},"content":" // declares variable of type Task and initialize with null value","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"techjay-c"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"techjay-c"},"content":" boolean isDone \u003d taskStatus.equals(\"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"techjay-c"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"techjay-c"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"techjay-c"},"content":" String[] eventParts \u003d taskOtherInfo.trim().split(\"-\");","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"techjay-c"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMMM d yyyy ha\");","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"techjay-c"},"content":" LocalDateTime parsedFromStartDateTime \u003d LocalDateTime.parse(eventParts[0].trim(), formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"techjay-c"},"content":" LocalDateTime parsedFromEndDateTime \u003d LocalDateTime.parse(eventParts[1].trim(), formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"techjay-c"},"content":" if (eventParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"techjay-c"},"content":" task \u003d new Event(taskDescription, parsedFromStartDateTime, parsedFromEndDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"techjay-c"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"techjay-c"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"techjay-c"},"content":" DateTimeFormatter formatter_d \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mma\");","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"techjay-c"},"content":" LocalDateTime dateTime_d \u003d LocalDateTime.parse(taskOtherInfo, formatter_d);","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"techjay-c"},"content":" task \u003d new Deadline(taskDescription, dateTime_d);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"techjay-c"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"techjay-c"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"techjay-c"},"content":" task \u003d new Todo(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"techjay-c"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"techjay-c"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"techjay-c"},"content":" if (isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"techjay-c"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"techjay-c"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"techjay-c"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"techjay-c"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"techjay-c"},"content":" reader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"techjay-c"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Error reading from: \" + filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"techjay-c"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":157}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":" * Represents a task in the Duke application.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" * The type of the task (e.g., TODO, DEADLINE, EVENT).","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" public enum Type {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" TODO,","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" DEADLINE,","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" EVENT,","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" OTHERS","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" * The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" * Indicates whether the task is marked as done (true) or not done (false).","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" * The type of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" protected Type taskType;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" * Constructs a task with the specified description and task type.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" * @param taskType The type of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" public Task(String description, Type taskType) {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" * Gets the status icon of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" * @return \"X\" if the task is done, \" \" (a space) if the task is not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"techjay-c"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"techjay-c"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"techjay-c"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"techjay-c"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"techjay-c"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"techjay-c"},"content":" * Gets the description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"techjay-c"},"content":" * This method returns the description of the task as a String.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"techjay-c"},"content":" * @return The description of the task as a String.","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"techjay-c"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"techjay-c"},"content":" return this.description;","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"techjay-c":78}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":" * Manages a list of tasks in the Duke application.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" * The list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" * Constructs a new TaskList with an empty list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" * @param task The task to be deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" public void deleteTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" tasks.remove(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" * Sets the tasks in the TaskList to the provided list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" * @param tasks The list of tasks to set in the TaskList.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" // Set the tasks in the duke.TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" public void setTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"techjay-c"},"content":" public int numTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"techjay-c"},"content":" return tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"techjay-c"},"content":" * Retrieves a task from the list by its index.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"techjay-c"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"techjay-c"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"techjay-c"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"techjay-c"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"techjay-c"},"content":" * Returns the list of all tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"techjay-c"},"content":" * @return The list of all tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"techjay-c"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"techjay-c"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":79}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"// Solution below adapted and inspired by https://chat.openai.com/share/7f037351-3be6-4105-b138-77f68d428c84","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":" * Handles user interface-related operations for the Duke application.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":" * Provides methods for displaying messages and error messages to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" private static final String separators \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" String text1 \u003d \" Hello! I\u0027m Novo\\n\" + \" What can I do for you?\\n\" + separators + \"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" String text2 \u003d \" Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" * Displays the welcome text to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" public void displayWelcomeText() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators + \"\\n\" + text1);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" * Displays the goodbye text to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" public void displayGoodbyeText() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators + \"\\n\" + text2 + \"\\n\" + separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" * Shows an error message to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" * @param message The error message to display.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" public void showErrorMessage(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators + \"\\n\" + message + \"\\n\" + separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" * Displays a message when a task is successfully deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" * @param deletedTask The task that was deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" * @param remainingNumberTasks The number of tasks remaining in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" public void displayDeleteTask(Task deletedTask, int remainingNumberTasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\" + \"\\n\" + deletedTask.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Now you have \" + remainingNumberTasks + \" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":" * Displays a message when a new task is successfully added.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":" * @param newTask The task that was added.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":" * @param newNumber The new total number of tasks in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"techjay-c"},"content":" public void displayAddedTask(Task newTask, int newNumber) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\" + \"\\n\" + newTask.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Now you have \" + newNumber + \" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"techjay-c"},"content":" * Displays the list of tasks to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList containing the tasks to be displayed.","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"techjay-c"},"content":" public void displayTaskList(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"techjay-c"},"content":" for (int i \u003d 0; i \u003c taskList.numTasks(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"techjay-c"},"content":" System.out.println((i + 1) + \".\" + taskList.getTask(i).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"techjay-c"},"content":" * Displays a message when a task is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"techjay-c"},"content":" * @param markedTask The task that was marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"techjay-c"},"content":" public void displayMarked(Task markedTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\" + \"\\n\" + markedTask.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"techjay-c"},"content":" * Displays a message when a task is marked as not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"techjay-c"},"content":" * @param markedTask The task that was marked as not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"techjay-c"},"content":" public void displayUnmarked(Task markedTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\" + \"\\n\" + markedTask.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"techjay-c"},"content":" * Displays a list of searched tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"techjay-c"},"content":" * This method takes an ArrayList of Task objects and prints them to the console,","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"techjay-c"},"content":" * numbering each task for easy reference. It also adds separators before and after","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"techjay-c"},"content":" * the list to visually separate it from other output.","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"techjay-c"},"content":" * @param searchedTask An ArrayList of Task objects containing the tasks to be displayed.","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"techjay-c"},"content":" public void displaySearched(ArrayList\u003cTask\u003e searchedTask) {","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"techjay-c"},"content":" for (int i \u003d 0; i \u003c searchedTask.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"techjay-c"},"content":" System.out.println((i + 1) + \".\" + searchedTask.get(i).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"techjay-c"},"content":" * Displays an error message for an empty todo description.","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"techjay-c"},"content":" public void printToDoException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"techjay-c"},"content":" * Displays an error message for an unrecognized command.","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"techjay-c"},"content":" public void printNoSuchElementException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"techjay-c"},"content":" * Displays an error message for an empty event description.","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"techjay-c"},"content":" public void printEventException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"techjay-c"},"content":" * Displays an error message for an empty deadline description.","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"techjay-c"},"content":" public void printDeadlineException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"techjay-c"},"content":" * Displays an error message for an unspecified task to mark.","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"techjay-c"},"content":" public void printMarkException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! The task to mark must be specified.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"techjay-c"},"content":" * Displays an error message for an unspecified task to unmark.","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"techjay-c"},"content":" public void printUnmarkException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! The task to unmark must be specified.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"techjay-c"},"content":" * Displays an error message for a deadline task in the wrong format.","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"techjay-c"},"content":" public void printSearchException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! The task to search must be specified.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":180,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":181,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":182,"author":{"gitId":"techjay-c"},"content":" public void printDeadlineFormatException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! Enter in the format: deadline (task) /by dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"techjay-c"},"content":" * Displays an error message for a event task in the wrong format.","lastModifiedDate":"2023-09-03"},{"lineNumber":190,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":191,"author":{"gitId":"techjay-c"},"content":" public void printEventFormatException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! Enter in the format: \\n event (task) /from yyyy/MM/dd HHmm /to yyyy/MM/dd HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":196}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"import duke.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"import duke.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"// Solution below adapted and inspired by https://chat.openai.com/share/7f037351-3be6-4105-b138-77f68d428c84","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" * Represents a command to add tasks to the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" * This command can handle adding different types of tasks such as Todo, Deadline, and Event.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" * Enumerates the types of tasks that can be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" public enum TaskType {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" private String taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" private TaskType taskType;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" private LocalDateTime parsedDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" private LocalDateTime parsedFromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" private LocalDateTime parsedToDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" // Use Method Overloading for different Commands to be added","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" * Constructs an AddCommand for a Todo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" * @param taskType The type of the task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" public AddCommand(TaskType taskType, String taskDescription) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" * Constructs an AddCommand for a Deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" * @param taskType The type of the task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":" * @param parsedDateTime The parsed date and time for the deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":" public AddCommand(TaskType taskType, String taskDescription, LocalDateTime parsedDateTime) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":" this.parsedDateTime \u003d parsedDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"techjay-c"},"content":" * Constructs an AddCommand for an Event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"techjay-c"},"content":" * @param taskType The type of the task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"techjay-c"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"techjay-c"},"content":" * @param parsedFromDate The parsed start date and time for the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"techjay-c"},"content":" * @param parsedToDate The parsed end date and time for the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"techjay-c"},"content":" public AddCommand(TaskType taskType, String taskDescription, LocalDateTime parsedFromDate, LocalDateTime parsedToDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"techjay-c"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"techjay-c"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"techjay-c"},"content":" this.parsedFromDate \u003d parsedFromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"techjay-c"},"content":" this.parsedToDate \u003d parsedToDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"techjay-c"},"content":" * Executes the AddCommand to add a task to the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"techjay-c"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"techjay-c"},"content":" * @param storage The storage handler for saving tasks to a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"techjay-c"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"techjay-c"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"techjay-c"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"techjay-c"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"techjay-c"},"content":" case TODO:","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"techjay-c"},"content":" newTask \u003d new Todo(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"techjay-c"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"techjay-c"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"techjay-c"},"content":" newTask \u003d new Deadline(taskDescription, parsedDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"techjay-c"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"techjay-c"},"content":" case EVENT:","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"techjay-c"},"content":" newTask \u003d new Event(taskDescription, parsedFromDate, parsedToDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"techjay-c"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"techjay-c"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"techjay-c"},"content":" ui.displayAddedTask(newTask, taskList.numTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"techjay-c"},"content":" storage.saveTasks(taskList.getAllTasks()); // Save the updated task list","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"techjay-c"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"techjay-c"},"content":" ui.showErrorMessage(\"Error adding task.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":102}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" * Represents a command to exit the Duke application.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" * This command displays a goodbye message and terminates the application.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" * Executes the ByeCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList object that stores the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" * @param ui The Ui object responsible for user interface interactions.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" * @param storage The Storage object responsible for reading and writing data to a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" ui.displayGoodbyeText();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":25}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"import duke.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"// Solution below adapted and inspired by https://chat.openai.com/share/7f037351-3be6-4105-b138-77f68d428c84","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" * The DeleteCommand is responsible for removing a task from the task list based on its index.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" private int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" * Constructs a DeleteCommand with the specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" * Executes the DeleteCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" * This method attempts to delete the task at the specified index from the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" * If the index is valid, the task is deleted, and the task list and storage are updated.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" * If the index is invalid, an error message is displayed.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList object that stores the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" * @param ui The Ui object responsible for user interface interactions.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" * @param storage The Storage object responsible for reading and writing data to a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" Task taskToDelete \u003d taskList.getTask(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" taskList.deleteTask(taskToDelete);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" ui.displayDeleteTask(taskToDelete, taskList.numTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" storage.saveTasks(taskList.getAllTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" ui.showErrorMessage(\"Invalid task index.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":47}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" * Represents a command to list all tasks in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" * The ListCommand is responsible for displaying the entire list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" * Executes the ListCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" * This method displays the list of tasks stored in the TaskList object using the Ui object.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList object that stores the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" * @param ui The Ui object responsible for user interface interactions.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" * @param storage The Storage object responsible for reading and writing data to a file (not used in this command).","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" ui.displayTaskList(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":26}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"import duke.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" * Represents a command to mark a task as done in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" * The MarkCommand is responsible for marking a specific task as completed.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" * Constructs a MarkCommand with the specified task index.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" * @param taskIndex The index of the task to be marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" public MarkCommand(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" * Executes the MarkCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" * This method marks the task at the specified index as done and updates the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" * If the index is invalid, an error message is displayed.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList object that stores the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" * @param ui The Ui object responsible for user interface interactions.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" * @param storage The Storage object responsible for reading and writing data to a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" Task taskToMark \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" taskToMark.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" ui.displayMarked(taskToMark);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" storage.saveTasks(taskList.getAllTasks()); // Save the updated task list","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" ui.showErrorMessage(\"Invalid task index.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":55}},{"path":"src/main/java/duke/command/SearchCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"import duke.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":"// Solution below adapted and inspired from https://chat.openai.com/share/3bd2c2a8-57c4-480a-9055-646c61983a60","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"public class SearchCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" private String taskToFind;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" * Constructs a SearchCommand with the specified keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" * @param taskToFind The keyword to search for in task descriptions.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" public SearchCommand(String taskToFind) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" this.taskToFind \u003d taskToFind;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" * Executes the search for tasks containing the specified keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList containing all tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" * @param ui The Ui object for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" * @param storage The Storage object for data storage operations.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" ArrayList\u003cTask\u003e matchedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" for (Task task : taskList.getAllTasks()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" if (task.getDescription().contains(taskToFind)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" matchedTasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" if (matchedTasks.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" ui.showErrorMessage(\"No such task found.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" ui.displaySearched(matchedTasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"techjay-c":46}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"import duke.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" * Represents a command to unmark a task as not done in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" * The UnmarkCommand is responsible for marking a specific task as not done (incomplete).","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" * Constructs an UnmarkCommand with the specified task index.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" * @param taskIndex The index of the task to be unmarked (marked as not done).","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" public UnmarkCommand(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" * Executes the UnmarkCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" * This method marks the task at the specified index as not done (incomplete) and updates the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" * If the index is invalid, an error message is displayed.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList object that stores the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" * @param ui The Ui object responsible for user interface interactions.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" * @param storage The Storage object responsible for reading and writing data to a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" Task tasktoUnmark \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" tasktoUnmark.markAsNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" ui.displayUnmarked(tasktoUnmark);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" storage.saveTasks(taskList.getAllTasks()); // Save the updated task list","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" ui.showErrorMessage(\"Invalid task index.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":46}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" * Represents a task with a specific deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" * A Deadline task contains a description and a deadline date and time.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" public LocalDateTime DateAndTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" * Constructs a Deadline task with the specified description and deadline date and time.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" * @param description The description of the Deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" * @param DateAndTime The deadline date and time.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" public Deadline(String description, LocalDateTime DateAndTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" super(description, Type.DEADLINE);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" this.DateAndTime \u003d DateAndTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" * Returns a string representation of the Deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" * The string includes the task type, status icon, description, and deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" * @return A formatted string representing the Deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" // eg 2nd Dec 2019 6pm","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mma\");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" return \"[D]\" + \"[\" + getStatusIcon() + \"] \" + description + \" (by: \" + DateAndTime.format(formatter) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"techjay-c":38}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" * Represents an event task that spans a specific time period.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" * An Event task contains a description, a start date and time, and an end date and time.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" public LocalDateTime fromDateAndTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" public LocalDateTime toDateAndTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" * Constructs an Event task with the specified description, start date and time, and end date and time.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" * @param description The description of the Event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" * @param fromDateAndTime The start date and time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" * @param toDateAndTime The end date and time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" public Event(String description, LocalDateTime fromDateAndTime, LocalDateTime toDateAndTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" super(description, Type.EVENT);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" this.fromDateAndTime \u003d fromDateAndTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" this.toDateAndTime \u003d toDateAndTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" * Returns a string representation of the Event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" * The string includes the task type, status icon, description, and event time period.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" * @return A formatted string representing the Event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" // example Oct 15 2019 2pm","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMMM d yyyy ha\");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" return \"[E]\" + \"[\" + getStatusIcon() + \"] \" + description + \" (from: \" + fromDateAndTime.format(formatter) +","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" \" to: \" + toDateAndTime.format(formatter) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"techjay-c":43}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":" * Represents a to-do task with a description.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":" * A Todo task contains a description of the task to be done.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" * Constructs a Todo task with the specified description.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" * @param description The description of the Todo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" super(description, Type.TODO);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" * Returns a string representation of the Todo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" * The string includes the task type, status icon, and description.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" * @return A formatted string representing the Todo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" return \"[T]\" + \"[\" + getStatusIcon() + \"]\" + \" \" + description;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"techjay-c":30}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import static duke.Task.Type.TODO;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" * Test cases for the TaskList class.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" * Tests adding a task to the TaskList.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" public void testAddTask() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" Task task \u003d new Task(\"Test Task\", TODO);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" assertEquals(1, taskList.numTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" assertEquals(task, taskList.getTask(0));","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" * Tests marking a task as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" public void testMarkAsDone() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" Task task \u003d new Task(\"Sample Task\", Task.Type.TODO);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" assertFalse(task.isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" assertTrue(task.isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"techjay-c":35}},{"path":"src/test/java/duke/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" * Test cases for the Todo class.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" * Tests the toString method of Todo when it\u0027s not done and when it\u0027s done.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" public void testTodoToString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" assertEquals(\"[T][ ] Sample Todo\", todo.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" assertEquals(\"[T][X] Sample Todo\", todo.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"techjay-c":23}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"todo join sports club","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"delete 3","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"techjay-c":12}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":"diff ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":33,"techjay-c":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":"techjay-c"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"techjay-c":20}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"T | 1 | buy food","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"T | 1 | buy groceries","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"T | 0 | buy cheese","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"T | 1 | buy food","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"T | 1 | eat food","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"techjay-c":5}},{"path":"src/main/java/duke/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":" * Represents a base class for commands in the Duke application.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":" * Subclasses of Command define specific actions that can be executed by the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" * Enumeration of possible command types.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" public enum CommandType {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" TODO,","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" DEADLINE,","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" EVENT,","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" LIST,","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" MARK,","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" DELETE,","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" BYE","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" * Executes the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList object that stores the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" * @param ui The Ui object responsible for user interface interactions.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" * @param storage The Storage object responsible for reading and writing data to a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":31}},{"path":"src/main/java/duke/DateTimeValidator.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":" * A utility class for validating dates using a specified format.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"public class DateTimeValidator {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" private DateTimeFormatter formatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" * Constructs a DateTimeValidator with the accepted date format.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" * @param acceptedFormat The format string for the accepted date format.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" public DateTimeValidator(String acceptedFormat) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" this.formatter \u003d DateTimeFormatter.ofPattern(acceptedFormat);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" * Validates a date string against the accepted date format.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" * @param date The date string to be validated.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" * @return True if the date string is valid; false otherwise.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" boolean validateDate(String date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" formatter.parse(date);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"techjay-c":35}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by https://stackoverflow.com/questions/47150081/while-loop-for-multiple-inputs","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by ChatGPT, to solve the issue in the else block of incrementing the num_items counter to add","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"// the new item subsequently.","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"/* Solution below inspired by ChatGPT, to solve the issue for the command list, to show the separators only at the start","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":"and end, by moving","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"the statement outside the for loop","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by ChatGPT, regarding the method .contains(\"mark\"), as it might be a bug if the input","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":"// contains mark, without a corresponding integer.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by https://stackoverflow.com/questions/12973871/read-multiple-user-input-words-and-split-them","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by ChatGPT, employed its help to solve my indexing problem. (ie mark 1 and unmark 1 refers to","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":"// diff items)","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":"/* Solution below inspired by ChatGPT, employed its help to solve the list not updating and showing the items with their","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":"correct status icon, by creating a new task array of tasks instead of a string array.","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by https://stackoverflow.com/questions/10405789/regex-append-or-replace-only-the-first-","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":"// letter-of-each-word","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by https://www.programiz.com/java-programming/library/string/replacefirst","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":"// Solution below adapted by ChatGPT, to solve the exception error when invoking last line of the loop.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":"// when there is no next line.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by https://stackoverflow.com/questions/32733084/pass-a-simple-enum-into-a-constructor-in-java","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired from ChatGPT, seeked clarification if the enums have to be passed into the child classes of","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":"// parent class Task\u0027s constructor","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" * The main class for the Duke application.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" * Duke is a task management application that allows users to manage their tasks, including todos, deadlines, and events","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" private static String filePath \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" * The main entry point of the Duke application.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" * @param args Command-line arguments (not used in this application).","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" public static void main(String[] args) throws DukeException.NoSuchItemException,","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" DukeException.ToDoException, IOException {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" Storage storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":" tasks \u003d storage.loadTasks(); // Load tasks from file","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":" taskList.setTasks(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Error loading tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"techjay-c"},"content":" ui.displayWelcomeText();","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"techjay-c"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"techjay-c"},"content":" // int num_items \u003d tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"techjay-c"},"content":" String userText \u003d sc.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"techjay-c"},"content":" while (!userText.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"techjay-c"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"techjay-c"},"content":" Command command \u003d parser.parseCommand(userText);","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"techjay-c"},"content":" command.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.ToDoException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"techjay-c"},"content":" ui.printToDoException();","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.NoSuchItemException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"techjay-c"},"content":" ui.printNoSuchElementException();","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.EventException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"techjay-c"},"content":" ui.printEventException();","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.DeadlineException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"techjay-c"},"content":" ui.printDeadlineException();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.MarkException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"techjay-c"},"content":" ui.printMarkException();","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.UnmarkException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"techjay-c"},"content":" ui.printUnmarkException();","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.DeadlineFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"techjay-c"},"content":" ui.printDeadlineFormatException();","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.EventFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"techjay-c"},"content":" ui.printEventFormatException();","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException.SearchException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"techjay-c"},"content":" ui.printSearchException();","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"techjay-c"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"techjay-c"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"techjay-c"},"content":" userText \u003d sc.hasNextLine() ? sc.nextLine() : \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"techjay-c"},"content":" sc.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":94,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":3,"techjay-c":91}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"// Solution below inspired by https://stackify.com/specify-handle-exceptions-java/","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":" * Custom exceptions used in the Duke application.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" * Constructs a DukeException with the specified error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" * @param message The error message associated with the exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user attempts to create a todo task with an empty description.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" public static class ToDoException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" public ToDoException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" super(\"todo cannot be empty\");","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user provides an invalid command.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" public static class NoSuchItemException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" public NoSuchItemException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" super(\"invalid command\");","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user attempts to create an event task with an empty description.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" public static class EventException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" public EventException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" super(\"event cannot be empty\");","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user attempts to create a deadline task with an empty description","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" public static class DeadlineException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" public DeadlineException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":" super(\"deadline cannot be empty\");","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user attempts to mark a task without specifying the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"techjay-c"},"content":" public static class MarkException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"techjay-c"},"content":" public MarkException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"techjay-c"},"content":" super(\"Task to mark not specified\");","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user attempts to unmark a task without specifying the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"techjay-c"},"content":" public static class UnmarkException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"techjay-c"},"content":" public UnmarkException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"techjay-c"},"content":" super(\"Task to unmark not specified\");","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user attemps a search in an incorrect format.","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"techjay-c"},"content":" public static class SearchException extends DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"techjay-c"},"content":" public SearchException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"techjay-c"},"content":" super(\"Task to search for not specified\");","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user provides a deadline in an incorrect format.","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"techjay-c"},"content":" public static class DeadlineFormatException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"techjay-c"},"content":" public DeadlineFormatException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"techjay-c"},"content":" super(\"Deadline not in the correct format\");","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"techjay-c"},"content":" * An exception class for handling cases where the user provides an event in an incorrect format.","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"techjay-c"},"content":" public static class EventFormatException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"techjay-c"},"content":" public EventFormatException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"techjay-c"},"content":" super(\"Event not in the correct format\");","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"techjay-c":98}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":"import duke.command.SearchCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"// Solution below adapted and inspired by https://chat.openai.com/share/7f037351-3be6-4105-b138-77f68d428c84","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" * Parses user input to create and return the corresponding command object.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" * Parses the user input command and returns the corresponding command object.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" * @param userInput The user\u0027s input command as a string.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" * @return A command object corresponding to the user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" * @throws DukeException If there is an issue parsing the command or if the command is invalid.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" public static Command parseCommand(String userInput) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" String[] split \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" String command \u003d split[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" String arguments \u003d userInput.replaceFirst(command, \"\").trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" switch (command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" case \"search\":","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" if (arguments.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.SearchException();","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" return new SearchCommand(arguments);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" int indexToDelete \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" return new DeleteCommand(indexToDelete);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" if (arguments.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.ToDoException();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":" return new AddCommand(AddCommand.TaskType.TODO, arguments);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":" if (arguments.isEmpty() || !arguments.contains(\"/from\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.EventException();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":" String userCommandE \u003d userInput.split(\" \")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"techjay-c"},"content":" String argsE \u003d userInput.replaceFirst(userCommandE, \"\").trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"techjay-c"},"content":" String[] splitTheArgumentsE \u003d argsE.split(\"/from\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"techjay-c"},"content":" if (splitTheArgumentsE.length !\u003d 2 || !splitTheArgumentsE[1].contains(\"/to\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.EventFormatException();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"techjay-c"},"content":" String theDescriptionE \u003d splitTheArgumentsE[0].trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"techjay-c"},"content":" String[] theDateTimeE \u003d splitTheArgumentsE[1].trim().split(\"/to\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"techjay-c"},"content":" String fromDateTime \u003d theDateTimeE[0].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"techjay-c"},"content":" String toDateTime \u003d theDateTimeE[1].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"techjay-c"},"content":" DateTimeValidator validatorE \u003d new DateTimeValidator(\"yyyy/MM/dd HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"techjay-c"},"content":" boolean isDateValidE \u003d validatorE.validateDate(fromDateTime) \u0026\u0026 validatorE.validateDate(toDateTime);","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"techjay-c"},"content":" if (isDateValidE) {","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"techjay-c"},"content":" LocalDateTime parsedFromDate \u003d LocalDateTime.parse(fromDateTime,","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"techjay-c"},"content":" DateTimeFormatter.ofPattern(\"yyyy/MM/dd HHmm\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"techjay-c"},"content":" LocalDateTime parsedToDate \u003d LocalDateTime.parse(toDateTime,","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"techjay-c"},"content":" DateTimeFormatter.ofPattern(\"yyyy/MM/dd HHmm\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"techjay-c"},"content":" return new AddCommand(AddCommand.TaskType.EVENT, theDescriptionE, parsedFromDate, parsedToDate);","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"techjay-c"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"techjay-c"},"content":" // Solution below adapted and inspired by https://chat.openai.com/share/b706b4df-ab30-4d0f-93eb-b85617616319","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"techjay-c"},"content":" if (arguments.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.DeadlineException();","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"techjay-c"},"content":" String userCommandD \u003d userInput.split(\" \")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"techjay-c"},"content":" String argsD \u003d userInput.replaceFirst(userCommandD, \"\").trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"techjay-c"},"content":" String[] splitTheArgumentsD \u003d argsD.split(\"/by\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"techjay-c"},"content":" if (splitTheArgumentsD.length !\u003d 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.DeadlineFormatException();","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"techjay-c"},"content":" String theDescriptionD \u003d splitTheArgumentsD[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"techjay-c"},"content":" String[] theDateTimeD \u003d splitTheArgumentsD[1].trim().split(\" \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"techjay-c"},"content":" String date \u003d theDateTimeD[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"techjay-c"},"content":" String time \u003d theDateTimeD[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"techjay-c"},"content":" DateTimeValidator validator \u003d new DateTimeValidator(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"techjay-c"},"content":" boolean isDateValid \u003d validator.validateDate(date + \" \" + time);","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"techjay-c"},"content":" if (isDateValid) {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"techjay-c"},"content":" LocalDateTime parsedDateTime \u003d LocalDateTime.parse(date + \" \" + time,","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"techjay-c"},"content":" DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"techjay-c"},"content":" return new AddCommand(AddCommand.TaskType.DEADLINE, theDescriptionD, parsedDateTime);","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"techjay-c"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"techjay-c"},"content":" if (arguments.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.UnmarkException();","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"techjay-c"},"content":" int indexToUnmark \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"techjay-c"},"content":" return new UnmarkCommand(indexToUnmark);","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"techjay-c"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"techjay-c"},"content":" if (arguments.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.MarkException();","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"techjay-c"},"content":" int indexToMark \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"techjay-c"},"content":" return new MarkCommand(indexToMark);","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"techjay-c"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"techjay-c"},"content":" throw new DukeException.NoSuchItemException();","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":124}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" * Handles saving and loading tasks to and from a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" private static String filePath \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" * @param filePath The file path for storing tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" // Solution below adapted and inspired by https://chat.openai.com/share/7f037351-3be6-4105-b138-77f68d428c84","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" * Saves a list of tasks to the file specified by the file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" * @param tasks The list of tasks to be saved.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" public static void saveTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" try (FileWriter writer \u003d new FileWriter(filePath)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" String taskType \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" if (task instanceof Event) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" taskType \u003d \"Event\";","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" } else if (task instanceof Todo) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" taskType \u003d \"Todo\";","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" taskType \u003d \"Deadline\";","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":" String statusIcon \u003d (task.getStatusIcon().equals(\"X\")) ? \"1\" : \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":" if (taskType.equals(\"Event\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":" LocalDateTime fromDateTime \u003d event.fromDateAndTime();","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"techjay-c"},"content":" LocalDateTime toDateTime \u003d event.toDateAndTime();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"techjay-c"},"content":" String formattedFromDateTime \u003d fromDateTime.format(DateTimeFormatter.ofPattern(\"MMMM d yyyy ha\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"techjay-c"},"content":" String formattedToDateTime \u003d toDateTime.format(DateTimeFormatter.ofPattern(\"MMMM d yyyy ha\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"techjay-c"},"content":" writer.write(\"E \" + \"| \" + statusIcon + \" | \" + event.description","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"techjay-c"},"content":" + \" | \" + formattedFromDateTime + \" - \" + formattedToDateTime + \"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"techjay-c"},"content":" } else if (taskType.equals(\"Deadline\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"techjay-c"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"techjay-c"},"content":" LocalDateTime dateTime \u003d deadline.getDateAndTime();","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"techjay-c"},"content":" String formattedDateTime \u003d dateTime.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mma\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"techjay-c"},"content":" writer.write(\"D \" + \"| \" + statusIcon + \" | \" + deadline.description","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"techjay-c"},"content":" + \" | \" + formattedDateTime + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"techjay-c"},"content":" } else if (taskType.equals(\"Todo\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"techjay-c"},"content":" Todo todo \u003d (Todo) task;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"techjay-c"},"content":" writer.write(\"T \" + \"| \" + statusIcon + \" | \" + todo.description + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"techjay-c"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Error writing to: \" + filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"techjay-c"},"content":" // Solution adapted and inspired by","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"techjay-c"},"content":" // https://stackoverflow.com/questions/3090761/how-to-create-a-new-file-together-with-missing-parent-directories","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"techjay-c"},"content":" // Solution below adapted and inspired by https://www.guru99.com/buffered-reader-in-java.html","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"techjay-c"},"content":" // Solution below adapted and inspired by https://chat.openai.com/share/4f6c03e6-99d5-47c0-8887-1762a36b15fb","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"techjay-c"},"content":" * Loads tasks from the file specified by the file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"techjay-c"},"content":" * @return An ArrayList of Task objects loaded from the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"techjay-c"},"content":" * @throws IOException If there is an issue reading from the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"techjay-c"},"content":" static ArrayList\u003cTask\u003e loadTasks() throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"techjay-c"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"techjay-c"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"techjay-c"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"techjay-c"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"techjay-c"},"content":" // Handling data file to be in a specific folder","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"techjay-c"},"content":" if (file.getParentFile() !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"techjay-c"},"content":" // Solution below adapted from","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"techjay-c"},"content":" // https://www.oreilly.com/library/view/java-cookbook/0596001703/ch10s10.html#:~:","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"techjay-c"},"content":" // text\u003dOf%20the%20two%20methods%20used,%2Fian%2Fbin%22).","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"techjay-c"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"techjay-c"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"techjay-c"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"techjay-c"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(filePath));","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"techjay-c"},"content":" String dataToWrite;","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"techjay-c"},"content":" while ((dataToWrite \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"techjay-c"},"content":" System.out.println(dataToWrite); // Debug line","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"techjay-c"},"content":" String[] sections \u003d dataToWrite.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"techjay-c"},"content":" if (sections.length \u003e\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"techjay-c"},"content":" String taskType \u003d sections[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"techjay-c"},"content":" String taskStatus \u003d sections[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"techjay-c"},"content":" String taskDescription \u003d sections[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"techjay-c"},"content":" String taskOtherInfo \u003d sections.length \u003e 3 ? sections[3] : \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"techjay-c"},"content":" // declares variable of type Task and initialize with null value","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"techjay-c"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"techjay-c"},"content":" boolean isDone \u003d taskStatus.equals(\"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"techjay-c"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"techjay-c"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"techjay-c"},"content":" String[] eventParts \u003d taskOtherInfo.trim().split(\"-\");","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"techjay-c"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMMM d yyyy ha\");","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"techjay-c"},"content":" LocalDateTime parsedFromStartDateTime \u003d LocalDateTime.parse(eventParts[0].trim(),","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"techjay-c"},"content":" formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"techjay-c"},"content":" LocalDateTime parsedFromEndDateTime \u003d LocalDateTime.parse(eventParts[1].trim(),","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"techjay-c"},"content":" formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"techjay-c"},"content":" if (eventParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"techjay-c"},"content":" task \u003d new Event(taskDescription, parsedFromStartDateTime, parsedFromEndDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"techjay-c"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"techjay-c"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"techjay-c"},"content":" DateTimeFormatter formatterD \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mma\");","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"techjay-c"},"content":" LocalDateTime dateTimeD \u003d LocalDateTime.parse(taskOtherInfo, formatterD);","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"techjay-c"},"content":" task \u003d new Deadline(taskDescription, dateTimeD);","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"techjay-c"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"techjay-c"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"techjay-c"},"content":" task \u003d new Todo(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"techjay-c"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"techjay-c"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"techjay-c"},"content":" task \u003d new Task(taskDescription, Task.Type.OTHERS);","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"techjay-c"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"techjay-c"},"content":" if (isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"techjay-c"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"techjay-c"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"techjay-c"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"techjay-c"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"techjay-c"},"content":" reader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"techjay-c"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Error reading from: \" + filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"techjay-c"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":163}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":" * Represents a task in the Duke application.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" * The type of the task (e.g., TODO, DEADLINE, EVENT).","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" public enum Type {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" TODO,","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" DEADLINE,","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" EVENT,","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" OTHERS","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" * The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" * Indicates whether the task is marked as done (true) or not done (false).","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" * The type of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" protected Type taskType;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" * Constructs a task with the specified description and task type.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" * @param taskType The type of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" public Task(String description, Type taskType) {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" * Gets the status icon of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" * @return \"X\" if the task is done, \" \" (a space) if the task is not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"techjay-c"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"techjay-c"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"techjay-c"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"techjay-c"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"techjay-c"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"techjay-c"},"content":" * Gets the description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"techjay-c"},"content":" * This method returns the description of the task as a String.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"techjay-c"},"content":" * @return The description of the task as a String.","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"techjay-c"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"techjay-c"},"content":" return this.description;","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"techjay-c":78}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":" * Manages a list of tasks in the Duke application.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" * The list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" * Constructs a new TaskList with an empty list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" * @param task The task to be deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" public void deleteTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" tasks.remove(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" * Sets the tasks in the TaskList to the provided list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" * @param tasks The list of tasks to set in the TaskList.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" // Set the tasks in the duke.TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" public void setTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"techjay-c"},"content":" public int numTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"techjay-c"},"content":" return tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"techjay-c"},"content":" * Retrieves a task from the list by its index.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"techjay-c"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"techjay-c"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"techjay-c"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"techjay-c"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"techjay-c"},"content":" * Returns the list of all tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"techjay-c"},"content":" * @return The list of all tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"techjay-c"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"techjay-c"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":79}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"// Solution below adapted and inspired by https://chat.openai.com/share/7f037351-3be6-4105-b138-77f68d428c84","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":" * Handles user interface-related operations for the Duke application.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":" * Provides methods for displaying messages and error messages to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" private static final String separators \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" private String text1 \u003d \" Hello! I\u0027m Novo\\n\" + \" What can I do for you?\\n\" + separators + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" private String text2 \u003d \" Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" * Displays the welcome text to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" public void displayWelcomeText() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators + \"\\n\" + text1);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" * Displays the goodbye text to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" public void displayGoodbyeText() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators + \"\\n\" + text2 + \"\\n\" + separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" * Shows an error message to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" * @param message The error message to display.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" public void showErrorMessage(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators + \"\\n\" + message + \"\\n\" + separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" * Displays a message when a task is successfully deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" * @param deletedTask The task that was deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" * @param remainingNumberTasks The number of tasks remaining in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" public void displayDeleteTask(Task deletedTask, int remainingNumberTasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\" + \"\\n\" + deletedTask.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Now you have \" + remainingNumberTasks + \" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":" * Displays a message when a new task is successfully added.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":" * @param newTask The task that was added.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":" * @param newNumber The new total number of tasks in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"techjay-c"},"content":" public void displayAddedTask(Task newTask, int newNumber) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\" + \"\\n\" + newTask.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Now you have \" + newNumber + \" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"techjay-c"},"content":" * Displays the list of tasks to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList containing the tasks to be displayed.","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"techjay-c"},"content":" public void displayTaskList(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"techjay-c"},"content":" for (int i \u003d 0; i \u003c taskList.numTasks(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"techjay-c"},"content":" System.out.println((i + 1) + \".\" + taskList.getTask(i).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"techjay-c"},"content":" * Displays a message when a task is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"techjay-c"},"content":" * @param markedTask The task that was marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"techjay-c"},"content":" public void displayMarked(Task markedTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\" + \"\\n\" + markedTask.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"techjay-c"},"content":" * Displays a message when a task is marked as not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"techjay-c"},"content":" * @param markedTask The task that was marked as not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"techjay-c"},"content":" public void displayUnmarked(Task markedTask) {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\" + \"\\n\" + markedTask.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"techjay-c"},"content":" * Displays a list of searched tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"techjay-c"},"content":" * This method takes an ArrayList of Task objects and prints them to the console,","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"techjay-c"},"content":" * numbering each task for easy reference. It also adds separators before and after","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"techjay-c"},"content":" * the list to visually separate it from other output.","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"techjay-c"},"content":" * @param searchedTask An ArrayList of Task objects containing the tasks to be displayed.","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"techjay-c"},"content":" public void displaySearched(ArrayList\u003cTask\u003e searchedTask) {","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"techjay-c"},"content":" for (int i \u003d 0; i \u003c searchedTask.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"techjay-c"},"content":" System.out.println((i + 1) + \".\" + searchedTask.get(i).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"techjay-c"},"content":" System.out.println(separators);","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"techjay-c"},"content":" * Displays an error message for an empty todo description.","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"techjay-c"},"content":" public void printToDoException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"techjay-c"},"content":" * Displays an error message for an unrecognized command.","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"techjay-c"},"content":" public void printNoSuchElementException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"techjay-c"},"content":" * Displays an error message for an empty event description.","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"techjay-c"},"content":" public void printEventException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"techjay-c"},"content":" * Displays an error message for an empty deadline description.","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"techjay-c"},"content":" public void printDeadlineException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"techjay-c"},"content":" * Displays an error message for an unspecified task to mark.","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"techjay-c"},"content":" public void printMarkException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! The task to mark must be specified.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"techjay-c"},"content":" * Displays an error message for an unspecified task to unmark.","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"techjay-c"},"content":" public void printUnmarkException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! The task to unmark must be specified.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"techjay-c"},"content":" * Displays an error message for a search command in the wrong format.","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"techjay-c"},"content":" public void printSearchException() {","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! The task to search must be specified.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":180,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":181,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":182,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":183,"author":{"gitId":"techjay-c"},"content":" * Displays an error message for a deadline task in the wrong format.","lastModifiedDate":"2023-09-05"},{"lineNumber":184,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":185,"author":{"gitId":"techjay-c"},"content":" public void printDeadlineFormatException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! Enter in the format: deadline (task) /by dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":192,"author":{"gitId":"techjay-c"},"content":" * Displays an error message for a event task in the wrong format.","lastModifiedDate":"2023-09-03"},{"lineNumber":193,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":194,"author":{"gitId":"techjay-c"},"content":" public void printEventFormatException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"☹ OOPS!!! Enter in the format: \\n event (task) /from yyyy/MM/dd HHmm /to yyyy/MM/dd HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"techjay-c"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":199}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import duke.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"import duke.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"// Solution below adapted and inspired by https://chat.openai.com/share/7f037351-3be6-4105-b138-77f68d428c84","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" * Represents a command to add tasks to the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" * This command can handle adding different types of tasks such as Todo, Deadline, and Event.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" * Enumerates the types of tasks that can be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" public enum TaskType {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" private String taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" private TaskType taskType;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" private LocalDateTime parsedDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" private LocalDateTime parsedFromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" private LocalDateTime parsedToDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" // Use Method Overloading for different Commands to be added","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" * Constructs an AddCommand for a Todo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" * @param taskType The type of the task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" public AddCommand(TaskType taskType, String taskDescription) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" * Constructs an AddCommand for a Deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":" * @param taskType The type of the task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":" * @param parsedDateTime The parsed date and time for the deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":" public AddCommand(TaskType taskType, String taskDescription, LocalDateTime parsedDateTime) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"techjay-c"},"content":" this.parsedDateTime \u003d parsedDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"techjay-c"},"content":" * Constructs an AddCommand for an Event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"techjay-c"},"content":" * @param taskType The type of the task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"techjay-c"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"techjay-c"},"content":" * @param parsedFromDate The parsed start date and time for the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"techjay-c"},"content":" * @param parsedToDate The parsed end date and time for the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"techjay-c"},"content":" public AddCommand(TaskType taskType, String taskDescription, LocalDateTime parsedFromDate,","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"techjay-c"},"content":" LocalDateTime parsedToDate) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"techjay-c"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"techjay-c"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"techjay-c"},"content":" this.parsedFromDate \u003d parsedFromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"techjay-c"},"content":" this.parsedToDate \u003d parsedToDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"techjay-c"},"content":" * Executes the AddCommand to add a task to the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"techjay-c"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"techjay-c"},"content":" * @param storage The storage handler for saving tasks to a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"techjay-c"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"techjay-c"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"techjay-c"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"techjay-c"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"techjay-c"},"content":" case TODO:","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"techjay-c"},"content":" newTask \u003d new Todo(taskDescription);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"techjay-c"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"techjay-c"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"techjay-c"},"content":" newTask \u003d new Deadline(taskDescription, parsedDateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"techjay-c"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"techjay-c"},"content":" case EVENT:","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"techjay-c"},"content":" newTask \u003d new Event(taskDescription, parsedFromDate, parsedToDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"techjay-c"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"techjay-c"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"techjay-c"},"content":" newTask \u003d new Task(taskDescription, Task.Type.OTHERS);","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"techjay-c"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"techjay-c"},"content":" ui.displayAddedTask(newTask, taskList.numTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"techjay-c"},"content":" storage.saveTasks(taskList.getAllTasks()); // Save the updated task list","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"techjay-c"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"techjay-c"},"content":" ui.showErrorMessage(\"Error adding task.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":107}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" * Represents a command to exit the Duke application.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" * This command displays a goodbye message and terminates the application.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" * Executes the ByeCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList object that stores the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" * @param ui The Ui object responsible for user interface interactions.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" * @param storage The Storage object responsible for reading and writing data to a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" ui.displayGoodbyeText();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":25}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import duke.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"// Solution below adapted and inspired by https://chat.openai.com/share/7f037351-3be6-4105-b138-77f68d428c84","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" * The DeleteCommand is responsible for removing a task from the task list based on its index.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" private int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" * Constructs a DeleteCommand with the specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" * Executes the DeleteCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" * This method attempts to delete the task at the specified index from the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" * If the index is valid, the task is deleted, and the task list and storage are updated.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" * If the index is invalid, an error message is displayed.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList object that stores the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" * @param ui The Ui object responsible for user interface interactions.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" * @param storage The Storage object responsible for reading and writing data to a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" Task taskToDelete \u003d taskList.getTask(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" taskList.deleteTask(taskToDelete);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" ui.displayDeleteTask(taskToDelete, taskList.numTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" storage.saveTasks(taskList.getAllTasks());","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" ui.showErrorMessage(\"Invalid task index.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":47}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" * Represents a command to list all tasks in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" * The ListCommand is responsible for displaying the entire list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" * Executes the ListCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" * This method displays the list of tasks stored in the TaskList object using the Ui object.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList object that stores the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" * @param ui The Ui object responsible for user interface interactions.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" * @param storage The Storage object responsible for reading and writing data to a file (not used in this command).","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" ui.displayTaskList(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"techjay-c":27}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import duke.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" * Represents a command to mark a task as done in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" * The MarkCommand is responsible for marking a specific task as completed.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" * Constructs a MarkCommand with the specified task index.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" * @param taskIndex The index of the task to be marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" public MarkCommand(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" * Executes the MarkCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" * This method marks the task at the specified index as done and updates the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" * If the index is invalid, an error message is displayed.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList object that stores the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" * @param ui The Ui object responsible for user interface interactions.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" * @param storage The Storage object responsible for reading and writing data to a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" Task taskToMark \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" taskToMark.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" ui.displayMarked(taskToMark);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" storage.saveTasks(taskList.getAllTasks()); // Save the updated task list","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" ui.showErrorMessage(\"Invalid task index.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":56}},{"path":"src/main/java/duke/command/SearchCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import duke.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"import duke.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":"// Solution below adapted and inspired from https://chat.openai.com/share/3bd2c2a8-57c4-480a-9055-646c61983a60","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" * Represents a command to search for a task in the task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" * The SearchCommand is responsible for finding tasks that match the search string.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":"public class SearchCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" private String taskToFind;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" * Constructs a SearchCommand with the specified keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" * @param taskToFind The keyword to search for in task descriptions.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" public SearchCommand(String taskToFind) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" this.taskToFind \u003d taskToFind;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" * Executes the search for tasks containing the specified keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList containing all tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" * @param ui The Ui object for user interface interactions.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" * @param storage The Storage object for data storage operations.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" ArrayList\u003cTask\u003e matchedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" for (Task task : taskList.getAllTasks()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" if (task.getDescription().contains(taskToFind)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" matchedTasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" if (matchedTasks.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" ui.showErrorMessage(\"No such task found.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" ui.displaySearched(matchedTasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"techjay-c":50}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import duke.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" * Represents a command to unmark a task as not done in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" * The UnmarkCommand is responsible for marking a specific task as not done (incomplete).","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" * Constructs an UnmarkCommand with the specified task index.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" * @param taskIndex The index of the task to be unmarked (marked as not done).","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" private int taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" public UnmarkCommand(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" * Executes the UnmarkCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" * This method marks the task at the specified index as not done (incomplete) and updates the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" * If the index is invalid, an error message is displayed.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" * @param taskList The TaskList object that stores the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" * @param ui The Ui object responsible for user interface interactions.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" * @param storage The Storage object responsible for reading and writing data to a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" Task tasktoUnmark \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" tasktoUnmark.markAsNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" ui.displayUnmarked(tasktoUnmark);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" storage.saveTasks(taskList.getAllTasks()); // Save the updated task list","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" ui.showErrorMessage(\"Invalid task index.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"techjay-c":46}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" * Represents a task with a specific deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" * A Deadline task contains a description and a deadline date and time.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" private LocalDateTime dateAndTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" * Constructs a Deadline task with the specified description and deadline date and time.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" * @param description The description of the Deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" * @param dateAndTime The deadline date and time.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" public Deadline(String description, LocalDateTime dateAndTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" super(description, Type.DEADLINE);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" this.dateAndTime \u003d dateAndTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" * Returns a string representation of the Deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" * The string includes the task type, status icon, description, and deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" * @return A formatted string representing the Deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" // eg 2nd Dec 2019 6pm","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy h:mma\");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" return \"[D]\" + \"[\" + getStatusIcon() + \"] \" + description + \" (by: \" + dateAndTime.format(formatter) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" * Gets the date and time associated with this object.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" * @return The date and time as a LocalDateTime object.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" public LocalDateTime getDateAndTime() {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" return this.dateAndTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"techjay-c":48}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import duke.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":" * Represents an event task that spans a specific time period.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" * An Event task contains a description, a start date and time, and an end date and time.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" private LocalDateTime fromDateAndTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" private LocalDateTime toDateAndTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" * Constructs an Event task with the specified description, start date and time, and end date and time.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" * @param description The description of the Event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" * @param fromDateAndTime The start date and time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" * @param toDateAndTime The end date and time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" public Event(String description, LocalDateTime fromDateAndTime, LocalDateTime toDateAndTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" super(description, Type.EVENT);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" this.fromDateAndTime \u003d fromDateAndTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" this.toDateAndTime \u003d toDateAndTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" * Returns a string representation of the Event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" * The string includes the task type, status icon, description, and event time period.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" * @return A formatted string representing the Event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"techjay-c"},"content":" // example Oct 15 2019 2pm","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"techjay-c"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMMM d yyyy ha\");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"techjay-c"},"content":" return \"[E]\" + \"[\" + getStatusIcon() + \"] \" + description + \" (from: \" + fromDateAndTime.format(formatter)","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"techjay-c"},"content":" + \" to: \" + toDateAndTime.format(formatter) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"techjay-c"},"content":" * Gets the event start date and time associated with this object.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"techjay-c"},"content":" * @return The date and time as a LocalDateTime object.","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"techjay-c"},"content":" public LocalDateTime fromDateAndTime() {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"techjay-c"},"content":" return this.fromDateAndTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"techjay-c"},"content":" * Gets the event end date and time associated with this object.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"techjay-c"},"content":" * @return The date and time as a LocalDateTime object.","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"techjay-c"},"content":" public LocalDateTime toDateAndTime() {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"techjay-c"},"content":" return this.toDateAndTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"techjay-c":61}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import duke.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":" * Represents a to-do task with a description.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":" * A Todo task contains a description of the task to be done.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" * Constructs a Todo task with the specified description.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" * @param description The description of the Todo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" super(description, Type.TODO);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" * Returns a string representation of the Todo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" * The string includes the task type, status icon, and description.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" * @return A formatted string representing the Todo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" return \"[T]\" + \"[\" + getStatusIcon() + \"]\" + \" \" + description;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"techjay-c":30}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import static duke.Task.Type.TODO;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" * Test cases for the TaskList class.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" * Tests adding a task to the TaskList.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" public void testAddTask() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" Task task \u003d new Task(\"Test Task\", TODO);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" assertEquals(1, taskList.numTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":" assertEquals(task, taskList.getTask(0));","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"techjay-c"},"content":" * Tests marking a task as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"techjay-c"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"techjay-c"},"content":" public void testMarkAsDone() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"techjay-c"},"content":" Task task \u003d new Task(\"Sample Task\", TODO);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"techjay-c"},"content":" assertFalse(task.isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"techjay-c"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"techjay-c"},"content":" assertTrue(task.isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"techjay-c":37}},{"path":"src/test/java/duke/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":" * Test cases for the Todo class.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"techjay-c"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"techjay-c"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"techjay-c"},"content":" * Tests the toString method of Todo when it\u0027s not done and when it\u0027s done.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"techjay-c"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"techjay-c"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"techjay-c"},"content":" public void testTodoToString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"techjay-c"},"content":" Todo todo \u003d new Todo(\"Sample Todo\");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"techjay-c"},"content":" assertEquals(\"[T][ ] Sample Todo\", todo.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"techjay-c"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"techjay-c"},"content":" assertEquals(\"[T][X] Sample Todo\", todo.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"techjay-c"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"techjay-c"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"techjay-c":24}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"techjay-c"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"techjay-c"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"techjay-c"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"techjay-c"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"techjay-c"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"techjay-c"},"content":"todo join sports club","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"techjay-c"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"techjay-c"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"techjay-c"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"techjay-c"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"techjay-c"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"techjay-c"},"content":"delete 3","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"techjay-c":12}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"techjay-c"},"content":"diff ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":33,"techjay-c":1}}] diff --git a/techjay-c_ip_master/commits.json b/techjay-c_ip_master/commits.json index b737ed3d..3b023e6f 100644 --- a/techjay-c_ip_master/commits.json +++ b/techjay-c_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"techjay-c":[{"date":"2023-08-23","commitResults":[{"hash":"cd35d938689c0ce6099ca4467e867cca8ae5469b","isMergeCommit":false,"messageTitle":"Duke Level 0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"57e062d13b3a4eb9eaa50095ae507a7c8818dffe","isMergeCommit":false,"messageTitle":"Duke Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":6}}},{"hash":"a3f54684ba96a56b0ba1cf1dfbc7592e0706eda7","isMergeCommit":false,"messageTitle":"Duke Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":10}}},{"hash":"ef7b798314c2a8a54e206f52b8ffdb4403a491b8","isMergeCommit":false,"messageTitle":"Duke Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":5}}},{"hash":"4e8e5438db6c1c11064e0b479010a0ad23f3b187","isMergeCommit":false,"messageTitle":"Duke Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"517bd5d0faf380cf1a5082f690475d2110089dc5","isMergeCommit":false,"messageTitle":"Duke A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":27,"deletions":35},"sh":{"insertions":2,"deletions":6}}},{"hash":"6ca5ad82f593eafa4d195286efe0ba59a9602c9f","isMergeCommit":false,"messageTitle":"Duke Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":103,"deletions":77}}},{"hash":"0201e449053450c6d4bde0c841d6ce0edfa91307","isMergeCommit":false,"messageTitle":"Duke Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":41,"deletions":16}}},{"hash":"68779fa38c9902009e18c79a4ddfaa6edde4b363","isMergeCommit":false,"messageTitle":"Duke A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":10}}}]},{"date":"2023-08-29","commitResults":[{"hash":"1ccdcb1581e86938488b21581caf9c3135d67359","isMergeCommit":false,"messageTitle":"Duke Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":147,"deletions":8}}}]},{"date":"2023-08-30","commitResults":[{"hash":"0cfa6192e30c64cb0043eb60c28f593a686f4a99","isMergeCommit":false,"messageTitle":"Duke Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":112,"deletions":48}}}]},{"date":"2023-08-31","commitResults":[{"hash":"98916b45e95551ca9d460a688d4fecf4f583d2d7","isMergeCommit":false,"messageTitle":"Duke A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":573,"deletions":163}}},{"hash":"d23263a20b7ab7f2c73ef6c3ddb9b5da26b36aa3","isMergeCommit":false,"messageTitle":"Duke A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":142}}},{"hash":"d3563ddd55fa93fb805d1f9e8ec2353fc921f2ee","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/nus-cs2103-AY2324S1/ip","messageBody":"* \u0027add-gradle-support\u0027 of https://github.com/nus-cs2103-AY2324S1/ip:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"537de4e36e17c79da5ba4f3e08b613322e572f23","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":3,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"e3ae82e209dd6f092191d4ccb8f2bd48631f3324","isMergeCommit":false,"messageTitle":"Add JUnit tests for TaskList and Todo","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":0}}},{"hash":"44d88218e8463a77a5f8dbf68e7ad23ba78266ce","isMergeCommit":false,"messageTitle":"Created JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"0c0fd73972b4eaa68897d3040f6e89730d6a21a7","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to all classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":436,"deletions":15}}},{"hash":"1bdb7c21e160973d41aa60f74fe0701f2f16c54e","isMergeCommit":false,"messageTitle":"Update classes to comply with coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":29}}}]},{"date":"2023-09-04","commitResults":[{"hash":"c8acced04e35ad895cb3a8d4546fd4e14db7cd29","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ed3767e3719b1d403b957971d73fa527b214d9b1","isMergeCommit":false,"messageTitle":"Add Search feature to allow users to search for specific task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"99eb35b16fb799dcb4bcda0081cb84f89fb2592c","isMergeCommit":false,"messageTitle":"Add remaining files for Search feature - This commit includes the files that were missed in the previous \"Add Search feature\" commit.","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":69,"deletions":5}}},{"hash":"4a4c77e53ea3a77159ae8c07771e48190bda501f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"techjay-c":{"java":1398,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":2,"txt":17}},"authorContributionVariance":{"techjay-c":61141.492},"authorDisplayNameMap":{"techjay-c":"CS2103T-W10-3 CHEW..ARYL"}} +{"authorDailyContributionsMap":{"techjay-c":[{"date":"2023-08-23","commitResults":[{"hash":"cd35d938689c0ce6099ca4467e867cca8ae5469b","isMergeCommit":false,"messageTitle":"Duke Level 0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"57e062d13b3a4eb9eaa50095ae507a7c8818dffe","isMergeCommit":false,"messageTitle":"Duke Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":6}}},{"hash":"a3f54684ba96a56b0ba1cf1dfbc7592e0706eda7","isMergeCommit":false,"messageTitle":"Duke Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":10}}},{"hash":"ef7b798314c2a8a54e206f52b8ffdb4403a491b8","isMergeCommit":false,"messageTitle":"Duke Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":5}}},{"hash":"4e8e5438db6c1c11064e0b479010a0ad23f3b187","isMergeCommit":false,"messageTitle":"Duke Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"517bd5d0faf380cf1a5082f690475d2110089dc5","isMergeCommit":false,"messageTitle":"Duke A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":27,"deletions":35},"sh":{"insertions":2,"deletions":6}}},{"hash":"6ca5ad82f593eafa4d195286efe0ba59a9602c9f","isMergeCommit":false,"messageTitle":"Duke Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":103,"deletions":77}}},{"hash":"0201e449053450c6d4bde0c841d6ce0edfa91307","isMergeCommit":false,"messageTitle":"Duke Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":41,"deletions":16}}},{"hash":"68779fa38c9902009e18c79a4ddfaa6edde4b363","isMergeCommit":false,"messageTitle":"Duke A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":10}}}]},{"date":"2023-08-29","commitResults":[{"hash":"1ccdcb1581e86938488b21581caf9c3135d67359","isMergeCommit":false,"messageTitle":"Duke Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":147,"deletions":8}}}]},{"date":"2023-08-30","commitResults":[{"hash":"0cfa6192e30c64cb0043eb60c28f593a686f4a99","isMergeCommit":false,"messageTitle":"Duke Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":112,"deletions":48}}}]},{"date":"2023-08-31","commitResults":[{"hash":"98916b45e95551ca9d460a688d4fecf4f583d2d7","isMergeCommit":false,"messageTitle":"Duke A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":573,"deletions":163}}},{"hash":"d23263a20b7ab7f2c73ef6c3ddb9b5da26b36aa3","isMergeCommit":false,"messageTitle":"Duke A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":142}}},{"hash":"d3563ddd55fa93fb805d1f9e8ec2353fc921f2ee","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/nus-cs2103-AY2324S1/ip","messageBody":"* \u0027add-gradle-support\u0027 of https://github.com/nus-cs2103-AY2324S1/ip:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"537de4e36e17c79da5ba4f3e08b613322e572f23","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":3,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"e3ae82e209dd6f092191d4ccb8f2bd48631f3324","isMergeCommit":false,"messageTitle":"Add JUnit tests for TaskList and Todo","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":0}}},{"hash":"44d88218e8463a77a5f8dbf68e7ad23ba78266ce","isMergeCommit":false,"messageTitle":"Created JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"0c0fd73972b4eaa68897d3040f6e89730d6a21a7","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to all classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":436,"deletions":15}}},{"hash":"1bdb7c21e160973d41aa60f74fe0701f2f16c54e","isMergeCommit":false,"messageTitle":"Update classes to comply with coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":29}}}]},{"date":"2023-09-04","commitResults":[{"hash":"c8acced04e35ad895cb3a8d4546fd4e14db7cd29","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ed3767e3719b1d403b957971d73fa527b214d9b1","isMergeCommit":false,"messageTitle":"Add Search feature to allow users to search for specific task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"99eb35b16fb799dcb4bcda0081cb84f89fb2592c","isMergeCommit":false,"messageTitle":"Add remaining files for Search feature - This commit includes the files that were missed in the previous \"Add Search feature\" commit.","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":69,"deletions":5}}},{"hash":"4a4c77e53ea3a77159ae8c07771e48190bda501f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"7e5620e4b79caf3e9ec2f5ed8a9f46924885fa59","isMergeCommit":false,"messageTitle":"Update files to adhere to coding style requirements","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":18,"deletions":0},"txt":{"insertions":1,"deletions":1},"java":{"insertions":261,"deletions":203}}}]}]},"authorFileTypeContributionMap":{"techjay-c":{"java":1456,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":20,"txt":17}},"authorContributionVariance":{"techjay-c":63757.414},"authorDisplayNameMap":{"techjay-c":"CS2103T-W10-3 CHEW..ARYL"}} diff --git a/teoks0199_ip_master/authorship.json b/teoks0199_ip_master/authorship.json index 342dc57e..fb8f848d 100644 --- a/teoks0199_ip_master/authorship.json +++ b/teoks0199_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":"teoks0199"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"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":"teoks0199"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"teoks0199":7,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"T | N | Homework","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"D | Y | Project | 2023-11-11","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"E | N | Midterms | 2023-10-11 | 2023-10-12","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"E | N | Finals | 2023-11-11 | 2023-11-12","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"T | N | read book","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"T | N | return book","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":"D | N | write book | 2022-11-11","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"E | N | book fair | 2000-11-11 | 2000-11-11","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"teoks0199":8}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":" * Program to run a task manager that can add, delete and mark tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" private static ArrayList\u003cTask\u003e list \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" * Constructor to start the program.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":" * @param filePath The file path of the saved task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" public Duke(Path filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" tasks \u003d new TaskList(storage.loadTaskList());","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" * Runs the program.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" ui.greet();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" Parser parser \u003d new Parser(ui, tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" parser.parse(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" while (!parser.isDone()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":" input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" parser.parse(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":" storage.updateTaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":" * Main function that starts the program loading in the saved task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" * @param args The command line arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":" new Duke(Paths.get(\".\", \"data\", \"duke.txt\")).run(); // ./data/duke.txt","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"teoks0199":53,"-":3}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":" * Used to handle exceptions specific to Duke.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":" * Constructor for creating a DukeException.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":" * @param e Error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" public DukeException(String e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":" super(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"teoks0199":17}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":" * Used to parse user input into appropriate commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":" private boolean finish;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" * Constructor to create a Parser.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" * @param ui Instance to handle the printing of user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":" * @param tasks Instance of TaskList to handle commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" public Parser(Ui ui, TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" this.finish \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" * Parses the user input and calls the appropriate task command.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" * @param s User input picked up by the scanner.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" public void parse(String s) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":" String[] input \u003d s.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" String command \u003d input[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" ui.horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":" if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" tasks.showList(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" tasks.markTask(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" tasks.unmarkTask(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" tasks.deleteTask(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":" tasks.addToDo(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":" } else if (command.equals(\"find\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":" tasks.find(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" } else if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" this.finish \u003d true;","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":" ui.bye();","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":" ui.oops();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"teoks0199"},"content":" ui.horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"teoks0199"},"content":" * Indicates if parsing should stop.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"teoks0199"},"content":" * @return A boolean value to indicate when to stop asking for user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"teoks0199"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"teoks0199"},"content":" return finish;","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"teoks0199":67}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":" * Used to handle loading and saving of task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" private Path filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" * Constructor to create a Storage object.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" * @param filePath The file path of the saved task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" public Storage(Path filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" * Loads a saved task list if it exists.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":" * @return An ArrayList that was saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" public ArrayList\u003cTask\u003e loadTaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":" // Create the directory if it doesn\u0027t exist","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" Path parentDirectory \u003d filePath.getParent();","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" if (!Files.exists(parentDirectory)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":" Files.createDirectories(parentDirectory);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Parent directories created: \" + parentDirectory.toAbsolutePath());","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":" // Create the file if it doesn\u0027t exist","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" if (!Files.exists(filePath)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" File created: \" + filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"teoks0199"},"content":" // Read the existing content from the file","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"teoks0199"},"content":" BufferedReader reader \u003d Files.newBufferedReader(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"teoks0199"},"content":" String nextLine;","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"teoks0199"},"content":" while ((nextLine \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"teoks0199"},"content":" Task toAdd \u003d stringToTask(nextLine);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"teoks0199"},"content":" if (!toAdd.equals(null)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"teoks0199"},"content":" list.add(toAdd);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"teoks0199"},"content":" reader.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"teoks0199"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Data file corrupted.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"teoks0199"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"teoks0199"},"content":" } finally {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"teoks0199"},"content":" return list;","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"teoks0199"},"content":" * Updates the hard drive with the current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"teoks0199"},"content":" public void updateTaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"teoks0199"},"content":" // Create the directory if it doesn\u0027t exist","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"teoks0199"},"content":" Path parentDirectory \u003d filePath.getParent();","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"teoks0199"},"content":" if (!Files.exists(parentDirectory)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"teoks0199"},"content":" Files.createDirectories(parentDirectory);","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Parent directories created: \" + parentDirectory.toAbsolutePath());","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"teoks0199"},"content":" // Create the file if it doesn\u0027t exist","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"teoks0199"},"content":" if (!Files.exists(filePath)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"teoks0199"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" File created: \" + filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"teoks0199"},"content":" // Write new content to the file","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"teoks0199"},"content":" StringBuilder toWrite \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"teoks0199"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"teoks0199"},"content":" toWrite.append(list.get(i).taskToString());","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"teoks0199"},"content":" toWrite.append(\"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"teoks0199"},"content":" BufferedWriter writer \u003d Files.newBufferedWriter(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"teoks0199"},"content":" writer.write(toWrite.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"teoks0199"},"content":" writer.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"teoks0199"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" An error occurred: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"teoks0199"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"teoks0199"},"content":" * Converts a string representation of a task to a Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"teoks0199"},"content":" * @param s String representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"teoks0199"},"content":" * @return The task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"teoks0199"},"content":" * @throws DukeException Throws DukeException if data file is corrupted.","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"teoks0199"},"content":" public Task stringToTask(String s) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"teoks0199"},"content":" String[] details \u003d s.split(\"[|]\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"teoks0199"},"content":" String type \u003d details[0].strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"teoks0199"},"content":" Task t;","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"teoks0199"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"teoks0199"},"content":" t \u003d new ToDo(details[2].strip());","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"teoks0199"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"teoks0199"},"content":" t \u003d new Deadline(details[2].strip(), LocalDate.parse(details[3].strip()));","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"teoks0199"},"content":" } else if (type.equals(\"E\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"teoks0199"},"content":" t \u003d new Event(details[2].strip(),","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"teoks0199"},"content":" LocalDate.parse(details[3].strip()), LocalDate.parse(details[4].strip()));","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"teoks0199"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"teoks0199"},"content":" throw new DukeException(\" Data file corrupted.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"teoks0199"},"content":" if (details[1].strip().equals(\"Y\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"teoks0199"},"content":" t.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"teoks0199"},"content":" return t;","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"teoks0199"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"teoks0199"},"content":" throw new DukeException(\" Data file corrupted.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"teoks0199":135}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":" * Used to add, delete, mark, show and find tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" * Constructor to create a TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" * @param taskList The previously saved task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" * Displays the current list to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" * @param input User input.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" public void showList(String[] input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" if (!(input.length \u003d\u003d 1 || input[1].strip().equals(\"\"))) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":" throw new DukeException(\" Did you mean list?\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Here are the tasks in your list:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":" System.out.println(String.format(\" %d.%s\",","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" i + 1, taskList.get(i).toString()));","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" * Marks the indicated task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" * @param input User input.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"teoks0199"},"content":" public void markTask(String[] input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"teoks0199"},"content":" int toMark \u003d Integer.parseInt(input[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"teoks0199"},"content":" Task task \u003d taskList.get(toMark - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"teoks0199"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"teoks0199"},"content":" System.out.println(String.format(\" %s\", task.toString()));","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"teoks0199"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Task does not exist.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"teoks0199"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Please enter a number e.g., mark 1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"teoks0199"},"content":" * Marks the indicated task as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"teoks0199"},"content":" * @param input User input.","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"teoks0199"},"content":" public void unmarkTask(String[] input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"teoks0199"},"content":" int toMark \u003d Integer.parseInt(input[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"teoks0199"},"content":" Task task \u003d taskList.get(toMark - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"teoks0199"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"teoks0199"},"content":" System.out.println(String.format(\" %s\", task.toString()));","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"teoks0199"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Task does not exist.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"teoks0199"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Please enter a number e.g., unmark 1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"teoks0199"},"content":" * Deletes the indicated task.","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"teoks0199"},"content":" * @param input User input.","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"teoks0199"},"content":" public void deleteTask(String[] input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"teoks0199"},"content":" int toDelete \u003d Integer.parseInt(input[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"teoks0199"},"content":" Task task \u003d taskList.get(toDelete - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"teoks0199"},"content":" System.out.println(String.format(\" %s\", task.toString()));","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"teoks0199"},"content":" taskList.remove(toDelete - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Number of tasks: \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"teoks0199"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Task does not exist.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"teoks0199"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Please enter a number e.g., delete 1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"teoks0199"},"content":" * Adds an Event to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"teoks0199"},"content":" * @param input User input.","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"teoks0199"},"content":" public void addEvent(String[] input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"teoks0199"},"content":" String[] s1 \u003d input[1].split(\"/from\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"teoks0199"},"content":" String[] s2 \u003d s1[1].split(\"/to\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"teoks0199"},"content":" String desc \u003d s1[0].strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"teoks0199"},"content":" String from \u003d s2[0].strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"teoks0199"},"content":" String to \u003d s2[1].strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"teoks0199"},"content":" if (desc.equals(\"\") || from.equals(\"\") || to.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"teoks0199"},"content":" throw new DukeException(\" Format: event description /from yyyy-mm-dd /to yyyy-mm-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"teoks0199"},"content":" Event e \u003d new Event(desc, LocalDate.parse(from), LocalDate.parse(to));","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"teoks0199"},"content":" taskList.add(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" \" + e.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Number of tasks: \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"teoks0199"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"teoks0199"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Format: event description /from yyyy-mm-dd /to yyyy-mm-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"teoks0199"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Enter valid date yyyy-mm-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"teoks0199"},"content":" * Adds a Deadline to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"teoks0199"},"content":" * @param input User input.","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"teoks0199"},"content":" public void addDeadline(String[] input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"teoks0199"},"content":" String[] s \u003d input[1].split(\"/by\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"teoks0199"},"content":" String desc \u003d s[0].strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"teoks0199"},"content":" String deadline \u003d s[1].strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"teoks0199"},"content":" if (desc.equals(\"\") || deadline.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"teoks0199"},"content":" throw new DukeException(\" Format: deadline description /by yyyy-mm-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"teoks0199"},"content":" Deadline d \u003d new Deadline(desc, LocalDate.parse(deadline));","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"teoks0199"},"content":" taskList.add(d);","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" \" + d.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Number of tasks: \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"teoks0199"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"teoks0199"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Format: deadline description /by yyyy-mm-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"teoks0199"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Enter valid date yyyy-mm-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"teoks0199"},"content":" * Adds a ToDo to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"teoks0199"},"content":" * @param input User input.","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"teoks0199"},"content":" public void addToDo(String[] input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"teoks0199"},"content":" String desc \u003d input[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"teoks0199"},"content":" if (desc.strip().equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"teoks0199"},"content":" throw new DukeException(\" ☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"teoks0199"},"content":" ToDo t \u003d new ToDo(desc);","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"teoks0199"},"content":" taskList.add(t);","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" \" + t.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Number of tasks: \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"teoks0199"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" ☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":186,"author":{"gitId":"teoks0199"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":189,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"teoks0199"},"content":" * Displays all tasks in the list containing the keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"teoks0199"},"content":" * @param input User input.","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"teoks0199"},"content":" public void find(String[] input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"teoks0199"},"content":" String keyword \u003d input[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"teoks0199"},"content":" if (keyword.strip().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"teoks0199"},"content":" throw new DukeException(\" What do you want me to find?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"teoks0199"},"content":" int counter \u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"teoks0199"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"teoks0199"},"content":" String s \u003d taskList.get(i).toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"teoks0199"},"content":" if (s.contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"teoks0199"},"content":" System.out.println(String.format(\" %d.%s\", counter, s));","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"teoks0199"},"content":" counter++;","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"teoks0199"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" What do you want me to find?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"teoks0199"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"teoks0199":217}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":" * Used to handle user interface output.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":" private String line \u003d \" ______________________________________________\";","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":" * Displays a greeting message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" public void greet() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":" System.out.println(line + \"\\n Hello, I\u0027m your task manager :)\\n What can I do for you?\\n\" + line);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" * Displays a goodbye message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" public void bye() {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" * Displays a horizontal line.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" public void horizontalLine() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" * Displays an error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" public void oops() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" ☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"teoks0199":38}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":" * Encapsulates a Deadline task that can be added to the task manager.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":" private DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d-MMM-yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" * Deadline of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" * Constructor to create a Deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" * @param description Description of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" * @param by Deadline of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" * @return A String representing the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formatter.format(by) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the deadline to be saved in the hard disk.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" * @return A String representing the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" public String taskToString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":" return \"D | \" + super.taskToString() + \" | \" + by;","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":" * Compares this to another object to check if they are the same task.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" * @param o Object to compare with.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":" * @return True if they are the same task and false if not.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"teoks0199"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"teoks0199"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"teoks0199"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"teoks0199"},"content":" if (!(o instanceof Deadline)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"teoks0199"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"teoks0199"},"content":" Deadline c \u003d (Deadline) o;","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"teoks0199"},"content":" return this.toString().equals(c.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"teoks0199":65}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":" * Encapsulates an Event task that can be added to the task manager.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" private DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d-MMM-yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":" * Starting date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" private LocalDate from;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" * Ending date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":" private LocalDate to;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" * Constructor to create an Event.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" * @param from Starting date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" * @param to Ending date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" public Event(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" * @return A String representing the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" return \"[E]\" + super.toString() + \" (from: \" + formatter.format(from) + \" to: \" + formatter.format(to) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the event to be saved in the hard disk.","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":" * @return A String representing the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":" public String taskToString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" return \"E | \" + super.taskToString() + \" | \" + from + \" | \" + to;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"teoks0199":55}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":" * Encapsulates a task that can be added to the task manager.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":" * Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":" * Completion status of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" * Constructor to create a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" * @param description The desciption of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the status icon of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" * @return The status icon.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" * Changes the completion status of the task to true.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" * Changes the completion status of the task to false.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":" * @return A String representing the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"teoks0199"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"teoks0199"},"content":" return String.format(\"[%s] \" + this.description, this.getStatusIcon());","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the task to be saved in the hard disk.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"teoks0199"},"content":" * @return A String representing the task to be saved in the hard disk.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"teoks0199"},"content":" public String taskToString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"teoks0199"},"content":" return String.format(\"%s | \" + this.description, (isDone ? \"Y\" : \"N\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"teoks0199":66}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":" * Encapsulates a ToDo task that can be added to the task manager.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":" * Constructor to create a ToDo.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":" * @param description The description of the ToDo.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the ToDo.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" * @return A String representing the ToDo.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the ToDo to be saved in the hard disk.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" * @return A String representing the ToDo.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" public String taskToString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" return \"T | \" + super.taskToString();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"teoks0199":35}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":" public void loadTaskList_savedFile_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" // saved list is loaded","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"T | N | Homework\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" + \"D | Y | Project | 2023-11-11\\n\",","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" listToString(new Storage(Paths.get(\".\", \"testdata\", \"testlist.txt\")).loadTaskList()));","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" public void loadTaskList_wrongPath_emptyList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" // return empty list if path is wrong","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"\", listToString(new Storage(null).loadTaskList()));","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" public String listToString(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":" StringBuilder toWrite \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" toWrite.append(list.get(i).taskToString());","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":" toWrite.append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" return toWrite.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" public void stringToTask_multipleWhitespaceEntry_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" // accept tasks with descriptions of multiple words","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":" assertEquals(new Deadline(\"Finish coding this assignment\", LocalDate.parse(\"2023-10-10\")),","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" new Storage(Paths.get(\".\", \"testdata\", \"testlist.txt\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" .stringToTask(\"D | N | Finish coding this assignment | 2023-10-10\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" public void stringToTask_markedEntry_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" Deadline d \u003d new Deadline(\"Finish coding this assignment\", LocalDate.parse(\"2023-10-10\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":" d.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"teoks0199"},"content":" // tasks should be correctly displayed as marked","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"teoks0199"},"content":" assertEquals(d, new Storage(Paths.get(\".\", \"testdata\", \"testlist.txt\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"teoks0199"},"content":" .stringToTask(\"D | Y | Finish coding this assignment | 2023-10-10\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"teoks0199"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"teoks0199"},"content":" public void stringToTask_corruptedEntry_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"teoks0199"},"content":" assertEquals(new Deadline(\"Finish coding this assignment\", LocalDate.parse(\"2023-10-10\")),","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"teoks0199"},"content":" new Storage(Paths.get(\".\", \"data\", \"duke.txt\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"teoks0199"},"content":" .stringToTask(\"D | N\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"teoks0199"},"content":" fail(); // test should not reach this line","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"teoks0199"},"content":" // saved entry is of incorrect format","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"teoks0199"},"content":" assertEquals(\" Data file corrupted.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"teoks0199"},"content":" public void stringToTask_invalidTaskType_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"teoks0199"},"content":" assertEquals(new Deadline(\"Finish coding this assignment\", LocalDate.parse(\"2023-10-10\")),","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"teoks0199"},"content":" new Storage(Paths.get(\".\", \"data\", \"duke.txt\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"teoks0199"},"content":" .stringToTask(\"XXX | N | Finish coding this assignment | 2023-10-10\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"teoks0199"},"content":" fail(); // test should not reach this line","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"teoks0199"},"content":" // saved entry has unknown symbol","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"teoks0199"},"content":" assertEquals(\" Data file corrupted.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"teoks0199":89}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":" public void addToDo_multipleEntries_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" tasks.addToDo(\"todo Midterms\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":" tasks.addToDo(\"todo Finals\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" // add 2 ToDos to the list","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"T | N | Midterms\\n\" + \"T | N | Finals\\n\", listToString(list));","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" public void addToDo_emptyEntry_notAdded() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" // todo should be followed by description","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" tasks.addToDo(\"todo\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" // todo description cannot be empty","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" tasks.addToDo(\"todo \".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"\", listToString(list));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" public void addDeadline_multipleEntries_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Midterms /by 2023-10-11\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Finals /by 2023-11-11\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" // add 2 Deadlines to the list","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"D | N | Midterms | 2023-10-11\\n\" + \"D | N | Finals | 2023-11-11\\n\",","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" listToString(list));","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":" public void addDeadline_wrongFormat_notAdded() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" // /by should be used","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Midterms by 2023-10-11\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" // description cannot be empty","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline /by 2023-11-11\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"teoks0199"},"content":" // wrong date format","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Finals /by 11 Oct 2023\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"teoks0199"},"content":" // wrong date format","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Finals /by 10-10-2023\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"\", listToString(list));","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"teoks0199"},"content":" public void addDeadline_invalidDate_notAdded() {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"teoks0199"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"teoks0199"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"teoks0199"},"content":" // day cannot exceed 31","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Finals /by 2023-10-40\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"teoks0199"},"content":" // month cannot exceed 12","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Finals /by 2023-13-10\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"teoks0199"},"content":" // february 30 is invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Finals /by 2023-02-30\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"teoks0199"},"content":" // april 31 is invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Finals /by 2023-04-31\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"teoks0199"},"content":" // month expects 2 digits","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Finals /by 2023-5-31\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"\", listToString(list));","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"teoks0199"},"content":" public void addEvent_multipleEntries_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"teoks0199"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"teoks0199"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Midterms /from 2023-10-11 /to 2023-10-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Finals /from 2023-11-11 /to 2023-11-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"teoks0199"},"content":" // add 2 Events to the list","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"E | N | Midterms | 2023-10-11 | 2023-10-12\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"teoks0199"},"content":" + \"E | N | Finals | 2023-11-11 | 2023-11-12\\n\",","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"teoks0199"},"content":" listToString(list));","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"teoks0199"},"content":" public void addEvent_wrongFormat_notAdded() {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"teoks0199"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"teoks0199"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"teoks0199"},"content":" // /from should be used","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Midterms from 2023-10-11 /to 2023-10-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"teoks0199"},"content":" // /to should be used","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Midterms /from 2023-10-11 to 2023-10-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"teoks0199"},"content":" // description cannot be empty","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event /from 2023-10-11 /to 2023-10-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"teoks0199"},"content":" // wrong date format","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Finals /from Today /to 2023-11-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"teoks0199"},"content":" // wrong date format","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Midterms /from 10 Oct 2023 /to 2023-10-11\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"teoks0199"},"content":" // wrong date format","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"event Finals /from 10-10-2023 /to 11-10-2023\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"\", listToString(list));","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"teoks0199"},"content":" public void addEvent_invalidDate_notAdded() {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"teoks0199"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"teoks0199"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"teoks0199"},"content":" // month cannot exceed 12","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Midterms /from 2023-13-11 /to 2023-10-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"teoks0199"},"content":" // day cannot exceed 31","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Finals /from 2023-11-40 /to 2023-11-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"teoks0199"},"content":" // february 30 is invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Midterms /from 2023-02-30 /to 2023-10-12\".split(\" \", 2));;","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"teoks0199"},"content":" // april 31 is invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Midterms /from 2023-04-31 /to 2023-10-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"teoks0199"},"content":" // month expects 2 digits","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Midterms /from 2023-1-11 /to 2023-10-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"\", listToString(list));","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"teoks0199"},"content":" public String listToString(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"teoks0199"},"content":" StringBuilder toWrite \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"teoks0199"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"teoks0199"},"content":" toWrite.append(list.get(i).taskToString());","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"teoks0199"},"content":" toWrite.append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"teoks0199"},"content":" return toWrite.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"teoks0199":156}},{"path":"src/test/testlist.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"T | N | Homework","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"D | Y | Project | 2023-11-11","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"teoks0199":2}},{"path":"testdata/testlist.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"T | N | Homework","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"D | Y | Project | 2023-11-11","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"teoks0199":2}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"deadline return book /by 2023-08-11","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"event project meeting /from 2023-08-11 /to 2023-08-19","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"unmark 2","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":"todo eat","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":"delete 1","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":"delete 1","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":"delete 1","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":"delete 1","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":"mark 1","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":"delete 1","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"teoks0199":19}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-08-30"},{"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":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"teoks0199":2,"-":20}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"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":"teoks0199"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"teoks0199":7,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"T | N | Homework","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"D | Y | Project | 2023-11-11","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"E | N | Midterms | 2023-10-11 | 2023-10-12","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"E | N | Finals | 2023-11-11 | 2023-11-12","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"T | N | read book","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"T | N | return book","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":"D | N | write book | 2022-11-11","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"E | N | book fair | 2000-11-11 | 2000-11-11","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"teoks0199":8}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":" * Program to run a task manager that can add, delete and mark tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" private static ArrayList\u003cTask\u003e list \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" * Constructor to start the program.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":" * @param filePath The file path of the saved task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" public Duke(Path filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" tasks \u003d new TaskList(storage.loadTaskList());","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" * Runs the program.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" ui.greet();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" Parser parser \u003d new Parser(ui, tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" parser.parse(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" while (!parser.isDone()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":" input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" parser.parse(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":" storage.updateTaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":" * Starts the program and loads in the saved task list.","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" * @param args The command line arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":" new Duke(Paths.get(\".\", \"data\", \"duke.txt\")).run(); // ./data/duke.txt","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"teoks0199":53,"-":3}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":" * Used to handle exceptions specific to Duke.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":" * Constructor for creating a DukeException.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":" * @param e Error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" public DukeException(String e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":" super(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"teoks0199":17}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":" * Used to parse user input into appropriate commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":" private boolean isFinished;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" * Constructor to create a Parser.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" * @param ui Instance to handle the printing of user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":" * @param tasks Instance of TaskList to handle commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" public Parser(Ui ui, TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" this.isFinished \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" * Parses the user input and calls the appropriate task command.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" * @param s User input picked up by the scanner.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" public void parse(String s) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":" String[] input \u003d s.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" String command \u003d input[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" ui.horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":" if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" tasks.showList(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" tasks.markTask(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" tasks.unmarkTask(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" tasks.deleteTask(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":" tasks.addToDo(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":" } else if (command.equals(\"find\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":" tasks.findTasks(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" } else if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" this.isFinished \u003d true;","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":" ui.bye();","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":" ui.printErrorMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"teoks0199"},"content":" ui.horizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"teoks0199"},"content":" * Indicates if parsing should stop.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"teoks0199"},"content":" * @return A boolean value to indicate when to stop asking for user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"teoks0199"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"teoks0199"},"content":" return isFinished;","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"teoks0199":67}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":" * Used to handle loading and saving of task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" private Path filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" * Constructor to create a Storage object.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" * @param filePath The file path of the saved task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" public Storage(Path filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" * Loads a saved task list if it exists.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":" * @return An ArrayList that was saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" public ArrayList\u003cTask\u003e loadTaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":" // Create the directory if it doesn\u0027t exist","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" Path parentDirectory \u003d filePath.getParent();","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" if (!Files.exists(parentDirectory)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":" Files.createDirectories(parentDirectory);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Parent directories created: \" + parentDirectory.toAbsolutePath());","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":" // Create the file if it doesn\u0027t exist","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" if (!Files.exists(filePath)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" File created: \" + filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"teoks0199"},"content":" // Read the existing content from the file","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"teoks0199"},"content":" BufferedReader reader \u003d Files.newBufferedReader(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"teoks0199"},"content":" String nextLine;","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"teoks0199"},"content":" while ((nextLine \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"teoks0199"},"content":" Task toAdd \u003d stringToTask(nextLine);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"teoks0199"},"content":" if (!toAdd.equals(null)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"teoks0199"},"content":" list.add(toAdd);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"teoks0199"},"content":" reader.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"teoks0199"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Data file corrupted.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"teoks0199"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"teoks0199"},"content":" } finally {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"teoks0199"},"content":" return list;","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"teoks0199"},"content":" * Updates the hard drive with the current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"teoks0199"},"content":" public void updateTaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"teoks0199"},"content":" // Create the directory if it doesn\u0027t exist","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"teoks0199"},"content":" Path parentDirectory \u003d filePath.getParent();","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"teoks0199"},"content":" if (!Files.exists(parentDirectory)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"teoks0199"},"content":" Files.createDirectories(parentDirectory);","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Parent directories created: \" + parentDirectory.toAbsolutePath());","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"teoks0199"},"content":" // Create the file if it doesn\u0027t exist","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"teoks0199"},"content":" if (!Files.exists(filePath)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"teoks0199"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" File created: \" + filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"teoks0199"},"content":" // Write new content to the file","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"teoks0199"},"content":" StringBuilder toWrite \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"teoks0199"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"teoks0199"},"content":" toWrite.append(list.get(i).taskToString());","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"teoks0199"},"content":" toWrite.append(\"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"teoks0199"},"content":" BufferedWriter writer \u003d Files.newBufferedWriter(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"teoks0199"},"content":" writer.write(toWrite.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"teoks0199"},"content":" writer.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"teoks0199"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" An error occurred: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"teoks0199"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"teoks0199"},"content":" * Converts a string representation of a task to a Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"teoks0199"},"content":" * @param s String representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"teoks0199"},"content":" * @return The task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"teoks0199"},"content":" * @throws DukeException Throws DukeException if data file is corrupted.","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"teoks0199"},"content":" public Task stringToTask(String s) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"teoks0199"},"content":" String[] details \u003d s.split(\"[|]\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"teoks0199"},"content":" String type \u003d details[0].strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"teoks0199"},"content":" Task t;","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"teoks0199"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"teoks0199"},"content":" t \u003d new ToDo(details[2].strip());","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"teoks0199"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"teoks0199"},"content":" t \u003d new Deadline(details[2].strip(), LocalDate.parse(details[3].strip()));","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"teoks0199"},"content":" } else if (type.equals(\"E\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"teoks0199"},"content":" t \u003d new Event(details[2].strip(),","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"teoks0199"},"content":" LocalDate.parse(details[3].strip()), LocalDate.parse(details[4].strip()));","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"teoks0199"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"teoks0199"},"content":" throw new DukeException(\" Data file corrupted.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"teoks0199"},"content":" if (details[1].strip().equals(\"Y\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"teoks0199"},"content":" t.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"teoks0199"},"content":" return t;","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"teoks0199"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"teoks0199"},"content":" throw new DukeException(\" Data file corrupted.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"teoks0199":135}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":" * Used to add, delete, mark, show and find tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" * Constructor to create a TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" * @param taskList The previously saved task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" * Displays the current list to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" * @param input User input.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":" public void showList(String[] input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" if (!(input.length \u003d\u003d 1 || input[1].strip().equals(\"\"))) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" throw new DukeException(\" Did you mean list?\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Here are the tasks in your list:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" System.out.println(String.format(\" %d.%s\",","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":" i + 1, taskList.get(i).toString()));","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" * Marks the indicated task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":" * @param input User input.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":" public void markTask(String[] input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"teoks0199"},"content":" int toMark \u003d Integer.parseInt(input[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"teoks0199"},"content":" Task task \u003d taskList.get(toMark - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"teoks0199"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"teoks0199"},"content":" System.out.println(String.format(\" %s\", task.toString()));","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"teoks0199"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Task does not exist.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"teoks0199"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Please enter a number e.g., mark 1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"teoks0199"},"content":" * Marks the indicated task as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"teoks0199"},"content":" * @param input User input.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"teoks0199"},"content":" public void unmarkTask(String[] input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"teoks0199"},"content":" int toMark \u003d Integer.parseInt(input[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"teoks0199"},"content":" Task task \u003d taskList.get(toMark - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"teoks0199"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"teoks0199"},"content":" System.out.println(String.format(\" %s\", task.toString()));","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"teoks0199"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Task does not exist.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"teoks0199"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Please enter a number e.g., unmark 1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"teoks0199"},"content":" * Deletes the indicated task.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"teoks0199"},"content":" * @param input User input.","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"teoks0199"},"content":" public void deleteTask(String[] input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"teoks0199"},"content":" int toDelete \u003d Integer.parseInt(input[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"teoks0199"},"content":" Task task \u003d taskList.get(toDelete - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"teoks0199"},"content":" System.out.println(String.format(\" %s\", task.toString()));","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"teoks0199"},"content":" taskList.remove(toDelete - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Number of tasks: \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"teoks0199"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Task does not exist.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"teoks0199"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Please enter a number e.g., delete 1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"teoks0199"},"content":" * Adds an Event to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"teoks0199"},"content":" * @param input User input.","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"teoks0199"},"content":" public void addEvent(String[] input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"teoks0199"},"content":" String[] s1 \u003d input[1].split(\"/from\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"teoks0199"},"content":" String[] s2 \u003d s1[1].split(\"/to\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"teoks0199"},"content":" String desc \u003d s1[0].strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"teoks0199"},"content":" String from \u003d s2[0].strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"teoks0199"},"content":" String to \u003d s2[1].strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"teoks0199"},"content":" if (desc.equals(\"\") || from.equals(\"\") || to.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"teoks0199"},"content":" throw new DukeException(\" Format: event description /from yyyy-mm-dd /to yyyy-mm-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"teoks0199"},"content":" Event e \u003d new Event(desc, LocalDate.parse(from), LocalDate.parse(to));","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"teoks0199"},"content":" taskList.add(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" \" + e.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Number of tasks: \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"teoks0199"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"teoks0199"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Format: event description /from yyyy-mm-dd /to yyyy-mm-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"teoks0199"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Enter valid date yyyy-mm-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"teoks0199"},"content":" * Adds a Deadline to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"teoks0199"},"content":" * @param input User input.","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"teoks0199"},"content":" public void addDeadline(String[] input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"teoks0199"},"content":" String[] s \u003d input[1].split(\"/by\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"teoks0199"},"content":" String desc \u003d s[0].strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"teoks0199"},"content":" String deadline \u003d s[1].strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"teoks0199"},"content":" if (desc.equals(\"\") || deadline.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"teoks0199"},"content":" throw new DukeException(\" Format: deadline description /by yyyy-mm-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"teoks0199"},"content":" Deadline d \u003d new Deadline(desc, LocalDate.parse(deadline));","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"teoks0199"},"content":" taskList.add(d);","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" \" + d.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Number of tasks: \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"teoks0199"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"teoks0199"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Format: deadline description /by yyyy-mm-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"teoks0199"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Enter valid date yyyy-mm-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"teoks0199"},"content":" * Adds a ToDo to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"teoks0199"},"content":" * @param input User input.","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"teoks0199"},"content":" public void addToDo(String[] input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"teoks0199"},"content":" String desc \u003d input[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"teoks0199"},"content":" if (desc.strip().equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"teoks0199"},"content":" throw new DukeException(\" ☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"teoks0199"},"content":" ToDo t \u003d new ToDo(desc);","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"teoks0199"},"content":" taskList.add(t);","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" \" + t.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Number of tasks: \" + taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"teoks0199"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" ☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"teoks0199"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"teoks0199"},"content":" * Displays all tasks in the list containing the keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"teoks0199"},"content":" * @param input User input.","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"teoks0199"},"content":" public void findTasks(String[] input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":192,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"teoks0199"},"content":" String keyword \u003d input[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"teoks0199"},"content":" if (keyword.strip().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"teoks0199"},"content":" throw new DukeException(\" What do you want me to find?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"teoks0199"},"content":" int counter \u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"teoks0199"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"teoks0199"},"content":" String s \u003d taskList.get(i).toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"teoks0199"},"content":" if (s.contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"teoks0199"},"content":" System.out.println(String.format(\" %d.%s\", counter, s));","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"teoks0199"},"content":" counter++;","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"teoks0199"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" What do you want me to find?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"teoks0199"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"teoks0199":213}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":" * Used to handle user interface output.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":" private String line \u003d \" ______________________________________________\";","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":" * Displays a greeting message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" public void greet() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":" System.out.println(line + \"\\n Hello, I\u0027m your task manager :)\\n What can I do for you?\\n\" + line);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" * Displays a goodbye message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" public void bye() {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" * Displays a horizontal line.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" public void horizontalLine() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" * Displays an error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" public void printErrorMessage() {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" System.out.println(\" ☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"teoks0199":38}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":" * Encapsulates a Deadline task that can be added to the task manager.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":" private DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d-MMM-yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" * Deadline of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" * Constructor to create a Deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" * @param description Description of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" * @param by Deadline of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" * @return A String representing the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formatter.format(by) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the deadline to be saved in the hard disk.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" * @return A String representing the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" public String taskToString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":" return \"D | \" + super.taskToString() + \" | \" + by;","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":" * Compares this to another object to check if they are the same task.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" * @param o Object to compare with.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":" * @return True if they are the same task and false if not.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"teoks0199"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"teoks0199"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"teoks0199"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"teoks0199"},"content":" if (!(o instanceof Deadline)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"teoks0199"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"teoks0199"},"content":" Deadline c \u003d (Deadline) o;","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"teoks0199"},"content":" return this.toString().equals(c.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"teoks0199":65}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":" * Encapsulates an Event task that can be added to the task manager.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" private DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d-MMM-yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":" * Starting date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" private LocalDate from;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" * Ending date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":" private LocalDate to;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" * Constructor to create an Event.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" * @param from Starting date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" * @param to Ending date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" public Event(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" * @return A String representing the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" return \"[E]\" + super.toString() + \" (from: \" + formatter.format(from) + \" to: \" + formatter.format(to) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the event to be saved in the hard disk.","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":" * @return A String representing the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":" public String taskToString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" return \"E | \" + super.taskToString() + \" | \" + from + \" | \" + to;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"teoks0199":55}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":" * Encapsulates a task that can be added to the task manager.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":" * Description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":" * Completion status of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" * Constructor to create a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" * @param description The desciption of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the status icon of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" * @return The status icon.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" * Changes the completion status of the task to true.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" * Changes the completion status of the task to false.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":" * @return A String representing the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"teoks0199"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"teoks0199"},"content":" return String.format(\"[%s] \" + this.description, this.getStatusIcon());","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the task to be saved in the hard disk.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"teoks0199"},"content":" * @return A String representing the task to be saved in the hard disk.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"teoks0199"},"content":" public String taskToString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"teoks0199"},"content":" return String.format(\"%s | \" + this.description, (isDone ? \"Y\" : \"N\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"teoks0199":66}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":" * Encapsulates a ToDo task that can be added to the task manager.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":" * @author Teo Kai Sheng","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":" * Constructor to create a ToDo.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":" * @param description The description of the ToDo.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the ToDo.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" * @return A String representing the ToDo.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" * Returns the String representation of the ToDo to be saved in the hard disk.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" * @return A String representing the ToDo.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" public String taskToString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" return \"T | \" + super.taskToString();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"teoks0199":35}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":" public void loadTaskList_savedFile_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" // saved list is loaded","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"T | N | Homework\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" + \"D | Y | Project | 2023-11-11\\n\",","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":" listToString(new Storage(Paths.get(\".\", \"testdata\", \"testlist.txt\")).loadTaskList()));","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" public void loadTaskList_wrongPath_emptyList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" // return empty list if path is wrong","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"\", listToString(new Storage(null).loadTaskList()));","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" public String listToString(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":" StringBuilder toWrite \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" toWrite.append(list.get(i).taskToString());","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":" toWrite.append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" return toWrite.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" public void stringToTask_multipleWhitespaceEntry_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" // accept tasks with descriptions of multiple words","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":" assertEquals(new Deadline(\"Finish coding this assignment\", LocalDate.parse(\"2023-10-10\")),","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" new Storage(Paths.get(\".\", \"testdata\", \"testlist.txt\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" .stringToTask(\"D | N | Finish coding this assignment | 2023-10-10\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" public void stringToTask_markedEntry_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" Deadline d \u003d new Deadline(\"Finish coding this assignment\", LocalDate.parse(\"2023-10-10\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":" d.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"teoks0199"},"content":" // tasks should be correctly displayed as marked","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"teoks0199"},"content":" assertEquals(d, new Storage(Paths.get(\".\", \"testdata\", \"testlist.txt\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"teoks0199"},"content":" .stringToTask(\"D | Y | Finish coding this assignment | 2023-10-10\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"teoks0199"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"teoks0199"},"content":" public void stringToTask_corruptedEntry_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"teoks0199"},"content":" assertEquals(new Deadline(\"Finish coding this assignment\", LocalDate.parse(\"2023-10-10\")),","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"teoks0199"},"content":" new Storage(Paths.get(\".\", \"data\", \"duke.txt\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"teoks0199"},"content":" .stringToTask(\"D | N\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"teoks0199"},"content":" fail(); // test should not reach this line","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"teoks0199"},"content":" // saved entry is of incorrect format","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"teoks0199"},"content":" assertEquals(\" Data file corrupted.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"teoks0199"},"content":" public void stringToTask_invalidTaskType_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"teoks0199"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"teoks0199"},"content":" assertEquals(new Deadline(\"Finish coding this assignment\", LocalDate.parse(\"2023-10-10\")),","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"teoks0199"},"content":" new Storage(Paths.get(\".\", \"data\", \"duke.txt\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"teoks0199"},"content":" .stringToTask(\"XXX | N | Finish coding this assignment | 2023-10-10\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"teoks0199"},"content":" fail(); // test should not reach this line","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"teoks0199"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"teoks0199"},"content":" // saved entry has unknown symbol","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"teoks0199"},"content":" assertEquals(\" Data file corrupted.\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"teoks0199":89}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":" public void addToDo_multipleEntries_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":" tasks.addToDo(\"todo Midterms\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":" tasks.addToDo(\"todo Finals\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":" // add 2 ToDos to the list","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"T | N | Midterms\\n\" + \"T | N | Finals\\n\", listToString(list));","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"teoks0199"},"content":" public void addToDo_emptyEntry_notAdded() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"teoks0199"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"teoks0199"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"teoks0199"},"content":" // todo should be followed by description","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"teoks0199"},"content":" tasks.addToDo(\"todo\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"teoks0199"},"content":" // todo description cannot be empty","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"teoks0199"},"content":" tasks.addToDo(\"todo \".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"\", listToString(list));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"teoks0199"},"content":" public void addDeadline_multipleEntries_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"teoks0199"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"teoks0199"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Midterms /by 2023-10-11\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Finals /by 2023-11-11\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"teoks0199"},"content":" // add 2 Deadlines to the list","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"D | N | Midterms | 2023-10-11\\n\" + \"D | N | Finals | 2023-11-11\\n\",","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"teoks0199"},"content":" listToString(list));","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"teoks0199"},"content":" public void addDeadline_wrongFormat_notAdded() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"teoks0199"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"teoks0199"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"teoks0199"},"content":" // /by should be used","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Midterms by 2023-10-11\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"teoks0199"},"content":" // description cannot be empty","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline /by 2023-11-11\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"teoks0199"},"content":" // wrong date format","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Finals /by 11 Oct 2023\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"teoks0199"},"content":" // wrong date format","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Finals /by 10-10-2023\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"\", listToString(list));","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"teoks0199"},"content":" public void addDeadline_invalidDate_notAdded() {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"teoks0199"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"teoks0199"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"teoks0199"},"content":" // day cannot exceed 31","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Finals /by 2023-10-40\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"teoks0199"},"content":" // month cannot exceed 12","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Finals /by 2023-13-10\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"teoks0199"},"content":" // february 30 is invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Finals /by 2023-02-30\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"teoks0199"},"content":" // april 31 is invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Finals /by 2023-04-31\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"teoks0199"},"content":" // month expects 2 digits","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"deadline Finals /by 2023-5-31\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"\", listToString(list));","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"teoks0199"},"content":" public void addEvent_multipleEntries_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"teoks0199"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"teoks0199"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Midterms /from 2023-10-11 /to 2023-10-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Finals /from 2023-11-11 /to 2023-11-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"teoks0199"},"content":" // add 2 Events to the list","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"E | N | Midterms | 2023-10-11 | 2023-10-12\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"teoks0199"},"content":" + \"E | N | Finals | 2023-11-11 | 2023-11-12\\n\",","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"teoks0199"},"content":" listToString(list));","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"teoks0199"},"content":" public void addEvent_wrongFormat_notAdded() {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"teoks0199"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"teoks0199"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"teoks0199"},"content":" // /from should be used","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Midterms from 2023-10-11 /to 2023-10-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"teoks0199"},"content":" // /to should be used","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Midterms /from 2023-10-11 to 2023-10-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"teoks0199"},"content":" // description cannot be empty","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event /from 2023-10-11 /to 2023-10-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"teoks0199"},"content":" // wrong date format","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Finals /from Today /to 2023-11-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"teoks0199"},"content":" // wrong date format","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Midterms /from 10 Oct 2023 /to 2023-10-11\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"teoks0199"},"content":" // wrong date format","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"teoks0199"},"content":" tasks.addDeadline(\"event Finals /from 10-10-2023 /to 11-10-2023\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"\", listToString(list));","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"teoks0199"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"teoks0199"},"content":" public void addEvent_invalidDate_notAdded() {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"teoks0199"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"teoks0199"},"content":" TaskList tasks \u003d new TaskList(list);","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"teoks0199"},"content":" // month cannot exceed 12","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Midterms /from 2023-13-11 /to 2023-10-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"teoks0199"},"content":" // day cannot exceed 31","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Finals /from 2023-11-40 /to 2023-11-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"teoks0199"},"content":" // february 30 is invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Midterms /from 2023-02-30 /to 2023-10-12\".split(\" \", 2));;","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"teoks0199"},"content":" // april 31 is invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Midterms /from 2023-04-31 /to 2023-10-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"teoks0199"},"content":" // month expects 2 digits","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"teoks0199"},"content":" tasks.addEvent(\"event Midterms /from 2023-1-11 /to 2023-10-12\".split(\" \", 2));","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"teoks0199"},"content":" assertEquals(\"\", listToString(list));","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"teoks0199"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"teoks0199"},"content":" public String listToString(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"teoks0199"},"content":" StringBuilder toWrite \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"teoks0199"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"teoks0199"},"content":" toWrite.append(list.get(i).taskToString());","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"teoks0199"},"content":" toWrite.append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"teoks0199"},"content":" return toWrite.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"teoks0199"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"teoks0199"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"teoks0199":156}},{"path":"src/test/testlist.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"T | N | Homework","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"D | Y | Project | 2023-11-11","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"teoks0199":2}},{"path":"testdata/testlist.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"T | N | Homework","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"D | Y | Project | 2023-11-11","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"teoks0199":2}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"teoks0199"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"teoks0199"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"teoks0199"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"teoks0199"},"content":"deadline return book /by 2023-08-11","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"teoks0199"},"content":"event project meeting /from 2023-08-11 /to 2023-08-19","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"teoks0199"},"content":"unmark 2","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"teoks0199"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"teoks0199"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"teoks0199"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"teoks0199"},"content":"todo eat","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"teoks0199"},"content":"delete 1","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"teoks0199"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"teoks0199"},"content":"delete 1","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"teoks0199"},"content":"delete 1","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"teoks0199"},"content":"delete 1","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"teoks0199"},"content":"mark 1","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"teoks0199"},"content":"delete 1","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"teoks0199"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"teoks0199":19}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"teoks0199"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-08-30"},{"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":"teoks0199"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"teoks0199":2,"-":20}}] diff --git a/teoks0199_ip_master/commits.json b/teoks0199_ip_master/commits.json index fb3b7ae9..de3014bd 100644 --- a/teoks0199_ip_master/commits.json +++ b/teoks0199_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"teoks0199":[{"date":"2023-08-22","commitResults":[{"hash":"7fcd978460fdbadf9a5786fd0836175cb2f58eea","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"00e6337141fba06b2a143057dca5b78dff7c3a43","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":3}}},{"hash":"a37d83e55c541aa0a7893bf3cfae8cdfd84acc01","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"db596f14d0b0a970c9026117b6c99a63c4639063","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":7}}},{"hash":"df39d7660a630eb29586ba52fca8d03c9562de9c","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":9}}},{"hash":"98ca946e28e7c425a0186d08b9475af630d4fc88","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"bat":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"3e14023cdca5ba973b82439cbea6c11a3bc58b0a","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":39}}},{"hash":"7e3a7ffb1769c20f3e88b55920450fa5255a1dbc","isMergeCommit":false,"messageTitle":" Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":13,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"144ebe41533d82f2dbd7a17b11bbd7b6dd5874be","isMergeCommit":false,"messageTitle":"add javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":95,"deletions":1}}},{"hash":"ca363539c5989ef16257266db8518c90203c70c3","isMergeCommit":false,"messageTitle":"Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":253,"deletions":102}}},{"hash":"f59ea098e647cebdcea41f1656f18422ccacf800","isMergeCommit":false,"messageTitle":"test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"8fdb94c947485adeed433dae940093d56e1d077b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"637f692f176b97c438462011baf0de9822ad8d48","isMergeCommit":false,"messageTitle":"Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":35,"deletions":16}}},{"hash":"e12e7a5a7d24038a886d96047532f503c1291eee","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"ad8e6628b47390543fa37e79bbf4da935f7f1705","isMergeCommit":false,"messageTitle":"More OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":307,"deletions":228}}},{"hash":"8daa6743b4f2cad1234d29b52051d13146d3a7ae","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"c51a81ebe4297482156ca0826b4b2f03d9d638a6","isMergeCommit":false,"messageTitle":"Add packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":27,"deletions":10},"bat":{"insertions":1,"deletions":1}}},{"hash":"d86cc29d71b554efb7706abd642a5c71128ca74d","isMergeCommit":false,"messageTitle":"Fix bugs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":5},"java":{"insertions":2,"deletions":3}}}]},{"date":"2023-08-31","commitResults":[{"hash":"eecc5b8ba56f1ddc351ce0f8989aefc45aa0418f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e6f882225e52946b11c4da3f3d9bcfb742e3735d","isMergeCommit":false,"messageTitle":"Add gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":0},"java":{"insertions":7,"deletions":4}}},{"hash":"1e0ce60092de859929f83723d9b47a23e690fd61","isMergeCommit":false,"messageTitle":"Fix gradlew run application path","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":2,"deletions":1}}},{"hash":"9141a2a34f866fcb5ebeb8e35ff3fd70b50a323d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"910ff102f0fe3a4fa765a418b3eae6c13ffcb2fc","isMergeCommit":false,"messageTitle":"Add junit testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":3},"java":{"insertions":256,"deletions":1}}},{"hash":"208603f284a85c27d264a5044e122f8d92901a83","isMergeCommit":false,"messageTitle":"Add saved test list for testing","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"14d82ac396ac9216cdfc4458d66a72a7ee4b7eda","isMergeCommit":false,"messageTitle":"Add Jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":1,"deletions":1}}},{"hash":"d08e076d178a068ad7e3366c14b43a4d4a236b44","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"0c651ad1032f4190f844c492508e4c196793e8de","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":0}}},{"hash":"2e255aa51e4fd9a73afc19d51c2585d1c7fe38a9","isMergeCommit":false,"messageTitle":"Fix style errors","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":38,"deletions":38}}},{"hash":"ac044d2d1d5e5b00e4c0808a10db13017feaa9fe","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":30,"deletions":0}}},{"hash":"b1a01c388790832951487e07d2305e18dec1eac9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"e8aaa2f748a3bd0b25b7b8050ccd0e2cad7d6291","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"68e449d25c28fb5449c85f406444393eb46ec8ee","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"f45134652b181cb9223e5662b46e9647dae7867b","isMergeCommit":false,"messageTitle":"Fix style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":20}}}]}]},"authorFileTypeContributionMap":{"teoks0199":{"java":993,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":7,"txt":31}},"authorContributionVariance":{"teoks0199":71648.46},"authorDisplayNameMap":{"teoks0199":"CS2103T-W10-4 TEO ..HENG"}} +{"authorDailyContributionsMap":{"teoks0199":[{"date":"2023-08-22","commitResults":[{"hash":"7fcd978460fdbadf9a5786fd0836175cb2f58eea","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"00e6337141fba06b2a143057dca5b78dff7c3a43","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":3}}},{"hash":"a37d83e55c541aa0a7893bf3cfae8cdfd84acc01","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"db596f14d0b0a970c9026117b6c99a63c4639063","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":7}}},{"hash":"df39d7660a630eb29586ba52fca8d03c9562de9c","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":9}}},{"hash":"98ca946e28e7c425a0186d08b9475af630d4fc88","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"bat":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"3e14023cdca5ba973b82439cbea6c11a3bc58b0a","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":39}}},{"hash":"7e3a7ffb1769c20f3e88b55920450fa5255a1dbc","isMergeCommit":false,"messageTitle":" Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":13,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"144ebe41533d82f2dbd7a17b11bbd7b6dd5874be","isMergeCommit":false,"messageTitle":"add javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":95,"deletions":1}}},{"hash":"ca363539c5989ef16257266db8518c90203c70c3","isMergeCommit":false,"messageTitle":"Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":253,"deletions":102}}},{"hash":"f59ea098e647cebdcea41f1656f18422ccacf800","isMergeCommit":false,"messageTitle":"test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"8fdb94c947485adeed433dae940093d56e1d077b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"637f692f176b97c438462011baf0de9822ad8d48","isMergeCommit":false,"messageTitle":"Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":35,"deletions":16}}},{"hash":"e12e7a5a7d24038a886d96047532f503c1291eee","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"ad8e6628b47390543fa37e79bbf4da935f7f1705","isMergeCommit":false,"messageTitle":"More OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":307,"deletions":228}}},{"hash":"8daa6743b4f2cad1234d29b52051d13146d3a7ae","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"c51a81ebe4297482156ca0826b4b2f03d9d638a6","isMergeCommit":false,"messageTitle":"Add packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":27,"deletions":10},"bat":{"insertions":1,"deletions":1}}},{"hash":"d86cc29d71b554efb7706abd642a5c71128ca74d","isMergeCommit":false,"messageTitle":"Fix bugs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":5},"java":{"insertions":2,"deletions":3}}}]},{"date":"2023-08-31","commitResults":[{"hash":"eecc5b8ba56f1ddc351ce0f8989aefc45aa0418f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e6f882225e52946b11c4da3f3d9bcfb742e3735d","isMergeCommit":false,"messageTitle":"Add gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":0},"java":{"insertions":7,"deletions":4}}},{"hash":"1e0ce60092de859929f83723d9b47a23e690fd61","isMergeCommit":false,"messageTitle":"Fix gradlew run application path","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":2,"deletions":1}}},{"hash":"9141a2a34f866fcb5ebeb8e35ff3fd70b50a323d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"910ff102f0fe3a4fa765a418b3eae6c13ffcb2fc","isMergeCommit":false,"messageTitle":"Add junit testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":3},"java":{"insertions":256,"deletions":1}}},{"hash":"208603f284a85c27d264a5044e122f8d92901a83","isMergeCommit":false,"messageTitle":"Add saved test list for testing","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"14d82ac396ac9216cdfc4458d66a72a7ee4b7eda","isMergeCommit":false,"messageTitle":"Add Jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":1,"deletions":1}}},{"hash":"d08e076d178a068ad7e3366c14b43a4d4a236b44","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"0c651ad1032f4190f844c492508e4c196793e8de","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":0}}},{"hash":"2e255aa51e4fd9a73afc19d51c2585d1c7fe38a9","isMergeCommit":false,"messageTitle":"Fix style errors","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":38,"deletions":38}}},{"hash":"ac044d2d1d5e5b00e4c0808a10db13017feaa9fe","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":30,"deletions":0}}},{"hash":"b1a01c388790832951487e07d2305e18dec1eac9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"e8aaa2f748a3bd0b25b7b8050ccd0e2cad7d6291","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"68e449d25c28fb5449c85f406444393eb46ec8ee","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"f45134652b181cb9223e5662b46e9647dae7867b","isMergeCommit":false,"messageTitle":"Fix style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":20}}}]},{"date":"2023-09-05","commitResults":[{"hash":"0b0cc6fa0c2cee1f1e4359383b6020ab9ff3af80","isMergeCommit":false,"messageTitle":"Change names","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":9}}},{"hash":"65c5ee29ac4d40ae3b8776d6450aaea8756d31d2","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":4}}},{"hash":"8fd7c9a88a159d8881698e2ff86688f19d850414","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Checkstyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"teoks0199":{"java":989,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":7,"txt":31}},"authorContributionVariance":{"teoks0199":59411.297},"authorDisplayNameMap":{"teoks0199":"CS2103T-W10-4 TEO ..HENG"}} diff --git a/thaddeusong_ip_master/authorship.json b/thaddeusong_ip_master/authorship.json index deffe1fe..73f05ad9 100644 --- a/thaddeusong_ip_master/authorship.json +++ b/thaddeusong_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"## Duke Project","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"\u003e Beware the stories you read or tell; subtly, at night, beneath the waters of consciousness, they are altering your world. - [Ben Okri](https://en.wikipedia.org/wiki/Ben_Okri)","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"This project is","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"- **Text**-based","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"- *Easy* to use","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"This project helps you to:","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":"1. Track tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"2. Stay on target","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":"3. Practise programming","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":":+1:","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":"Features:","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":"- [x] Managing tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":"- [ ] Managing deadlines (coming soon)","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":"- [ ] Reminders (coming soon)","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":"\u003e If you Java programmer, you can use it to practice Java too. Here\u0027s the main method:","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":"```java","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":"public class Main {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" Application.launch(MainApp.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"thaddeusong":25,"-":5}},{"path":"src/main/java/Duke/application/Application.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.application;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.duke.Duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import Duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"import Duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"import Duke.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" * The application that manages UI and the taskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"public class Application {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" private TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" private final Duke duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":" * Constructs an Application object.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" * @param duke The main Duke instance associated with this application.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" * @param storage The storage object responsible for data persistence.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" * @throws DukeException If there\u0027s an issue with initializing the application or loading tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" public Application(Duke duke, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" this.duke \u003d duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" loadTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":" * Shuts down application.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":" public void kill() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":" saveTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" duke.kill();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" * Adds a task to the application\u0027s task list and storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":" * Removes a task from the application\u0027s task list and storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":" * @param task The task to be removed.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"thaddeusong"},"content":" public void removeTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"thaddeusong"},"content":" storage.removeLine(taskList.findTaskIndex(task) + 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"thaddeusong"},"content":" taskList.removeTask(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"thaddeusong"},"content":" * Loads the task list from storage into the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"thaddeusong"},"content":" * @throws DukeException If there\u0027s an issue with loading tasks from storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"thaddeusong"},"content":" public void loadTaskList() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"thaddeusong"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"thaddeusong"},"content":" String line;","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"thaddeusong"},"content":" int currentLine \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"thaddeusong"},"content":" while(!(line \u003d storage.getLine(currentLine)).equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"thaddeusong"},"content":" taskList.addTask(Task.parse(line));","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"thaddeusong"},"content":" currentLine++;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"thaddeusong"},"content":" public void saveTaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"thaddeusong"},"content":" storage.clear();","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"thaddeusong"},"content":" for(int i \u003d 0; i \u003c getTaskCount(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"thaddeusong"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"thaddeusong"},"content":" storage.addLine(task.toSaveFormat());","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"thaddeusong"},"content":" * Returns the number of tasks in the application\u0027s task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"thaddeusong"},"content":" * @return The number of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"thaddeusong"},"content":" public int getTaskCount() {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"thaddeusong"},"content":" return taskList.getTaskCount();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"thaddeusong"},"content":" * Retrieves a task from the application\u0027s task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"thaddeusong"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"thaddeusong"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"thaddeusong"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"thaddeusong"},"content":" return taskList.getTask(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"thaddeusong"},"content":" public TaskList getTaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"thaddeusong"},"content":" return taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"thaddeusong"},"content":" public TaskList findMatchingTasks(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"thaddeusong"},"content":" TaskList matchingTasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"thaddeusong"},"content":" for(int i \u003d 0; i \u003c getTaskCount(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"thaddeusong"},"content":" if(taskList.getTask(i).containsString(content)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"thaddeusong"},"content":" matchingTasks.addTask(taskList.getTask(i));","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"thaddeusong"},"content":" return matchingTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"thaddeusong":114}},{"path":"src/main/java/Duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import Duke.message.Message;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import Duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"import Duke.application.Application;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" * Represents an abstract command that interacts with the application with some content string.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" protected String content;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" protected Command(String content){","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" this.content \u003d content;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" * Creates a Command instance based on the given command name and content.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":" * @param commandName The name of the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" * @param content The content associated with the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" * @return A Command instance corresponding to the specified command name.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" * @throws NoCommandFoundException If the provided command name is not recognized.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" public static Command of(String commandName, String content)","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" throws NoCommandFoundException {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" switch (commandName) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" return new Bye(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":" return new Todo(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":" return new Deadline(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":" return new Event(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" return new Find(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":" return new List(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" return new Mark(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":" return new Unmark(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":" return new Delete(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":" throw new NoCommandFoundException(commandName);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":" * Executes the command and interacts with the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"thaddeusong"},"content":" * @param application The application instance with which the command interacts.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"thaddeusong"},"content":" * @return A Message instance representing the result of executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"thaddeusong"},"content":" * @throws DukeException If an error occurs during command execution.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"thaddeusong"},"content":" public abstract Message execute(Application application) throws DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"thaddeusong"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"thaddeusong"},"content":"class Bye extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"thaddeusong"},"content":" protected Bye(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"thaddeusong"},"content":" application.kill();","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"thaddeusong"},"content":" return Message.onExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"thaddeusong"},"content":" * Represents a command to add a To-do task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"thaddeusong"},"content":"class Todo extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"thaddeusong"},"content":" protected Todo(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application)","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"thaddeusong"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"thaddeusong"},"content":" Task task \u003d Task.of(content, Task.TaskType.TODO);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"thaddeusong"},"content":" application.addTask(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"thaddeusong"},"content":" return Message.onTaskAdd(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"thaddeusong"},"content":" * Represents a command to add a Deadline task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"thaddeusong"},"content":"class Deadline extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"thaddeusong"},"content":" protected Deadline(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application)","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"thaddeusong"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"thaddeusong"},"content":" Task task \u003d Task.of(content, Task.TaskType.DEADLINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"thaddeusong"},"content":" application.addTask(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"thaddeusong"},"content":" return Message.onTaskAdd(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"thaddeusong"},"content":" * Represents a command to add an Event task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"thaddeusong"},"content":"class Event extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"thaddeusong"},"content":" protected Event(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application)","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"thaddeusong"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"thaddeusong"},"content":" Task task \u003d Task.of(content, Task.TaskType.EVENT);","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"thaddeusong"},"content":" application.addTask(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"thaddeusong"},"content":" return Message.onTaskAdd((task));","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"thaddeusong"},"content":" * Represents a command to list tasks in the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"thaddeusong"},"content":"class List extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"thaddeusong"},"content":" protected List(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application) {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"thaddeusong"},"content":" return Message.accumulateList(Message.convertTasks(application.getTaskList()), \"\\n\").chainTo(","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"thaddeusong"},"content":" Message.onList(application.getTaskList()), \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"thaddeusong"},"content":" * Represents a command to mark a task as completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"thaddeusong"},"content":"class Mark extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"thaddeusong"},"content":" protected Mark(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application)","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"thaddeusong"},"content":" throws InvalidTaskIndexException, TaskIndexOutOfRangeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"thaddeusong"},"content":" int taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"thaddeusong"},"content":" Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"thaddeusong"},"content":" taskIndex \u003d Integer.parseInt(content) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"thaddeusong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTaskIndexException(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"thaddeusong"},"content":" task \u003d application.getTask(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"thaddeusong"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"thaddeusong"},"content":" throw new TaskIndexOutOfRangeException(String.valueOf(taskIndex));","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"thaddeusong"},"content":" task.setCompleted();","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"thaddeusong"},"content":" return Message.onTaskComplete(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"thaddeusong"},"content":" * Represents a command to unmark a completed task.","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"thaddeusong"},"content":"class Unmark extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"thaddeusong"},"content":" protected Unmark(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application)","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"thaddeusong"},"content":" throws InvalidTaskIndexException, TaskIndexOutOfRangeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"thaddeusong"},"content":" int taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"thaddeusong"},"content":" Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"thaddeusong"},"content":" taskIndex \u003d Integer.parseInt(content) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"thaddeusong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTaskIndexException(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"thaddeusong"},"content":" task \u003d application.getTask(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"thaddeusong"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"thaddeusong"},"content":" throw new TaskIndexOutOfRangeException(String.valueOf(taskIndex));","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":186,"author":{"gitId":"thaddeusong"},"content":" task.setUncompleted();","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"thaddeusong"},"content":" return Message.onTaskUncomplete(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":189,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"thaddeusong"},"content":"class Find extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"thaddeusong"},"content":" public Find(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application) {","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"thaddeusong"},"content":" return Message.onTaskFind().chainTo(","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"thaddeusong"},"content":" Message.accumulateList(Message.convertTasks(application.findMatchingTasks(content)), \"\\n\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"thaddeusong"},"content":" \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"thaddeusong"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"thaddeusong"},"content":"class Delete extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":208,"author":{"gitId":"thaddeusong"},"content":" protected Delete(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":210,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":211,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":212,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application)","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"thaddeusong"},"content":" throws InvalidTaskIndexException, TaskIndexOutOfRangeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":214,"author":{"gitId":"thaddeusong"},"content":" int taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":215,"author":{"gitId":"thaddeusong"},"content":" Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":216,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":217,"author":{"gitId":"thaddeusong"},"content":" taskIndex \u003d Integer.parseInt(content) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":218,"author":{"gitId":"thaddeusong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":219,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTaskIndexException(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":220,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":221,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":222,"author":{"gitId":"thaddeusong"},"content":" task \u003d application.getTask(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"thaddeusong"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":224,"author":{"gitId":"thaddeusong"},"content":" throw new TaskIndexOutOfRangeException(String.valueOf(taskIndex));","lastModifiedDate":"2023-08-29"},{"lineNumber":225,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":226,"author":{"gitId":"thaddeusong"},"content":" application.removeTask((task));","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"thaddeusong"},"content":" return Message.onTaskDelete(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":229,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":229}},{"path":"src/main/java/Duke/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import Duke.message.Message;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import Duke.parser.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"import Duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"import Duke.application.Application;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" * Represents the main class of the Duke application, responsible for initializing and running the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"public class Duke {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" @SuppressWarnings(\"FieldCanBeLocal\")","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" private final String name \u003d \"Iris\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" private Application application;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" private boolean isAwake \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" * Constructs a Duke object and initializes the components.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" * @param filePath The file path for data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" Storage storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" application \u003d new Application(this, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":" ui.showError(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" * Initiates the execution of the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":" ui.showMessage(Message.onGreeting(name));","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" while(isAwake){","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":" if(ui.hasNext())","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":" ui.showMessage(ui.parseLine().execute(application));","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":" } catch (DukeException de){","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" ui.showError(de);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":" * Shuts down the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"thaddeusong"},"content":" public void kill() {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"thaddeusong"},"content":" isAwake \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"thaddeusong"},"content":" * Entry point for Duke.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"thaddeusong"},"content":" * @param args Unused.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"thaddeusong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"thaddeusong"},"content":" new Duke(\"C:\\\\Users\\\\ortt2\\\\Documents\\\\ip\\\\src\\\\data\\\\tasks.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"thaddeusong":66}},{"path":"src/main/java/Duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.message.ErrorMessage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * An abstract class for custom exceptions specific to Duke.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"public abstract class DukeException extends Exception{","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" protected DukeException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" * Generates an error message object based on the exception\u0027s content.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" * @param content Additional content related to the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" * @return An ErrorMessage object representing the error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" public abstract ErrorMessage generateErrorMessage(String content);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":21}},{"path":"src/main/java/Duke/exception/EmptyTaskDescException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.message.ErrorMessage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * An exception that is thrown when a task description is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"public class EmptyTaskDescException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" public EmptyTaskDescException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" public ErrorMessage generateErrorMessage(String content) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" return new ErrorMessage(\"A task description cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":19}},{"path":"src/main/java/Duke/exception/FileNotFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.message.ErrorMessage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":" * An exception that is thrown when the file cannot be found.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"public class FileNotFoundException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":" public FileNotFoundException(String name) {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" super(name);","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" public ErrorMessage generateErrorMessage(String content) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" return new ErrorMessage(\"There is no file at \" + content);","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":15}},{"path":"src/main/java/Duke/exception/InvalidTaskFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.message.ErrorMessage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * An exception that is thrown when a task format is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"public class InvalidTaskFormatException extends DukeException{","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" public InvalidTaskFormatException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" public ErrorMessage generateErrorMessage(String content) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" return new ErrorMessage(content + \" isn\u0027t the right format for this kind of task.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":17}},{"path":"src/main/java/Duke/exception/InvalidTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.message.ErrorMessage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * An exception that is thrown when a task index is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"public class InvalidTaskIndexException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" public InvalidTaskIndexException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" public ErrorMessage generateErrorMessage(String content) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" return new ErrorMessage(content + \" isn\u0027t a number.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":17}},{"path":"src/main/java/Duke/exception/InvalidTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.message.ErrorMessage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * An exception that is thrown when a time format is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"public class InvalidTimeFormatException extends DukeException{","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" public InvalidTimeFormatException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" public ErrorMessage generateErrorMessage(String content) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" return new ErrorMessage(content + \" isn\u0027t the right time format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"thaddeusong":17}},{"path":"src/main/java/Duke/exception/NoCommandFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.message.ErrorMessage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * An exception that is thrown when a no matching command is found.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"public class NoCommandFoundException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" public NoCommandFoundException(String message){","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" public ErrorMessage generateErrorMessage(String content) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" return new ErrorMessage(\"Sorry, I don\u0027t know what \" + content + \" means.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":18}},{"path":"src/main/java/Duke/exception/TaskIndexOutOfRangeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.message.ErrorMessage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * An exception that is thrown when a task index is out of range.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"public class TaskIndexOutOfRangeException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" public TaskIndexOutOfRangeException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" public ErrorMessage generateErrorMessage(String content) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" return new ErrorMessage(content + 1 + \" is out of range of the task list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":17}},{"path":"src/main/java/Duke/message/ErrorMessage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.message;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":" * Represents an error message that can be displayed to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":" * Extends the {@link Message} class.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"public class ErrorMessage extends Message{","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" String errorLine \u003d \"!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!\";","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" public ErrorMessage(String content) {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" public void print() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" System.out.println(errorLine);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" System.out.println(errorLine);","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":21}},{"path":"src/main/java/Duke/message/Message.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.message;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import Duke.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"import java.util.List;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"public class Message {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" final private static String horizontalLine \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" final private String content;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" public Message(String content) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" this.content \u003d content;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" public static List\u003cMessage\u003e convertTasks(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" List\u003cMessage\u003e messages \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" for (int i \u003d 0; i \u003c taskList.getTaskCount(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":" messages.add((new Message((i + 1) + \". \" + taskList.getTask(i).toString())));","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" return messages;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" public static Message onGreeting(String name) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" return new Message(\"Hello, I\u0027m \" + name + \".\\n\" + \"What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" public static Message onExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" return new Message(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":" public static Message onTaskAdd(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" return new Message(\"added: \" + task.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" public static Message onTaskComplete(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" return new Message(\"Nice! I\u0027ve marked this task as done:\\n\" + task.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":" public static Message onTaskUncomplete(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" return new Message(\"OK, I\u0027ve marked this task as not done yet:\\n\" + task.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":" public static Message onTaskDelete(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":" return new Message(\"I\u0027ve removed this task: \\n\" + task.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":" public static Message onTaskFind() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":" return new Message(\"Here are the matching tasks in your list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":" public static Message onList(TaskList tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":" return new Message(\"There are \" + tasks.getTaskCount() + \" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"thaddeusong"},"content":" public Message chainTo(Message message, String splitString) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"thaddeusong"},"content":" return new Message(this.content + splitString + message.content);","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"thaddeusong"},"content":" public static Message accumulateList(List\u003c? extends Message\u003e messages, String splitString) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"thaddeusong"},"content":" Message chainedMessage \u003d new Message(\"\");","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"thaddeusong"},"content":" if (messages.size() \u003e 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"thaddeusong"},"content":" chainedMessage \u003d messages.get(0);","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"thaddeusong"},"content":" for (int i \u003d 1; i \u003c messages.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"thaddeusong"},"content":" Message message \u003d messages.get(i);","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"thaddeusong"},"content":" chainedMessage \u003d chainedMessage.chainTo(message, splitString);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"thaddeusong"},"content":" return chainedMessage;","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"thaddeusong"},"content":" public void print() {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"thaddeusong"},"content":" System.out.println(horizontalLine);","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"thaddeusong"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"thaddeusong"},"content":" System.out.println(horizontalLine);","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"thaddeusong"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"thaddeusong"},"content":" return content;","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"thaddeusong":83}},{"path":"src/main/java/Duke/parser/InputParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"import Duke.command.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * Parses user input and returns the corresponding command object.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"public class InputParser {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" public Command parseInput(String input)","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" throws DukeException{","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" String[] inputComponents \u003d input.trim().split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" String commandName \u003d inputComponents[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" String content \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" if(inputComponents.length \u003e 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" content \u003d inputComponents[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" return Command.of(commandName, content);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":19}},{"path":"src/main/java/Duke/parser/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import Duke.message.Message;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" * Handles user interactions, input parsing, and displaying messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" private final InputParser parser \u003d new InputParser();","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" * Parses the next line of user input into a Command object.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" * @return A Command object corresponding to the parsed user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":" * @throws DukeException If there\u0027s an issue with parsing the input or creating the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" public Command parseLine() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" return parser.parseInput(scanner.nextLine());","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" * Checks if there is more user input to be read.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" * @return true if there is more input, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":" public boolean hasNext() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":" return scanner.hasNext();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":" * Displays the provided message to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" * @param message The message to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":" public void showMessage(Message message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" message.print();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":" * Displays an error message generated from the provided DukeException.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":" * @param e The DukeException that triggered the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":" public void showError(DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":" e.generateErrorMessage(e.getMessage()).print();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":52}},{"path":"src/main/java/Duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import java.io.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" private File file;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" private BufferedWriter bufferedWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" public Storage(String filePath) throws FileNotFoundException {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" file \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter \u003d new BufferedWriter(new FileWriter(file, true));","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" throw new FileNotFoundException(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" public void addLine(String line) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter.write(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter.newLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter.flush();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" } catch (IOException e){","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":" public String getLine(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":" BufferedReader bufferedReader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":" String line;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" int currentLine \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" while ((line \u003d bufferedReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":" if(index \u003d\u003d currentLine) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":" return line;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" currentLine++;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":" return \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":" public void removeLine(int lineIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"thaddeusong"},"content":" List\u003cString\u003e lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"thaddeusong"},"content":" BufferedReader bufferedReader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"thaddeusong"},"content":" String line;","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"thaddeusong"},"content":" int currentLine \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"thaddeusong"},"content":" while ((line \u003d bufferedReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"thaddeusong"},"content":" if (currentLine !\u003d lineIndex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"thaddeusong"},"content":" lines.add(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"thaddeusong"},"content":" currentLine++;","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"thaddeusong"},"content":" bufferedReader.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"thaddeusong"},"content":" file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter \u003d new BufferedWriter(new FileWriter(file));","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"thaddeusong"},"content":" for (String lineToAdd : lines) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter.write(lineToAdd);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter.newLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter.flush();","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"thaddeusong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"thaddeusong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"thaddeusong"},"content":" public void clear() { // Create a FileWriter with the given file path","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"thaddeusong"},"content":" FileWriter fileWriter \u003d new FileWriter(file);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"thaddeusong"},"content":" // Overwrite the file content with an empty string","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"thaddeusong"},"content":" fileWriter.write(\"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"thaddeusong"},"content":" // Close the FileWriter","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"thaddeusong"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"thaddeusong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"thaddeusong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":90}},{"path":"src/main/java/Duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.InvalidTaskFormatException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.InvalidTimeFormatException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" * Represents a deadline task that has a name and deadline time.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" * Extends the {@link Task} class.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" final private LocalDateTime deadlineTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" public Deadline(String task) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":" super(task.split(\"/\",2)[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" String[] taskComponents \u003d task.split(\"/\",2);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" String[] timeComponents;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" timeComponents \u003d taskComponents[1].split(\" \", 3);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" if (timeComponents.length \u003c 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTimeFormatException(taskComponents[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTaskFormatException(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":" deadlineTime \u003d LocalDateTime.of(LocalDate.parse(timeComponents[1]),","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":" LocalTime.parse(timeComponents[2]));","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTimeFormatException(taskComponents[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" public static Deadline unpackSaveFormat(String savedTask) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":" String[] components \u003d savedTask.split(\"\\\\|\", 3);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":" Deadline task \u003d new Deadline(components[1] + \"/by \" + components[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" if(components[2].equals(\"true\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" task.setCompleted();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":" else","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":" task.setUncompleted();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":" return \"[D]\" + super.toString() + \" (by: \" + deadlineTime.toLocalDate().toString() + \",\"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":" + deadlineTime.toLocalTime().toString() + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"thaddeusong"},"content":" public String toSaveFormat(){","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"thaddeusong"},"content":" return \"deadline:\" + deadlineTime.toLocalDate().toString() + \" \"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"thaddeusong"},"content":" + deadlineTime.toLocalTime().toString() + \"|\" + super.toSaveFormat();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":57}},{"path":"src/main/java/Duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.InvalidTaskFormatException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.InvalidTimeFormatException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" * Represents an event task that has a name, start time, and end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" * Extends the {@link Task} class.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" final private LocalDateTime startTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" final private LocalDateTime endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" public Event(String task) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":" super(task.split(\"/\", 3)[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" String[] taskComponents \u003d task.split(\"/\", 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" String[] startTimeComponents;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" String[] endTimeComponents;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" startTimeComponents \u003d taskComponents[1].split(\" \", 3);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" endTimeComponents \u003d taskComponents[2].split(\" \", 3);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTaskFormatException(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" if (startTimeComponents.length \u003c 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTimeFormatException(taskComponents[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" this.startTime \u003d LocalDateTime.of(LocalDate.parse(startTimeComponents[1]),","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":" LocalTime.parse(startTimeComponents[2]));","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTimeFormatException(taskComponents[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":" if (endTimeComponents.length \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTimeFormatException(taskComponents[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":" this.endTime \u003d LocalDateTime.of(LocalDate.parse(endTimeComponents[1]),","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":" LocalTime.parse(endTimeComponents[2]));","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTimeFormatException(taskComponents[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":" public static Event unpackSaveFormat(String savedTask) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":" String[] components \u003d savedTask.split(\"\\\\|\", 4);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":" Event task \u003d new Event(components[2] + \"/from \" + components[0] + \"/to \" + components[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"thaddeusong"},"content":" if(components[3].equals(\"true\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"thaddeusong"},"content":" task.setCompleted();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"thaddeusong"},"content":" else","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"thaddeusong"},"content":" task.setUncompleted();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"thaddeusong"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"thaddeusong"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"thaddeusong"},"content":" return \"[E]\" + super.toString() + \" (from: \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"thaddeusong"},"content":" startTime.toLocalDate().toString() + \",\" + startTime.toLocalTime().toString() + \" to: \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"thaddeusong"},"content":" endTime.toLocalDate().toString() + \",\" + endTime.toLocalTime().toString() + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"thaddeusong"},"content":" public String toSaveFormat(){","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"thaddeusong"},"content":" return \"event:\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"thaddeusong"},"content":" startTime.toLocalDate().toString() + \" \" + startTime.toLocalTime().toString() + \"|\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"thaddeusong"},"content":" endTime.toLocalDate().toString() + \" \" + endTime.toLocalTime() + \"|\" + super.toSaveFormat();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":71}},{"path":"src/main/java/Duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.EmptyTaskDescException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.NoCommandFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":" * Represents a task with a name and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" final private String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" private boolean completed \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" * Parses a task from a line of text.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" * @param line The line of text containing task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" * @return A Task object parsed from the input line.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":" * @throws DukeException If there\u0027s an issue with parsing the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" public static Task parse(String line)","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" String[] components \u003d line.split(\":\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" TaskType taskType \u003d components[0].equals(\"todo\") ? TaskType.TODO","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" : components[0].equals(\"deadline\") ? TaskType.DEADLINE","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" : TaskType.EVENT;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" String content \u003d components[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" case TODO:","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":" return Todo.unpackSaveFormat(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":" return Deadline.unpackSaveFormat(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" case EVENT:","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":" return Event.unpackSaveFormat(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" throw new NoCommandFoundException(taskType.name());","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" public boolean containsString(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" return name.contains(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":" public enum TaskType {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" TODO,","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":" DEADLINE,","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":" EVENT","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":" public Task(String name) throws EmptyTaskDescException {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":" if(name.isBlank()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":" throw new EmptyTaskDescException(\"Name cannot be blank.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"thaddeusong"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"thaddeusong"},"content":" * Creates a Task object based on the provided content and task type.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"thaddeusong"},"content":" * @param task The content of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"thaddeusong"},"content":" * @param taskType The type of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"thaddeusong"},"content":" * @return A Task object of the specified type.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"thaddeusong"},"content":" * @throws DukeException If there\u0027s an issue with creating the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"thaddeusong"},"content":" public static Task of(String task, TaskType taskType)","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"thaddeusong"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"thaddeusong"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"thaddeusong"},"content":" case TODO:","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"thaddeusong"},"content":" return new Todo(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"thaddeusong"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"thaddeusong"},"content":" return new Deadline(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"thaddeusong"},"content":" case EVENT:","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"thaddeusong"},"content":" return new Event(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"thaddeusong"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"thaddeusong"},"content":" throw new NoCommandFoundException(taskType.name());","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"thaddeusong"},"content":" public void setCompleted(){","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"thaddeusong"},"content":" completed \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"thaddeusong"},"content":" public void setUncompleted(){","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"thaddeusong"},"content":" completed \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"thaddeusong"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"thaddeusong"},"content":" return completed ? \"[X] \" + name : \"[ ] \" + name;","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"thaddeusong"},"content":" public String toSaveFormat(){","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"thaddeusong"},"content":" return name + \"|\" + completed;","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"thaddeusong":94}},{"path":"src/main/java/Duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" private final List\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" return taskList.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" public void removeTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" taskList.remove(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" public int findTaskIndex(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" return taskList.indexOf(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" public int getTaskCount() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" return taskList.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"thaddeusong":28}},{"path":"src/main/java/Duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package Duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.EmptyTaskDescException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * Represents a to-do task that has a name.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" * Extends the {@link Task} class.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"public class Todo extends Task{","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" public Todo(String task) throws EmptyTaskDescException {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" super(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" public static Todo unpackSaveFormat(String savedTask) throws EmptyTaskDescException {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" String[] components \u003d savedTask.split(\"\\\\|\", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" Todo task \u003d new Todo(components[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" if(components[1].equals(\"true\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" task.setCompleted();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" else","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" task.setUncompleted();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" public String toSaveFormat(){","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" return \"todo:\" + super.toSaveFormat();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":30}},{"path":"src/test/java/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import Duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" public void testDeadlineConstructor() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" assertEquals(new Deadline(\"a/by 2020-02-10 10:15\").toString(), \"[D][ ] a (by: 2020-02-10,10:15)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" public void testDeadlineToSaveFormat() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" assertEquals(new Deadline(\"a/by 2020-02-10 10:15\").toSaveFormat(), \"deadline:2020-02-10,10:15|a|false\");","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"thaddeusong":19}},{"path":"src/test/java/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import Duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" public void testEventConstructor() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" assertEquals(new Event(\"a/from 2020-02-10 10:15/to 2020-02-10 10:20\").toString(), \"[E][ ] a (from: 2020-02-10,10:15 to: 2020-02-10,10:20)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" public void testEventToSaveFormat() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" assertEquals(new Event(\"a/from 2020-02-10 10:15/to 2020-02-10 10:20\").toSaveFormat(), \"event:2020-02-10 10:15|2020-02-10 10:20|a|false\");","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"thaddeusong":19}},{"path":"src/test/java/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import Duke.exception.EmptyTaskDescException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import Duke.task.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" public void testTodoConstructor() throws EmptyTaskDescException {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" assertEquals(new Todo(\"a\").toString(), \"[T][ ] a\");","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" public void testTodoToSaveFormat() throws EmptyTaskDescException {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" assertEquals(new Todo(\"a\").toSaveFormat(), \"todo:a|false\");","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"thaddeusong":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"hello","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"todo a","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"deadline b / by jun 1","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"event c / from jun 1 / to jun 2","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":"list","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"thaddeusong":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":"thaddeusong"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\Task\\*.java","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\Duke\\*.java","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\DukeException\\*.java","lastModifiedDate":"2023-08-28"},{"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":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-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"}],"authorContributionMap":{"thaddeusong":3,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":"if ! (javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" javac -cp ..\\src\\main\\java\\Duke -Xlint:none -d ..\\bin ..\\src\\main\\java\\Duke\\*.java","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" javac -cp ..\\src\\main\\java\\DukeException -Xlint:none -d ..\\bin ..\\src\\main\\java\\DukeException\\*.java","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" javac -cp ..\\src\\main\\java\\Task -Xlint:none -d ..\\bin ..\\src\\main\\java\\Task\\*.java)","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"thaddeusong":4,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"## Duke Project","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"\u003e Beware the stories you read or tell; subtly, at night, beneath the waters of consciousness, they are altering your world. - [Ben Okri](https://en.wikipedia.org/wiki/Ben_Okri)","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"This project is","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"- **Text**-based","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"- *Easy* to use","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"This project helps you to:","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":"1. Track tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"2. Stay on target","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":"3. Practise programming","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":":+1:","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":"Features:","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":"- [x] Managing tasks","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":"- [ ] Managing deadlines (coming soon)","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":"- [ ] Reminders (coming soon)","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":"\u003e If you Java programmer, you can use it to practice Java too. Here\u0027s the main method:","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":"```java","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":"public class Main {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" Application.launch(MainApp.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"thaddeusong":25,"-":5}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2023-08-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-05"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2023-08-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-08-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2023-08-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-08-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2023-08-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-08-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2023-08-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2023-08-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-08-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2023-08-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2023-08-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2023-08-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2023-08-05"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2023-08-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2023-08-05"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-05"}],"authorContributionMap":{"thaddeusong":5,"-":42}},{"path":"src/main/java/duke/application/Application.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.application;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import duke.duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" * The application that manages UI and the taskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"public class Application {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" private TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" private final Duke duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":" * Constructs an Application object.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" * @param duke The main Duke instance associated with this application.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" * @param storage The storage object responsible for data persistence.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" * @throws DukeException If there\u0027s an issue with initializing the application or loading tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" public Application(Duke duke, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" this.duke \u003d duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" loadTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":" * Shuts down application.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":" public void kill() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":" saveTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" duke.kill();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" * Adds a task to the application\u0027s task list and storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":" * Removes a task from the application\u0027s task list and storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":" * @param task The task to be removed.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"thaddeusong"},"content":" public void removeTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"thaddeusong"},"content":" storage.removeLine(taskList.findTaskIndex(task) + 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"thaddeusong"},"content":" taskList.removeTask(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"thaddeusong"},"content":" * Loads the task list from storage into the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"thaddeusong"},"content":" * @throws DukeException If there\u0027s an issue with loading tasks from storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"thaddeusong"},"content":" public void loadTaskList() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"thaddeusong"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"thaddeusong"},"content":" String line;","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"thaddeusong"},"content":" int currentLine \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"thaddeusong"},"content":" while (!(line \u003d storage.getLine(currentLine)).equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"thaddeusong"},"content":" taskList.addTask(Task.parse(line));","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"thaddeusong"},"content":" currentLine++;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"thaddeusong"},"content":" * Saves the task list into storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"thaddeusong"},"content":" public void saveTaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"thaddeusong"},"content":" storage.clear();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"thaddeusong"},"content":" for (int i \u003d 0; i \u003c getTaskCount(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"thaddeusong"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"thaddeusong"},"content":" storage.addLine(task.toSaveFormat());","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"thaddeusong"},"content":" * Returns the number of tasks in the application\u0027s task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"thaddeusong"},"content":" * @return The number of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"thaddeusong"},"content":" public int getTaskCount() {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"thaddeusong"},"content":" return taskList.getTaskCount();","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"thaddeusong"},"content":" * Retrieves a task from the application\u0027s task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"thaddeusong"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"thaddeusong"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"thaddeusong"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"thaddeusong"},"content":" return taskList.getTask(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"thaddeusong"},"content":" public TaskList getTaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"thaddeusong"},"content":" return taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"thaddeusong"},"content":" * Retrieves a TaskList containing all the tasks that contain a substring.","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"thaddeusong"},"content":" * @param content The substring to search for.","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"thaddeusong"},"content":" * @return A TaskList containing matching Tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"thaddeusong"},"content":" public TaskList findMatchingTasks(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"thaddeusong"},"content":" TaskList matchingTasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"thaddeusong"},"content":" for (int i \u003d 0; i \u003c getTaskCount(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"thaddeusong"},"content":" if (taskList.getTask(i).containsString(content)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"thaddeusong"},"content":" matchingTasks.addTask(taskList.getTask(i));","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"thaddeusong"},"content":" return matchingTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"thaddeusong":120}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import duke.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import duke.message.Message;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" * Represents an abstract command that interacts with the application with some content string.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" protected String content;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" protected Command(String content) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" this.content \u003d content;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" * Creates a Command instance based on the given command name and content.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":" * @param commandName The name of the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" * @param content The content associated with the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" * @return A Command instance corresponding to the specified command name.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" * @throws NoCommandFoundException If the provided command name is not recognized.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" public static Command of(String commandName, String content)","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" throws NoCommandFoundException {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" switch (commandName) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" return new Bye(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":" return new Todo(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":" return new Deadline(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":" return new Event(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":" case \"find\":","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" return new Find(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":" return new List(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" return new Mark(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":" return new Unmark(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":" return new Delete(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":" throw new NoCommandFoundException(commandName);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":" * Executes the command and interacts with the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"thaddeusong"},"content":" * @param application The application instance with which the command interacts.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"thaddeusong"},"content":" * @return A Message instance representing the result of executing the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"thaddeusong"},"content":" * @throws DukeException If an error occurs during command execution.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"thaddeusong"},"content":" public abstract Message execute(Application application) throws DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"thaddeusong"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"thaddeusong"},"content":"class Bye extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"thaddeusong"},"content":" protected Bye(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"thaddeusong"},"content":" application.kill();","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"thaddeusong"},"content":" return Message.onExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"thaddeusong"},"content":" * Represents a command to add a To-do task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"thaddeusong"},"content":"class Todo extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"thaddeusong"},"content":" protected Todo(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application)","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"thaddeusong"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"thaddeusong"},"content":" Task task \u003d Task.of(content, Task.TaskType.TODO);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"thaddeusong"},"content":" application.addTask(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"thaddeusong"},"content":" return Message.onTaskAdd(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"thaddeusong"},"content":" * Represents a command to add a Deadline task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"thaddeusong"},"content":"class Deadline extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"thaddeusong"},"content":" protected Deadline(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application)","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"thaddeusong"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"thaddeusong"},"content":" Task task \u003d Task.of(content, Task.TaskType.DEADLINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"thaddeusong"},"content":" application.addTask(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"thaddeusong"},"content":" return Message.onTaskAdd(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"thaddeusong"},"content":" * Represents a command to add an Event task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"thaddeusong"},"content":"class Event extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"thaddeusong"},"content":" protected Event(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application)","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"thaddeusong"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"thaddeusong"},"content":" Task task \u003d Task.of(content, Task.TaskType.EVENT);","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"thaddeusong"},"content":" application.addTask(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"thaddeusong"},"content":" return Message.onTaskAdd((task));","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"thaddeusong"},"content":" * Represents a command to list tasks in the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"thaddeusong"},"content":"class List extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"thaddeusong"},"content":" protected List(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application) {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"thaddeusong"},"content":" return Message.accumulateList(Message.convertTasks(application.getTaskList()), \"\\n\").chainTo(","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"thaddeusong"},"content":" Message.onList(application.getTaskList()), \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"thaddeusong"},"content":" * Represents a command to mark a task as completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"thaddeusong"},"content":"class Mark extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"thaddeusong"},"content":" protected Mark(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application)","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"thaddeusong"},"content":" throws InvalidTaskIndexException, TaskIndexOutOfRangeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"thaddeusong"},"content":" int taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"thaddeusong"},"content":" Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"thaddeusong"},"content":" taskIndex \u003d Integer.parseInt(content) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"thaddeusong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTaskIndexException(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"thaddeusong"},"content":" task \u003d application.getTask(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"thaddeusong"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"thaddeusong"},"content":" throw new TaskIndexOutOfRangeException(String.valueOf(taskIndex));","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"thaddeusong"},"content":" task.setCompleted();","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"thaddeusong"},"content":" return Message.onTaskComplete(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"thaddeusong"},"content":" * Represents a command to unmark a completed task.","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"thaddeusong"},"content":"class Unmark extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"thaddeusong"},"content":" protected Unmark(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application)","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"thaddeusong"},"content":" throws InvalidTaskIndexException, TaskIndexOutOfRangeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"thaddeusong"},"content":" int taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"thaddeusong"},"content":" Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"thaddeusong"},"content":" taskIndex \u003d Integer.parseInt(content) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"thaddeusong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTaskIndexException(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"thaddeusong"},"content":" task \u003d application.getTask(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"thaddeusong"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"thaddeusong"},"content":" throw new TaskIndexOutOfRangeException(String.valueOf(taskIndex));","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":186,"author":{"gitId":"thaddeusong"},"content":" task.setUncompleted();","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"thaddeusong"},"content":" return Message.onTaskUncomplete(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":189,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"thaddeusong"},"content":"class Find extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"thaddeusong"},"content":" public Find(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application) {","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"thaddeusong"},"content":" return Message.onTaskFind().chainTo(","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"thaddeusong"},"content":" Message.accumulateList(Message.convertTasks(application.findMatchingTasks(content)), \"\\n\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"thaddeusong"},"content":" \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"thaddeusong"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"thaddeusong"},"content":"class Delete extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":208,"author":{"gitId":"thaddeusong"},"content":" protected Delete(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":210,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":211,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":212,"author":{"gitId":"thaddeusong"},"content":" public Message execute(Application application)","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"thaddeusong"},"content":" throws InvalidTaskIndexException, TaskIndexOutOfRangeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":214,"author":{"gitId":"thaddeusong"},"content":" int taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":215,"author":{"gitId":"thaddeusong"},"content":" Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":216,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":217,"author":{"gitId":"thaddeusong"},"content":" taskIndex \u003d Integer.parseInt(content) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":218,"author":{"gitId":"thaddeusong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":219,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTaskIndexException(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":220,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":221,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":222,"author":{"gitId":"thaddeusong"},"content":" task \u003d application.getTask(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"thaddeusong"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":224,"author":{"gitId":"thaddeusong"},"content":" throw new TaskIndexOutOfRangeException(String.valueOf(taskIndex));","lastModifiedDate":"2023-08-29"},{"lineNumber":225,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":226,"author":{"gitId":"thaddeusong"},"content":" application.removeTask((task));","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"thaddeusong"},"content":" return Message.onTaskDelete(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":229,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":229}},{"path":"src/main/java/duke/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import duke.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import duke.message.Message;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"import duke.parser.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" * Represents the main class of the Duke application, responsible for initializing and running the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"public class Duke {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" @SuppressWarnings(\"FieldCanBeLocal\")","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" private final String name \u003d \"Iris\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" private Application application;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" private boolean isAwake \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" * Constructs a Duke object and initializes the components.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" * @param filePath The file path for data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" Storage storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" application \u003d new Application(this, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":" ui.showError(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" * Initiates the execution of the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":" ui.showMessage(Message.onGreeting(name));","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" while (isAwake) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":" if (ui.hasNext()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":" ui.showMessage(ui.parseLine().execute(application));","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" } catch (DukeException de) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":" ui.showError(de);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"thaddeusong"},"content":" * Shuts down the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"thaddeusong"},"content":" public void kill() {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"thaddeusong"},"content":" isAwake \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"thaddeusong"},"content":" * Entry point for Duke.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"thaddeusong"},"content":" * @param args Unused.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"thaddeusong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"thaddeusong"},"content":" new Duke(\"C:\\\\Users\\\\ortt2\\\\Documents\\\\ip\\\\src\\\\data\\\\tasks.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"thaddeusong":67}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.exception;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import duke.message.ErrorMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * An abstract class for custom exceptions specific to Duke.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"public abstract class DukeException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" protected DukeException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" * Generates an error message object based on the exception\u0027s content.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" * @param content Additional content related to the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" * @return An ErrorMessage object representing the error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" public abstract ErrorMessage generateErrorMessage(String content);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":21}},{"path":"src/main/java/duke/exception/EmptyTaskDescException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.exception;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import duke.message.ErrorMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * An exception that is thrown when a task description is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"public class EmptyTaskDescException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" public EmptyTaskDescException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" public ErrorMessage generateErrorMessage(String content) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" return new ErrorMessage(\"A task description cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":19}},{"path":"src/main/java/duke/exception/FileNotFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.exception;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import duke.message.ErrorMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":" * An exception that is thrown when the file cannot be found.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"public class FileNotFoundException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":" public FileNotFoundException(String name) {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" super(name);","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" public ErrorMessage generateErrorMessage(String content) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" return new ErrorMessage(\"There is no file at \" + content);","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":15}},{"path":"src/main/java/duke/exception/InvalidTaskFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.exception;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import duke.message.ErrorMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * An exception that is thrown when a task format is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"public class InvalidTaskFormatException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" public InvalidTaskFormatException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" public ErrorMessage generateErrorMessage(String content) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" return new ErrorMessage(content + \" isn\u0027t the right format for this kind of task.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":17}},{"path":"src/main/java/duke/exception/InvalidTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.exception;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import duke.message.ErrorMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * An exception that is thrown when a task index is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"public class InvalidTaskIndexException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" public InvalidTaskIndexException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" public ErrorMessage generateErrorMessage(String content) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" return new ErrorMessage(content + \" isn\u0027t a number.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":17}},{"path":"src/main/java/duke/exception/InvalidTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.exception;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import duke.message.ErrorMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * An exception that is thrown when a time format is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"public class InvalidTimeFormatException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" public InvalidTimeFormatException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" public ErrorMessage generateErrorMessage(String content) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" return new ErrorMessage(content + \" isn\u0027t the right time format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"thaddeusong":17}},{"path":"src/main/java/duke/exception/NoCommandFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.exception;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import duke.message.ErrorMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * An exception that is thrown when a no matching command is found.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"public class NoCommandFoundException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" public NoCommandFoundException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" public ErrorMessage generateErrorMessage(String content) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" return new ErrorMessage(\"Sorry, I don\u0027t know what \" + content + \" means.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":18}},{"path":"src/main/java/duke/exception/TaskIndexOutOfRangeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.exception;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import duke.message.ErrorMessage;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * An exception that is thrown when a task index is out of range.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"public class TaskIndexOutOfRangeException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" public TaskIndexOutOfRangeException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" public ErrorMessage generateErrorMessage(String content) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" return new ErrorMessage(content + 1 + \" is out of range of the task list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":17}},{"path":"src/main/java/duke/message/ErrorMessage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.message;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":" * Represents an error message that can be displayed to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":" * Extends the {@link Message} class.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"public class ErrorMessage extends Message {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" private final String errorLine \u003d \"!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" public ErrorMessage(String content) {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" super(content);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" public void print() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" System.out.println(errorLine);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" System.out.println(errorLine);","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":21}},{"path":"src/main/java/duke/message/Message.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.message;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import java.util.List;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"public class Message {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" private static final String horizontalLine \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" private final String content;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" public Message(String content) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" this.content \u003d content;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" public static List\u003cMessage\u003e convertTasks(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" List\u003cMessage\u003e messages \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" for (int i \u003d 0; i \u003c taskList.getTaskCount(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":" messages.add((new Message((i + 1) + \". \" + taskList.getTask(i).toString())));","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" return messages;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" public static Message onGreeting(String name) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" return new Message(\"Hello, I\u0027m \" + name + \".\\n\" + \"What can I do for you?\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" public static Message onExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" return new Message(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":" public static Message onTaskAdd(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" return new Message(\"added: \" + task.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" public static Message onTaskComplete(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" return new Message(\"Nice! I\u0027ve marked this task as done:\\n\" + task.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":" public static Message onTaskUncomplete(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" return new Message(\"OK, I\u0027ve marked this task as not done yet:\\n\" + task.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":" public static Message onTaskDelete(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":" return new Message(\"I\u0027ve removed this task: \\n\" + task.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":" public static Message onTaskFind() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":" return new Message(\"Here are the matching tasks in your list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":" public static Message onList(TaskList tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":" return new Message(\"There are \" + tasks.getTaskCount() + \" tasks in the list.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"thaddeusong"},"content":" public Message chainTo(Message message, String splitString) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"thaddeusong"},"content":" return new Message(this.content + splitString + message.content);","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"thaddeusong"},"content":" public static Message accumulateList(List\u003c? extends Message\u003e messages, String splitString) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"thaddeusong"},"content":" Message chainedMessage \u003d new Message(\"\");","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"thaddeusong"},"content":" if (messages.size() \u003e 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"thaddeusong"},"content":" chainedMessage \u003d messages.get(0);","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"thaddeusong"},"content":" for (int i \u003d 1; i \u003c messages.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"thaddeusong"},"content":" Message message \u003d messages.get(i);","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"thaddeusong"},"content":" chainedMessage \u003d chainedMessage.chainTo(message, splitString);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"thaddeusong"},"content":" return chainedMessage;","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"thaddeusong"},"content":" public void print() {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"thaddeusong"},"content":" System.out.println(horizontalLine);","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"thaddeusong"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"thaddeusong"},"content":" System.out.println(horizontalLine);","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"thaddeusong"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"thaddeusong"},"content":" return content;","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"thaddeusong":83}},{"path":"src/main/java/duke/parser/InputParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * Parses user input and returns the corresponding command object.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"public class InputParser {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" public Command parseInput(String input) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" String[] inputComponents \u003d input.trim().split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" String commandName \u003d inputComponents[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" String content \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" if (inputComponents.length \u003e 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" content \u003d inputComponents[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" return Command.of(commandName, content);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":18}},{"path":"src/main/java/duke/parser/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"import duke.message.Message;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" * Handles user interactions, input parsing, and displaying messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" private final Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" private final InputParser parser \u003d new InputParser();","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" * Parses the next line of user input into a Command object.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" * @return A Command object corresponding to the parsed user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":" * @throws DukeException If there\u0027s an issue with parsing the input or creating the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" public Command parseLine() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" return parser.parseInput(scanner.nextLine());","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" * Checks if there is more user input to be read.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" * @return true if there is more input, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":" public boolean hasNext() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":" return scanner.hasNext();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":" * Displays the provided message to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" * @param message The message to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":" public void showMessage(Message message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" message.print();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":" * Displays an error message generated from the provided DukeException.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":" * @param e The DukeException that triggered the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":" public void showError(DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":" e.generateErrorMessage(e.getMessage()).print();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":52}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import java.io.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" private final String filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" private File file;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" private BufferedWriter bufferedWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" public Storage(String filePath) throws FileNotFoundException {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" file \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter \u003d new BufferedWriter(new FileWriter(file, true));","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":" throw new FileNotFoundException(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" public void addLine(String line) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter.write(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter.newLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter.flush();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" public String getLine(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":" BufferedReader bufferedReader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" String line;","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" int currentLine \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":" while ((line \u003d bufferedReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":" if (index \u003d\u003d currentLine) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" return line;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":" currentLine++;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":" return \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":" public void removeLine(int lineIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"thaddeusong"},"content":" List\u003cString\u003e lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"thaddeusong"},"content":" BufferedReader bufferedReader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"thaddeusong"},"content":" String line;","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"thaddeusong"},"content":" int currentLine \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"thaddeusong"},"content":" while ((line \u003d bufferedReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"thaddeusong"},"content":" if (currentLine !\u003d lineIndex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"thaddeusong"},"content":" lines.add(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"thaddeusong"},"content":" currentLine++;","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"thaddeusong"},"content":" bufferedReader.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"thaddeusong"},"content":" file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter \u003d new BufferedWriter(new FileWriter(file));","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"thaddeusong"},"content":" for (String lineToAdd : lines) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter.write(lineToAdd);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter.newLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"thaddeusong"},"content":" bufferedWriter.flush();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"thaddeusong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"thaddeusong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"thaddeusong"},"content":" public void clear() {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"thaddeusong"},"content":" // Create a FileWriter with the given file path","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"thaddeusong"},"content":" FileWriter fileWriter \u003d new FileWriter(file);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"thaddeusong"},"content":" // Overwrite the file content with an empty string","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"thaddeusong"},"content":" fileWriter.write(\"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"thaddeusong"},"content":" // Close the FileWriter","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"thaddeusong"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"thaddeusong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"thaddeusong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":92}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.InvalidTaskFormatException;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.InvalidTimeFormatException;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" * Represents a deadline task that has a name and deadline time.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" * Extends the {@link Task} class.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" private final LocalDateTime deadlineTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" * Constructor for a Deadline task.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" * @param task The information about the Deadline task.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" * @throws DukeException when formatting errors occur.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" public Deadline(String task) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" super(task.split(\"/\", 2)[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" String[] taskComponents \u003d task.split(\"/\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" String[] timeComponents;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":" timeComponents \u003d taskComponents[1].split(\" \", 3);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":" if (timeComponents.length \u003c 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTimeFormatException(taskComponents[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTaskFormatException(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":" deadlineTime \u003d LocalDateTime.of(LocalDate.parse(timeComponents[1]),","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":" LocalTime.parse(timeComponents[2]));","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTimeFormatException(taskComponents[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":" * Returns a Deadline object parsed from the save format.","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":" * @param savedTask The string representing the task in the save format.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":" * @return A new Deadline object.","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":" * @throws DukeException when the formatting is wrong.","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":" public static Deadline parseSaveFormat(String savedTask) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"thaddeusong"},"content":" String[] components \u003d savedTask.split(\"\\\\|\", 3);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"thaddeusong"},"content":" Deadline task \u003d new Deadline(components[1] + \"/by \" + components[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"thaddeusong"},"content":" if (components[2].equals(\"true\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"thaddeusong"},"content":" task.setCompleted();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"thaddeusong"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"thaddeusong"},"content":" task.setUncompleted();","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"thaddeusong"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"thaddeusong"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"thaddeusong"},"content":" return \"[D]\" + super.toString() + \" (by: \" + deadlineTime.toLocalDate().toString() + \",\"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"thaddeusong"},"content":" + deadlineTime.toLocalTime().toString() + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"thaddeusong"},"content":" * Converts this Deadline into a save format string.","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"thaddeusong"},"content":" * @return A string representing this Deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"thaddeusong"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"thaddeusong"},"content":" return \"deadline:\" + deadlineTime.toLocalDate().toString() + \" \"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"thaddeusong"},"content":" + deadlineTime.toLocalTime().toString() + \"|\" + super.toSaveFormat();","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":77}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.InvalidTaskFormatException;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.InvalidTimeFormatException;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" * Represents an event task that has a name, start time, and end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" * Extends the {@link Task} class.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" private final LocalDateTime startTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" private final LocalDateTime endTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" * Constructor for an Event Task.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" * @param task The information about the Event task.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" * @throws DukeException When formatting errors occur.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" public Event(String task) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" super(task.split(\"/\", 3)[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" String[] taskComponents \u003d task.split(\"/\", 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" String[] startTimeComponents;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" String[] endTimeComponents;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":" startTimeComponents \u003d taskComponents[1].split(\" \", 3);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":" endTimeComponents \u003d taskComponents[2].split(\" \", 3);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTaskFormatException(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" if (startTimeComponents.length \u003c 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTimeFormatException(taskComponents[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" this.startTime \u003d LocalDateTime.of(LocalDate.parse(startTimeComponents[1]),","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" LocalTime.parse(startTimeComponents[2]));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTimeFormatException(taskComponents[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" if (endTimeComponents.length \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTimeFormatException(taskComponents[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":" this.endTime \u003d LocalDateTime.of(LocalDate.parse(endTimeComponents[1]),","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":" LocalTime.parse(endTimeComponents[2]));","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"thaddeusong"},"content":" throw new InvalidTimeFormatException(taskComponents[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"thaddeusong"},"content":" * Returns a Event object parsed from the save format.","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"thaddeusong"},"content":" * @param savedTask The string representing the task in the save format.","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"thaddeusong"},"content":" * @return A new Deadline object.","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"thaddeusong"},"content":" * @throws DukeException when the formatting is wrong.","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"thaddeusong"},"content":" public static Event parseSaveFormat(String savedTask) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"thaddeusong"},"content":" String[] components \u003d savedTask.split(\"\\\\|\", 4);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"thaddeusong"},"content":" Event task \u003d new Event(components[2] + \"/from \" + components[0] + \"/to \" + components[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"thaddeusong"},"content":" if (components[3].equals(\"true\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"thaddeusong"},"content":" task.setCompleted();","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"thaddeusong"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"thaddeusong"},"content":" task.setUncompleted();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"thaddeusong"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"thaddeusong"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"thaddeusong"},"content":" return \"[E]\" + super.toString() + \" (from: \"","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"thaddeusong"},"content":" + startTime.toLocalDate().toString() + \",\" + startTime.toLocalTime().toString() + \" to: \"","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"thaddeusong"},"content":" + endTime.toLocalDate().toString() + \",\" + endTime.toLocalTime().toString() + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"thaddeusong"},"content":" * Converts this Event into a save format string.","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"thaddeusong"},"content":" * @return A string representing this Deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"thaddeusong"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"thaddeusong"},"content":" return \"event:\"","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"thaddeusong"},"content":" + startTime.toLocalDate().toString() + \" \" + startTime.toLocalTime().toString() + \"|\"","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"thaddeusong"},"content":" + endTime.toLocalDate().toString() + \" \" + endTime.toLocalTime() + \"|\" + super.toSaveFormat();","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":90}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.EmptyTaskDescException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.NoCommandFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":" * Represents a task with a name and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" private final String name;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" private boolean completed \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" public Task(String name) throws EmptyTaskDescException {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" if (name.isBlank()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" throw new EmptyTaskDescException(\"Name cannot be blank.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" * Parses a task from a line of text.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" * @param line The line of text containing task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" * @return A Task object parsed from the input line.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" * @throws DukeException If there\u0027s an issue with parsing the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" public static Task parse(String line)","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" String[] components \u003d line.split(\":\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" TaskType taskType \u003d components[0].equals(\"todo\") ? TaskType.TODO","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":" : components[0].equals(\"deadline\") ? TaskType.DEADLINE","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"thaddeusong"},"content":" : TaskType.EVENT;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"thaddeusong"},"content":" String content \u003d components[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"thaddeusong"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"thaddeusong"},"content":" case TODO:","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"thaddeusong"},"content":" return Todo.unpackSaveFormat(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"thaddeusong"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"thaddeusong"},"content":" return Deadline.parseSaveFormat(content);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"thaddeusong"},"content":" case EVENT:","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"thaddeusong"},"content":" return Event.parseSaveFormat(content);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"thaddeusong"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"thaddeusong"},"content":" throw new NoCommandFoundException(taskType.name());","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"thaddeusong"},"content":" public boolean containsString(String content) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"thaddeusong"},"content":" return name.contains(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"thaddeusong"},"content":" public enum TaskType {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"thaddeusong"},"content":" TODO,","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"thaddeusong"},"content":" DEADLINE,","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"thaddeusong"},"content":" EVENT","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"thaddeusong"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"thaddeusong"},"content":" * Creates a Task object based on the provided content and task type.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"thaddeusong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"thaddeusong"},"content":" * @param task The content of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"thaddeusong"},"content":" * @param taskType The type of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"thaddeusong"},"content":" * @return A Task object of the specified type.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"thaddeusong"},"content":" * @throws DukeException If there\u0027s an issue with creating the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"thaddeusong"},"content":" public static Task of(String task, TaskType taskType)","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"thaddeusong"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"thaddeusong"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"thaddeusong"},"content":" case TODO:","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"thaddeusong"},"content":" return new Todo(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"thaddeusong"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"thaddeusong"},"content":" return new Deadline(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"thaddeusong"},"content":" case EVENT:","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"thaddeusong"},"content":" return new Event(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"thaddeusong"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"thaddeusong"},"content":" throw new NoCommandFoundException(taskType.name());","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"thaddeusong"},"content":" public void setCompleted() {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"thaddeusong"},"content":" completed \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"thaddeusong"},"content":" public void setUncompleted() {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"thaddeusong"},"content":" completed \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"thaddeusong"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"thaddeusong"},"content":" return completed ? \"[X] \" + name : \"[ ] \" + name;","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"thaddeusong"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"thaddeusong"},"content":" return name + \"|\" + completed;","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"thaddeusong":92}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" private final List\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" return taskList.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" public void removeTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" taskList.remove(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" public int findTaskIndex(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" return taskList.indexOf(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" public int getTaskCount() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" return taskList.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"thaddeusong":28}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.EmptyTaskDescException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":" * Represents a to-do task that has a name.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":" * Extends the {@link Task} class.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" public Todo(String task) throws EmptyTaskDescException {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" super(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" public static Todo unpackSaveFormat(String savedTask) throws EmptyTaskDescException {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":" String[] components \u003d savedTask.split(\"\\\\|\", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" Todo task \u003d new Todo(components[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" if (components[1].equals(\"true\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" task.setCompleted();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" task.setUncompleted();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"thaddeusong"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"thaddeusong"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"thaddeusong"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"thaddeusong"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"thaddeusong"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"thaddeusong"},"content":" return \"todo:\" + super.toSaveFormat();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"thaddeusong":31}},{"path":"src/test/java/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" public void testDeadlineConstructor() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" assertEquals(new Deadline(\"a/by 2020-02-10 10:15\").toString(), \"[D][ ] a (by: 2020-02-10,10:15)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" public void testDeadlineToSaveFormat() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" assertEquals(new Deadline(\"a/by 2020-02-10 10:15\").toSaveFormat(), \"deadline:2020-02-10,10:15|a|false\");","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"thaddeusong":19}},{"path":"src/test/java/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" public void testEventConstructor() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" assertEquals(new Event(\"a/from 2020-02-10 10:15/to 2020-02-10 10:20\").toString(), \"[E][ ] a (from: 2020-02-10,10:15 to: 2020-02-10,10:20)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" public void testEventToSaveFormat() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" assertEquals(new Event(\"a/from 2020-02-10 10:15/to 2020-02-10 10:20\").toSaveFormat(), \"event:2020-02-10 10:15|2020-02-10 10:20|a|false\");","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"thaddeusong":19}},{"path":"src/test/java/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"import duke.exception.EmptyTaskDescException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":" public void testTodoConstructor() throws EmptyTaskDescException {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":" assertEquals(new Todo(\"a\").toString(), \"[T][ ] a\");","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"thaddeusong"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"thaddeusong"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":" public void testTodoToSaveFormat() throws EmptyTaskDescException {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" assertEquals(new Todo(\"a\").toSaveFormat(), \"todo:a|false\");","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"thaddeusong":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"thaddeusong"},"content":"hello","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"thaddeusong"},"content":"todo a","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"thaddeusong"},"content":"deadline b / by jun 1","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"thaddeusong"},"content":"event c / from jun 1 / to jun 2","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"thaddeusong"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"thaddeusong"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"thaddeusong"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"thaddeusong"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"thaddeusong"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"thaddeusong"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":"list","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"thaddeusong":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":"thaddeusong"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\Task\\*.java","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"thaddeusong"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\Duke\\*.java","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"thaddeusong"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\DukeException\\*.java","lastModifiedDate":"2023-08-28"},{"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":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-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"}],"authorContributionMap":{"thaddeusong":3,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"thaddeusong"},"content":"if ! (javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"thaddeusong"},"content":" javac -cp ..\\src\\main\\java\\Duke -Xlint:none -d ..\\bin ..\\src\\main\\java\\Duke\\*.java","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"thaddeusong"},"content":" javac -cp ..\\src\\main\\java\\DukeException -Xlint:none -d ..\\bin ..\\src\\main\\java\\DukeException\\*.java","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"thaddeusong"},"content":" javac -cp ..\\src\\main\\java\\Task -Xlint:none -d ..\\bin ..\\src\\main\\java\\Task\\*.java)","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"thaddeusong":4,"-":37}}] diff --git a/thaddeusong_ip_master/commits.json b/thaddeusong_ip_master/commits.json index 6e80a6c7..e866e0fb 100644 --- a/thaddeusong_ip_master/commits.json +++ b/thaddeusong_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"thaddeusong":[{"date":"2023-08-24","commitResults":[{"hash":"15766d22aa5e67d4900b242fa9661d8af25ee229","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":6}}},{"hash":"21966a7dba450a6c4383ab8aa7021794b0b5188e","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":11}}},{"hash":"b07c77b3fe54a1e946e88bc68bafb84e1729366a","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":9}}},{"hash":"db8bf4c7efacf2389623504014d554c9fe25e9bf","isMergeCommit":false,"messageTitle":"Level-3 and Level-4","messageBody":"","tags":["Level-4","Level-3","A-Inheritance","A-Enums","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":142,"deletions":15}}},{"hash":"7b7c3acf21f11354e53aeae885e8f6612ad9cb7c","isMergeCommit":false,"messageTitle":"Add Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"bat":{"insertions":1,"deletions":0},"sh":{"insertions":2,"deletions":1}}},{"hash":"8db79d915ecdf1ccb5293572b8bfd8cc218966e0","isMergeCommit":false,"messageTitle":"Add Exceptions","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":51}}},{"hash":"30075b808547faf78041df5810d1280e54634921","isMergeCommit":false,"messageTitle":"Add Delete method","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":2}}}]},{"date":"2023-08-28","commitResults":[{"hash":"57495cea96fbe43d29ddb26c3bf1d22f400bcce0","isMergeCommit":false,"messageTitle":"Use More OOP","messageBody":"(cherry picked from commit 735bfbe59b74709b7cea91ab32e9e914a9c4c062)\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":145,"deletions":61}}},{"hash":"04980d04f7a332d9fea5525043b773da5b4d4ae7","isMergeCommit":false,"messageTitle":"Add File Saving","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":51},"bat":{"insertions":3,"deletions":2},"sh":{"insertions":4,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"4f1c165992c67b962afd594af99ab13af76d7c0b","isMergeCommit":false,"messageTitle":"Reorganize Files","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":588,"deletions":373}}},{"hash":"6cce3d4add086b466ecb4a0319d45d16c226c2e2","isMergeCommit":false,"messageTitle":"Add Gradle Support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":42,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"bab945044e6f7fb70887998ff646ebe980b89d99","isMergeCommit":false,"messageTitle":"Add JUnit Tests to Deadline and Todo","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":4}}},{"hash":"dadeac06d02dfa3ec33d8ba39215c9d71da98114","isMergeCommit":false,"messageTitle":"Add File Saving","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":11}}},{"hash":"df68d43fb61d8867373aaa55711d8cdf9cd68cbf","isMergeCommit":false,"messageTitle":"Add LocalDateTime representation","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":34}}}]},{"date":"2023-08-31","commitResults":[{"hash":"b6f226b0e3c678c3e35d5683bc5584777ed446dc","isMergeCommit":false,"messageTitle":"Refactor Class Names","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":122}}},{"hash":"4bc795a6a854bb61a2d169b954c949ee652292c5","isMergeCommit":false,"messageTitle":"Refactor Class Names","messageBody":"(cherry picked from commit b6f226b0e3c678c3e35d5683bc5584777ed446dc)\n","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":122}}},{"hash":"2045c3cfd822ef9877bea3c41264951426d37a54","isMergeCommit":false,"messageTitle":"Fix Task Constructors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":54}}},{"hash":"f8cc6fb90b2f996f2e87c8fb888fcb7851739023","isMergeCommit":false,"messageTitle":"Fix Task Constructors","messageBody":"(cherry picked from commit 2045c3cfd822ef9877bea3c41264951426d37a54)\n","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":54}}},{"hash":"7c63fe58f2b56c25a4ca4f72694951e0a7d8dbc3","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":234,"deletions":11}}},{"hash":"f4323448f0d0fc764f15bcda60d9f4e7d1cc92d9","isMergeCommit":false,"messageTitle":"Add Unversioned Files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":162,"deletions":2}}},{"hash":"8cfb1eb21ae3a290b51f71687c0bd6d11ecf3710","isMergeCommit":false,"messageTitle":"Add Unversioned Files","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":162,"deletions":75}}},{"hash":"513657db88035ebc58e88d24b4c83707a4fa3b4b","isMergeCommit":false,"messageTitle":"Follow Coding Standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":115}}},{"hash":"efb34ea628e1f43957e3077cc68d17c686d1e69f","isMergeCommit":false,"messageTitle":"Add Find Command","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":20}}},{"hash":"01ab3d567aa9c8963ca63b2f894e52c2403ec2d3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke/application/Application.java\n#\tsrc/main/java/Duke/command/Command.java\n#\tsrc/main/java/Duke/message/Message.java\n#\tsrc/main/java/Duke/task/Deadline.java\n","fileTypesAndContributionMap":{}},{"hash":"b804fd4367b08db752a64ec1ac76724572bfef84","isMergeCommit":false,"messageTitle":"Resolve Merge Conflicts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":46}}},{"hash":"8e80c82bd699510e63a4d59fd151133705e30941","isMergeCommit":true,"messageTitle":"Resolve Merge Conflicts","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"e332828c1ae2ee2f5828c0d57373be65e63274b5","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":30,"deletions":24}}}]}]},"authorFileTypeContributionMap":{"thaddeusong":{"java":1152,"md":25,"fxml":0,"sh":4,"bat":3,"gradle":0,"txt":11}},"authorContributionVariance":{"thaddeusong":177764.34},"authorDisplayNameMap":{"thaddeusong":"CS2103T-F10-3 ONG ..DEUS"}} +{"authorDailyContributionsMap":{"thaddeusong":[{"date":"2023-08-24","commitResults":[{"hash":"15766d22aa5e67d4900b242fa9661d8af25ee229","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":6}}},{"hash":"21966a7dba450a6c4383ab8aa7021794b0b5188e","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":11}}},{"hash":"b07c77b3fe54a1e946e88bc68bafb84e1729366a","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":9}}},{"hash":"db8bf4c7efacf2389623504014d554c9fe25e9bf","isMergeCommit":false,"messageTitle":"Level-3 and Level-4","messageBody":"","tags":["Level-4","Level-3","A-Inheritance","A-Enums","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":142,"deletions":15}}},{"hash":"7b7c3acf21f11354e53aeae885e8f6612ad9cb7c","isMergeCommit":false,"messageTitle":"Add Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"bat":{"insertions":1,"deletions":0},"sh":{"insertions":2,"deletions":1}}},{"hash":"8db79d915ecdf1ccb5293572b8bfd8cc218966e0","isMergeCommit":false,"messageTitle":"Add Exceptions","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":51}}},{"hash":"30075b808547faf78041df5810d1280e54634921","isMergeCommit":false,"messageTitle":"Add Delete method","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":2}}}]},{"date":"2023-08-28","commitResults":[{"hash":"57495cea96fbe43d29ddb26c3bf1d22f400bcce0","isMergeCommit":false,"messageTitle":"Use More OOP","messageBody":"(cherry picked from commit 735bfbe59b74709b7cea91ab32e9e914a9c4c062)\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":145,"deletions":61}}},{"hash":"04980d04f7a332d9fea5525043b773da5b4d4ae7","isMergeCommit":false,"messageTitle":"Add File Saving","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":51},"bat":{"insertions":3,"deletions":2},"sh":{"insertions":4,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"4f1c165992c67b962afd594af99ab13af76d7c0b","isMergeCommit":false,"messageTitle":"Reorganize Files","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":588,"deletions":373}}},{"hash":"6cce3d4add086b466ecb4a0319d45d16c226c2e2","isMergeCommit":false,"messageTitle":"Add Gradle Support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":42,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"bab945044e6f7fb70887998ff646ebe980b89d99","isMergeCommit":false,"messageTitle":"Add JUnit Tests to Deadline and Todo","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":4}}},{"hash":"dadeac06d02dfa3ec33d8ba39215c9d71da98114","isMergeCommit":false,"messageTitle":"Add File Saving","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":11}}},{"hash":"df68d43fb61d8867373aaa55711d8cdf9cd68cbf","isMergeCommit":false,"messageTitle":"Add LocalDateTime representation","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":34}}}]},{"date":"2023-08-31","commitResults":[{"hash":"b6f226b0e3c678c3e35d5683bc5584777ed446dc","isMergeCommit":false,"messageTitle":"Refactor Class Names","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":122}}},{"hash":"4bc795a6a854bb61a2d169b954c949ee652292c5","isMergeCommit":false,"messageTitle":"Refactor Class Names","messageBody":"(cherry picked from commit b6f226b0e3c678c3e35d5683bc5584777ed446dc)\n","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":122}}},{"hash":"2045c3cfd822ef9877bea3c41264951426d37a54","isMergeCommit":false,"messageTitle":"Fix Task Constructors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":54}}},{"hash":"f8cc6fb90b2f996f2e87c8fb888fcb7851739023","isMergeCommit":false,"messageTitle":"Fix Task Constructors","messageBody":"(cherry picked from commit 2045c3cfd822ef9877bea3c41264951426d37a54)\n","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":54}}},{"hash":"7c63fe58f2b56c25a4ca4f72694951e0a7d8dbc3","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":234,"deletions":11}}},{"hash":"f4323448f0d0fc764f15bcda60d9f4e7d1cc92d9","isMergeCommit":false,"messageTitle":"Add Unversioned Files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":162,"deletions":2}}},{"hash":"8cfb1eb21ae3a290b51f71687c0bd6d11ecf3710","isMergeCommit":false,"messageTitle":"Add Unversioned Files","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":162,"deletions":75}}},{"hash":"513657db88035ebc58e88d24b4c83707a4fa3b4b","isMergeCommit":false,"messageTitle":"Follow Coding Standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":115}}},{"hash":"efb34ea628e1f43957e3077cc68d17c686d1e69f","isMergeCommit":false,"messageTitle":"Add Find Command","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":20}}},{"hash":"01ab3d567aa9c8963ca63b2f894e52c2403ec2d3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke/application/Application.java\n#\tsrc/main/java/Duke/command/Command.java\n#\tsrc/main/java/Duke/message/Message.java\n#\tsrc/main/java/Duke/task/Deadline.java\n","fileTypesAndContributionMap":{}},{"hash":"b804fd4367b08db752a64ec1ac76724572bfef84","isMergeCommit":false,"messageTitle":"Resolve Merge Conflicts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":46}}},{"hash":"8e80c82bd699510e63a4d59fd151133705e30941","isMergeCommit":true,"messageTitle":"Resolve Merge Conflicts","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"e332828c1ae2ee2f5828c0d57373be65e63274b5","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":30,"deletions":24}}},{"hash":"77abd587c2aca5fd7c37a32599bf5563f1dc7d4c","isMergeCommit":false,"messageTitle":"Fix Style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"32fcbcb9f6afd3bb4861e7bc74de1413a3107eb9","isMergeCommit":false,"messageTitle":"Fix Style","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":191,"deletions":145},"md":{"insertions":2,"deletions":2}}},{"hash":"7a9e7c2c4abe87da8a6dc11779ce401c9a8e38c9","isMergeCommit":true,"messageTitle":"Fix README Conflict","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"thaddeusong":{"java":1198,"md":25,"fxml":0,"sh":4,"bat":3,"gradle":5,"txt":11}},"authorContributionVariance":{"thaddeusong":178309.05},"authorDisplayNameMap":{"thaddeusong":"CS2103T-F10-3 ONG ..DEUS"}} diff --git a/tjch-o_ip_master/authorship.json b/tjch-o_ip_master/authorship.json index 265a9498..edaf65b9 100644 --- a/tjch-o_ip_master/authorship.json +++ b/tjch-o_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" mainClass.set(\"miles.Miles\")","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" archiveBaseName \u003d \"miles\"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"tjch-o":5,"-":42}},{"path":"data/test1.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"D | [ ] | buy soju | 2023-08-26 2300","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"E | [X] | orbital splashdown | 2023-08-30 1700 | 2023-08-30 1930","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"T | [ ] | eat mcgriddles","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"tjch-o":3}},{"path":"src/main/java/miles/Miles.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" * Represents our chat bot, Miles.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"public class Miles {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" private static String filePath \u003d \"../../../data/miles.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" private static String directoryPath \u003d \"../../../data\";","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" * Constructor for Miles.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" * @param filePath The path to the file where the tasks are stored.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" public Miles(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" this.storage \u003d new Storage(filePath, directoryPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" this.taskList \u003d this.storage.loadFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" * Runs the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" public void run() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" this.ui.greet();","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" boolean shouldExit \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" while (!shouldExit) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" Command c \u003d parser.parse(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" c.execute(this.taskList, this.ui, this.storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" shouldExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" } catch (MilesException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" this.ui.printErrorMsg(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" continue;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" scanner.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" new Miles(filePath).run();","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"tjch-o":53,"-":2}},{"path":"src/main/java/miles/MilesException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":" * Class that handles exceptions that are raised or appear in the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"*/","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"public class MilesException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" public MilesException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":10}},{"path":"src/main/java/miles/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.command.AddDeadlineCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.command.AddEventCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.command.AddToDoCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"import miles.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"import miles.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"import miles.command.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"import miles.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"import miles.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"import miles.command.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Represents the parsing of user input, making sense of what command the user has given.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":"*/","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" * Parses the input that the user gives.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" * @return a Command object that corresponds to the user input","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" public Command parse(String input) throws MilesException {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"unmark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" return new UnmarkCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"mark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" return new MarkCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"todo\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" return new AddToDoCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"deadline\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" return new AddDeadlineCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"event\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" return new AddEventCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"delete\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" return new DeleteCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" } else if (input.contains(\"find\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" return new FindCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" } else if (input.equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" String errorMsg \u003d \"Input a task my brother.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" throw new MilesException(errorMsg);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" String errorMsg \u003d \"I\u0027m sorry brother, I do not have a Scooby :-(\";","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" throw new MilesException(errorMsg);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":50}},{"path":"src/main/java/miles/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"import miles.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"import miles.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"import miles.task.ToDo;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Represents the storage of the tasks, where we can load our tasks from a file or save our tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * into a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" private String filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" private String directoryPath;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" * @param filePath file path of the text file","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" * @param directoryPath directory path of the text file","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" public Storage(String filePath, String directoryPath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" this.directoryPath \u003d directoryPath;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" * Adds task into task list and triggers a save to the text file when the user adds a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" * @param task the task to be saved","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" * @param taskList the task list containing the task to be saved","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" public void saveWhenAddTask(Task task, TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" this.saveFile(taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" * Loads the file from the data folder if it exists, else it creates a new file for users to ","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" * store their tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" * @returns TaskList a TaskList object containing the tasks from the file","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" * @throws IOException if there is an error creating the file ","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" public TaskList loadFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" File directory \u003d new File(this.directoryPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" File newFile \u003d new File(this.filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" // check if directory exists","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" directory.mkdirs();","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" // check if file exists","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" if (!newFile.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" newFile.createNewFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" System.out.println(\"created a new file\");","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" return new TaskList(); ","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" Scanner scanner \u003d new Scanner(newFile);","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" String[] parts \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" String taskType \u003d parts[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" String status \u003d parts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" String task \u003d parts[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" Task newTask \u003d new ToDo(\"todo \" + task);","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" taskList.updateTaskStatusFromFile(newTask, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" String status \u003d parts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" String task \u003d parts[2].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" String deadline \u003d parts[3].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" Task newTask \u003d new Deadline(task, deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" taskList.updateTaskStatusFromFile(newTask, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(newTask); ","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" String status \u003d parts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" String task \u003d parts[2].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" String from \u003d parts[3].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" String to \u003d parts[4].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":" Task newTask \u003d new Event(task, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" taskList.updateTaskStatusFromFile(newTask, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"tjch-o"},"content":" scanner.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"tjch-o"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"tjch-o"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"tjch-o"},"content":" this.ui.printErrorMsg(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"tjch-o"},"content":" return new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"tjch-o"},"content":" * Saves the tasks in the task list to the text file.","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"tjch-o"},"content":" * @param taskList the task list containing the tasks to be saved","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"tjch-o"},"content":" * @throws IOException if there is an error writing to the file","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"tjch-o"},"content":" public void saveFile(TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"tjch-o"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"tjch-o"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"tjch-o"},"content":" BufferedWriter bufferedWriter \u003d new BufferedWriter(fileWriter);","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"tjch-o"},"content":" for (int i \u003d 0; i \u003c n; i +\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"tjch-o"},"content":" Task currentTask \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"tjch-o"},"content":" String s \u003d currentTask.saveStringToFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"tjch-o"},"content":" bufferedWriter.write(s);","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"tjch-o"},"content":" bufferedWriter.newLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"tjch-o"},"content":" bufferedWriter.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"tjch-o"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"tjch-o"},"content":" this.ui.printErrorMsg(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":138}},{"path":"src/main/java/miles/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new task list when given an existing array list.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" * @param taskList","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" * Adds task into a task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" * @param task","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" * Deletes a task from a task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" * @param taskNum the task number to be deleted","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" * @return the deleted task","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" public Task deleteTask(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" Task deletedTask \u003d this.taskList.remove(taskNum);","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" return deletedTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" * Gets a task from a task list when given the task number.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" * @param taskNum the task number to be retrieved","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" * @return the task","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" public Task getTask(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" return this.taskList.get(taskNum);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" * Gets the number of tasks in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" * @return the number of tasks in the list","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" public int getSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" * Updates the task status when reading from a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" * @param task","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" * @param status","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" public void updateTaskStatusFromFile(Task task, String status) {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" if (status.equals(\"[X]\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" * Marks a particular task as done when given the task number.","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" * @param taskNum the task number to be marked as done","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" public void markTaskAsDone(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" if (taskNum \u003c\u003d 0 || taskNum \u003e this.taskList.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" ui.printInvalidTaskNumber(taskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" return;","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" Task task \u003d this.getTask(taskNum - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" \" + task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":" * Marks a particular task as undone when given the task number.","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"tjch-o"},"content":" * @param taskNum the task number to be marked as undone","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"tjch-o"},"content":" public void markTaskAsUndone(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"tjch-o"},"content":" if (taskNum \u003c\u003d 0 || taskNum \u003e taskList.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"tjch-o"},"content":" ui.printInvalidTaskNumber(taskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"tjch-o"},"content":" return;","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"tjch-o"},"content":" Task task \u003d this.getTask(taskNum - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"tjch-o"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" \" + task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"tjch-o"},"content":" * Prints every task in the task list that contains the keyword.","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"tjch-o"},"content":" * @param keyword the keyword that each task must contain","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"tjch-o"},"content":" public void displayListWithKeyword(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"tjch-o"},"content":" int n \u003d this.getSize();","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"tjch-o"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"tjch-o"},"content":" for (int i \u003d 0; i \u003c n; i +\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"tjch-o"},"content":" Task currentTask \u003d this.getTask(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"tjch-o"},"content":" String taskString \u003d currentTask.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"tjch-o"},"content":" if (taskString.contains(keyword)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"tjch-o"},"content":" String output \u003d \" \" + (count + 1) + \". \" + currentTask.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"tjch-o"},"content":" ui.formatString(output);","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"tjch-o"},"content":" count +\u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"tjch-o"},"content":" /*","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"tjch-o"},"content":" * Prints every task in the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"tjch-o"},"content":" public void displayList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"tjch-o"},"content":" int n \u003d this.getSize();","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" Here are the tasks in your list my G:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"tjch-o"},"content":" for (int i \u003d 0; i \u003c n; i +\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"tjch-o"},"content":" Task currentTask \u003d taskList.get(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"tjch-o"},"content":" String output \u003d \" \" + (i + 1) + \". \" + currentTask.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"tjch-o"},"content":" ui.formatString(output);","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":162}},{"path":"src/main/java/miles/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":" * Represents the user interface of the chatbot.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private final String DIVIDER \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" private final String INDENT \u003d \" \";","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" /*","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" * Adds indentation to the string given and prints it out.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * @params s the string to be indented","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" public void formatString(String s) {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" System.out.println(INDENT + s);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" * Shows the divider line in the UI.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" public void showLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" formatString(DIVIDER);","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" * Greets the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" public void greet() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" String chatbotName \u003d \"Miles\";","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" formatString(\" Hey! I\u0027m \" + chatbotName + \"!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" formatString(\" What can I do for you, my friend?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" * Prints the task that was just added.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" * @param task the task that was just added","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" * @param n the number of tasks currently in the list","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" public void printAddedTask(Task task, int n) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" formatString(\" Gotcha. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" formatString(\" \" + task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" formatString(\" Now you have \" + n + \" tasks in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" * Prints the task that was just deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" * @param task the task that was just deleted","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" * @param n the number of tasks currently in the list","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" public void printDeletedTask(Task task, int n) {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" formatString(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" formatString(\" \" + task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" formatString(\" Now you have \" + n + \" tasks in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" * Prints the error message when an exception is raised.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" * @param errorMsg error message to be printed","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" public void printErrorMsg(String errorMsg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" formatString(\" \" + errorMsg);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" * Prints the error message when the task number is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":" * @param number the task number that is invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" public void printInvalidTaskNumber(int number) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" formatString(\" There is no task \" + number + \", friend.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" * Exits the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" public void exit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" formatString(\" Stay safe my friend. See you again soon man.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":98}},{"path":"src/main/java/miles/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" public AddDeadlineCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" Deadline newDeadline \u003d new Deadline(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" storage.saveWhenAddTask(newDeadline, taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" ui.printAddedTask(newDeadline, n);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":22}},{"path":"src/main/java/miles/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" public AddEventCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" Event newEvent \u003d new Event(this.input);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" storage.saveWhenAddTask(newEvent, taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" ui.printAddedTask(newEvent, n);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":22}},{"path":"src/main/java/miles/command/AddToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class AddToDoCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" public AddToDoCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" ToDo newToDo \u003d new ToDo(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" storage.saveWhenAddTask(newToDo, taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" ui.printAddedTask(newToDo, n);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":22}},{"path":"src/main/java/miles/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" * Represents a general command that the user can input into Miles.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"public class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" * Executes the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" * @param taskList the task list object","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * @param ui the ui object","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * @param storage the storage object","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {};","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" * Returns a task number from either a mark, unmark or delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" * @param command the command that the user inputs: either \"mark\", \"unmark\" or \"delete\"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * @return task number that the user wants to mark, unmark or delete","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" public int getTaskNumber(String command, String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" String taskNum \u003d input.replace(command + \" \", \"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" String trimmedTaskNum \u003d taskNum.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" return Integer.valueOf(trimmedTaskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * Returns true if the command is an exit command else false.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" * @return true if the command is an exit command else false","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":39}},{"path":"src/main/java/miles/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" * Represents a delete command.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * @param input","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" public DeleteCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * Return task number from user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" * @return task number","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" public int getTaskNumber(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" return super.getTaskNumber(\"delete\", input);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" int taskNum \u003d getTaskNumber(this.input);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" Task deletedTask \u003d taskList.deleteTask(taskNum - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" ui.printDeletedTask(deletedTask, n);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":39}},{"path":"src/main/java/miles/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" ui.exit();","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":17}},{"path":"src/main/java/miles/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" private String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" * @param keyword the keyword to find","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" this.keyword \u003d getKeywordToFind(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" * Extract the keyword from the input string when the command is a \"find\".","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" * @param input the input string","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * @return the keyword to find","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" public String getKeywordToFind(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" String keyword \u003d input.replace(\"find \", \"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" return keyword.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" taskList.displayListWithKeyword(this.keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":34}},{"path":"src/main/java/miles/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" taskList.displayList();","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":12}},{"path":"src/main/java/miles/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" public MarkCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Return task number from user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" * @return task number ","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" public int getTaskNumber(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" return super.getTaskNumber(\"mark\", input);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" int taskNum \u003d this.getTaskNumber(this.input);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" taskList.markTaskAsDone(taskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":30}},{"path":"src/main/java/miles/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" public UnmarkCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Return task number from user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" * @return task number ","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" public int getTaskNumber(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" return super.getTaskNumber(\"unmark\", input);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" @Override ","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" int taskNum \u003d getTaskNumber(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" taskList.markTaskAsUndone(taskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":30}},{"path":"src/main/java/miles/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":" * Represents a task that has a deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" private static String NO_DESC_ERROR_MSG \u003d \"OOPS!!! The description of a deadline cannot be empty.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" public Deadline(String task) {","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" super(getTask(task));","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" this.deadline \u003d this.convertToDateTime(this.getDeadline(task));","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" public Deadline(String task, String deadline) {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" super(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" this.deadline \u003d this.convertToDateTime(deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" /*","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * Returns an array of 2 elements, the first element is the task, the second is the deadline. ","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * Worth noting that the task and deadline strings here still have whitespaces that need to be","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" * trimmed for use.","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" * @param taskString the string that contains the task and deadline","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" * @return an array of 2 strings","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" public static String[] splitDeadlineString(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" if (checkTaskNoDescription(taskString, \"deadline\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(NO_DESC_ERROR_MSG);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" // removes \"deadline \" from the task string","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" String removeCmd \u003d taskString.substring(9);","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(removeCmd)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(NO_DESC_ERROR_MSG);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" // we know the array has 2 elements ","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" String[] arr \u003d removeCmd.split(\"/by\");","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" if (arr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"Invalid deadline format: missing /by\");","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" return arr;","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" * Returns the task from a input string that starts with \"deadline\".","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"deadline\"","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" * @return the task","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" public static String getTask(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitDeadlineString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" String task \u003d strings[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(task)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(NO_DESC_ERROR_MSG);","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" // we remove the white space behind the task","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" return task.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" * Returns the deadline from a input string that starts with \"deadline\".","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"deadline\"","lastModifiedDate":"2023-08-20"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" * @return the deadline","lastModifiedDate":"2023-08-20"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" public String getDeadline(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitDeadlineString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" String deadline \u003d strings[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(deadline)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"OOPS!!! The deadline of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" // remove the whitespace in front ","lastModifiedDate":"2023-08-20"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" return deadline.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the deadline to be displayed in the user interface.","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" * @return the deadline to be displayed in the UI","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" public String displayDeadline() {","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" return this.displayTime(this.deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the deadline which would form a part of the string to be saved ","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" * in the text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" * @return string representing the deadline to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":" public String saveDeadline() {","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":" return this.saveTime(this.deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" * Returns a string to be saved in the text file, specifically for an deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"tjch-o"},"content":" * @return a string to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"tjch-o"},"content":" public String saveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"tjch-o"},"content":" return \"D\" + super.saveStringToFile() + \" | \" + this.saveDeadline(); ","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":113,"author":{"gitId":"tjch-o"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":114,"author":{"gitId":"tjch-o"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.displayDeadline() + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":116,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"tjch-o":116}},{"path":"src/main/java/miles/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":" * Represents a task that starts at a specific time and ends at a specific time.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" private static String noDescErrorMsg \u003d \"OOPS!!! The description of a event cannot be empty.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" public Event(String task) {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" // this constructor is for creating a task with the \"event\" command","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" super(getTask(task));","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" this.startTime \u003d this.convertToDateTime(this.getStartTime(task));","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" this.endTime \u003d this.convertToDateTime(getEndTime(task));","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" public Event(String task, String startTime, String endTime) {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" // this constructor is for loading the file","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" super(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" this.startTime \u003d this.convertToDateTime(startTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" this.endTime \u003d this.convertToDateTime(endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" * Splits a string into an array of 3 elements, the first element is the task, second is ","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" * the start time, third is the end time. Worth noting that the task, start time and end time ","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" * strings here are not trimmed yet (i.e. they still have leading or trailing whitespaces).","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" * @param taskString the string that contains the task, start time and end time","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * @return an array of 3 strings","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" public static String[] splitEventString(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" if (checkTaskNoDescription(taskString, \"event\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" String removeCmd \u003d taskString.substring(6);","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(removeCmd)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" String[] arr1 \u003d removeCmd.split(\"/from\");","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" if (arr1.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"Invalid event format: missing /from\");","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" } ","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(arr1[0])) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" // we still need to split the 2nd element because it contains both the start and end time","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" String secondPart \u003d arr1[1];","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" String[] arr2 \u003d secondPart.split(\"/to\");","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" if (arr2.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"Invalid event format: missing /to\");","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" String[] output \u003d {arr1[0], arr2[0], arr2[1]};","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" return output;","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" * Returns the task from a input string that starts with \"event\".","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"event\"","lastModifiedDate":"2023-08-20"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" * @return the task","lastModifiedDate":"2023-08-20"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" public static String getTask(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitEventString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" String task \u003d strings[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(task)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" // remove the whitespace in front ","lastModifiedDate":"2023-08-20"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" return task.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" * Returns the start time from a input string that starts with \"event\".","lastModifiedDate":"2023-08-20"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"event\"","lastModifiedDate":"2023-08-20"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" * @return the start time","lastModifiedDate":"2023-08-20"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" public String getStartTime(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitEventString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" String startTime \u003d strings[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(startTime)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"OOPS!!! The start time of a event cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" return startTime.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":" * Returns the end time from a input string that starts with \"event\".","lastModifiedDate":"2023-08-20"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"event\"","lastModifiedDate":"2023-08-20"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":" * @return the end time","lastModifiedDate":"2023-08-20"},{"lineNumber":105,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":106,"author":{"gitId":"tjch-o"},"content":" public String getEndTime(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":107,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitEventString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"tjch-o"},"content":" String endTime \u003d strings[2];","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":110,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(endTime)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":111,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"OOPS!!! The end time of a event cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":113,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":114,"author":{"gitId":"tjch-o"},"content":" return endTime.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":115,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":116,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":117,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the start time to be displayed in the user interface.","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"tjch-o"},"content":" * @return the start time to be displayed in the UI","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"tjch-o"},"content":" public String displayStartTime() {","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"tjch-o"},"content":" return this.displayTime(this.startTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the start time which would form a part of the string to be ","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"tjch-o"},"content":" * saved in the text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"tjch-o"},"content":" * @return string representing the start time to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"tjch-o"},"content":" public String saveStartTime() {","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"tjch-o"},"content":" return this.saveTime(this.startTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the end time to be displayed in the user interface.","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"tjch-o"},"content":" * @return the end time to be displayed in the UI","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"tjch-o"},"content":" public String displayEndTime() {","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"tjch-o"},"content":" return this.displayTime(this.endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the end time which would form a part of the string to be saved ","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"tjch-o"},"content":" * in the text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"tjch-o"},"content":" * @return string representing the end time to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"tjch-o"},"content":" public String saveEndTime() {","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"tjch-o"},"content":" return this.saveTime(this.endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"tjch-o"},"content":" * Returns a string to be saved in the text file, specifically for an event.","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"tjch-o"},"content":" * @return a string to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":161,"author":{"gitId":"tjch-o"},"content":" public String saveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"tjch-o"},"content":" return \"E\" + super.saveStringToFile() + \" | \" + this.saveStartTime() + \" | \" + ","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"tjch-o"},"content":" this.saveEndTime(); ","lastModifiedDate":"2023-08-26"},{"lineNumber":164,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":165,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":166,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":167,"author":{"gitId":"tjch-o"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":168,"author":{"gitId":"tjch-o"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.displayStartTime() + \" to: \" + ","lastModifiedDate":"2023-08-26"},{"lineNumber":169,"author":{"gitId":"tjch-o"},"content":" this.displayEndTime() + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":170,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":171,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"tjch-o":171}},{"path":"src/main/java/miles/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"/*","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" * Represents a general task.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" private String task;","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" public Task(String task) {","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" * Marks the current task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" * Marks the current task as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * Checks if a task has no description by checking if the strings are equal.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" * @param taskType the type of task (e.g. \"deadline\")","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" * @param task the command inputted by the user","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" * @return a boolean that indicates whether the task has no description","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" public static boolean checkTaskNoDescription(String taskType, String task) {","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" return taskType.equals(task);","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" * Checks if a given string is all whitespace.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" * @param s string to be checked","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" * @return boolean that indicates whether the string is all whitespace","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" public static boolean checkAllWhiteSpace(String s) {","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" for (int i \u003d 0; i \u003c s.length(); i +\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" if (s.charAt(i) !\u003d \u0027 \u0027) {","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" return false;","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" return true;","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" * Provides a string that contains the status and task to be saved in a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" * @return string that contains the status and task to be saved in a file","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" public String saveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" String status \u003d isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" return \" | \" + status + \" | \" + task;","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" * Converts a string to a LocalDateTime object. This is for the deadline and event classes.","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" * @param s the string inputted by the user in the format \"2019-10-15 1800\"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" * @return LocalDateTime object","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" public LocalDateTime convertToDateTime(String s) {","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" return LocalDateTime.parse(s, formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" * Returns a string to be saved in the text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":" * @return a string to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" public String saveTime(LocalDateTime time) {","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" return time.format(formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the time to be displayed in the UI.","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" * @return string representing the time to be displayed in the UI","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" public String displayTime(LocalDateTime time) {","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" return time.format(formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":" String status \u003d isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":" return status + \" \" + task;","lastModifiedDate":"2023-08-19"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"tjch-o":104}},{"path":"src/main/java/miles/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":" * Represents a todo task that has no dates involved.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" private static String noDescErrorMsg \u003d \"OOPS!!! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" public ToDo(String task) {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" super(formatToDoString(task));","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" /*","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" * Formats the task string by slicing it to remove the \"todo \" part.","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * @param taskString the string that contains the task","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" * @return the clean version of the task string","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" public static String formatToDoString(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" if (checkTaskNoDescription(taskString, \"todo\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" String output \u003d taskString.substring(5);","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(output)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" return output.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * Represents a string to be saved in the text file, specifically for a todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" * @return a string that is to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" public String saveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" return \"T\" + super.saveStringToFile(); ","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"tjch-o":46}},{"path":"src/test/java/miles/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"import miles.task.ToDo;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" @Test ","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" public void testLoadFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" String directoryPath \u003d \"./data\";","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" String filePath \u003d \"./data/test1.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" Storage storage \u003d new Storage(filePath, directoryPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" TaskList taskList \u003d storage.loadFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" assertEquals(3, taskList.getSize());","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" Task task1 \u003d taskList.getTask(0);","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" Task task1Expected \u003d new Deadline(\"deadline buy soju /by 2023-08-26 2300\");","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" assertEquals(task1.toString(), task1Expected.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" Task task2 \u003d taskList.getTask(1);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" Task task2Expected \u003d new Event(\"event orbital splashdown /from 2023-08-30 1700 /to 2023-08-30 1930\");","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" task2Expected.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" assertEquals(task2.toString(), task2Expected.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" Task task3 \u003d taskList.getTask(2);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" Task task3Expected \u003d new ToDo (\"todo eat mcgriddles\");","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" assertEquals(task3.toString(), task3Expected.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" @Test ","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" public void emptyFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" String directoryPath \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" String filePath \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" Storage storage \u003d new Storage(filePath, directoryPath);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" TaskList taskList \u003d storage.loadFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" assertEquals(0, taskList.getSize());","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" public void testSaveFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" String directoryPath \u003d \"./data\";","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" String filePath \u003d \"./data/test2.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" Storage storage \u003d new Storage(filePath, directoryPath);","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" TaskList taskList \u003d storage.loadFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" Task task1 \u003d new Deadline(\"deadline buy soju /by 2023-08-26 2300\");","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(task1);","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" TaskList taskList2 \u003d storage.loadFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" assertEquals(1, taskList2.getSize());","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" assertEquals(task1.toString(), taskList2.getTask(0).toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" // to clean up the file for future tests","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" taskList2.deleteTask(0);","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList2);","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":64}},{"path":"src/test/java/miles/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class EventTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" public void testSplitEventString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /from 2019-10-15 1800 /to 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" String[] arr \u003d Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" assertEquals(\"project meeting\", arr[0].trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" assertEquals(\"2019-10-15 1800\", arr[1].trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" assertEquals(\"2019-10-15 2000\", arr[2].trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" public void emptyEvent() throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event\";","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" IllegalArgumentException expectedException \u003d assertThrows(IllegalArgumentException.class, ","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" () -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" String expectedErrorMsg \u003d \"OOPS!!! The description of a event cannot be empty.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" String actualErrorMsg \u003d expectedException.getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" assertEquals(expectedErrorMsg, actualErrorMsg); ","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" @Test ","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" public void missingDescription() throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event /from 2019-10-15 1800 /to\";","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" IllegalArgumentException expectedException \u003d assertThrows(IllegalArgumentException.class, ","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" () -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" String expectedErrorMsg \u003d \"OOPS!!! The description of a event cannot be empty.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" String actualErrorMsg \u003d expectedException.getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" assertEquals(expectedErrorMsg, actualErrorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" @Test ","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" public void missingFrom() throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /to 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" IllegalArgumentException expectedException \u003d assertThrows(IllegalArgumentException.class, ","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" () -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" String expectedErrorMsg \u003d \"Invalid event format: missing /from\";","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" String actualErrorMsg \u003d expectedException.getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" assertEquals(expectedErrorMsg, actualErrorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" public void missingTo() throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /from 2019-10-15 1800\";","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" IllegalArgumentException expectedException \u003d assertThrows(IllegalArgumentException.class, ","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" () -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" String expectedErrorMsg \u003d \"Invalid event format: missing /to\";","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" String actualErrorMsg \u003d expectedException.getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" assertEquals(expectedErrorMsg, actualErrorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" public void testSaveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /from 2019-10-15 1800 /to 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" Event event \u003d new Event(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" String expected \u003d \"E | [ ] | project meeting | 2019-10-15 1800 | 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" assertEquals(expected, event.saveStringToFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" public void testStringToSaveMarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /from 2019-10-15 1800 /to 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" Event event \u003d new Event(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" event.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" String expected \u003d \"E | [X] | project meeting | 2019-10-15 1800 | 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" assertEquals(expected, event.saveStringToFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":90}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"todo","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"blah","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"todo read book","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"deadline","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"deadline return book by June 6th","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"deadline /by June 6th","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"deadline return book /by ","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"event","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"event project meeting from Aug 6th 2pm to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"event /from Aug 6th 2pm /to 4pm ","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"event project meeting /from Aug 6th 2pm","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"event project meeting /to 4pm ","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"event project meeting /from Aug 6th 2pm /to 4pm ","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":"todo join sports club","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":"todo borrow book","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"mark 10","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":"unmark 10","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":"delete 10","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":"mark -1","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"unmark -1","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"delete -1","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":"mark 4","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":"unmark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"delete 3","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"tjch-o":32}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" mainClass.set(\"miles.Miles\")","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" archiveBaseName \u003d \"miles\"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"tjch-o":20,"-":42}},{"path":"data/test1.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"D | [ ] | buy soju | 2023-08-26 2300","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"E | [X] | orbital splashdown | 2023-08-30 1700 | 2023-08-30 1930","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"T | [ ] | eat mcgriddles","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"tjch-o":3}},{"path":"src/main/java/miles/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"tjch-o":12}},{"path":"src/main/java/miles/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"import miles.ui.MainWindow;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" * A GUI for Miles using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" private Miles miles \u003d new Miles(\"./data/miles.txt\");","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" stage.setTitle(\"Miles\");","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setMiles(miles);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" // render the stage","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"tjch-o":34}},{"path":"src/main/java/miles/Miles.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"import miles.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" * Represents our chat bot, Miles.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"public class Miles {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" private String filePath;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" private static String directoryPath \u003d \"./data\";","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" * Constructor for Miles.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" * @param filePath The path to the file where the tasks are stored.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" public Miles(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" this.storage \u003d new Storage(this.filePath, directoryPath);","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" this.taskList \u003d this.storage.loadFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" * Runs the bot with the bot taking input from users.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" public void run() {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" this.ui.greet();","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" boolean shouldExit \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" while (!shouldExit) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" Command c \u003d parser.parse(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" c.execute(this.taskList, this.ui, this.storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" shouldExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" } catch (MilesException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" this.ui.printErrorMsg(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" scanner.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" * Runs the bot with the given input.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" * @param input the input to run the chatbot with","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" public void run(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" Command c \u003d parser.parse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" c.execute(this.taskList, this.ui, this.storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" } catch (MilesException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" this.ui.printErrorMsg(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" * Returns the response of the bot to the given input.","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" * @param input the input to run the chatbot with","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" * @return the response of the bot","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" ByteArrayOutputStream output \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" // redirect System.out to output stream to capture everything that is printed","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" System.setOut(new PrintStream(output));","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" run(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" // restore the original output stream","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" return output.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" * Returns the greeting of the bot.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" * @return the greeting of the bot","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" public String getGreeting() {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" ByteArrayOutputStream output \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" System.setOut(new PrintStream(output));","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" ui.greet();","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" return output.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-19"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":" String filePath \u003d \"../../../data/miles.txt\";","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":" new Miles(filePath).run();","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":101,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"tjch-o":99,"-":2}},{"path":"src/main/java/miles/MilesException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":" * Class that handles exceptions that are raised or appear in the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"*/","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"public class MilesException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" public MilesException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":10}},{"path":"src/main/java/miles/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.command.AddDeadlineCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.command.AddEventCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.command.AddToDoCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"import miles.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"import miles.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"import miles.command.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"import miles.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"import miles.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"import miles.command.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Represents the parsing of user input, making sense of what command the user has given.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":"*/","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" * Parses the input that the user gives.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" * @return a Command object that corresponds to the user input","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" public Command parse(String input) throws MilesException {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" return new UnmarkCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" return new MarkCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" return new AddToDoCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" return new AddDeadlineCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" return new AddEventCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" return new DeleteCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" return new FindCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" } else if (input.equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" String errorMsg \u003d \"Input a task my brother.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" throw new MilesException(errorMsg);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" String errorMsg \u003d \"I\u0027m sorry brother, I do not have a Scooby :-(\";","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" throw new MilesException(errorMsg);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":50}},{"path":"src/main/java/miles/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"import miles.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"import miles.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"import miles.task.ToDo;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Represents the storage of the tasks, where we can load our tasks from a file or save our tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * into a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" private String filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" private String directoryPath;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" * @param filePath file path of the text file","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" * @param directoryPath directory path of the text file","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" public Storage(String filePath, String directoryPath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" this.directoryPath \u003d directoryPath;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" * Adds task into task list and triggers a save to the text file when the user adds a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" * @param task the task to be saved","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" * @param taskList the task list containing the task to be saved","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" public void saveWhenAddTask(Task task, TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" this.saveFile(taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" * Loads the file from the data folder if it exists, else it creates a new file for users to ","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" * store their tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" * @returns TaskList a TaskList object containing the tasks from the file","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" * @throws IOException if there is an error creating the file ","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" public TaskList loadFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" File directory \u003d new File(this.directoryPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" File newFile \u003d new File(this.filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" // check if directory exists","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" directory.mkdirs();","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" // check if file exists","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" if (!newFile.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" newFile.createNewFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" System.out.println(\"created a new file\");","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" return new TaskList(); ","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" Scanner scanner \u003d new Scanner(newFile);","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" String[] parts \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" String taskType \u003d parts[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" String status \u003d parts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" String task \u003d parts[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" Task newTask \u003d new ToDo(\"todo \" + task);","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" taskList.updateTaskStatusFromFile(newTask, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" String status \u003d parts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" String task \u003d parts[2].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" String deadline \u003d parts[3].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" Task newTask \u003d new Deadline(task, deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" taskList.updateTaskStatusFromFile(newTask, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(newTask); ","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" String status \u003d parts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" String task \u003d parts[2].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" String from \u003d parts[3].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" String to \u003d parts[4].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":" Task newTask \u003d new Event(task, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" taskList.updateTaskStatusFromFile(newTask, status);","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"tjch-o"},"content":" scanner.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"tjch-o"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"tjch-o"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"tjch-o"},"content":" this.ui.printErrorMsg(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"tjch-o"},"content":" return new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"tjch-o"},"content":" * Saves the tasks in the task list to the text file.","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"tjch-o"},"content":" * @param taskList the task list containing the tasks to be saved","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"tjch-o"},"content":" * @throws IOException if there is an error writing to the file","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"tjch-o"},"content":" public void saveFile(TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"tjch-o"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"tjch-o"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"tjch-o"},"content":" BufferedWriter bufferedWriter \u003d new BufferedWriter(fileWriter);","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"tjch-o"},"content":" for (int i \u003d 0; i \u003c n; i +\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"tjch-o"},"content":" Task currentTask \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"tjch-o"},"content":" String s \u003d currentTask.saveStringToFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"tjch-o"},"content":" bufferedWriter.write(s);","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"tjch-o"},"content":" bufferedWriter.newLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"tjch-o"},"content":" bufferedWriter.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"tjch-o"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"tjch-o"},"content":" this.ui.printErrorMsg(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":138}},{"path":"src/main/java/miles/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new task list when given an existing array list.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" * @param taskList","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" * Adds task into a task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * @param task","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" * Deletes a task from a task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" * @param taskNum the task number to be deleted","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" * @return the deleted task","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" public Task deleteTask(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" Task deletedTask \u003d this.taskList.remove(taskNum);","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" return deletedTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" * Gets a task from a task list when given the task number.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" * @param taskNum the task number to be retrieved","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" * @return the task","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" public Task getTask(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" return this.taskList.get(taskNum);","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" * Gets the number of tasks in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" * @return the number of tasks in the list","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" public int getSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" * Updates the task status when reading from a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" * @param task","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" * @param status","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" public void updateTaskStatusFromFile(Task task, String status) {","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" if (status.equals(\"[X]\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" * Marks a particular task as done when given the task number.","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" * @param taskNum the task number to be marked as done","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" public void markTaskAsDone(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" if (taskNum \u003c\u003d 0 || taskNum \u003e this.taskList.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" ui.printInvalidTaskNumber(taskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" return;","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" Task task \u003d this.getTask(taskNum - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" \" + task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":" * Marks a particular task as undone when given the task number.","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":" * @param taskNum the task number to be marked as undone","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"tjch-o"},"content":" public void markTaskAsUndone(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"tjch-o"},"content":" if (taskNum \u003c\u003d 0 || taskNum \u003e taskList.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"tjch-o"},"content":" ui.printInvalidTaskNumber(taskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"tjch-o"},"content":" return;","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"tjch-o"},"content":" Task task \u003d this.getTask(taskNum - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"tjch-o"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" \" + task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"tjch-o"},"content":" * Prints every task in the task list that contains the keyword.","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"tjch-o"},"content":" * @param keyword the keyword that each task must contain","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"tjch-o"},"content":" public void displayListWithKeyword(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"tjch-o"},"content":" int n \u003d this.getSize();","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"tjch-o"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"tjch-o"},"content":" for (int i \u003d 0; i \u003c n; i +\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"tjch-o"},"content":" Task currentTask \u003d this.getTask(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"tjch-o"},"content":" String taskString \u003d currentTask.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"tjch-o"},"content":" if (taskString.contains(keyword)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"tjch-o"},"content":" String output \u003d \" \" + (count + 1) + \". \" + currentTask.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"tjch-o"},"content":" ui.formatString(output);","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"tjch-o"},"content":" count +\u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"tjch-o"},"content":" /*","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"tjch-o"},"content":" * Prints every task in the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"tjch-o"},"content":" public void displayList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"tjch-o"},"content":" int n \u003d this.getSize();","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"tjch-o"},"content":" this.ui.formatString(\" Here are the tasks in your list my G:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"tjch-o"},"content":" for (int i \u003d 0; i \u003c n; i +\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"tjch-o"},"content":" Task currentTask \u003d taskList.get(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"tjch-o"},"content":" String output \u003d \" \" + (i + 1) + \". \" + currentTask.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"tjch-o"},"content":" ui.formatString(output);","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"tjch-o"},"content":" this.ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":160}},{"path":"src/main/java/miles/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":" * Represents the user interface of the chatbot.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" // private final String DIVIDER \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" private final String DIVIDER \u003d \"\";","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" private final String INDENT \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" * Adds indentation to the string given and prints it out.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * @params s the string to be indented","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" public void formatString(String s) {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" System.out.println(INDENT + s);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" * Shows the divider line in the UI.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" public void showLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" formatString(DIVIDER);","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" * Greets the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" public void greet() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" String chatbotName \u003d \"Miles\";","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" formatString(\" Hey! I\u0027m \" + chatbotName + \"!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" formatString(\" What can I do for you, my friend?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" * Prints the task that was just added.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" * @param task the task that was just added","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" * @param n the number of tasks currently in the list","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" public void printAddedTask(Task task, int n) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" formatString(\" Gotcha. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" formatString(\" \" + task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" formatString(\" Now you have \" + n + \" tasks in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" * Prints the task that was just deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" * @param task the task that was just deleted","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" * @param n the number of tasks currently in the list","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" public void printDeletedTask(Task task, int n) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" formatString(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" formatString(\" \" + task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" formatString(\" Now you have \" + n + \" tasks in the list.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" * Prints the error message when an exception is raised.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" * @param errorMsg error message to be printed","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" public void printErrorMsg(String errorMsg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" formatString(\" \" + errorMsg);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" * Prints the error message when the task number is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" * @param number the task number that is invalid","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" public void printInvalidTaskNumber(int number) {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":" formatString(\" There is no task \" + number + \", friend.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" * Exits the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" public void exit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" formatString(\" Stay safe my friend. See you again soon man.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":94}},{"path":"src/main/java/miles/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" public AddDeadlineCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" Deadline newDeadline \u003d new Deadline(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" storage.saveWhenAddTask(newDeadline, taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" ui.printAddedTask(newDeadline, n);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":22}},{"path":"src/main/java/miles/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" public AddEventCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" Event newEvent \u003d new Event(this.input);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" storage.saveWhenAddTask(newEvent, taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" ui.printAddedTask(newEvent, n);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":22}},{"path":"src/main/java/miles/command/AddToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" * Represents adding a todo task command.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"public class AddToDoCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" public AddToDoCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" ToDo newToDo \u003d new ToDo(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" storage.saveWhenAddTask(newToDo, taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" ui.printAddedTask(newToDo, n);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":25}},{"path":"src/main/java/miles/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" * Represents a general command that the user can input into Miles.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"public class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" * Executes the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" * @param taskList the task list object","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * @param ui the ui object","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * @param storage the storage object","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {};","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" * Returns a task number from either a mark, unmark or delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" * @param command the command that the user inputs: either \"mark\", \"unmark\" or \"delete\"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * @return task number that the user wants to mark, unmark or delete","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" public int getTaskNumber(String command, String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" String taskNum \u003d input.replace(command + \" \", \"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" String trimmedTaskNum \u003d taskNum.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" return Integer.valueOf(trimmedTaskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * Returns true if the command is an exit command else false.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" * @return true if the command is an exit command else false","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":39}},{"path":"src/main/java/miles/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" * Represents a delete command.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * @param input","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" public DeleteCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * Return task number from user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" * @return task number","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" public int getTaskNumber(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" return super.getTaskNumber(\"delete\", input);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" int taskNum \u003d getTaskNumber(this.input);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" Task deletedTask \u003d taskList.deleteTask(taskNum - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" int n \u003d taskList.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" ui.printDeletedTask(deletedTask, n);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":39}},{"path":"src/main/java/miles/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" ui.exit();","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":17}},{"path":"src/main/java/miles/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" private String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" * Constructor to create a new delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" * @param keyword the keyword to find","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" this.keyword \u003d getKeywordToFind(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" * Extract the keyword from the input string when the command is a \"find\".","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" * @param input the input string","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * @return the keyword to find","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" public String getKeywordToFind(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" String keyword \u003d input.replace(\"find \", \"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" return keyword.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" taskList.displayListWithKeyword(this.keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":34}},{"path":"src/main/java/miles/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" taskList.displayList();","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":12}},{"path":"src/main/java/miles/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" public MarkCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Return task number from user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" * @return task number ","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" public int getTaskNumber(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" return super.getTaskNumber(\"mark\", input);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" int taskNum \u003d this.getTaskNumber(this.input);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" taskList.markTaskAsDone(taskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":30}},{"path":"src/main/java/miles/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import miles.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import miles.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" public UnmarkCommand(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * Return task number from user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" * @param input user input","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" * @return task number ","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" public int getTaskNumber(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" return super.getTaskNumber(\"unmark\", input);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" @Override ","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" int taskNum \u003d getTaskNumber(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" taskList.markTaskAsUndone(taskNum);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"tjch-o":30}},{"path":"src/main/java/miles/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":" * Represents a task that has a deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" private static String NO_DESC_ERROR_MSG \u003d \"OOPS!!! The description of a deadline cannot be empty.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" public Deadline(String task) {","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" super(getTask(task));","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" this.deadline \u003d this.convertToDateTime(this.getDeadline(task));","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" public Deadline(String task, String deadline) {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" super(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" this.deadline \u003d this.convertToDateTime(deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" /*","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" * Returns an array of 2 elements, the first element is the task, the second is the deadline. ","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" * Worth noting that the task and deadline strings here still have whitespaces that need to be","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" * trimmed for use.","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" * @param taskString the string that contains the task and deadline","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" * @return an array of 2 strings","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" public static String[] splitDeadlineString(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" if (checkTaskNoDescription(taskString, \"deadline\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(NO_DESC_ERROR_MSG);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" // removes \"deadline \" from the task string","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" String removeCmd \u003d taskString.substring(9);","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(removeCmd)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(NO_DESC_ERROR_MSG);","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" // we know the array has 2 elements ","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" String[] arr \u003d removeCmd.split(\"/by\");","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" if (arr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"Invalid deadline format: missing /by\");","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" return arr;","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" * Returns the task from a input string that starts with \"deadline\".","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"deadline\"","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" * @return the task","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" public static String getTask(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitDeadlineString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" String task \u003d strings[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(task)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(NO_DESC_ERROR_MSG);","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" // we remove the white space behind the task","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" return task.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" * Returns the deadline from a input string that starts with \"deadline\".","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"deadline\"","lastModifiedDate":"2023-08-20"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" * @return the deadline","lastModifiedDate":"2023-08-20"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" public String getDeadline(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitDeadlineString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" String deadline \u003d strings[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(deadline)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"OOPS!!! The deadline of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" // remove the whitespace in front ","lastModifiedDate":"2023-08-20"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" return deadline.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the deadline to be displayed in the user interface.","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" * @return the deadline to be displayed in the UI","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" public String displayDeadline() {","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" return this.displayTime(this.deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the deadline which would form a part of the string to be saved ","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" * in the text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" * @return string representing the deadline to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":" public String saveDeadline() {","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":" return this.saveTime(this.deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" * Returns a string to be saved in the text file, specifically for an deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"tjch-o"},"content":" * @return a string to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"tjch-o"},"content":" public String saveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"tjch-o"},"content":" return \"D\" + super.saveStringToFile() + \" | \" + this.saveDeadline(); ","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":113,"author":{"gitId":"tjch-o"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":114,"author":{"gitId":"tjch-o"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.displayDeadline() + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":116,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"tjch-o":116}},{"path":"src/main/java/miles/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":" * Represents a task that starts at a specific time and ends at a specific time.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" private static String noDescErrorMsg \u003d \"OOPS!!! The description of a event cannot be empty.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" public Event(String task) {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" // this constructor is for creating a task with the \"event\" command","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" super(getTask(task));","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" this.startTime \u003d this.convertToDateTime(this.getStartTime(task));","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" this.endTime \u003d this.convertToDateTime(getEndTime(task));","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" public Event(String task, String startTime, String endTime) {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" // this constructor is for loading the file","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" super(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" this.startTime \u003d this.convertToDateTime(startTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" this.endTime \u003d this.convertToDateTime(endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" * Splits a string into an array of 3 elements, the first element is the task, second is ","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" * the start time, third is the end time. Worth noting that the task, start time and end time ","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" * strings here are not trimmed yet (i.e. they still have leading or trailing whitespaces).","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" * @param taskString the string that contains the task, start time and end time","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * @return an array of 3 strings","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" public static String[] splitEventString(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" if (checkTaskNoDescription(taskString, \"event\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" String removeCmd \u003d taskString.substring(6);","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(removeCmd)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" String[] arr1 \u003d removeCmd.split(\"/from\");","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" if (arr1.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"Invalid event format: missing /from\");","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" } ","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(arr1[0])) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" // we still need to split the 2nd element because it contains both the start and end time","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" String secondPart \u003d arr1[1];","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" String[] arr2 \u003d secondPart.split(\"/to\");","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" if (arr2.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"Invalid event format: missing /to\");","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" String[] output \u003d {arr1[0], arr2[0], arr2[1]};","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" return output;","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" * Returns the task from a input string that starts with \"event\".","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"event\"","lastModifiedDate":"2023-08-20"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" * @return the task","lastModifiedDate":"2023-08-20"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" public static String getTask(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitEventString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" String task \u003d strings[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(task)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" // remove the whitespace in front ","lastModifiedDate":"2023-08-20"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" return task.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" * Returns the start time from a input string that starts with \"event\".","lastModifiedDate":"2023-08-20"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"event\"","lastModifiedDate":"2023-08-20"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" * @return the start time","lastModifiedDate":"2023-08-20"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" public String getStartTime(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitEventString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" String startTime \u003d strings[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(startTime)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"OOPS!!! The start time of a event cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" return startTime.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":" * Returns the end time from a input string that starts with \"event\".","lastModifiedDate":"2023-08-20"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" * @param taskString the input string that starts with \"event\"","lastModifiedDate":"2023-08-20"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":" * @return the end time","lastModifiedDate":"2023-08-20"},{"lineNumber":105,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":106,"author":{"gitId":"tjch-o"},"content":" public String getEndTime(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":107,"author":{"gitId":"tjch-o"},"content":" String[] strings \u003d splitEventString(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"tjch-o"},"content":" String endTime \u003d strings[2];","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":110,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(endTime)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":111,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(\"OOPS!!! The end time of a event cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":113,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":114,"author":{"gitId":"tjch-o"},"content":" return endTime.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":115,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":116,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":117,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the start time to be displayed in the user interface.","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"tjch-o"},"content":" * @return the start time to be displayed in the UI","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"tjch-o"},"content":" public String displayStartTime() {","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"tjch-o"},"content":" return this.displayTime(this.startTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the start time which would form a part of the string to be ","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"tjch-o"},"content":" * saved in the text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"tjch-o"},"content":" * @return string representing the start time to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"tjch-o"},"content":" public String saveStartTime() {","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"tjch-o"},"content":" return this.saveTime(this.startTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the end time to be displayed in the user interface.","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"tjch-o"},"content":" * @return the end time to be displayed in the UI","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"tjch-o"},"content":" public String displayEndTime() {","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"tjch-o"},"content":" return this.displayTime(this.endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the end time which would form a part of the string to be saved ","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"tjch-o"},"content":" * in the text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"tjch-o"},"content":" * @return string representing the end time to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"tjch-o"},"content":" public String saveEndTime() {","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"tjch-o"},"content":" return this.saveTime(this.endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"tjch-o"},"content":" * Returns a string to be saved in the text file, specifically for an event.","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"tjch-o"},"content":" * @return a string to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":161,"author":{"gitId":"tjch-o"},"content":" public String saveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"tjch-o"},"content":" return \"E\" + super.saveStringToFile() + \" | \" + this.saveStartTime() + \" | \" + ","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"tjch-o"},"content":" this.saveEndTime(); ","lastModifiedDate":"2023-08-26"},{"lineNumber":164,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":165,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":166,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":167,"author":{"gitId":"tjch-o"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":168,"author":{"gitId":"tjch-o"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.displayStartTime() + \" to: \" + ","lastModifiedDate":"2023-08-26"},{"lineNumber":169,"author":{"gitId":"tjch-o"},"content":" this.displayEndTime() + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":170,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":171,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"tjch-o":171}},{"path":"src/main/java/miles/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"/*","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" * Represents a general task.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" private String task;","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" public Task(String task) {","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" * Marks the current task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" * Marks the current task as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * Checks if a task has no description by checking if the strings are equal.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" * @param taskType the type of task (e.g. \"deadline\")","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" * @param task the command inputted by the user","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" * @return a boolean that indicates whether the task has no description","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" public static boolean checkTaskNoDescription(String taskType, String task) {","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" return taskType.equals(task);","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" * Checks if a given string is all whitespace.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" * @param s string to be checked","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" * @return boolean that indicates whether the string is all whitespace","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" public static boolean checkAllWhiteSpace(String s) {","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" for (int i \u003d 0; i \u003c s.length(); i +\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" if (s.charAt(i) !\u003d \u0027 \u0027) {","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" return false;","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" return true;","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" * Provides a string that contains the status and task to be saved in a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" * @return string that contains the status and task to be saved in a file","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" public String saveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" String status \u003d isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" return \" | \" + status + \" | \" + task;","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" * Converts a string to a LocalDateTime object. This is for the deadline and event classes.","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" * @param s the string inputted by the user in the format \"2019-10-15 1800\"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" * @return LocalDateTime object","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" public LocalDateTime convertToDateTime(String s) {","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" return LocalDateTime.parse(s, formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" * Returns a string to be saved in the text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":" * @return a string to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" public String saveTime(LocalDateTime time) {","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" return time.format(formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":" * Returns a string representing the time to be displayed in the UI.","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"tjch-o"},"content":" * @return string representing the time to be displayed in the UI","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"tjch-o"},"content":" public String displayTime(LocalDateTime time) {","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"tjch-o"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"tjch-o"},"content":" return time.format(formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":100,"author":{"gitId":"tjch-o"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":101,"author":{"gitId":"tjch-o"},"content":" String status \u003d isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":102,"author":{"gitId":"tjch-o"},"content":" return status + \" \" + task;","lastModifiedDate":"2023-08-19"},{"lineNumber":103,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":104,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"tjch-o":104}},{"path":"src/main/java/miles/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":" * Represents a todo task that has no dates involved.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":" private static String noDescErrorMsg \u003d \"OOPS!!! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" public ToDo(String task) {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" super(formatToDoString(task));","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" /*","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" * Formats the task string by slicing it to remove the \"todo \" part.","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" * @param taskString the string that contains the task","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" * @return the clean version of the task string","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" public static String formatToDoString(String taskString) {","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" if (checkTaskNoDescription(taskString, \"todo\")) {","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" String output \u003d taskString.substring(5);","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" if (checkAllWhiteSpace(output)) {","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" throw new IllegalArgumentException(noDescErrorMsg);","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" return output.trim();","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" * Represents a string to be saved in the text file, specifically for a todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" * @return a string that is to be saved in the text file","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" public String saveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" return \"T\" + super.saveStringToFile(); ","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"tjch-o":46}},{"path":"src/main/java/miles/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" * Controller for DialogBox. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" * Returns a DialogBox with the user\u0027s text and image.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" * @param text the user\u0027s text","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" * @param img the user\u0027s image","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" * @return the dialog box","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" * Returns a DialogBox with Miles\u0027 text and image.","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" * @param text Miles\u0027 text","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" * @param img Miles\u0027 image","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" * @return the dialog box","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" public static DialogBox getMilesDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"tjch-o":71}},{"path":"src/main/java/miles/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"import miles.Miles;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" private Miles miles;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/gwen.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" private Image milesImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/miles.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" * Initializes the MainWindow.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" * Sets the Miles object for the MainWindow.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" * @param m the Miles instance","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" public void setMiles(Miles m) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" miles \u003d m;","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":" DialogBox.getMilesDialog(miles.getGreeting(), milesImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" String response \u003d miles.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":" DialogBox.getMilesDialog(response, milesImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"tjch-o":63}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"tjch-o":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"miles.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"tjch-o":19}},{"path":"src/test/java/miles/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import miles.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import miles.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"import miles.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"import miles.task.ToDo;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" @Test ","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" public void testLoadFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" String directoryPath \u003d \"./data\";","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" String filePath \u003d \"./data/test1.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":" Storage storage \u003d new Storage(filePath, directoryPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" TaskList taskList \u003d storage.loadFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" assertEquals(3, taskList.getSize());","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" Task task1 \u003d taskList.getTask(0);","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" Task task1Expected \u003d new Deadline(\"deadline buy soju /by 2023-08-26 2300\");","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" assertEquals(task1.toString(), task1Expected.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":" Task task2 \u003d taskList.getTask(1);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" Task task2Expected \u003d new Event(\"event orbital splashdown /from 2023-08-30 1700 /to 2023-08-30 1930\");","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" task2Expected.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" assertEquals(task2.toString(), task2Expected.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":" Task task3 \u003d taskList.getTask(2);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" Task task3Expected \u003d new ToDo (\"todo eat mcgriddles\");","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" assertEquals(task3.toString(), task3Expected.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" @Test ","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" public void emptyFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" String directoryPath \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" String filePath \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" Storage storage \u003d new Storage(filePath, directoryPath);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" TaskList taskList \u003d storage.loadFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" assertEquals(0, taskList.getSize());","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" public void testSaveFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" String directoryPath \u003d \"./data\";","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":" String filePath \u003d \"./data/test2.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" Storage storage \u003d new Storage(filePath, directoryPath);","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" TaskList taskList \u003d storage.loadFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" Task task1 \u003d new Deadline(\"deadline buy soju /by 2023-08-26 2300\");","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" taskList.addTask(task1);","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" TaskList taskList2 \u003d storage.loadFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" assertEquals(1, taskList2.getSize());","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" assertEquals(task1.toString(), taskList2.getTask(0).toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" // to clean up the file for future tests","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" taskList2.deleteTask(0);","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" storage.saveFile(taskList2);","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":64}},{"path":"src/test/java/miles/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"package miles.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"public class EventTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":" public void testSplitEventString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /from 2019-10-15 1800 /to 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":" String[] arr \u003d Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":" assertEquals(\"project meeting\", arr[0].trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":" assertEquals(\"2019-10-15 1800\", arr[1].trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":" assertEquals(\"2019-10-15 2000\", arr[2].trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":" public void emptyEvent() throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event\";","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":" IllegalArgumentException expectedException \u003d assertThrows(IllegalArgumentException.class, ","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":" () -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":" Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":" String expectedErrorMsg \u003d \"OOPS!!! The description of a event cannot be empty.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":" String actualErrorMsg \u003d expectedException.getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":" assertEquals(expectedErrorMsg, actualErrorMsg); ","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":" @Test ","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"tjch-o"},"content":" public void missingDescription() throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event /from 2019-10-15 1800 /to\";","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"tjch-o"},"content":" IllegalArgumentException expectedException \u003d assertThrows(IllegalArgumentException.class, ","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"tjch-o"},"content":" () -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"tjch-o"},"content":" Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"tjch-o"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"tjch-o"},"content":" String expectedErrorMsg \u003d \"OOPS!!! The description of a event cannot be empty.\";","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"tjch-o"},"content":" String actualErrorMsg \u003d expectedException.getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"tjch-o"},"content":" assertEquals(expectedErrorMsg, actualErrorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"tjch-o"},"content":" @Test ","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"tjch-o"},"content":" public void missingFrom() throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /to 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"tjch-o"},"content":" IllegalArgumentException expectedException \u003d assertThrows(IllegalArgumentException.class, ","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"tjch-o"},"content":" () -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"tjch-o"},"content":" Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"tjch-o"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"tjch-o"},"content":" String expectedErrorMsg \u003d \"Invalid event format: missing /from\";","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"tjch-o"},"content":" String actualErrorMsg \u003d expectedException.getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"tjch-o"},"content":" assertEquals(expectedErrorMsg, actualErrorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"tjch-o"},"content":" public void missingTo() throws IllegalArgumentException {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /from 2019-10-15 1800\";","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"tjch-o"},"content":" IllegalArgumentException expectedException \u003d assertThrows(IllegalArgumentException.class, ","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"tjch-o"},"content":" () -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"tjch-o"},"content":" Event.splitEventString(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"tjch-o"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"tjch-o"},"content":" ","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"tjch-o"},"content":" String expectedErrorMsg \u003d \"Invalid event format: missing /to\";","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"tjch-o"},"content":" String actualErrorMsg \u003d expectedException.getMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"tjch-o"},"content":" assertEquals(expectedErrorMsg, actualErrorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"tjch-o"},"content":" public void testSaveStringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /from 2019-10-15 1800 /to 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"tjch-o"},"content":" Event event \u003d new Event(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"tjch-o"},"content":" String expected \u003d \"E | [ ] | project meeting | 2019-10-15 1800 | 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"tjch-o"},"content":" assertEquals(expected, event.saveStringToFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"tjch-o"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"tjch-o"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"tjch-o"},"content":" public void testStringToSaveMarked() {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"tjch-o"},"content":" String testString \u003d \"event project meeting /from 2019-10-15 1800 /to 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"tjch-o"},"content":" Event event \u003d new Event(testString);","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"tjch-o"},"content":" event.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"tjch-o"},"content":" String expected \u003d \"E | [X] | project meeting | 2019-10-15 1800 | 2019-10-15 2000\";","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"tjch-o"},"content":" assertEquals(expected, event.saveStringToFile());","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"tjch-o"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"tjch-o"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"tjch-o":90}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tjch-o"},"content":"todo","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"tjch-o"},"content":"blah","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"tjch-o"},"content":"todo read book","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"tjch-o"},"content":"deadline","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"tjch-o"},"content":"deadline return book by June 6th","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"tjch-o"},"content":"deadline /by June 6th","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"tjch-o"},"content":"deadline return book /by ","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"tjch-o"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"tjch-o"},"content":"event","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"tjch-o"},"content":"event project meeting from Aug 6th 2pm to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"tjch-o"},"content":"event /from Aug 6th 2pm /to 4pm ","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"tjch-o"},"content":"event project meeting /from Aug 6th 2pm","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"tjch-o"},"content":"event project meeting /to 4pm ","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"tjch-o"},"content":"event project meeting /from Aug 6th 2pm /to 4pm ","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"tjch-o"},"content":"todo join sports club","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"tjch-o"},"content":"todo borrow book","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"tjch-o"},"content":"mark 10","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"tjch-o"},"content":"unmark 10","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"tjch-o"},"content":"delete 10","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"tjch-o"},"content":"mark -1","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"tjch-o"},"content":"unmark -1","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"tjch-o"},"content":"delete -1","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"tjch-o"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"tjch-o"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"tjch-o"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"tjch-o"},"content":"mark 4","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"tjch-o"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"tjch-o"},"content":"unmark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"tjch-o"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"tjch-o"},"content":"delete 3","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"tjch-o"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"tjch-o"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"tjch-o":32}}] diff --git a/tjch-o_ip_master/commits.json b/tjch-o_ip_master/commits.json index 1e814653..1fabb06f 100644 --- a/tjch-o_ip_master/commits.json +++ b/tjch-o_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"tjch-o":[{"date":"2023-08-19","commitResults":[{"hash":"d1f08fc059af8ddb4ae9541c0031c8f7fe5f203e","isMergeCommit":false,"messageTitle":"change chatbot name and add rename, greet, exit feature","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"92fdfeac5a690fa75923dbe8d1944b94bb787385","isMergeCommit":false,"messageTitle":"add echo feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":9}}},{"hash":"9bb786a442e3d73e26927ae147e257abe43a051a","isMergeCommit":false,"messageTitle":"implement add, list features","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":6}}},{"hash":"a7f5644976c1cc72463d11133000aad46c610a1d","isMergeCommit":false,"messageTitle":"add mark as done and change status back to undone feature","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":26}}}]},{"date":"2023-08-20","commitResults":[{"hash":"4b9dbb36a1ef7f3ec60021933093af39ad0bf2cb","isMergeCommit":false,"messageTitle":"add ToDos, Events, Deadlines features","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":16}}},{"hash":"dcbd798698e8ba1e1f279093a89352209e4b5212","isMergeCommit":false,"messageTitle":"add automated ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-21","commitResults":[{"hash":"0363e9b5f488bd13bb27acc2f26dc17f3917d474","isMergeCommit":false,"messageTitle":"add chatbot error handling ability for invalid user input","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":11}}},{"hash":"924901c44f2610f2b96063734f3f9820d1c0c6e6","isMergeCommit":false,"messageTitle":"add delete feature and improve on automated ui testing","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":20,"deletions":2},"java":{"insertions":58,"deletions":12}}},{"hash":"ce7eb91523c2131aee7804504da90cddbb272ba6","isMergeCommit":false,"messageTitle":"added more comprehensive testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-26","commitResults":[{"hash":"f1c9c27340aefcf0d47ce4cea28fb26d1cf82b34","isMergeCommit":false,"messageTitle":"Implement save feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":135,"deletions":10}}},{"hash":"1e9b01ba6f33f17433c7535dc6df7299fd95ed05","isMergeCommit":false,"messageTitle":"Add minor modifications to save feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"719bf849c9cfb2ac04c607373954706717bbb87d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"ec248daf378f11c0353d897ff07d6e177ec44ef6","isMergeCommit":false,"messageTitle":"Implement DateTime for deadlines and events","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":13}}},{"hash":"94a270ada10c8053bb6f88a8b27e5d478081f51b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"30162453ec6ae0f3757f96b6e7d18219256bbf57","isMergeCommit":false,"messageTitle":"Refactor code to add more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":355,"deletions":272}}},{"hash":"3917d703f784aae04f5d219a38523b1a2af93b2c","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"d92b8e2ecafba8900288e4c64e418d5d557e3efa","isMergeCommit":false,"messageTitle":"Add packages and reorganise files into correct folders","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":7}}},{"hash":"b04cd222eeb7c5f7a78cb6704ddbd6fe863b8c9c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"75ebb2457d9f750cc04695c2ce74766113d22383","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/tjch-o/ip into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"dd8d397e4af9ad605dac0ae08cc5b71a92afdeb4","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"3e6f307c305f6d81f790edc03f48d7cd8ddefca2","isMergeCommit":false,"messageTitle":"Add first method JUnit test for Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":1}}},{"hash":"8e63da48e01adc94ecbc6bc9b3a5cc6e37cd2800","isMergeCommit":false,"messageTitle":"Add JUnit tests for Storage class","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":72,"deletions":9}}},{"hash":"9eea0cd96d947a98e57982dd0343bdfb6772e012","isMergeCommit":false,"messageTitle":"Add more JUnit tests for Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":3}}},{"hash":"c7e9fe0a00e5141119149a8ef1833220e94b6e76","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"f646835b678d8f019d1f5091854a69e4ccb3de2e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"f78c750fa3053ae6200f40857f9802c0453f4da7","isMergeCommit":false,"messageTitle":"Update JUnit test cases","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":12}}}]},{"date":"2023-08-28","commitResults":[{"hash":"e8b63121741cd2e249a46f1a3163514cd8632900","isMergeCommit":false,"messageTitle":"Fix directory cannot be found bug for the Storage JUnit test","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":4}}},{"hash":"ebd48b47a2f0452cb1f21cf303f30f0b8b03a02b","isMergeCommit":false,"messageTitle":"Add JavaDocs to most of the classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":219,"deletions":25}}},{"hash":"9b25dde195a2d102e5f2604999d4916905e7aae9","isMergeCommit":false,"messageTitle":"Improve code to follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":29}}},{"hash":"a2f15af9d3a116006c9323bcb4dd3c30506a2f45","isMergeCommit":false,"messageTitle":"Implement find feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":2}}},{"hash":"7505b283749e18c92800b61e67c1597a2bc398ca","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"55bc623966c358e73d8cb72b8dc7ca3b43bda67f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"a2b1c33c90c0800aa6ea316bdb42b72d7437fce3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"831e55ec2bdeba93493e76f1ae91bca7fc589d1b","isMergeCommit":false,"messageTitle":"Rename folders to reflect correct name of chatbot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":52,"deletions":45}}}]},{"date":"2023-08-31","commitResults":[{"hash":"89bad617ed5de5fe58c6ab9e8f2c38409bd7dc8f","isMergeCommit":false,"messageTitle":"Refactor code to abstract out Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":363,"deletions":174}}}]},{"date":"2023-09-05","commitResults":[{"hash":"99e5619b2d4b518dbefe227646863c1db7cdf5bb","isMergeCommit":false,"messageTitle":"Incorporate checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":1,"deletions":2}}},{"hash":"01badb33aa801a03298814fc326785aa5f3c3747","isMergeCommit":false,"messageTitle":"Fix minor checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"69164a05e19d7909f54845b55acf30b74a5f5b16","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"tjch-o":{"java":1369,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":5,"txt":35}},"authorContributionVariance":{"tjch-o":57079.54},"authorDisplayNameMap":{"tjch-o":"CS2103T-T09-1 CHOO.. JIE"}} +{"authorDailyContributionsMap":{"tjch-o":[{"date":"2023-08-19","commitResults":[{"hash":"d1f08fc059af8ddb4ae9541c0031c8f7fe5f203e","isMergeCommit":false,"messageTitle":"change chatbot name and add rename, greet, exit feature","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"92fdfeac5a690fa75923dbe8d1944b94bb787385","isMergeCommit":false,"messageTitle":"add echo feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":9}}},{"hash":"9bb786a442e3d73e26927ae147e257abe43a051a","isMergeCommit":false,"messageTitle":"implement add, list features","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":6}}},{"hash":"a7f5644976c1cc72463d11133000aad46c610a1d","isMergeCommit":false,"messageTitle":"add mark as done and change status back to undone feature","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":26}}}]},{"date":"2023-08-20","commitResults":[{"hash":"4b9dbb36a1ef7f3ec60021933093af39ad0bf2cb","isMergeCommit":false,"messageTitle":"add ToDos, Events, Deadlines features","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":16}}},{"hash":"dcbd798698e8ba1e1f279093a89352209e4b5212","isMergeCommit":false,"messageTitle":"add automated ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-21","commitResults":[{"hash":"0363e9b5f488bd13bb27acc2f26dc17f3917d474","isMergeCommit":false,"messageTitle":"add chatbot error handling ability for invalid user input","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":11}}},{"hash":"924901c44f2610f2b96063734f3f9820d1c0c6e6","isMergeCommit":false,"messageTitle":"add delete feature and improve on automated ui testing","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":20,"deletions":2},"java":{"insertions":58,"deletions":12}}},{"hash":"ce7eb91523c2131aee7804504da90cddbb272ba6","isMergeCommit":false,"messageTitle":"added more comprehensive testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-26","commitResults":[{"hash":"f1c9c27340aefcf0d47ce4cea28fb26d1cf82b34","isMergeCommit":false,"messageTitle":"Implement save feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":135,"deletions":10}}},{"hash":"1e9b01ba6f33f17433c7535dc6df7299fd95ed05","isMergeCommit":false,"messageTitle":"Add minor modifications to save feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"719bf849c9cfb2ac04c607373954706717bbb87d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"ec248daf378f11c0353d897ff07d6e177ec44ef6","isMergeCommit":false,"messageTitle":"Implement DateTime for deadlines and events","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":13}}},{"hash":"94a270ada10c8053bb6f88a8b27e5d478081f51b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"30162453ec6ae0f3757f96b6e7d18219256bbf57","isMergeCommit":false,"messageTitle":"Refactor code to add more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":355,"deletions":272}}},{"hash":"3917d703f784aae04f5d219a38523b1a2af93b2c","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"d92b8e2ecafba8900288e4c64e418d5d557e3efa","isMergeCommit":false,"messageTitle":"Add packages and reorganise files into correct folders","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":7}}},{"hash":"b04cd222eeb7c5f7a78cb6704ddbd6fe863b8c9c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"75ebb2457d9f750cc04695c2ce74766113d22383","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/tjch-o/ip into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"dd8d397e4af9ad605dac0ae08cc5b71a92afdeb4","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"3e6f307c305f6d81f790edc03f48d7cd8ddefca2","isMergeCommit":false,"messageTitle":"Add first method JUnit test for Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":1}}},{"hash":"8e63da48e01adc94ecbc6bc9b3a5cc6e37cd2800","isMergeCommit":false,"messageTitle":"Add JUnit tests for Storage class","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":72,"deletions":9}}},{"hash":"9eea0cd96d947a98e57982dd0343bdfb6772e012","isMergeCommit":false,"messageTitle":"Add more JUnit tests for Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":3}}},{"hash":"c7e9fe0a00e5141119149a8ef1833220e94b6e76","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"f646835b678d8f019d1f5091854a69e4ccb3de2e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"f78c750fa3053ae6200f40857f9802c0453f4da7","isMergeCommit":false,"messageTitle":"Update JUnit test cases","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":12}}}]},{"date":"2023-08-28","commitResults":[{"hash":"e8b63121741cd2e249a46f1a3163514cd8632900","isMergeCommit":false,"messageTitle":"Fix directory cannot be found bug for the Storage JUnit test","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":4}}},{"hash":"ebd48b47a2f0452cb1f21cf303f30f0b8b03a02b","isMergeCommit":false,"messageTitle":"Add JavaDocs to most of the classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":219,"deletions":25}}},{"hash":"9b25dde195a2d102e5f2604999d4916905e7aae9","isMergeCommit":false,"messageTitle":"Improve code to follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":29}}},{"hash":"a2f15af9d3a116006c9323bcb4dd3c30506a2f45","isMergeCommit":false,"messageTitle":"Implement find feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":2}}},{"hash":"7505b283749e18c92800b61e67c1597a2bc398ca","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"55bc623966c358e73d8cb72b8dc7ca3b43bda67f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"a2b1c33c90c0800aa6ea316bdb42b72d7437fce3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"831e55ec2bdeba93493e76f1ae91bca7fc589d1b","isMergeCommit":false,"messageTitle":"Rename folders to reflect correct name of chatbot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":52,"deletions":45}}}]},{"date":"2023-08-31","commitResults":[{"hash":"89bad617ed5de5fe58c6ab9e8f2c38409bd7dc8f","isMergeCommit":false,"messageTitle":"Refactor code to abstract out Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":363,"deletions":174}}}]},{"date":"2023-09-05","commitResults":[{"hash":"99e5619b2d4b518dbefe227646863c1db7cdf5bb","isMergeCommit":false,"messageTitle":"Incorporate checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":1,"deletions":2}}},{"hash":"01badb33aa801a03298814fc326785aa5f3c3747","isMergeCommit":false,"messageTitle":"Fix minor checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"69164a05e19d7909f54845b55acf30b74a5f5b16","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"56cc7ec6e34e2312d1c83f19658d6769a11482f9","isMergeCommit":false,"messageTitle":"Improve javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"f059aae36efb391502a35656f95a48211012e463","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027 into branch-Level-10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"574b93c99f081fe24dfa9c2b770c3e0b115c9e3e","isMergeCommit":false,"messageTitle":"Implement GUI for chatbot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":224,"deletions":6}}},{"hash":"972f84fc1066d0de25fcfe84e0283cd0f5e306f3","isMergeCommit":false,"messageTitle":"Correct controller in MainWindow.fxml","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1}}},{"hash":"971afd5bf5111a81cd7a6ba43fab3fdb189b6084","isMergeCommit":false,"messageTitle":"Minor adjustments to GUI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":4}}}]},{"date":"2023-09-06","commitResults":[{"hash":"12e516bd599c6f7323408892fce6527966cc66d8","isMergeCommit":false,"messageTitle":"Fix bug where GUI cannot find task list and improve on GUI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":13}}},{"hash":"60e96405ddb5696c34ec7bf16a22c2f2f655dc02","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"9ed0053f09ae848a23d733a1826a10df1c2c23f8","isMergeCommit":false,"messageTitle":"Refactor code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":10}}}]}]},"authorFileTypeContributionMap":{"tjch-o":{"java":1592,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":20,"txt":35}},"authorContributionVariance":{"tjch-o":55363.125},"authorDisplayNameMap":{"tjch-o":"CS2103T-T09-1 CHOO.. JIE"}} diff --git a/tjingsheng_ip_master/authorship.json b/tjingsheng_ip_master/authorship.json index 0337ffdf..c5ca2c46 100644 --- a/tjingsheng_ip_master/authorship.json +++ b/tjingsheng_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"# Jing Sheng\u0027s Duke project","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"This is Jing Sheng\u0027s project, created from a template for a greenfield Java project.","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"It\u0027s named after the Java mascot _Duke_.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"## Hello from","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" ██╗██╗███╗ ██╗ ██████╗ ███████╗██╗ ██╗███████╗███╗ ██╗ ██████╗ ","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" ██║██║████╗ ██║██╔════╝ ██╔════╝██║ ██║██╔════╝████╗ ██║██╔════╝ ","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" ██║██║██╔██╗ ██║██║ ███╗ ███████╗███████║█████╗ ██╔██╗ ██║██║ ███╗","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" ██ ██║██║██║╚██╗██║██║ ██║ ╚════██║██╔══██║██╔══╝ ██║╚██╗██║██║ ██║","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" ╚█████╔╝██║██║ ╚████║╚██████╔╝ ███████║██║ ██║███████╗██║ ╚████║╚██████╔╝","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" ╚════╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═══╝ ╚═════╝","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":"## Upstream Repository","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":"https://github.com/nus-cs2103-AY2324S1/ip","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":14,"-":6}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"plugins {","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"repositories {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" mavenCentral()","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"dependencies {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" implementation \u0027com.google.code.gson:gson:2.10.1\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":"test {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" testLogging {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" showExceptions true","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" showCauses true","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" showStackTraces true","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":"application {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" mainClass.set(\"Duke\")","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":"shadowJar {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":"run{","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" standardInput \u003d System.in","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"tjingsheng":43}},{"path":"src/main/java/Command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import Tasks.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import Ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" public ByeCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" if (!validate(super.getRawCommand())) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" Ui.showByeUser();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" protected boolean validate(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d getArgs(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.BYE)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"No Bye Bye\");","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" return args.length \u003d\u003d 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":30}},{"path":"src/main/java/Command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import Tasks.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" private final String rawCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" public abstract void execute(TaskList tasklist);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" public Command(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" this.rawCommand \u003d rawCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" public String getRawCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" return this.rawCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" public boolean isByeCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" return CommandWord.commandWordToValueMap(getArgs(rawCommand)[0]).equals(CommandWord.BYE);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" public static String[] getArgs(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" ArrayList\u003cString\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" String[] words \u003d rawCommand.split(\"\\\\s+\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" String mainCommand \u003d words[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" StringBuilder subCommand \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" result.add(mainCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" for (int i \u003d 1; i \u003c words.length; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" String currentWord \u003d words[i];","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" if (currentWord.startsWith(\"/\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" result.add(subCommand.toString().trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" result.add(currentWord);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" subCommand \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" subCommand.append(\" \").append(currentWord);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" if (!subCommand.toString().trim().isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" result.add(subCommand.toString().trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" return result.toArray(new String[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":50}},{"path":"src/main/java/Command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import Tasks.DeadlineTask;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import Tasks.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import enums.DukeDateFormats;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" private static final DukeDateFormats dateTimeFormat \u003d DukeDateFormats.DATE_ONLY;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" public DeadlineCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" String rawCommand \u003d super.getRawCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" if (!validate(rawCommand)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d getArgs(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" String description \u003d args[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" LocalDate endDate \u003d LocalDate.parse(args[3], dateTimeFormat.getFormatter());","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new DeadlineTask(description, endDate));","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" protected boolean validate(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d getArgs(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.DEADLINE)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[2]).equals(CommandWord.BY)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" if (!DukeDateFormats.validate(args[3], dateTimeFormat)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" return args.length \u003d\u003d 4;","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":46}},{"path":"src/main/java/Command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import Tasks.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":" public DeleteCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" String rawCommand \u003d super.getRawCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" if (!validate(rawCommand, taskList)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d getArgs(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" taskList.deleteTask(args[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" protected boolean validate(String rawCommand, TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d getArgs(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.DELETE)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" if (args.length !\u003d 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" return taskList.validateTaskIndex(args[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":33}},{"path":"src/main/java/Command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import Tasks.EventTask;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import Tasks.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import enums.DukeDateFormats;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" private static final DukeDateFormats dateTimeFormat \u003d DukeDateFormats.DATE_ONLY;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" public EventCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" String rawCommand \u003d super.getRawCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" if (!validate(rawCommand)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d getArgs(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" String description \u003d args[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" LocalDate startDate \u003d LocalDate.parse(args[3], dateTimeFormat.getFormatter());","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" LocalDate endDate \u003d LocalDate.parse(args[5], dateTimeFormat.getFormatter());","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new EventTask(description, startDate, endDate));","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" protected boolean validate(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d getArgs(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.EVENT)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[2]).equals(CommandWord.FROM)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" if (!DukeDateFormats.validate(args[3], dateTimeFormat)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[4]).equals(CommandWord.TO)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" if (!DukeDateFormats.validate(args[5], dateTimeFormat)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" return args.length \u003d\u003d 6;","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":55}},{"path":"src/main/java/Command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import Tasks.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":" public ListCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" if (!validate(super.getRawCommand())) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"No Task was listed.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" taskList.listAllTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" protected boolean validate(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d getArgs(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.LIST)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" return args.length \u003d\u003d 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":28}},{"path":"src/main/java/Command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import Tasks.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":" public MarkCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" String rawCommand \u003d super.getRawCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" if (!validate(rawCommand, taskList)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d getArgs(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" String taskIndex \u003d args[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" taskList.markTaskDone(taskIndex);","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" protected boolean validate(String rawCommand, TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d getArgs(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.MARK)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" if (args.length !\u003d 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" return taskList.validateTaskIndex(args[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":34}},{"path":"src/main/java/Command/NullCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import Tasks.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import Ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"public class NullCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" public NullCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" if (!validate(super.getRawCommand())) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" Ui.showConfused();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" protected boolean validate(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d getArgs(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.NULLCOMMAND)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"ERROR?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" return args.length \u003d\u003d 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":30}},{"path":"src/main/java/Command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import Tasks.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import Tasks.TodoTask;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" private String description;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" private final boolean valid;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" public TodoCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" this.valid \u003d validate(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" private void deconstruct(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" if (!this.valid) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" this.description \u003d getArgs(rawCommand)[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" if (!this.valid) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"No Task was added.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" this.deconstruct(super.getRawCommand());","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(this.description));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" protected boolean validate(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d getArgs(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.TODO)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" return args.length \u003d\u003d 2;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":41}},{"path":"src/main/java/Command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import Tasks.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":" public UnmarkCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" String rawCommand \u003d super.getRawCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" if (!validate(rawCommand, taskList)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d getArgs(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" String taskIndex \u003d args[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" taskList.markTaskUndone(taskIndex);","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" protected boolean validate(String rawCommand, TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d getArgs(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.UNMARK)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" if (args.length !\u003d 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" return taskList.validateTaskIndex(args[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":34}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import Command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import Parser.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import Tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import Ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import Storage.TaskFileHandler;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" runDuke();","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" public static void runDuke() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" Ui.helloWorld();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" boolean converse \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" while (converse) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" String rawCommand \u003d Ui.getUserInput(scanner);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d TaskFileHandler.readFromFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" Ui.getBotMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" Command command \u003d Parser.parse(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" command.execute(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" TaskFileHandler.saveToFile(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" if (command.isByeCommand()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" converse \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"tjingsheng":26,"-":4}},{"path":"src/main/java/Exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"public class DukeException extends RuntimeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tjingsheng":7}},{"path":"src/main/java/Exceptions/DukeInvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"public class DukeInvalidCommandException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":" public DukeInvalidCommandException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tjingsheng":7}},{"path":"src/main/java/Exceptions/DukeStorageException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Exceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"public class DukeStorageException extends DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":" public DukeStorageException(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":" super(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":7}},{"path":"src/main/java/Parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import Command.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":" public static Command parse(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" switch (CommandWord.commandWordToValueMap(Command.getArgs(rawCommand)[0])) {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" case BYE:","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" return new ByeCommand(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" case LIST:","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" return new ListCommand(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" case MARK:","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" return new MarkCommand(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" case UNMARK:","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" return new UnmarkCommand(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" case DELETE:","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" return new DeleteCommand(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" case TODO:","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" return new TodoCommand(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" return new DeadlineCommand(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" case EVENT:","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" return new EventCommand(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" return new NullCommand(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":29}},{"path":"src/main/java/Storage/TaskAdapter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import Tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import com.google.gson.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import java.lang.reflect.Type;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"public class TaskAdapter implements JsonDeserializer\u003cTask\u003e, JsonSerializer\u003cTask\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" public JsonElement serialize(Task src, Type typeOfSrc, JsonSerializationContext context) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" JsonObject jsonObject \u003d new JsonObject();","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" jsonObject.addProperty(\"type\", src.getClass().getName());","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" jsonObject.add(\"data\", context.serialize(src));","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" return jsonObject;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" public Task deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" JsonObject jsonObject \u003d json.getAsJsonObject();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" String type \u003d jsonObject.get(\"type\").getAsString();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" JsonElement data \u003d jsonObject.get(\"data\");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" Class\u003c?\u003e clazz \u003d Class.forName(type);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" return context.deserialize(data, clazz);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" } catch (ClassNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" throw new JsonParseException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":29}},{"path":"src/main/java/Storage/TaskFileHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import Exceptions.DukeStorageException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import Tasks.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import Tasks.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import com.google.gson.Gson;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import com.google.gson.GsonBuilder;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":"public class TaskFileHandler {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" private static final String FILE_PATH \u003d \"data/tasks.json\";","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" public static TaskList readFromFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" createFileIfNotExists(); // Create the file if it doesn\u0027t exist","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" Gson gson \u003d new GsonBuilder()","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" .registerTypeAdapter(Task.class, new TaskAdapter())","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" .create();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" Task[] tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" try (FileReader r \u003d new FileReader(FILE_PATH)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" tasks \u003d gson.fromJson(r, Task[].class);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" return new TaskList(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" public static void saveToFile(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" Task[] tasks \u003d taskList.getTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" Gson gson \u003d new GsonBuilder()","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" .registerTypeAdapter(Task.class, new TaskAdapter())","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" .create();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" try (FileWriter w \u003d new FileWriter(FILE_PATH)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" gson.toJson(tasks, w);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" private static void createFileIfNotExists() {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" file.getParentFile().mkdirs(); // Create parent directories if necessary","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" throw new DukeStorageException(\"Error creating file: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":55}},{"path":"src/main/java/Tasks/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import enums.DukeDateFormats;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import enums.TaskType;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" private final LocalDate endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" public DeadlineTask(String description, LocalDate endDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" super(description);","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" public String getDeadline() {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" return String.format(\" (by: %s)\", endDate.format(DukeDateFormats.DATE_ONLY.getFormatter()));","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" return TaskType.DEADLINE.toSymbol() + super.toString() + getDeadline();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"tjingsheng":24}},{"path":"src/main/java/Tasks/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import enums.DukeDateFormats;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import enums.TaskType;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" private final LocalDate startDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" private final LocalDate endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" public EventTask(String description, LocalDate startDate, LocalDate endDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" super(description);","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" public String getEventRange() {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" return String.format(\" (from: %s to %s)\",","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" startDate.format(DukeDateFormats.DATE_ONLY.getFormatter()),","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" endDate.format(DukeDateFormats.DATE_ONLY.getFormatter()));","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" return TaskType.EVENT.toSymbol() + super.toString() + getEventRange();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"tjingsheng":28}},{"path":"src/main/java/Tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":" protected String description;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" this.description \u003d description.trim();","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" return (isDone ? \"[X]\" : \"[ ]\"); // mark done task with X","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" return this.getStatusIcon() + \" \" + this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" public void markDone() {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"tjingsheng":27}},{"path":"src/main/java/Tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" public TaskList(Task[] tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" if (tasks \u003d\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(1);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(Arrays.asList(tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\" %s\\n\", task);","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\"Now you have %d tasks in the task list.\\n\", this.tasks.size());","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" public void markTaskDone(String text) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" Task task \u003d this.tasks.get(Integer.parseInt(text) - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" task.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\" %s\\n\", task);","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" public void markTaskUndone(String text) {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" Task task \u003d this.tasks.get(Integer.parseInt(text) - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" task.markUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"Ok! I\u0027ve marked this task as undone:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\" %s\\n\", task);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" public void deleteTask(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" int taskIndex \u003d Integer.parseInt(text) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" Task task \u003d this.tasks.get(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" this.tasks.remove(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"Ok! I\u0027ve deleted this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\" %s\\n\", task);","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" public boolean validateTaskIndex(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" Integer.parseInt(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\"Task index: \u0027%s\u0027 is invalid, task index has to be an integer.\\n\", text);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" index \u003d Integer.parseInt(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" if (index \u003c 1 || index \u003e this.tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\"Task index: \u0027%s\u0027 is invalid, task index has to be in list.\\n\", text);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":" public Task[] getTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":" Task[] taskArray \u003d new Task[this.tasks.size()];","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":" return this.tasks.toArray(taskArray);","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":" public void listAllTasks() {","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"tjingsheng"},"content":" for (int i \u003d 1; i \u003c\u003d this.tasks.size(); ++i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"tjingsheng"},"content":" String taskNumber \u003d String.format(\"%3d.\", i);","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\"%s %s\\n\", taskNumber, this.tasks.get(i - 1).toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\"You have %d tasks in the task list.\\n\", this.tasks.size());","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"tjingsheng":79}},{"path":"src/main/java/Tasks/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import enums.TaskType;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"public class TodoTask extends Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":" public TodoTask(String description) {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":" super(description);","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" return TaskType.TODO.toSymbol() + super.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"tjingsheng":13}},{"path":"src/main/java/Ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":" public static int CHAT_WIDTH \u003d 80;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" public static void helloWorld() {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"Hello! I\u0027m Jing Sheng\");","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" public static String getUserInput(Scanner scanner) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" printDividerLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" System.out.print(\"You: \");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" public static void getBotMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" printDividerLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"Bot: \");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" public static void showByeUser() {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" public static void showConfused() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" public static void printDividerLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"═\".repeat(CHAT_WIDTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":35}},{"path":"src/main/java/enums/CommandWord.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package enums;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"public enum CommandWord {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":" BYE(\"bye\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":" LIST(\"list\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":" MARK(\"mark\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":" UNMARK(\"unmark\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" DELETE(\"delete\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" EXIT(\"exit\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" TODO(\"todo\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" DEADLINE(\"deadline\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" EVENT(\"event\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" NULLCOMMAND(\"\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" BY(\"/by\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" FROM(\"/from\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" TO(\"/to\");","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" private final String value;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" CommandWord(String value) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" this.value \u003d value;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" public String getValue() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" return value;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" public static CommandWord commandWordToValueMap(String value) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" for (CommandWord e : values()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" if (e.getValue().equals(value)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" return e;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" return NULLCOMMAND;","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tjingsheng":35}},{"path":"src/main/java/enums/DukeDateFormats.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package enums;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"public enum DukeDateFormats {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" DATE_ONLY(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" private final DateTimeFormatter formatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" DukeDateFormats(String pattern) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" this.formatter \u003d DateTimeFormatter.ofPattern(pattern);","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" public static boolean validate(String string, DukeDateFormats f) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" LocalDate.parse(string, f.getFormatter());","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" public DateTimeFormatter getFormatter() {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" return this.formatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":31}},{"path":"src/main/java/enums/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package enums;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"public enum TaskType {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":" TODO(\"[T]\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":" DEADLINE(\"[D]\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":" EVENT(\"[E]\");","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" private final String symbol;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" TaskType(String symbol) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" this.symbol \u003d symbol;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" public String toSymbol() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" return symbol;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":17}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"todo borrow book","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"list","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"list","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"mark 1","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"list","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"unmark 1","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"list","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tjingsheng":9}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"# Duke project","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"## Hello from","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":" ██╗██╗███╗ ██╗ ██████╗ ███████╗██╗ ██╗███████╗███╗ ██╗ ██████╗ ","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":" ██║██║████╗ ██║██╔════╝ ██╔════╝██║ ██║██╔════╝████╗ ██║██╔════╝ ","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":" ██║██║██╔██╗ ██║██║ ███╗ ███████╗███████║█████╗ ██╔██╗ ██║██║ ███╗","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":" ██ ██║██║██║╚██╗██║██║ ██║ ╚════██║██╔══██║██╔══╝ ██║╚██╗██║██║ ██║","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" ╚█████╔╝██║██║ ╚████║╚██████╔╝ ███████║██║ ██║███████╗██║ ╚████║╚██████╔╝","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" ╚════╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═══╝ ╚═════╝","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"## Project Description","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"This is my project, created from a template for a greenfield Java project.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"It\u0027s named after the Java mascot _Duke_.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":"This project is a Java application that aims to provide a user-friendly task management system. It allows users to manage their tasks efficiently and keep track of their schedules.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"## Features","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":"- **Task Creation**: Users can add various types of tasks, including todo, deadline, and event tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":"- **Task List**: View a list of all tasks, including their descriptions and completion status.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":"- **Task Completion**: Mark tasks as complete when they are done.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":"- **Task Deletion**: Remove tasks that are no longer needed.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":"- **Task Searching**: Search for tasks based on keywords.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":"- **Data Storage**: Data is automatically saved and loaded for seamless usage.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":"## Installation Option 1","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":"1. Go to tjingsheng ip [releases](https://github.com/tjingsheng/ip/releases)","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":"2. **Get Java**: Ensure you have a functioning version of Java.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":"3. **Copy the JAR File**: Copy the JAR file you want to run into an empty folder.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":"4. **Open a Command Window**: Open a command prompt (Windows) or terminal (macOS/Linux) in the same folder where you copied the JAR file.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":"5. **Run the Command**: Use the following command to run the JAR file:","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":"6. **Enjoy**: Duke is very fun.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" ```shell","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" java -jar duke.jar","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":"## Installation Option 2","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":"1. Clone the tjingsheng ip [repository](https://github.com/tjingshengg/ip) to your local machine.","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":"2. Open the project in your preferred Java development environment.","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":"3. Build and run the application.","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":"4. Enjoy","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":"## Todo List","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":"- [x] Task 1 : Get duke","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":"- [ ] Task 2 : Experiment with it","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":"- [ ] Task 3 : Profit ???","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":"- [ ] Task 4 : ~~Cry~~","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":"## Project Sample","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":"```","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" * Runs the Duke application, allowing the user to interact with it via the command line.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" public static void runDuke() {","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" Ui.helloWorld();","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" boolean isConversing \u003d true;","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" while (isConversing) {","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" String rawCommand \u003d Ui.getUserInput(scanner);","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d TaskFileHandler.readFromFile();","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" Ui.getBotMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" Command command \u003d Parser.parse(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" command.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":" TaskFileHandler.saveToFile(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":" isConversing \u003d !command.isByeCommand();","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":"```","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"tjingsheng"},"content":"\u003e\u003e\u003e\u003e\u003e \"Duke hehe Duke hehe\" - Jing Sheng","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":70,"-":2}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"plugins {","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"repositories {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" mavenCentral()","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"dependencies {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" implementation \u0027com.google.code.gson:gson:2.10.1\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":"test {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" testLogging {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" showExceptions true","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" showCauses true","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" showStackTraces true","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":"application {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":"shadowJar {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":"run{","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" standardInput \u003d System.in","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"tjingsheng":43}},{"path":"src/main/java/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" * The `ByeCommand` class represents a command to exit the application.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" * When executed, it displays a bye message to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" * Constructs a new `ByeCommand` with the specified raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" public ByeCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" * Validates the \"bye\" command.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" * It checks if the command is correctly formatted.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the command is valid, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" public static boolean validate(String rawCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d Parser.getArgs(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" if (args.length !\u003d 1) {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" return CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.BYE);","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" * Executes the \"bye\" command. It shows the bye message to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" * @param taskList The task list (not used in this command).","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" if (!validate(super.getRawCommand())) {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" Ui.showByeUser();","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":50}},{"path":"src/main/java/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" * The `Command` class is an abstract class representing a command in the application.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" * All specific command classes should inherit from this class and implement the `execute` method.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" * The raw command entered by the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" private final String rawCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" * The date-time formatter used for parsing dates and times.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" * This formatter is shared among command subclasses.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" protected final DateTimeFormatter DATE_FORMATTER \u003d Duke.DATETIME_FORMATTER;","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" * Constructs a new `Command` with the specified raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" public Command(String rawCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" this.rawCommand \u003d rawCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" * Executes the command. Subclasses must implement this method to define their behavior.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" * @param taskList The task list to perform the command on.","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" public abstract void execute(TaskList taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" * Gets the raw command entered by the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" * @return The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" public String getRawCommand() {","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" return this.rawCommand;","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" * Checks if the command is a \"bye\" command.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if it\u0027s a \"bye\" command, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" public boolean isByeCommand() {","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" return CommandWord.commandWordToValueMap(Parser.getArgs(rawCommand)[0]).equals(CommandWord.BYE);","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":61}},{"path":"src/main/java/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import tasks.DeadlineTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" * The `DeadlineCommand` class represents a command to create a new deadline task.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" * When executed, it parses the command and adds a new deadline task to the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" * Constructs a new `DeadlineCommand` with the specified raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" public DeadlineCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" * Validates the \"deadline\" command.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" * It checks if the command is correctly formatted.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the command is valid, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" public static boolean validate(String rawCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d Parser.getArgs(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" if (args.length !\u003d 4) {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.DEADLINE)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[2]).equals(CommandWord.BY)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" return Duke.validateDateTime(args[3]);","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" * Executes the \"deadline\" command. It parses the command, validates it, and adds a new","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" * deadline task to the task list if the command is valid.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" * @param taskList The task list to which the deadline task is added.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" String rawCommand \u003d super.getRawCommand();","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" if (!validate(rawCommand)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d Parser.getArgs(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" String description \u003d args[1];","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" LocalDate endDate \u003d LocalDate.parse(args[3], super.DATE_FORMATTER);","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new DeadlineTask(description, endDate));","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":67}},{"path":"src/main/java/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" * The `DeleteCommand` class represents a command to delete a task.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" * When executed, it parses the command, validates it, and deletes","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" * the specified task from the task list if the command is valid.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" * Constructs a new `DeleteCommand` with the specified raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" public DeleteCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" * Validates the \"delete\" command.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" * It checks if the command is correctly formatted and if the specified task index is valid.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" * @param taskList The task list against which to validate the task index.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the command is valid, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" public static boolean validate(String rawCommand, TaskList taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d Parser.getArgs(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" if (args.length !\u003d 2) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.DELETE)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" return taskList.validateTaskIndex(args[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" * Executes the \"delete\" command. It parses the command, validates it, and deletes","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" * the specified task from the task list if the command is valid.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" * @param taskList The task list from which the task is deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" String rawCommand \u003d super.getRawCommand();","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" if (!validate(rawCommand, taskList)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d Parser.getArgs(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" taskList.deleteTask(args[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":59}},{"path":"src/main/java/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import tasks.EventTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" * The `EventCommand` class represents a command to create a new event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" * When executed, it parses the command, validates it, and adds a new event task to the task list if the command is valid.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" * Constructs a new `EventCommand` with the specified raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" public EventCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" * Validates the \"event\" command.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" * It checks if the command is correctly formatted.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the command is valid, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" public static boolean validate(String rawCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d Parser.getArgs(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" if (args.length !\u003d 6) {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.EVENT)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[2]).equals(CommandWord.FROM)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" if (!Duke.validateDateTime(args[3])) {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[4]).equals(CommandWord.TO)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" return Duke.validateDateTime(args[5]);","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" * Executes the \"event\" command. It parses the command, validates it, and adds a new","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" * event task to the task list if the command is valid.","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" * @param taskList The task list to which the event task is added.","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":" String rawCommand \u003d super.getRawCommand();","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":" if (!validate(rawCommand)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d Parser.getArgs(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":" String description \u003d args[1];","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"tjingsheng"},"content":" LocalDate startDate \u003d LocalDate.parse(args[3], super.DATE_FORMATTER);","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"tjingsheng"},"content":" LocalDate endDate \u003d LocalDate.parse(args[5], super.DATE_FORMATTER);","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new EventTask(description, startDate, endDate));","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":76}},{"path":"src/main/java/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" * The `FindCommand` class represents a command to search for tasks based on a keyword in the Duke application.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" private final boolean valid;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" private String keyword;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" * Constructs a `FindCommand` with the given raw command.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command input by the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" public FindCommand(String rawCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" this.valid \u003d validate(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" * Validates the `FindCommand` based on the raw command input.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command input by the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the command is valid, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" public static boolean validate(String rawCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d Parser.getArgs(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" if (args.length !\u003d 2) {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" return CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.FIND);","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" private void deconstruct(String rawCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" if (!this.valid) {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" this.keyword \u003d Parser.getArgs(rawCommand)[1];","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" * Executes the `FindCommand` to search for tasks based on the specified keyword.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" * @param taskList The task list in which to search for tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" if (!this.valid) {","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" this.deconstruct(super.getRawCommand());","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" taskList.findTask(this.keyword);","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":58}},{"path":"src/main/java/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" * The `ListCommand` class represents a command to list all tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" * When executed, it validates the command and displays a list of all tasks in the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" * Constructs a new `ListCommand` with the specified raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" public ListCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" * Validates the \"list\" command.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" * It checks if the command is correctly formatted.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the command is valid, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" public static boolean validate(String rawCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d Parser.getArgs(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" if (args.length !\u003d 1) {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" return CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.LIST);","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" * Executes the \"list\" command. It validates the command and displays","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" * a list of all tasks in the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" * @param taskList The task list from which tasks are listed.","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" if (!validate(super.getRawCommand())) {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" taskList.listAllTasks();","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":50}},{"path":"src/main/java/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" * The `MarkCommand` class represents a command to mark a task as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" * When executed, it parses the command, validates it, and marks","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" * the specified task as done in the task list if the command is valid.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" * Constructs a new `MarkCommand` with the specified raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" public MarkCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" * Validates the \"mark\" command.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" * It checks if the command is correctly formatted and if the specified task index is valid.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" * @param taskList The task list against which to validate the task index.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the command is valid, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" public static boolean validate(String rawCommand, TaskList taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d Parser.getArgs(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" if (args.length !\u003d 2) {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.MARK)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" return taskList.validateTaskIndex(args[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" * Executes the \"mark\" command. It parses the command, validates it, and marks","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" * the specified task as done in the task list if the command is valid.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" * @param taskList The task list in which the task is marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" String rawCommand \u003d super.getRawCommand();","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" if (!validate(rawCommand, taskList)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d Parser.getArgs(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" String taskIndex \u003d args[1];","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" taskList.markTaskDone(taskIndex);","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":59}},{"path":"src/main/java/command/NullCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" * The `NullCommand` class represents a command that is not recognized or is not valid.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" * When executed, it shows a \"confused\" message to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"public class NullCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" * Constructs a new `NullCommand` with the specified raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" public NullCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" * Validates the \"null\" command.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" * It checks if the command is correctly formatted.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the command is valid, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" public static boolean validate(String rawCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d Parser.getArgs(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" return CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.NULL_COMMAND);","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" * Executes the \"null\" command. It validates the command and displays","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" * a \"confused\" message to the user if the command is not recognized or valid.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" * @param taskList The task list (not used in this command).","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" if (!validate(super.getRawCommand())) {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" Ui.showConfused();","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":49}},{"path":"src/main/java/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import tasks.TodoTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" * The `TodoCommand` class represents a command to create a new todo task.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" * When executed, it parses the command, validates it, and adds","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" * a new todo task to the task list if the command is valid.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" private final boolean valid;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" private String description;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" * Constructs a new `TodoCommand` with the specified raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" public TodoCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" this.valid \u003d validate(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" * Validates the \"todo\" command.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" * It checks if the command is correctly formatted.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the command is valid, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" public static boolean validate(String rawCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d Parser.getArgs(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" if (args.length !\u003d 2) {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.TODO)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" return true;","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" * Deconstructs the command to extract the description.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" private void deconstruct(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" if (!this.valid) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" this.description \u003d Parser.getArgs(rawCommand)[1];","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" * Executes the \"todo\" command. It parses the command, validates it, and adds a new","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" * todo task to the task list if the command is valid.","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" * @param taskList The task list to which the todo task is added.","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":" if (!this.valid) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":" this.deconstruct(super.getRawCommand());","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(this.description));","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":72}},{"path":"src/main/java/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" * The `UnmarkCommand` class represents a command to unmark a task as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" * When executed, it parses the command, validates it, and marks the specified task as undone in the task list if the command is valid.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" * Constructs a new `UnmarkCommand` with the specified raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" public UnmarkCommand(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" super(rawCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" * Validates the \"unmark\" command.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" * It checks if the command is correctly formatted and if the specified task index is valid.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw command string.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" * @param taskList The task list against which to validate the task index.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the command is valid, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" public static boolean validate(String rawCommand, TaskList taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d Parser.getArgs(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" if (args.length !\u003d 2) {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" if (!CommandWord.commandWordToValueMap(args[0]).equals(CommandWord.UNMARK)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" return taskList.validateTaskIndex(args[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" * Executes the \"unmark\" command. It parses the command, validates it, and marks the specified task as undone in the task list if the command is valid.","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" * @param taskList The task list in which the task is marked as undone.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" public void execute(TaskList taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" String rawCommand \u003d super.getRawCommand();","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" if (!validate(rawCommand, taskList)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" return;","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" String[] args \u003d Parser.getArgs(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" String taskIndex \u003d args[1];","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" taskList.markTaskUndone(taskIndex);","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":57}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import command.Command;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import storage.TaskFileHandler;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" * The `Duke` class is the main class for the Duke application.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" * It handles user interactions and the core functionality of the application.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":"public class Duke {","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" * The date-time formatter used for parsing and formatting dates.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" public final static DateTimeFormatter DATETIME_FORMATTER \u003d DateTimeFormatter.ISO_LOCAL_DATE;","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" * The main entry point for the Duke application.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" * @param args Command-line arguments (not used in this application).","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" runDuke();","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" * Runs the Duke application, allowing the user to interact with it via the command line.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" public static void runDuke() {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" Ui.helloWorld();","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" boolean isConversing \u003d true;","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" while (isConversing) {","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" String rawCommand \u003d Ui.getUserInput(scanner);","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d TaskFileHandler.readFromFile();","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" Ui.getBotMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" Command command \u003d Parser.parse(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" command.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" TaskFileHandler.saveToFile(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" isConversing \u003d !command.isByeCommand();","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" * Validates a date-time string using the duke date-time formatter.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" * @param string The date-time string to validate.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the string is a valid date-time, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" public static boolean validateDateTime(String string) {","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" LocalDate.parse(string, DATETIME_FORMATTER);","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" return true;","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":66}},{"path":"src/main/java/enums/CommandWord.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package enums;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":" * The `CommandWord` enum represents the possible command words used in the Duke application.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"public enum CommandWord {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":" BYE(\"bye\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" FIND(\"find\"),","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" LIST(\"list\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" MARK(\"mark\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" UNMARK(\"unmark\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" DELETE(\"delete\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" EXIT(\"exit\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" TODO(\"todo\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" DEADLINE(\"deadline\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" EVENT(\"event\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" NULL_COMMAND(\"\"),","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" BY(\"/by\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" FROM(\"/from\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" TO(\"/to\");","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" private final String value;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" * Constructs a `CommandWord` enum with the given value.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" * @param value The string representation of the command word.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" CommandWord(String value) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" this.value \u003d value;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" * Maps a string value to the corresponding `CommandWord` enum.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" * If no match is found, it returns the `NULL_COMMAND` enum.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" * @param value The string value to map to a command word.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" * @return The corresponding `CommandWord` enum, or `NULL_COMMAND` if no match is found.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" public static CommandWord commandWordToValueMap(String value) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" for (CommandWord e : values()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" if (e.getValue().equals(value)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" return e;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" return NULL_COMMAND;","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" * Gets the string representation of the command word.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" * @return The string representation of the command word.","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" public String getValue() {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" return value;","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tjingsheng":57}},{"path":"src/main/java/enums/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package enums;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":" * The `TaskType` enum represents the different types of tasks in the Duke application.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"public enum TaskType {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":" TODO(\"[T]\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" DEADLINE(\"[D]\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" EVENT(\"[E]\");","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" private final String symbol;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" * Constructs a `TaskType` enum with the given symbol.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" * @param symbol The symbol associated with the task type.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" TaskType(String symbol) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" this.symbol \u003d symbol;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" * Returns the symbol associated with the task type.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" * @return The symbol associated with the task type.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" public String toSymbol() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" return symbol;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":30}},{"path":"src/main/java/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":" * The `DukeException` class represents a custom exception specific to the Duke application.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":" * It is used to indicate exceptional situations or errors within the application.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"public class DukeException extends RuntimeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" * Constructs a new DukeException with the specified error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" * @param message The error message describing the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tjingsheng":16}},{"path":"src/main/java/exceptions/DukeInvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":" * The `DukeInvalidCommandException` class represents a custom exception specific to the Duke application.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":" * It is used to indicate that an invalid command has been encountered.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"public class DukeInvalidCommandException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" * Constructs a new DukeInvalidCommandException with the specified error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" * @param message The error message describing the invalid command.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" public DukeInvalidCommandException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tjingsheng":16}},{"path":"src/main/java/exceptions/DukeStorageException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":" * The `DukeStorageException` class represents a custom exception specific to the Duke application.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":" * It is used to indicate exceptions related to storage operations,","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":" * such as reading from or writing to storage.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"public class DukeStorageException extends DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" * Constructs a new DukeStorageException with the specified error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" * @param message The error message describing the storage-related exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" public DukeStorageException(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" super(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":17}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import command.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import enums.CommandWord;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" * The `Parser` class is responsible for parsing user commands and creating corresponding `Command` objects.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"public class Parser {","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" * Parses a raw user command and returns the corresponding `Command` object.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw user command.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" * @return A `Command` object representing the parsed command.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" public static Command parse(String rawCommand) {","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" switch (CommandWord.commandWordToValueMap(getArgs(rawCommand)[0])) {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" case BYE:","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" return new ByeCommand(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" case FIND:","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" return new FindCommand(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" case LIST:","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" return new ListCommand(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" case MARK:","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" return new MarkCommand(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" case UNMARK:","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" return new UnmarkCommand(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" case DELETE:","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" return new DeleteCommand(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" case TODO:","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" return new TodoCommand(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" return new DeadlineCommand(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" case EVENT:","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" return new EventCommand(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" default:","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" return new NullCommand(rawCommand);","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" * Splits a raw user command into individual arguments.","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" * @param rawCommand The raw user command.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" * @return An array of individual arguments.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" public static String[] getArgs(String rawCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" ArrayList\u003cString\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" String[] words \u003d rawCommand.split(\"\\\\s+\");","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" String mainCommand \u003d words[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" StringBuilder subCommand \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" result.add(mainCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" for (int i \u003d 1; i \u003c words.length; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" String currentWord \u003d words[i];","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" if (currentWord.startsWith(\"/\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" result.add(subCommand.toString().trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" result.add(currentWord);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" subCommand \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" subCommand.append(\" \").append(currentWord);","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":" if (!subCommand.toString().trim().isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":" result.add(subCommand.toString().trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":" return result.toArray(new String[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":73}},{"path":"src/main/java/storage/LocalDateAdapter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import com.google.gson.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import java.lang.reflect.Type;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" * The `LocalDateAdapter` class is a Gson adapter for serializing and deserializing `LocalDate` objects.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"public class LocalDateAdapter implements JsonSerializer\u003cLocalDate\u003e, JsonDeserializer\u003cLocalDate\u003e {","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" * The date-time formatter used for formatting and parsing dates.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" private static final DateTimeFormatter DATE_FORMATTER \u003d Duke.DATETIME_FORMATTER;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" * Deserialize a `LocalDate` object from a JSON element.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" * @param json The JSON element containing the date as a string.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" * @param typeOfT The type of the object to deserialize.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" * @param context The deserialization context.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" * @return A `LocalDate` object deserialized from the JSON element.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" * @throws JsonParseException If there is an issue with JSON parsing.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" public LocalDate deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" String dateStr \u003d json.getAsString();","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" return LocalDate.parse(dateStr, DATE_FORMATTER);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" * Serialize a `LocalDate` object to a JSON element.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" * @param src The `LocalDate` object to serialize.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" * @param typeOfSrc The type of the source object.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" * @param context The serialization context.","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" * @return A JSON element representing the serialized `LocalDate` object.","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" public JsonElement serialize(LocalDate src, Type typeOfSrc, JsonSerializationContext context) {","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" return new JsonPrimitive(DATE_FORMATTER.format(src));","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":46}},{"path":"src/main/java/storage/TaskAdapter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import com.google.gson.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import java.lang.reflect.Type;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" * The `TaskAdapter` class is a Gson adapter for serializing and deserializing `Task` objects.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"public class TaskAdapter implements JsonDeserializer\u003cTask\u003e, JsonSerializer\u003cTask\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" * Serialize a `Task` object to a JSON element.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" * @param src The `Task` object to serialize.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" * @param typeOfSrc The type of the source object.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" * @param context The serialization context.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" * @return A JSON element representing the serialized `Task` object.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" public JsonElement serialize(Task src, Type typeOfSrc, JsonSerializationContext context) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" JsonObject jsonObject \u003d new JsonObject();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" jsonObject.addProperty(\"type\", src.getClass().getName());","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" jsonObject.add(\"data\", context.serialize(src));","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" return jsonObject;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" * Deserialize a `Task` object from a JSON element.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" * @param json The JSON element containing the serialized `Task` object.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" * @param typeOfT The type of the object to deserialize.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" * @param context The deserialization context.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" * @return A `Task` object deserialized from the JSON element.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" * @throws JsonParseException If there is an issue with JSON parsing.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" public Task deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" JsonObject jsonObject \u003d json.getAsJsonObject();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" String type \u003d jsonObject.get(\"type\").getAsString();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" JsonElement data \u003d jsonObject.get(\"data\");","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" Class\u003c?\u003e clazz \u003d Class.forName(type);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" return context.deserialize(data, clazz);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" } catch (ClassNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" throw new JsonParseException(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":49}},{"path":"src/main/java/storage/TaskFileHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import com.google.gson.Gson;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import com.google.gson.GsonBuilder;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import exceptions.DukeStorageException;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" * The `TaskFileHandler` class is responsible for reading and writing tasks to a JSON file.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":"public class TaskFileHandler {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" * The file path where tasks are stored as JSON data.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" private static final String FILE_PATH \u003d \"data/tasks.json\";","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" * Reads tasks from the JSON file and returns a `TaskList` object.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" * @return A `TaskList` containing the tasks read from the file.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" * @throws DukeStorageException If there is an issue with reading or parsing the file.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" public static TaskList readFromFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" createFileIfNotExists();","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" Gson gson \u003d new GsonBuilder()","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" .registerTypeAdapter(Task.class, new TaskAdapter())","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" .registerTypeAdapter(LocalDate.class, new LocalDateAdapter())","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" .setPrettyPrinting()","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" .create();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" Task[] tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" try (FileReader r \u003d new FileReader(FILE_PATH)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" tasks \u003d gson.fromJson(r, Task[].class);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" throw new DukeStorageException(\"Error reading from file: \" + e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" return new TaskList(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" * Saves tasks to the JSON file.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" * @param taskList The `TaskList` containing tasks to be saved.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" * @throws DukeStorageException If there is an issue with writing to the file.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" public static void saveToFile(TaskList taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" Task[] tasks \u003d taskList.getTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" Gson gson \u003d new GsonBuilder()","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" .registerTypeAdapter(Task.class, new TaskAdapter())","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" .registerTypeAdapter(LocalDate.class, new LocalDateAdapter())","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" .setPrettyPrinting()","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" .create();","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" try (FileWriter w \u003d new FileWriter(FILE_PATH)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" gson.toJson(tasks, w);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" throw new DukeStorageException(\"Error writing to file: \" + e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":" * Creates the JSON file if it does not exist.","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":" * @throws DukeStorageException If there is an issue with file creation.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"tjingsheng"},"content":" private static void createFileIfNotExists() {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"tjingsheng"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"tjingsheng"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"tjingsheng"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"tjingsheng"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"tjingsheng"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"tjingsheng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"tjingsheng"},"content":" throw new DukeStorageException(\"Error creating file: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":83}},{"path":"src/main/java/tasks/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import enums.TaskType;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" * The `DeadlineTask` class represents a task with a specific deadline in the Duke application.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" * It extends the `Task` class and includes the deadline information.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" * The deadline date of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" private final LocalDate endDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" * Constructs a `DeadlineTask` with the given description and deadline date.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" * @param endDate The deadline date of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" public DeadlineTask(String description, LocalDate endDate) {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" super(description);","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" * Gets the deadline date formatted as a string.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" * @return A string representation of the deadline date.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" public String getDeadline() {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" return String.format(\" (by: %s)\", endDate.format(Duke.DATETIME_FORMATTER));","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" * Generates a string representation of the `DeadlineTask`.","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" * @return A string representation of the task, including its","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" * symbol, description, and deadline.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" return TaskType.DEADLINE.toSymbol() + super.toString() + getDeadline();","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" * Checks if this `DeadlineTask` is equal to another object.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" * @param o The object to compare to.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the objects are equal, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" return true;","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" if (!(o instanceof DeadlineTask)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" if (!super.equals(o)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":" DeadlineTask otherDeadlineTask \u003d (DeadlineTask) o;","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":" return this.endDate.equals(otherDeadlineTask.endDate);","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"tjingsheng"},"content":" * Generates a hash code for this `DeadlineTask`.","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"tjingsheng"},"content":" * @return A hash code for the task, including its description and deadline.","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"tjingsheng"},"content":" public int hashCode() {","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"tjingsheng"},"content":" return Objects.hash(super.hashCode(), this.endDate);","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":80}},{"path":"src/main/java/tasks/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import enums.TaskType;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" * The `EventTask` class represents an event task with a specific start and end date in the Duke application.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" * It extends the `Task` class and includes the event date range information.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" * The start date of the event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" private final LocalDate startDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" * The end date of the event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" private final LocalDate endDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" * Constructs an `EventTask` with the given description, start date, and end date.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" * @param startDate The start date of the event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" * @param endDate The end date of the event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" public EventTask(String description, LocalDate startDate, LocalDate endDate) {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" super(description);","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" * Gets the event date range formatted as a string.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" * @return A string representation of the event date range.","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" public String getEventRange() {","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" return String.format(\" (from: %s to %s)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" startDate.format(Duke.DATETIME_FORMATTER),","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" endDate.format(Duke.DATETIME_FORMATTER));","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" * Generates a string representation of the `EventTask`.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" * @return A string representation of the task, including its","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" * symbol, description, and event date range.","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" return TaskType.EVENT.toSymbol() + super.toString() + getEventRange();","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" * Checks if this `EventTask` is equal to another object.","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":" * @param o The object to compare to.","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the objects are equal, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":" return true;","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":" if (!(o instanceof EventTask)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"tjingsheng"},"content":" if (!super.equals(o)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"tjingsheng"},"content":" EventTask eventTask \u003d (EventTask) o;","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"tjingsheng"},"content":" return this.startDate.equals(eventTask.startDate) \u0026\u0026 this.endDate.equals(eventTask.endDate);","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"tjingsheng"},"content":" * Generates a hash code for this `EventTask`.","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"tjingsheng"},"content":" * @return A hash code for the task, including its description and event date range.","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"tjingsheng"},"content":" public int hashCode() {","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"tjingsheng"},"content":" return Objects.hash(super.hashCode(), this.startDate, this.endDate);","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":89}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":" * The `Task` class represents a task in the Duke application.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" * The description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" protected String description;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" * A flag indicating whether the task is marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" * Constructs a `Task` with the given description and initializes it as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" public Task(String description) {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" this.description \u003d description.trim();","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" * Gets the status icon representing the task\u0027s completion status.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" * @return The status icon (\"[X]\" for done, \"[ ]\" for not done).","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" return (isDone ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" * Generates a string representation of the `Task`.","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" * @return A string representation of the task, including its status icon and description.","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" return this.getStatusIcon() + \" \" + this.description;","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" public void markDone() {","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" public void markUndone() {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":" * Checks if the task is marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the task is done, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":" public boolean isDone() {","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":" return this.isDone;","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":" * Checks if the task description contains a specified keyword.","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"tjingsheng"},"content":" * @param keyword The keyword to search for within the task description.","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the task description contains the keyword, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"tjingsheng"},"content":" public boolean hasKeyWord(String keyword) {","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"tjingsheng"},"content":" return this.description.contains(keyword);","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"tjingsheng"},"content":" * Checks if this `Task` is equal to another object.","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"tjingsheng"},"content":" * @param o The object to compare to.","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the objects are equal, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"tjingsheng"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"tjingsheng"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"tjingsheng"},"content":" return true;","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"tjingsheng"},"content":" if (!(o instanceof Task)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"tjingsheng"},"content":" Task otherTask \u003d (Task) o;","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"tjingsheng"},"content":" return this.isDone \u003d\u003d otherTask.isDone \u0026\u0026 this.description.equals(otherTask.description);","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"tjingsheng"},"content":" * Generates a hash code for this `Task`.","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"tjingsheng"},"content":" * @return A hash code for the task, including its description and completion status.","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"tjingsheng"},"content":" public int hashCode() {","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"tjingsheng"},"content":" return Objects.hash(description, isDone);","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":107}},{"path":"src/main/java/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":" * The `TaskList` class represents a collection of tasks in the Duke application.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" * It provides methods for adding, marking tasks as done/undone, deleting tasks,","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" * and listing all tasks in the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" * The list of tasks managed by this `TaskList`.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" * Constructs a `TaskList` with an initial array of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" * @param tasks The initial array of tasks to populate the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" public TaskList(Task[] tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" if (tasks \u003d\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(1);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(Arrays.asList(tasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" * Adds a task to the list and prints a confirmation message.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\" %s\\n\", task);","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\"Now you have %d tasks in the task list.\\n\", this.size());","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" * Marks a task as done and prints a confirmation message.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" * @param text The text representing the task to be marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" public void markTaskDone(String text) {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" Task task \u003d this.tasks.get(Integer.parseInt(text) - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" task.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\" %s\\n\", task);","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" * Marks a task as undone and prints a confirmation message.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" * @param text The text representing the task to be marked as undone.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" public void markTaskUndone(String text) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" Task task \u003d this.tasks.get(Integer.parseInt(text) - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" task.markUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"Ok! I\u0027ve marked this task as undone:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\" %s\\n\", task);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":" * Deletes a task from the list and prints a confirmation message.","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":" * @param text The text representing the task to be deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":" public void deleteTask(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"tjingsheng"},"content":" int taskIndex \u003d Integer.parseInt(text) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"tjingsheng"},"content":" Task task \u003d this.tasks.get(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"tjingsheng"},"content":" this.tasks.remove(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"Ok! I\u0027ve deleted this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\" %s\\n\", task);","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"tjingsheng"},"content":" * Validates whether a task index is valid within the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"tjingsheng"},"content":" * @param text The text representing the task index to validate.","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the task index is valid, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"tjingsheng"},"content":" public boolean validateTaskIndex(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"tjingsheng"},"content":" int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"tjingsheng"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"tjingsheng"},"content":" Integer.parseInt(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"tjingsheng"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\"Task index: \u0027%s\u0027 is invalid, task index has to be an integer.\\n\", text);","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"tjingsheng"},"content":" index \u003d Integer.parseInt(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"tjingsheng"},"content":" if (index \u003c 1 || index \u003e this.tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\"Task index: \u0027%s\u0027 is invalid, task index has to be in list.\\n\", text);","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"tjingsheng"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"tjingsheng"},"content":" * Gets a task from the list by its index.","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"tjingsheng"},"content":" * @param taskIndex The index of the task to retrieve.","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"tjingsheng"},"content":" * @return The task at the specified index, or `null` if the index is out of bounds.","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"tjingsheng"},"content":" public Task getTask(int taskIndex) {","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"tjingsheng"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"tjingsheng"},"content":" return null;","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"tjingsheng"},"content":" return this.tasks.get(taskIndex);","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"tjingsheng"},"content":" * Gets the number of tasks in the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"tjingsheng"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"tjingsheng"},"content":" public int size() {","lastModifiedDate":"2023-09-06"},{"lineNumber":123,"author":{"gitId":"tjingsheng"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-06"},{"lineNumber":124,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":125,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"tjingsheng"},"content":" * Retrieves all tasks in the list as an array.","lastModifiedDate":"2023-09-06"},{"lineNumber":128,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":129,"author":{"gitId":"tjingsheng"},"content":" * @return An array containing all the tasks in the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":131,"author":{"gitId":"tjingsheng"},"content":" public Task[] getTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"tjingsheng"},"content":" Task[] taskArray \u003d new Task[this.size()];","lastModifiedDate":"2023-09-06"},{"lineNumber":133,"author":{"gitId":"tjingsheng"},"content":" return this.tasks.toArray(taskArray);","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":137,"author":{"gitId":"tjingsheng"},"content":" * Lists all tasks in the list and prints them along with task numbers.","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"tjingsheng"},"content":" public void listAllTasks() {","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"tjingsheng"},"content":" for (int i \u003d 1; i \u003c\u003d this.tasks.size(); ++i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"tjingsheng"},"content":" String taskNumber \u003d String.format(\"%3d.\", i);","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\"%s %s\\n\", taskNumber, this.tasks.get(i - 1).toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\"You have %d tasks in the task list.\\n\", this.size());","lastModifiedDate":"2023-09-06"},{"lineNumber":146,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":147,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":148,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":149,"author":{"gitId":"tjingsheng"},"content":" * Finds and displays tasks that contain a specified keyword in their descriptions.","lastModifiedDate":"2023-09-06"},{"lineNumber":150,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":151,"author":{"gitId":"tjingsheng"},"content":" * @param keyword The keyword to search for within task descriptions.","lastModifiedDate":"2023-09-06"},{"lineNumber":152,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":153,"author":{"gitId":"tjingsheng"},"content":" public void findTask(String keyword) {","lastModifiedDate":"2023-09-06"},{"lineNumber":154,"author":{"gitId":"tjingsheng"},"content":" boolean hasMatch \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":155,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":156,"author":{"gitId":"tjingsheng"},"content":" for (int i \u003d 1; i \u003c\u003d this.tasks.size(); ++i) {","lastModifiedDate":"2023-09-06"},{"lineNumber":157,"author":{"gitId":"tjingsheng"},"content":" Task currTask \u003d this.tasks.get(i - 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":158,"author":{"gitId":"tjingsheng"},"content":" if (currTask.hasKeyWord(keyword)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":159,"author":{"gitId":"tjingsheng"},"content":" hasMatch \u003d true;","lastModifiedDate":"2023-09-06"},{"lineNumber":160,"author":{"gitId":"tjingsheng"},"content":" String taskNumber \u003d String.format(\"%3d.\", i);","lastModifiedDate":"2023-09-06"},{"lineNumber":161,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\"%s %s\\n\", taskNumber, currTask);","lastModifiedDate":"2023-09-06"},{"lineNumber":162,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":163,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":164,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":165,"author":{"gitId":"tjingsheng"},"content":" if (!hasMatch) {","lastModifiedDate":"2023-09-06"},{"lineNumber":166,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"No tasks matched your keyword!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":167,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":168,"author":{"gitId":"tjingsheng"},"content":" System.out.printf(\"You have %d tasks in the task list.\\n\", this.size());","lastModifiedDate":"2023-09-06"},{"lineNumber":169,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":170,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"tjingsheng":170}},{"path":"src/main/java/tasks/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import enums.TaskType;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":" * The `TodoTask` class represents a \"Todo\" task in the Duke application.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" * It is a specific type of task that has no specific due date or event range.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"public class TodoTask extends Task {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":" * Constructs a `TodoTask` with the given description.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" * @param description The description of the \"Todo\" task.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" public TodoTask(String description) {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" super(description);","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" * Generates a string representation of the `TodoTask`.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" * @return A string representation of the \"Todo\" task,","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" * including its status icon and description.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" return TaskType.TODO.toSymbol() + super.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" * Checks if this `TodoTask` is equal to another object.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" * @param o The object to compare to.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" * @return `true` if the objects are equal, `false` otherwise.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" return true;","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" if (!(o instanceof TodoTask)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" return false;","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" return super.equals(o);","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" * Generates a hash code for this `TodoTask`.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" * @return A hash code for the \"Todo\" task, including its description and completion status.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" public int hashCode() {","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" return Objects.hash(super.hashCode());","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":56}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":" public static int CHAT_WIDTH \u003d 80;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":" public static void helloWorld() {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"Hello! I\u0027m Jing Sheng\");","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" public static String getUserInput(Scanner scanner) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" printDividerLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" System.out.print(\"You: \");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" public static void getBotMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" printDividerLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"Bot: \");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" public static void showByeUser() {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" public static void showConfused() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" public static void printDividerLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" System.out.println(\"═\".repeat(CHAT_WIDTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tjingsheng":35}},{"path":"src/test/java/command/ByeCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"public class ByeCommandTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":" public void testValidate() {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" // Arrange, Act, Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" assertTrue(ByeCommand.validate(\"bye\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" assertFalse(ByeCommand.validate(\"bye some argument\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" assertFalse(ByeCommand.validate(\"list\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" assertFalse(ByeCommand.validate(\"todo some task\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" assertFalse(ByeCommand.validate(\"deadline some task\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_ShowsByeMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" ByeCommand byeCommand \u003d new ByeCommand(\"bye\");","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" // Redirecting System.out to capture console output","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" byeCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" // Restore System.out","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" String expectedOutput \u003d \"Bye. Hope to see you again soon!\" + System.lineSeparator();","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" assertEquals(expectedOutput, outContent.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_NoMessageDisplayedIfValidationFails() {","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" ByeCommand invalidCommand \u003d new ByeCommand(\"bye some argument\");","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" // Redirecting System.out to capture console output","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" invalidCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" // Restore System.out","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" assertEquals(\"\", outContent.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":65}},{"path":"src/test/java/command/DeadlineCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import tasks.DeadlineTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":"public class DeadlineCommandTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" private final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" @BeforeEach","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" public void setUpStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" // Redirect System.out to the ByteArrayOutputStream","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" @AfterEach","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" public void restoreStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" // Restore the original System.out","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" public void testValidate() {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" // Arrange, Act, Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" assertTrue(DeadlineCommand.validate(\"deadline study /by 2023-01-01\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" assertTrue(DeadlineCommand.validate(\"deadline study /by 2023-01-01\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" assertFalse(DeadlineCommand.validate(\"deadline\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" assertFalse(DeadlineCommand.validate(\"deadline study /by 2023/01/01\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" assertFalse(DeadlineCommand.validate(\"deadline /by 2023/01/01\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_CreateTask() {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" DeadlineCommand deadlineCommand \u003d new DeadlineCommand(\"deadline some task /by 2023-12-31\");","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" LocalDate endDate \u003d LocalDate.parse(\"2023-12-31\", Duke.DATETIME_FORMATTER);","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" Task expectedTask \u003d new DeadlineTask(\"some task\", endDate);","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" deadlineCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" Task retrievedTask \u003d taskList.getTask(0);","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" assertEquals(expectedTask, retrievedTask);","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_NoTaskCreatedIfValidationFail() {","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" TodoCommand invalidCommand \u003d new TodoCommand(\"dealine\");","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":" invalidCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":" assertEquals(0, taskList.size());","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":71}},{"path":"src/test/java/command/DeleteCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import tasks.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" private final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" @BeforeEach","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" public void setUpStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" // Redirect System.out to the ByteArrayOutputStream","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" @AfterEach","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" public void restoreStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" // Restore the original System.out","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" public void testValidate() {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" //Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" LocalDate startDate \u003d LocalDate.parse(\"2023-01-01\", Duke.DATETIME_FORMATTER);","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" LocalDate endDate \u003d LocalDate.parse(\"2023-12-31\", Duke.DATETIME_FORMATTER);","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" Task task1 \u003d new TodoTask(\"some task 1\");","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" Task task2 \u003d new DeadlineTask(\"some task 2\", endDate);","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" Task task3 \u003d new EventTask(\"some task 2\", startDate, endDate);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(new Task[]{task1, task2, task3});","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" // Act, Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" assertTrue(DeleteCommand.validate(\"delete 1\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" assertTrue(DeleteCommand.validate(\"delete 2\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" assertFalse(DeleteCommand.validate(\"delete\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" assertFalse(DeleteCommand.validate(\"delete a\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" assertFalse(DeleteCommand.validate(\"delete 0\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" assertFalse(DeleteCommand.validate(\"delete 4\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_DeleteTask() {","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" DeleteCommand deleteCommand \u003d new DeleteCommand(\"delete 1\");","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" Task task1 \u003d new TodoTask(\"some task 1\");","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(new Task[]{task1});","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" deleteCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":" assertEquals(taskList.size(), 0);","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_NoTaskDeletedIfValidationFails() {","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 1\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":" DeleteCommand invalidCommand \u003d new DeleteCommand(\"delete 1?\");","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"tjingsheng"},"content":" invalidCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"tjingsheng"},"content":" assertEquals(1, taskList.size());","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":78}},{"path":"src/test/java/command/EventCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import tasks.EventTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":"public class EventCommandTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" private final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" @BeforeEach","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" public void setUpStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" // Redirect System.out to the ByteArrayOutputStream","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" @AfterEach","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" public void restoreStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" // Restore the original System.out","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" public void testValidate() {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" // Arrange, Act, Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" assertTrue(EventCommand.validate(\"event some task /from 2023-01-01 /to 2023-12-31\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" assertFalse(EventCommand.validate(\"event\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" assertFalse(EventCommand.validate(\"event some task /from 2023-01-01\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" assertFalse(EventCommand.validate(\"event some task /to 2023-12-31\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" assertFalse(EventCommand.validate(\"deadline some task /from 2023-01-01 /to 2023-12-31\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_CreateTask() {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" EventCommand eventCommand \u003d new EventCommand(\"event TaskName /from 2023-01-01 /to 2023-12-31\");","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" eventCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" LocalDate startDate \u003d LocalDate.parse(\"2023-01-01\", Duke.DATETIME_FORMATTER);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" LocalDate endDate \u003d LocalDate.parse(\"2023-12-31\", Duke.DATETIME_FORMATTER);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" EventTask expectedTask \u003d new EventTask(\"TaskName\", startDate, endDate);","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" Task retrievedTask \u003d taskList.getTask(0);","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" assertEquals(retrievedTask, expectedTask);","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_NoTaskCreatedIfValidationFail() {","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" EventCommand invalidCommand \u003d new EventCommand(\"event\");","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":" invalidCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":" assertEquals(0, taskList.size());","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":73}},{"path":"src/test/java/command/FindCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import tasks.DeadlineTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import tasks.EventTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"import tasks.TodoTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":"public class FindCommandTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" private final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" @BeforeEach","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" public void setUpStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" // Redirect System.out to the ByteArrayOutputStream","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" @AfterEach","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" public void restoreStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" // Restore the original System.out","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" public void testValidate() {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" // Arrange, Act, Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" assertTrue(FindCommand.validate(\"find keyword\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" assertTrue(FindCommand.validate(\"find keyword extra argument\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" assertFalse(FindCommand.validate(\"/find keyword\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" assertFalse(FindCommand.validate(\"find\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" assertFalse(FindCommand.validate(\"list keyword\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_FindsMatchingTasks() {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" LocalDate startDate \u003d LocalDate.parse(\"2023-01-01\");","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" LocalDate endDate \u003d LocalDate.parse(\"2023-12-31\");","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 1\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new DeadlineTask(\"Task 2\", endDate));","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new EventTask(\"Task 3\", startDate, endDate));","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" FindCommand findCommand \u003d new FindCommand(\"find Task 2\");","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" String expectedOutput \u003d \"Here are the matching tasks in your list:\" + System.lineSeparator() +","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" \" 2. [D][ ] Task 2 (by: 2023-12-31)\" + System.lineSeparator() +","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" \"You have 3 tasks in the task list.\" + System.lineSeparator();","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" // Redirecting System.out to capture console output","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" findCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":" // Restore System.out","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":" assertEquals(expectedOutput, outContent.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_NoMatchingTasks() {","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 1\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new DeadlineTask(\"Task 2\", LocalDate.parse(\"2023-12-31\")));","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new EventTask(\"Task 3\", LocalDate.parse(\"2023-01-01\"), LocalDate.parse(\"2023-12-31\")));","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"tjingsheng"},"content":" FindCommand findCommand \u003d new FindCommand(\"find NonExistentTask\");","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"tjingsheng"},"content":" String expectedOutput \u003d \"Here are the matching tasks in your list:\" + System.lineSeparator() +","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"tjingsheng"},"content":" \"No tasks matched your keyword!\" + System.lineSeparator() +","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"tjingsheng"},"content":" \"You have 3 tasks in the task list.\" + System.lineSeparator();","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"tjingsheng"},"content":" // Redirecting System.out to capture console output","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"tjingsheng"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"tjingsheng"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"tjingsheng"},"content":" findCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"tjingsheng"},"content":" // Restore System.out","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"tjingsheng"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"tjingsheng"},"content":" assertEquals(expectedOutput, outContent.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":99}},{"path":"src/test/java/command/ListCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"import tasks.TodoTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"import tasks.DeadlineTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"import tasks.EventTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":"public class ListCommandTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" private final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" @BeforeEach","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" public void setUpStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" // Redirect System.out to the ByteArrayOutputStream","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" @AfterEach","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" public void restoreStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" // Restore the original System.out","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" public void testValidate() {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" // Arrange, Act, Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" assertTrue(ListCommand.validate(\"list\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" assertFalse(ListCommand.validate(\"/list\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" assertFalse(ListCommand.validate(\"list some argument\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" assertFalse(ListCommand.validate(\"todo\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" assertFalse(ListCommand.validate(\"event some task\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" assertFalse(ListCommand.validate(\"deadline some task\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_ListsTasks() {","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" LocalDate startDate \u003d LocalDate.parse(\"2023-01-01\", Duke.DATETIME_FORMATTER);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" LocalDate endDate \u003d LocalDate.parse(\"2023-12-31\", Duke.DATETIME_FORMATTER);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 1\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new DeadlineTask(\"Task 2\", endDate));","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new EventTask(\"Task 3\", startDate, endDate));","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" ListCommand listCommand \u003d new ListCommand(\"list\");","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" String expectedOutput \u003d \"Here are the tasks in your list:\" +System.lineSeparator() +","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" \" 1. [T][ ] Task 1\" +System.lineSeparator() +","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" \" 2. [D][ ] Task 2 (by: 2023-12-31)\" +System.lineSeparator() +","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" \" 3. [E][ ] Task 3 (from: 2023-01-01 to 2023-12-31)\" +System.lineSeparator() +","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" \"You have 3 tasks in the task list.\" + System.lineSeparator();","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" // Redirecting System.out to capture console output","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":" listCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":" // Restore System.out","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"tjingsheng"},"content":" assertEquals(expectedOutput, outContent.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_ListsNoTasks() {","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"tjingsheng"},"content":" ListCommand listCommand \u003d new ListCommand(\"list\");","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"tjingsheng"},"content":" String expectedOutput \u003d \"Here are the tasks in your list:\" + System.lineSeparator() +","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"tjingsheng"},"content":" \"You have 0 tasks in the task list.\" + System.lineSeparator();","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"tjingsheng"},"content":" // Redirecting System.out to capture console output","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"tjingsheng"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"tjingsheng"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"tjingsheng"},"content":" listCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"tjingsheng"},"content":" // Restore System.out","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"tjingsheng"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"tjingsheng"},"content":" assertEquals(expectedOutput, outContent.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":98}},{"path":"src/test/java/command/MarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import tasks.TodoTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"public class MarkCommandTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" private final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" @BeforeEach","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" public void setUpStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" // Redirect System.out to the ByteArrayOutputStream","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" @AfterEach","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" public void restoreStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" // Restore the original System.out","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" public void testValidate() {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 1\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 2\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":" // Act, Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" assertTrue(MarkCommand.validate(\"mark 1\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" assertTrue(MarkCommand.validate(\"mark 2\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" assertFalse(MarkCommand.validate(\"mark\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" assertFalse(MarkCommand.validate(\"mark 0\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" assertFalse(MarkCommand.validate(\"mark 3\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" assertFalse(MarkCommand.validate(\"mark a\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_MarksTaskAsDone() {","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 1\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 2\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" MarkCommand markCommand \u003d new MarkCommand(\"mark 1\");","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" markCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" Task task \u003d taskList.getTask(0);","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_NoTaskMarkedIfValidationFails() {","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 1\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 2\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"tjingsheng"},"content":" MarkCommand invalidCommand \u003d new MarkCommand(\"mark 0\");","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"tjingsheng"},"content":" invalidCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"tjingsheng"},"content":" Task task \u003d taskList.getTask(0);","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"tjingsheng"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":81}},{"path":"src/test/java/command/NullCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"import tasks.TodoTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"public class NullCommandTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" private final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" @BeforeEach","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" public void setUpStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" // Redirect System.out to the ByteArrayOutputStream","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" @AfterEach","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" public void restoreStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" // Restore the original System.out","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" public void testValidate() {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 1\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 2\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" // Act, Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" assertTrue(UnmarkCommand.validate(\"unmark 1\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" assertTrue(UnmarkCommand.validate(\"unmark 2\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" assertFalse(UnmarkCommand.validate(\"unmark\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" assertFalse(UnmarkCommand.validate(\"unmark 0\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" assertFalse(UnmarkCommand.validate(\"unmark 3\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" assertFalse(UnmarkCommand.validate(\"unmark a\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_MarksTaskAsDone() {","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 1\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 2\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" MarkCommand markCommand \u003d new MarkCommand(\"mark 1\");","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" UnmarkCommand unmarkCommand \u003d new UnmarkCommand(\"unmark 1\");","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" markCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" unmarkCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" Task task \u003d taskList.getTask(0);","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_NoTaskMarkedIfValidationFails() {","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 1\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 2\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"tjingsheng"},"content":" MarkCommand markCommand \u003d new MarkCommand(\"mark 1\");","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"tjingsheng"},"content":" MarkCommand invalidCommand \u003d new MarkCommand(\"unmark 1\");","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"tjingsheng"},"content":" markCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"tjingsheng"},"content":" invalidCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"tjingsheng"},"content":" Task task \u003d taskList.getTask(0);","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"tjingsheng"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":86}},{"path":"src/test/java/command/TodoCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import tasks.TodoTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":"public class TodoCommandTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":" private final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" @BeforeEach","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":" public void setUpStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" // Redirect System.out to the ByteArrayOutputStream","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" @AfterEach","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":" public void restoreStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" // Restore the original System.out","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" public void testValidate() {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":" // Arrange, Act, Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" assertTrue(TodoCommand.validate(\"todo some task\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" assertFalse(TodoCommand.validate(\"todo\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" assertFalse(TodoCommand.validate(\"event some task\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" assertFalse(TodoCommand.validate(\"deadline some task\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_CreateTask() {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" TodoCommand todoCommand \u003d new TodoCommand(\"todo TaskName\");","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" todoCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" TodoTask expectedTask \u003d new TodoTask(\"TaskName\");","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" assertEquals(1, taskList.size());","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" assertEquals(expectedTask, taskList.getTask(0));","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_NoTaskCreatedIfValidationFail() {","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":" TodoCommand invalidCommand \u003d new TodoCommand(\"todo\");","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" invalidCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" assertEquals(0, taskList.size());","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":66}},{"path":"src/test/java/command/UnmarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"package command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"import tasks.TodoTask;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"tjingsheng"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"tjingsheng"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"tjingsheng"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"tjingsheng"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"tjingsheng"},"content":"public class UnmarkCommandTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"tjingsheng"},"content":" private final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"tjingsheng"},"content":" @BeforeEach","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"tjingsheng"},"content":" public void setUpStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"tjingsheng"},"content":" // Redirect System.out to the ByteArrayOutputStream","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"tjingsheng"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"tjingsheng"},"content":" @AfterEach","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"tjingsheng"},"content":" public void restoreStreams() {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"tjingsheng"},"content":" // Restore the original System.out","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"tjingsheng"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"tjingsheng"},"content":" public void testValidate() {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 1\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 2\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"tjingsheng"},"content":" // Act, Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"tjingsheng"},"content":" assertTrue(UnmarkCommand.validate(\"unmark 1\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"tjingsheng"},"content":" assertTrue(UnmarkCommand.validate(\"unmark 2\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"tjingsheng"},"content":" assertFalse(UnmarkCommand.validate(\"unmark\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"tjingsheng"},"content":" assertFalse(UnmarkCommand.validate(\"unmark 0\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"tjingsheng"},"content":" assertFalse(UnmarkCommand.validate(\"unmark 3\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"tjingsheng"},"content":" assertFalse(UnmarkCommand.validate(\"unmark a\", taskList));","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_MarksTaskAsDone() {","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 1\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 2\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"tjingsheng"},"content":" MarkCommand markCommand \u003d new MarkCommand(\"mark 1\");","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"tjingsheng"},"content":" UnmarkCommand unmarkCommand \u003d new UnmarkCommand(\"unmark 1\");","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"tjingsheng"},"content":" markCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"tjingsheng"},"content":" unmarkCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"tjingsheng"},"content":" Task task \u003d taskList.getTask(0);","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"tjingsheng"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"tjingsheng"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"tjingsheng"},"content":" public void testExecute_NoTaskMarkedIfValidationFails() {","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"tjingsheng"},"content":" // Arrange","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"tjingsheng"},"content":" TaskList taskList \u003d new TaskList(null);","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 1\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"tjingsheng"},"content":" taskList.addTask(new TodoTask(\"Task 2\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"tjingsheng"},"content":" MarkCommand markCommand \u003d new MarkCommand(\"mark 1\");","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"tjingsheng"},"content":" MarkCommand invalidCommand \u003d new MarkCommand(\"unmark 1\");","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"tjingsheng"},"content":" // Act","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"tjingsheng"},"content":" markCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"tjingsheng"},"content":" invalidCommand.execute(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"tjingsheng"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"tjingsheng"},"content":" // Assert","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"tjingsheng"},"content":" Task task \u003d taskList.getTask(0);","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"tjingsheng"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"tjingsheng"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"tjingsheng"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"tjingsheng":86}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tjingsheng"},"content":"todo borrow book","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tjingsheng"},"content":"list","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tjingsheng"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"tjingsheng"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"tjingsheng"},"content":"list","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"tjingsheng"},"content":"mark 1","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"tjingsheng"},"content":"list","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"tjingsheng"},"content":"unmark 1","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"tjingsheng"},"content":"list","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tjingsheng":9}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"tjingsheng"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"tjingsheng":1,"-":20}}] diff --git a/tjingsheng_ip_master/commits.json b/tjingsheng_ip_master/commits.json index 53c9a070..f1d096c9 100644 --- a/tjingsheng_ip_master/commits.json +++ b/tjingsheng_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"tjingsheng":[{"date":"2023-08-24","commitResults":[{"hash":"1bae5ece5949af5ce7a6237ec85699895f0fb1cd","isMergeCommit":false,"messageTitle":"add-duke-level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":8}}},{"hash":"367f7f7c8d955c1be4eb7bcf72107948ec727b07","isMergeCommit":false,"messageTitle":"add-duke-level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}}]},{"date":"2023-08-25","commitResults":[{"hash":"a2c4dd9193e310cfeac13664b2117cb55a4ea704","isMergeCommit":false,"messageTitle":"add-duke-level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":10}}},{"hash":"528a9e7d22991f91559d04c95526fa46ee3f6a0f","isMergeCommit":false,"messageTitle":"add-duke-level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":8}}}]},{"date":"2023-08-26","commitResults":[{"hash":"ec387ca7ed008ed32bfa2c15afe4da0d5fbe883a","isMergeCommit":false,"messageTitle":"add-duke-level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":38}}}]},{"date":"2023-09-02","commitResults":[{"hash":"0a7157d39d16369448d94b8cd6284c3cc1e47d04","isMergeCommit":false,"messageTitle":"add-duke-level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":1}}},{"hash":"159dce2ff2573a6dc077a995d5c3a0b733af28e2","isMergeCommit":false,"messageTitle":"add-a-textuitesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":3,"deletions":27}}},{"hash":"8a21be3b527a3eee279127a570e39c5845ac5e98","isMergeCommit":false,"messageTitle":"add-duke-level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"5591af63669488d01ecc8e8282175298d0843d73","isMergeCommit":false,"messageTitle":"add-a-enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":18}}}]},{"date":"2023-09-03","commitResults":[{"hash":"22d8c9f80e84181c8b6286ef0dbe1c91f2d7fb9f","isMergeCommit":false,"messageTitle":"change-readme","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":16,"deletions":20}}},{"hash":"ad2007087ad363de8c60806c9d10145c0294f91b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from tjingsheng/add-intro","messageBody":"change-readme","fileTypesAndContributionMap":{}},{"hash":"6eaed36b8904b106de2be8a785a1269b7f97a49d","isMergeCommit":false,"messageTitle":"add-duke-level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":168,"deletions":37}}},{"hash":"1dca12409e57e8bc51b4217277a3cd0f94fc8fc5","isMergeCommit":true,"messageTitle":"Merge pull request #2 from tjingsheng/branch-Level-7","messageBody":"add-duke-level-7","fileTypesAndContributionMap":{}},{"hash":"b5bbeb34e1a924c650ecf4df11a65369c4321be0","isMergeCommit":false,"messageTitle":"add-duke-level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":25}}},{"hash":"4afef36334788662c893c514b7fad63386dfad24","isMergeCommit":true,"messageTitle":"Merge pull request #3 from tjingsheng/branch-level-8","messageBody":"add-duke-level-8","fileTypesAndContributionMap":{}},{"hash":"96398803cbf00a1de0147e1fd018eddaa6eae0e3","isMergeCommit":false,"messageTitle":"add-a-moreoop","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":502,"deletions":125}}},{"hash":"ccc67b161854cf80f051493dffdb55d6dcabffdd","isMergeCommit":true,"messageTitle":"Merge pull request #4 from tjingsheng/a-more-oop","messageBody":"add-a-moreoop","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"c73781b68aff200f6a488ebde9c622830bf6a1bc","isMergeCommit":false,"messageTitle":"add-a-gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":43,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"486f643baa191e513b2abb53de0da57b78ed89c1","isMergeCommit":true,"messageTitle":"Merge pull request #5 from tjingsheng/add-a-gradle","messageBody":"add-a-gradle","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"tjingsheng":{"java":830,"md":14,"fxml":0,"sh":0,"bat":0,"gradle":43,"txt":9}},"authorContributionVariance":{"tjingsheng":47029.953},"authorDisplayNameMap":{"tjingsheng":"CS2103T-W10-2 TAN ..HENG"}} +{"authorDailyContributionsMap":{"tjingsheng":[{"date":"2023-08-24","commitResults":[{"hash":"1bae5ece5949af5ce7a6237ec85699895f0fb1cd","isMergeCommit":false,"messageTitle":"add-duke-level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":8}}},{"hash":"367f7f7c8d955c1be4eb7bcf72107948ec727b07","isMergeCommit":false,"messageTitle":"add-duke-level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}}]},{"date":"2023-08-25","commitResults":[{"hash":"a2c4dd9193e310cfeac13664b2117cb55a4ea704","isMergeCommit":false,"messageTitle":"add-duke-level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":10}}},{"hash":"528a9e7d22991f91559d04c95526fa46ee3f6a0f","isMergeCommit":false,"messageTitle":"add-duke-level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":8}}}]},{"date":"2023-08-26","commitResults":[{"hash":"ec387ca7ed008ed32bfa2c15afe4da0d5fbe883a","isMergeCommit":false,"messageTitle":"add-duke-level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":38}}}]},{"date":"2023-09-02","commitResults":[{"hash":"0a7157d39d16369448d94b8cd6284c3cc1e47d04","isMergeCommit":false,"messageTitle":"add-duke-level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":1}}},{"hash":"159dce2ff2573a6dc077a995d5c3a0b733af28e2","isMergeCommit":false,"messageTitle":"add-a-textuitesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":3,"deletions":27}}},{"hash":"8a21be3b527a3eee279127a570e39c5845ac5e98","isMergeCommit":false,"messageTitle":"add-duke-level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"5591af63669488d01ecc8e8282175298d0843d73","isMergeCommit":false,"messageTitle":"add-a-enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":18}}}]},{"date":"2023-09-03","commitResults":[{"hash":"22d8c9f80e84181c8b6286ef0dbe1c91f2d7fb9f","isMergeCommit":false,"messageTitle":"change-readme","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":16,"deletions":20}}},{"hash":"ad2007087ad363de8c60806c9d10145c0294f91b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from tjingsheng/add-intro","messageBody":"change-readme","fileTypesAndContributionMap":{}},{"hash":"6eaed36b8904b106de2be8a785a1269b7f97a49d","isMergeCommit":false,"messageTitle":"add-duke-level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":168,"deletions":37}}},{"hash":"1dca12409e57e8bc51b4217277a3cd0f94fc8fc5","isMergeCommit":true,"messageTitle":"Merge pull request #2 from tjingsheng/branch-Level-7","messageBody":"add-duke-level-7","fileTypesAndContributionMap":{}},{"hash":"b5bbeb34e1a924c650ecf4df11a65369c4321be0","isMergeCommit":false,"messageTitle":"add-duke-level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":25}}},{"hash":"4afef36334788662c893c514b7fad63386dfad24","isMergeCommit":true,"messageTitle":"Merge pull request #3 from tjingsheng/branch-level-8","messageBody":"add-duke-level-8","fileTypesAndContributionMap":{}},{"hash":"96398803cbf00a1de0147e1fd018eddaa6eae0e3","isMergeCommit":false,"messageTitle":"add-a-moreoop","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":502,"deletions":125}}},{"hash":"ccc67b161854cf80f051493dffdb55d6dcabffdd","isMergeCommit":true,"messageTitle":"Merge pull request #4 from tjingsheng/a-more-oop","messageBody":"add-a-moreoop","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"c73781b68aff200f6a488ebde9c622830bf6a1bc","isMergeCommit":false,"messageTitle":"add-a-gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":43,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"486f643baa191e513b2abb53de0da57b78ed89c1","isMergeCommit":true,"messageTitle":"Merge pull request #5 from tjingsheng/add-a-gradle","messageBody":"add-a-gradle","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"776fc02590a1a008614d2aa52baf4458600cedd3","isMergeCommit":false,"messageTitle":"add-a-junit","messageBody":"","tags":["A-Junit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":1104,"deletions":267},"bat":{"insertions":1,"deletions":1},"md":{"insertions":1,"deletions":1}}},{"hash":"426c9aad74cf8c41f11a4eac3c3de4b539c084b3","isMergeCommit":false,"messageTitle":"add-a-jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":43,"deletions":0},"java":{"insertions":1127,"deletions":292},"bat":{"insertions":1,"deletions":1},"md":{"insertions":1,"deletions":1}}},{"hash":"b92c5bab2b56d6ca8b4747b3c81eb76583726ad8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-a-jar","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"06432f2965ab59ed8ada0e2a1adc42a1c84e4e46","isMergeCommit":true,"messageTitle":"Merge pull request #11 from tjingsheng/add-a-jar","messageBody":"add-a-jar","tags":["A-jar"],"fileTypesAndContributionMap":{}},{"hash":"1cb99a43b96c70a3f076d2d0623d48f085090ce5","isMergeCommit":false,"messageTitle":"add-a-javadoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":636,"deletions":31}}},{"hash":"443b1aa309fbe5011953843bcf7b89a702b2d100","isMergeCommit":false,"messageTitle":"add-a-codingstandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":139}}},{"hash":"c9d440736529e526b80de117d0ddb9ad1e1ac44d","isMergeCommit":false,"messageTitle":"add-duke-level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":195,"deletions":1}}},{"hash":"058da47c430e30c6f763dda47338e10daafb5e19","isMergeCommit":true,"messageTitle":"Merge pull request #12 from tjingsheng/branch-A-JavaDoc","messageBody":"add-a-javadoc","fileTypesAndContributionMap":{}},{"hash":"224fb84e2950f221e008bbf0df54ddc7986fc46a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e1110ecfb57004775104e63960dd4167401ab059","isMergeCommit":true,"messageTitle":"Merge pull request #13 from tjingsheng/branch-A-CodingStandard","messageBody":"add-a-codingstandard","fileTypesAndContributionMap":{}},{"hash":"3c3eda59d3ded4dc837a5946a4f3834d79cdf860","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"beebfa4311cc78b82be7dc298d24530e59984eb1","isMergeCommit":true,"messageTitle":"Merge pull request #14 from tjingsheng/branch-Level-9","messageBody":"add-duke-level-9","fileTypesAndContributionMap":{}},{"hash":"e0ab0cc021a78e05183bdd6260d20845ef33bf0a","isMergeCommit":false,"messageTitle":"use-gfmd-in-README","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":60,"deletions":8}}}]}]},"authorFileTypeContributionMap":{"tjingsheng":{"java":2451,"md":70,"fxml":0,"sh":0,"bat":1,"gradle":43,"txt":9}},"authorContributionVariance":{"tjingsheng":783264.75},"authorDisplayNameMap":{"tjingsheng":"CS2103T-W10-2 TAN ..HENG"}} diff --git a/wnchan_ip_master/authorship.json b/wnchan_ip_master/authorship.json index 778abd23..f4d4c143 100644 --- a/wnchan_ip_master/authorship.json +++ b/wnchan_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"wnchan"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"wnchan"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"wnchan"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"wnchan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"wnchan"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"wnchan"},"content":" return \"[D]\" + super.toString() + \" (by: \" +","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"wnchan"},"content":" by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wnchan"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wnchan"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wnchan"},"content":" return \"D | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + ","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"wnchan"},"content":" by.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wnchan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"wnchan":24}},{"path":"src/main/java/Dukduk.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"import java.io.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"wnchan"},"content":"public class Dukduk {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"wnchan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"wnchan"},"content":" ArrayList\u003cTask\u003e tasks \u003d loadTasksFromFile(\"ip-master/src/main/java/data/duke.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wnchan"},"content":" printLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Hello! I\u0027m Dukduk\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"wnchan"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"wnchan"},"content":" printLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"wnchan"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"wnchan"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"wnchan"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"wnchan"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"wnchan"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"wnchan"},"content":" printLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"wnchan"},"content":" if (input.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"wnchan"},"content":" printLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"wnchan"},"content":" scanner.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"wnchan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"wnchan"},"content":" } else if (input.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"wnchan"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"wnchan"},"content":" System.out.println(\" No tasks added yet.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"wnchan"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Here are the tasks in your list:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"wnchan"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"wnchan"},"content":" System.out.println(\" \" + (i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"wnchan"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"wnchan"},"content":" if (input.length() \u003c\u003d 5) {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! The description cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"wnchan"},"content":" tasks.add(new ToDo(input.substring(5)));","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"wnchan"},"content":" saveTasksToFile(\"ip-master/src/main/java/data/duke.txt\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\\n \" ","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"wnchan"},"content":" + tasks.get(tasks.size() - 1).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"wnchan"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"wnchan"},"content":" int byIndex \u003d input.indexOf(\"/by\");","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"wnchan"},"content":" if (byIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! The deadline format is incorrect. \" +","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"wnchan"},"content":" \"Use \u0027/by\u0027 to specify the deadline.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"wnchan"},"content":" String description \u003d input.substring(9, byIndex).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"wnchan"},"content":" String byString \u003d input.substring(byIndex + 3).trim();","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"wnchan"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"wnchan"},"content":" LocalDateTime by \u003d LocalDateTime.parse(byString, ","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"wnchan"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"wnchan"},"content":" tasks.add(new Deadline(description, by));","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"wnchan"},"content":" saveTasksToFile(\"ip-master/src/main/java/data/duke.txt\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\\n \" ","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"wnchan"},"content":" + tasks.get(tasks.size() - 1).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"wnchan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! The date/time format is incorrect. \" +","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"wnchan"},"content":" \"Please use \u0027yyyy-MM-dd HHmm\u0027 format.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"wnchan"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"wnchan"},"content":" int fromIndex \u003d input.indexOf(\"/from\");","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"wnchan"},"content":" int toIndex \u003d input.indexOf(\"/to\");","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"wnchan"},"content":" if (fromIndex \u003d\u003d -1 || toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! The event format is incorrect. \" +","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"wnchan"},"content":" \"Use \u0027/from\u0027 and \u0027/to\u0027 to specify the timings.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"wnchan"},"content":" String description \u003d input.substring(6, fromIndex).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"wnchan"},"content":" String from \u003d input.substring(fromIndex + 5, toIndex).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"wnchan"},"content":" String to \u003d input.substring(toIndex + 3).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"wnchan"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"wnchan"},"content":" LocalDateTime fromDateTime \u003d LocalDateTime.parse(from, ","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"wnchan"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"wnchan"},"content":" LocalDateTime toDateTime \u003d LocalDateTime.parse(to, ","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"wnchan"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"wnchan"},"content":" if (!toDateTime.isAfter(fromDateTime)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! The \u0027to\u0027 date/time must be \" +","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"wnchan"},"content":" \"after the \u0027from\u0027 date/time.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"wnchan"},"content":" tasks.add(new Event(description, fromDateTime, toDateTime));","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"wnchan"},"content":" saveTasksToFile(\"ip-master/src/main/java/data/duke.txt\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\\n \" ","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"wnchan"},"content":" + tasks.get(tasks.size() - 1).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"wnchan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! The date/time format is incorrect. \" +","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"wnchan"},"content":" \"Please use \u0027yyyy-MM-dd HHmm\u0027 format.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"wnchan"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"wnchan"},"content":" int taskIndex \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"wnchan"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"wnchan"},"content":" tasks.get(taskIndex).markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"wnchan"},"content":" saveTasksToFile(\"ip-master/src/main/java/data/duke.txt\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\\n [\"","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"wnchan"},"content":" + tasks.get(taskIndex).getStatusIcon() + \"] \"","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"wnchan"},"content":" + tasks.get(taskIndex).getDescription());","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"wnchan"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"wnchan"},"content":" int taskIndex \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"wnchan"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"wnchan"},"content":" tasks.get(taskIndex).unmark();","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"wnchan"},"content":" saveTasksToFile(\"ip-master/src/main/java/data/duke.txt\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"wnchan"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\\n [\"","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"wnchan"},"content":" + tasks.get(taskIndex).getStatusIcon() + \"] \"","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"wnchan"},"content":" + tasks.get(taskIndex).getDescription());","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"wnchan"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"wnchan"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"wnchan"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"wnchan"},"content":" if (parts.length !\u003d 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! Please specify the task number to delete.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"wnchan"},"content":" int taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"wnchan"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"wnchan"},"content":" Task removedTask \u003d tasks.remove(taskIndex);","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"wnchan"},"content":" saveTasksToFile(\"ip-master/src/main/java/data/duke.txt\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\\n \" + removedTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"wnchan"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! Task not found. \" +","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"wnchan"},"content":" \"Please provide a valid task number.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"wnchan"},"content":" } catch (DukdukException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"wnchan"},"content":" System.out.println(\" ☹ \" + e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"wnchan"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":136,"author":{"gitId":"wnchan"},"content":" printLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"wnchan"},"content":" } catch (DukdukException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"wnchan"},"content":" System.out.println(\" ☹ \" + e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":139,"author":{"gitId":"wnchan"},"content":" printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":144,"author":{"gitId":"wnchan"},"content":" public static ArrayList\u003cTask\u003e loadTasksFromFile(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"wnchan"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"wnchan"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"wnchan"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"wnchan"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"wnchan"},"content":" System.out.println(\"No existing tasks file found. Starting with an empty task list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"wnchan"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"wnchan"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"wnchan"},"content":" String line;","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"wnchan"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"wnchan"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"wnchan"},"content":" Task task \u003d Task.createTaskFromDataString(line);","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"wnchan"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"wnchan"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"wnchan"},"content":" if (parts.length \u003e\u003d 2 \u0026\u0026 parts[1].equals(\"1\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"wnchan"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"wnchan"},"content":" } catch (DukdukException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"wnchan"},"content":" System.out.println(\"Error parsing task data: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"wnchan"},"content":" reader.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"wnchan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"wnchan"},"content":" System.out.println(\"Error loading tasks from file: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"wnchan"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"wnchan"},"content":" public static void saveTasksToFile(String filePath, ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":178,"author":{"gitId":"wnchan"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(filePath))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"wnchan"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"wnchan"},"content":" writer.write(task.toDataString());","lastModifiedDate":"2023-09-03"},{"lineNumber":181,"author":{"gitId":"wnchan"},"content":" writer.newLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":182,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":183,"author":{"gitId":"wnchan"},"content":" writer.flush();","lastModifiedDate":"2023-09-03"},{"lineNumber":184,"author":{"gitId":"wnchan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":185,"author":{"gitId":"wnchan"},"content":" System.out.println(\"Error saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":186,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":187,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":188,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"wnchan"},"content":" public static void printLine() {","lastModifiedDate":"2023-08-24"},{"lineNumber":190,"author":{"gitId":"wnchan"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":191,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":192,"author":{"gitId":"wnchan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"wnchan":192}},{"path":"src/main/java/DukdukException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"public class DukdukException extends Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":" public DukdukException(String message) {","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":" super(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"wnchan":5}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":" protected LocalDateTime fromDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":" protected LocalDateTime toDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"wnchan"},"content":" public Event(String description, LocalDateTime fromDateTime, LocalDateTime toDateTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"wnchan"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"wnchan"},"content":" this.fromDateTime \u003d fromDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"wnchan"},"content":" this.toDateTime \u003d toDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"wnchan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"wnchan"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"wnchan"},"content":" return \"[E]\" + super.toString() + \" (from: \" + ","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"wnchan"},"content":" fromDateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \" to: \" + ","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"wnchan"},"content":" toDateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wnchan"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wnchan"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wnchan"},"content":" return \"E | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + ","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"wnchan"},"content":" fromDateTime.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\")) + \"|\" + ","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"wnchan"},"content":" toDateTime.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"wnchan"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"wnchan":28}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"wnchan"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"wnchan"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"wnchan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"wnchan"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"wnchan"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"wnchan"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"wnchan"},"content":" return description;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"wnchan"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"wnchan"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"wnchan"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"wnchan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"wnchan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"wnchan"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"wnchan"},"content":" return \"[\" + getStatusIcon() + \"] \" + getDescription();","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wnchan"},"content":" public abstract String toDataString();","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wnchan"},"content":" public static Task createTaskFromDataString(String dataString) throws DukdukException {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wnchan"},"content":" String[] parts \u003d dataString.split(\" \\\\| \");","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"wnchan"},"content":" if (parts.length \u003c 3) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"Invalid task data format: \" + dataString);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wnchan"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"wnchan"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"wnchan"},"content":" switch (type) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"wnchan"},"content":" case \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"wnchan"},"content":" return new ToDo(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"wnchan"},"content":" case \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"wnchan"},"content":" if (parts.length \u003e\u003d 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"wnchan"},"content":" String byString \u003d parts[3];","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"wnchan"},"content":" LocalDateTime by \u003d LocalDateTime.parse(byString, ","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"wnchan"},"content":" DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"wnchan"},"content":" return new Deadline(description, by);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"wnchan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"Invalid Deadline task data format: \" + dataString);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"wnchan"},"content":" case \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"wnchan"},"content":" if (parts.length \u003e\u003d 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"wnchan"},"content":" String eventTiming \u003d parts[3];","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"wnchan"},"content":" String[] eventParts \u003d eventTiming.split(\"\\\\|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"wnchan"},"content":" if (eventParts.length \u003e\u003d 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"wnchan"},"content":" String from \u003d eventParts[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"wnchan"},"content":" String to \u003d eventParts[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"wnchan"},"content":" LocalDateTime fromDateTime \u003d LocalDateTime.parse(from, ","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"wnchan"},"content":" DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"wnchan"},"content":" LocalDateTime toDateTime \u003d LocalDateTime.parse(to, ","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"wnchan"},"content":" DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"wnchan"},"content":" return new Event(description, fromDateTime, toDateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"wnchan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"Invalid Event task data format: \" + dataString);","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"wnchan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"Invalid Event task data format: \" + dataString);","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"wnchan"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"Invalid task type in data string: \" + type);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"wnchan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"wnchan":80}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"wnchan"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"wnchan"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wnchan"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wnchan"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wnchan"},"content":" return \"T | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wnchan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"wnchan":16}},{"path":"src/main/java/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"T | 1 | read book","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"T | 0 | join sports club","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"D | 0 | Finish report | 31-12-2023 18:00","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":"D | 0 | return book | 12-01-2023 12:00","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":"D | 1 | finish homework | 12-12-2023 18:00","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":"E | 0 | meeting | 12-12-2023 18:00|14-12-2023 19:00","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":"E | 1 | project | 13-12-2023 19:00|15-12-2023 19:00","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"wnchan":7}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"to do borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"wnchan"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"wnchan"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"wnchan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"wnchan"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"wnchan":11}}] +[{"path":"src/main/java/Dukduk/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"package Dukduk;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"wnchan"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"wnchan"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"wnchan"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"wnchan"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"wnchan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"wnchan"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"wnchan"},"content":" return \"[D]\" + super.toString() + \" (by: \" +","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"wnchan"},"content":" by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wnchan"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wnchan"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wnchan"},"content":" return \"D | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + ","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"wnchan"},"content":" by.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"wnchan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"wnchan":26}},{"path":"src/main/java/Dukduk/Dukduk.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"package Dukduk;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":"public class Dukduk {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"wnchan"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"wnchan"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"wnchan"},"content":" private String filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"wnchan"},"content":" public Dukduk(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"wnchan"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"wnchan"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"wnchan"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"wnchan"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d Storage.loadTasksFromFile(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"wnchan"},"content":" if (loadedTasks !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"wnchan"},"content":" this.tasks.setTasks(loadedTasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"wnchan"},"content":" public void run() {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"wnchan"},"content":" Ui.printGreetings();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"wnchan"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"wnchan"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"wnchan"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"wnchan"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"wnchan"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"wnchan"},"content":" Ui.printLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"wnchan"},"content":" if (input.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"wnchan"},"content":" Ui.printExit();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"wnchan"},"content":" scanner.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"wnchan"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"wnchan"},"content":" } else if (input.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"wnchan"},"content":" if (this.tasks.getTaskCount() \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"wnchan"},"content":" System.out.println(\" No tasks added yet.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"wnchan"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"wnchan"},"content":" Ui.printTasks(this.tasks.getTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"wnchan"},"content":" } else if (input.startsWith(\"todo\") || input.startsWith(\"deadline\") || input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"wnchan"},"content":" Task task \u003d Parser.parseTask(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"wnchan"},"content":" this.tasks.addTask(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"wnchan"},"content":" Storage.saveTasksToFile(filePath, this.tasks.getTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"wnchan"},"content":" Ui.addTask(this.tasks.getTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"wnchan"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"wnchan"},"content":" int taskIndex \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"wnchan"},"content":" this.tasks.markTaskAsDone(taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"wnchan"},"content":" Storage.saveTasksToFile(filePath, this.tasks.getTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"wnchan"},"content":" Ui.markAsDone(this.tasks.getTasks(), taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"wnchan"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"wnchan"},"content":" int taskIndex \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"wnchan"},"content":" this.tasks.unMarkTask(taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"wnchan"},"content":" Storage.saveTasksToFile(filePath, this.tasks.getTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"wnchan"},"content":" Ui.markAsNotDone(this.tasks.getTasks(), taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"wnchan"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"wnchan"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"wnchan"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"wnchan"},"content":" if (parts.length !\u003d 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! Please specify the task number to delete.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"wnchan"},"content":" int taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"wnchan"},"content":" this.tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"wnchan"},"content":" Storage.saveTasksToFile(filePath, this.tasks.getTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"wnchan"},"content":" } catch (DukdukException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"wnchan"},"content":" Ui.printErrorMsg(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"wnchan"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"wnchan"},"content":" Ui.printLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"wnchan"},"content":" } catch (DukdukException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"wnchan"},"content":" Ui.printErrorMsg(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"wnchan"},"content":" Ui.printLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"wnchan"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"wnchan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"wnchan"},"content":" new Dukduk(\"ip-master/src/main/java/data/duke.txt\").run();","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"wnchan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"wnchan":83}},{"path":"src/main/java/Dukduk/DukdukException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"package Dukduk;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"public class DukdukException extends Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":" public DukdukException(String message) {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":" super(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"wnchan":7}},{"path":"src/main/java/Dukduk/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"package Dukduk;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"wnchan"},"content":" protected LocalDateTime fromDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"wnchan"},"content":" protected LocalDateTime toDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"wnchan"},"content":" public Event(String description, LocalDateTime fromDateTime, LocalDateTime toDateTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"wnchan"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"wnchan"},"content":" this.fromDateTime \u003d fromDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"wnchan"},"content":" this.toDateTime \u003d toDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"wnchan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"wnchan"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"wnchan"},"content":" return \"[E]\" + super.toString() + \" (from: \" + ","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"wnchan"},"content":" fromDateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \" to: \" + ","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"wnchan"},"content":" toDateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wnchan"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"wnchan"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"wnchan"},"content":" return \"E | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + ","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"wnchan"},"content":" fromDateTime.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\")) + \"|\" + ","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"wnchan"},"content":" toDateTime.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"wnchan"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"wnchan":30}},{"path":"src/main/java/Dukduk/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"package Dukduk;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"wnchan"},"content":" ","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"wnchan"},"content":" public static Task parseTask(String input) throws DukdukException {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"wnchan"},"content":" if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"wnchan"},"content":" if (input.length() \u003c\u003d 5) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! The description cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"wnchan"},"content":" return new ToDo(input.substring(5));","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"wnchan"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"wnchan"},"content":" int byIndex \u003d input.indexOf(\"/by\");","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"wnchan"},"content":" if (byIndex \u003d\u003d -1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! The deadline format is incorrect. \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"wnchan"},"content":" \"Use \u0027/by\u0027 to specify the deadline.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"wnchan"},"content":" String description \u003d input.substring(9, byIndex).trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"wnchan"},"content":" String byString \u003d input.substring(byIndex + 3).trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"wnchan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"wnchan"},"content":" LocalDateTime by \u003d LocalDateTime.parse(byString, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"wnchan"},"content":" return new Deadline(description, by);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"wnchan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! The date/time format is incorrect. \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"wnchan"},"content":" \"Please use \u0027yyyy-MM-dd HHmm\u0027 format.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"wnchan"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"wnchan"},"content":" int fromIndex \u003d input.indexOf(\"/from\");","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"wnchan"},"content":" int toIndex \u003d input.indexOf(\"/to\");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"wnchan"},"content":" if (fromIndex \u003d\u003d -1 || toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! The event format is incorrect. Use \u0027/from\u0027 \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"wnchan"},"content":" \"and \u0027/to\u0027 to specify the timings.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"wnchan"},"content":" String description \u003d input.substring(6, fromIndex).trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"wnchan"},"content":" String from \u003d input.substring(fromIndex + 5, toIndex).trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"wnchan"},"content":" String to \u003d input.substring(toIndex + 3).trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"wnchan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"wnchan"},"content":" LocalDateTime fromDateTime \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"wnchan"},"content":" LocalDateTime toDateTime \u003d LocalDateTime.parse(to, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"wnchan"},"content":" if (!toDateTime.isAfter(fromDateTime)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! The \u0027to\u0027 date/time must be \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"wnchan"},"content":" \"after the \u0027from\u0027 date/time.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"wnchan"},"content":" return new Event(description, fromDateTime, toDateTime);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"wnchan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! The date/time format is incorrect. \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"wnchan"},"content":" \"Please use \u0027yyyy-MM-dd HHmm\u0027 format.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"wnchan"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"wnchan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"wnchan":56}},{"path":"src/main/java/Dukduk/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"package Dukduk;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"import java.io.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"wnchan"},"content":" public static ArrayList\u003cTask\u003e loadTasksFromFile(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"wnchan"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"wnchan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"wnchan"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"wnchan"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"wnchan"},"content":" System.out.println(\"No existing tasks file found. Starting with an empty task list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"wnchan"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"wnchan"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"wnchan"},"content":" String line;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"wnchan"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"wnchan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"wnchan"},"content":" Task task \u003d Task.createTaskFromDataString(line);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"wnchan"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"wnchan"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"wnchan"},"content":" if (parts.length \u003e\u003d 2 \u0026\u0026 parts[1].equals(\"1\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"wnchan"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"wnchan"},"content":" } catch (DukdukException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"wnchan"},"content":" System.out.println(\"Error parsing task data: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"wnchan"},"content":" reader.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"wnchan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"wnchan"},"content":" System.out.println(\"Error loading tasks from file: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"wnchan"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"wnchan"},"content":" public static void saveTasksToFile(String filePath, ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"wnchan"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(filePath))) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"wnchan"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"wnchan"},"content":" writer.write(task.toDataString());","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"wnchan"},"content":" writer.newLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"wnchan"},"content":" writer.flush();","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"wnchan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"wnchan"},"content":" System.out.println(\"Error saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"wnchan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"wnchan":51}},{"path":"src/main/java/Dukduk/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"package Dukduk;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"wnchan"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"wnchan"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"wnchan"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"wnchan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"wnchan"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"wnchan"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"wnchan"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"wnchan"},"content":" return description;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"wnchan"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"wnchan"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"wnchan"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"wnchan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"wnchan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"wnchan"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"wnchan"},"content":" return \"[\" + getStatusIcon() + \"] \" + getDescription();","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wnchan"},"content":" public abstract String toDataString();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"wnchan"},"content":" public static Task createTaskFromDataString(String dataString) throws DukdukException {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"wnchan"},"content":" String[] parts \u003d dataString.split(\" \\\\| \");","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"wnchan"},"content":" if (parts.length \u003c 3) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"Invalid task data format: \" + dataString);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"wnchan"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"wnchan"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"wnchan"},"content":" switch (type) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"wnchan"},"content":" case \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"wnchan"},"content":" return new ToDo(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"wnchan"},"content":" case \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"wnchan"},"content":" if (parts.length \u003e\u003d 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"wnchan"},"content":" String byString \u003d parts[3];","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"wnchan"},"content":" LocalDateTime by \u003d LocalDateTime.parse(byString, ","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"wnchan"},"content":" DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"wnchan"},"content":" return new Deadline(description, by);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"wnchan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"Invalid Deadline task data format: \" + dataString);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"wnchan"},"content":" case \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"wnchan"},"content":" if (parts.length \u003e\u003d 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"wnchan"},"content":" String eventTiming \u003d parts[3];","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"wnchan"},"content":" String[] eventParts \u003d eventTiming.split(\"\\\\|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"wnchan"},"content":" if (eventParts.length \u003e\u003d 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"wnchan"},"content":" String from \u003d eventParts[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"wnchan"},"content":" String to \u003d eventParts[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"wnchan"},"content":" LocalDateTime fromDateTime \u003d LocalDateTime.parse(from, ","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"wnchan"},"content":" DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"wnchan"},"content":" LocalDateTime toDateTime \u003d LocalDateTime.parse(to, ","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"wnchan"},"content":" DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"wnchan"},"content":" return new Event(description, fromDateTime, toDateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"wnchan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"Invalid Event task data format: \" + dataString);","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"wnchan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"Invalid Event task data format: \" + dataString);","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"wnchan"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"Invalid task type in data string: \" + type);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"wnchan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"wnchan":82}},{"path":"src/main/java/Dukduk/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"package Dukduk;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":"public class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"wnchan"},"content":" public TaskList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"wnchan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"wnchan"},"content":" public void setTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"wnchan"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"wnchan"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"wnchan"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"wnchan"},"content":" public int getTaskCount() {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"wnchan"},"content":" return tasks.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"wnchan"},"content":" private boolean isValidTaskIndex(int taskIndex) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"wnchan"},"content":" return taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"wnchan"},"content":" public Task getTask(int taskIndex) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"wnchan"},"content":" if (isValidTaskIndex(taskIndex)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"wnchan"},"content":" return tasks.get(taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"wnchan"},"content":" return null;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"wnchan"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"wnchan"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"wnchan"},"content":" public void markTaskAsDone(int taskIndex) {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"wnchan"},"content":" if (isValidTaskIndex(taskIndex)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"wnchan"},"content":" tasks.get(taskIndex).markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"wnchan"},"content":" public void unMarkTask(int taskIndex) {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"wnchan"},"content":" if (isValidTaskIndex(taskIndex)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"wnchan"},"content":" tasks.get(taskIndex).unmark();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"wnchan"},"content":" public void deleteTask(int taskIndex) throws DukdukException {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"wnchan"},"content":" if (isValidTaskIndex(taskIndex)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"wnchan"},"content":" Task removedTask \u003d tasks.remove(taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"wnchan"},"content":" Ui.deleteTask(tasks, taskIndex, removedTask);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"wnchan"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"wnchan"},"content":" throw new DukdukException(\"OOPS!!! Task not found. Please provide a valid task number.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"wnchan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"wnchan":60}},{"path":"src/main/java/Dukduk/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"package Dukduk;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"wnchan"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"wnchan"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"wnchan"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wnchan"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wnchan"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wnchan"},"content":" return \"T | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wnchan"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"wnchan":18}},{"path":"src/main/java/Dukduk/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"package Dukduk;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":" public static void printGreetings() {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"wnchan"},"content":" printLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Hello! I\u0027m Dukduk\");","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"wnchan"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"wnchan"},"content":" printLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"wnchan"},"content":" public static void printExit() {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"wnchan"},"content":" printLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"wnchan"},"content":" public static void printTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Here are the tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"wnchan"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"wnchan"},"content":" System.out.println(\" \" + (i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"wnchan"},"content":" public static void addTask(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"wnchan"},"content":" + tasks.get(tasks.size() - 1).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"wnchan"},"content":" public static void deleteTask(ArrayList\u003cTask\u003e tasks, int taskIndex, Task removedTask) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\\n \" + removedTask);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"wnchan"},"content":" public static void markAsDone(ArrayList\u003cTask\u003e tasks, int taskIndex) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"wnchan"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\\n [\"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"wnchan"},"content":" + tasks.get(taskIndex).getStatusIcon() + \"] \"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"wnchan"},"content":" + tasks.get(taskIndex).getDescription());","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"wnchan"},"content":" public static void markAsNotDone(ArrayList\u003cTask\u003e tasks, int taskIndex) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"wnchan"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\\n [\"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"wnchan"},"content":" + tasks.get(taskIndex).getStatusIcon() + \"] \"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"wnchan"},"content":" + tasks.get(taskIndex).getDescription());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"wnchan"},"content":" public static void printLine() {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"wnchan"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"wnchan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"wnchan"},"content":" public static void printErrorMsg(DukdukException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"wnchan"},"content":" System.out.println(\" ☹ \" + e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"wnchan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"wnchan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"wnchan":56}},{"path":"src/main/java/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"T | 1 | read book","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"T | 0 | join sports club","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"D | 0 | Finish report | 31-12-2023 18:00","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":"D | 1 | finish homework | 12-12-2023 18:00","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":"E | 1 | project | 13-12-2023 19:00|15-12-2023 19:00","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"wnchan":5}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"wnchan"},"content":"to do borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"wnchan"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"wnchan"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"wnchan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"wnchan"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"wnchan"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"wnchan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"wnchan"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"wnchan"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"wnchan"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"wnchan"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"wnchan":11}}] diff --git a/wnchan_ip_master/commits.json b/wnchan_ip_master/commits.json index c7e5cfc0..ff4749eb 100644 --- a/wnchan_ip_master/commits.json +++ b/wnchan_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"wnchan":[{"date":"2023-08-24","commitResults":[{"hash":"a8b6dbfec7d81e5feb24759eb17cd110b6700cce","isMergeCommit":false,"messageTitle":"Level-0, Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":10}}},{"hash":"ee86868b3e210644ab7d57eadefa1a489f4987f7","isMergeCommit":false,"messageTitle":"Level-1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":7}}},{"hash":"40e35795377fbf1e3c8fc8662120c19b117c44ba","isMergeCommit":false,"messageTitle":"Level-2: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":2}}},{"hash":"a0cdce0825cbab51b97a51b68cbdba62aeab2426","isMergeCommit":false,"messageTitle":"Level-3: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":3}}},{"hash":"b527578c878af65396bad2aa2efe100b1f8b7485","isMergeCommit":false,"messageTitle":"Level-4: ToDo, Event, Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":14}}},{"hash":"e2bfc42c589583947cfbe1e927bc1e4256d14924","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0}}}]},{"date":"2023-08-26","commitResults":[{"hash":"0f56cd33d33366dc940b3285abe9fd9b3f5cc48d","isMergeCommit":false,"messageTitle":"Level-5: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":53}}},{"hash":"7c22b506cba68b6ef348ec7e19c0e3c47604fbf3","isMergeCommit":false,"messageTitle":"Level-6: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":25}}}]},{"date":"2023-09-03","commitResults":[{"hash":"c976863a5d8151858ed883934e26bbb18e2a2431","isMergeCommit":false,"messageTitle":"Level-7: Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":111,"deletions":2}}},{"hash":"f894bcbeaaa140852c2723c166e7946a281127bc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"* branch-Level-7:\n Level-7: Save\n","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"4c6b561a5b823fd8879334425f44e84175b89618","isMergeCommit":false,"messageTitle":"Level-8: Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":8},"java":{"insertions":78,"deletions":29}}},{"hash":"a37303025d4da33887aeb2034b3f1ad6f5ea9618","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"* branch-Level-8:\n Level-8: Dates and Times\n","tags":["Level-8"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"wnchan":{"java":345,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":18}},"authorContributionVariance":{"wnchan":5126.0156},"authorDisplayNameMap":{"wnchan":"CS2103T-F12-2 CHAN..NING"}} +{"authorDailyContributionsMap":{"wnchan":[{"date":"2023-08-24","commitResults":[{"hash":"a8b6dbfec7d81e5feb24759eb17cd110b6700cce","isMergeCommit":false,"messageTitle":"Level-0, Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":10}}},{"hash":"ee86868b3e210644ab7d57eadefa1a489f4987f7","isMergeCommit":false,"messageTitle":"Level-1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":7}}},{"hash":"40e35795377fbf1e3c8fc8662120c19b117c44ba","isMergeCommit":false,"messageTitle":"Level-2: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":2}}},{"hash":"a0cdce0825cbab51b97a51b68cbdba62aeab2426","isMergeCommit":false,"messageTitle":"Level-3: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":3}}},{"hash":"b527578c878af65396bad2aa2efe100b1f8b7485","isMergeCommit":false,"messageTitle":"Level-4: ToDo, Event, Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":14}}},{"hash":"e2bfc42c589583947cfbe1e927bc1e4256d14924","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0}}}]},{"date":"2023-08-26","commitResults":[{"hash":"0f56cd33d33366dc940b3285abe9fd9b3f5cc48d","isMergeCommit":false,"messageTitle":"Level-5: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":53}}},{"hash":"7c22b506cba68b6ef348ec7e19c0e3c47604fbf3","isMergeCommit":false,"messageTitle":"Level-6: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":25}}}]},{"date":"2023-09-03","commitResults":[{"hash":"c976863a5d8151858ed883934e26bbb18e2a2431","isMergeCommit":false,"messageTitle":"Level-7: Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":111,"deletions":2}}},{"hash":"f894bcbeaaa140852c2723c166e7946a281127bc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"* branch-Level-7:\n Level-7: Save\n","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"4c6b561a5b823fd8879334425f44e84175b89618","isMergeCommit":false,"messageTitle":"Level-8: Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":8},"java":{"insertions":78,"deletions":29}}},{"hash":"a37303025d4da33887aeb2034b3f1ad6f5ea9618","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"* branch-Level-8:\n Level-8: Dates and Times\n","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"5678d4887afc8f086e0558e9d7bbae9508b21378","isMergeCommit":false,"messageTitle":"A-MoreOOP: Use More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":256,"deletions":151}}},{"hash":"301f8a54eda925eb332495e2221a79f34fae18be","isMergeCommit":false,"messageTitle":"A-Packages: Organize into Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"c1d68420c4f04c0aba0bf577a10424b74bedd078","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","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"wnchan":{"java":469,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":16}},"authorContributionVariance":{"wnchan":12494.273},"authorDisplayNameMap":{"wnchan":"CS2103T-F12-2 CHAN..NING"}} diff --git a/xenosf_ip_master/authorship.json b/xenosf_ip_master/authorship.json index 0bc75cc8..ade07a44 100644 --- a/xenosf_ip_master/authorship.json +++ b/xenosf_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" * Deadline","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" protected String deadline;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" * Constructor for Deadline task.","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":" * @param deadline Deadline for task","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":" public DeadlineTask(String description, String deadline) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":" * Constructor for deadline task, specifying completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":" * @param isDone Boolean representing task completion status","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" * @param deadline Deadline for task","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" public DeadlineTask(String description, String deadline, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" * Returns Deadline task formatted with type and status icon","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":" * @return Task formatted as a string.","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" return String.format(\"\u003cD\u003e%s (BY: %s)\", super.toString(), this.deadline);","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" * Parses save file data into a deadline task instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":" * @param data line from save file","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" * @return Task instance","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" * @throws InvalidTaskDataException if data is not in the expected format","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" public static DeadlineTask fromData(String data) throws InvalidTaskDataException {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" expected format:","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" completed: 1, incomplete: 0","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" deadline: D || 1/0 || deadline || description","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" String[] splitData \u003d data.split(DELIMITER_REGEX, 4);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" if (splitData.length \u003c 4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":" String taskType \u003d splitData[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" String taskCompleted \u003d splitData[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" String taskDeadline \u003d splitData[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" String taskDescription \u003d splitData[3];","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" if (!taskCompleted.equals(\"1\") \u0026\u0026 !taskCompleted.equals(\"0\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":" boolean isCompleted \u003d taskCompleted.equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":" return new DeadlineTask(taskDescription, taskDeadline, isCompleted);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" * Parses deadline task instance into save file string data","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" * @return Task data as string","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" public String toData() {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" expected format:","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":" completed: 1, incomplete: 0","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" deadline: D || 1/0 || deadline || description","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":" String taskCompleted \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" return String.join(DELIMITER, \"D\", taskCompleted, this.deadline, this.description) + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"xenosf":84}},{"path":"src/main/java/Dude.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" * Dude (Duke, but renamed)","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"public class Dude {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":" // Save-file related constants","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":" * Path to save file","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":" static final String SAVE_FILE_PATH \u003d \"./data/dude.txt\";","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":" // Messages","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":" static String logo \u003d","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":" \" _| _| _ O\\n\" +","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" \"(_||_|(_|(/_ /İ\\\\\\n\" +","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":" \"------------ ```\\n\";","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":" static String border \u003d \"-----------------------------------------------------------\\n\";","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" static String hello \u003d logo +","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" \"Hello! I\u0027m dude.\\n\" +","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" \"What can I do for you?\";","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" static String goodbye \u003d","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":" \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" static String taskListPrefix \u003d \"Here\u0027s your tasks list:\\n\";","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" static String emptyTaskList \u003d \"You currently have no tasks in your list.\";","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":" static String addedTask \u003d \"Got it! I\u0027ve added this task:\\n\\t%s\\nYou now have a total of %d task(s).\";","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" static String deletedTask \u003d \"Got it! I\u0027ve removed this task:\\n\\t%s\\nYou now have a total of %d task(s).\";","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" static String markedAsDonePrefix \u003d \"Nice! I\u0027ve marked this task as done:\\n\\t\";","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" static String markedAsNotDonePrefix \u003d \"Got it. I\u0027ve marked this task as not done:\\n\\t\";","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" * Tasks stored by user.","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" public static ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" * Add task to tasks list.","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" * @param task Task to add","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":" * @throws SaveFileException if error saving","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" public static void addTask(Task task) throws SaveFileException {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" saveToSaveFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" * Remove task from tasks list.","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" * @param index 1-based index of task to remove","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":" * @return Removed task","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" * @throws SaveFileException if error saving","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" public static Task removeTask(int index) throws TaskOutOfBoundsException, SaveFileException {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" Task removedTask \u003d tasks.remove(index - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" saveToSaveFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" return removedTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":" throw new TaskOutOfBoundsException();","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" * Get number of tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" * @return Number of tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" public static int getNumTasks() {","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" return tasks.size();","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":" * Get task from list.","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" * @param index 1-based index of task to get.","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":" * @throws TaskOutOfBoundsException if task number does not exist","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" public static Task getTask(int index) throws TaskOutOfBoundsException {","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" return tasks.get(index - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":" throw new TaskOutOfBoundsException();","lastModifiedDate":"2023-08-23"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"xenosf"},"content":" * Gets list of all tasks as a string.","lastModifiedDate":"2023-08-23"},{"lineNumber":93,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"xenosf"},"content":" * @return Tasks list formatted as a string.","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"xenosf"},"content":" public static String getTasksList() {","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" return emptyTaskList;","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":100,"author":{"gitId":"xenosf"},"content":" StringBuilder tasksList \u003d new StringBuilder(taskListPrefix);","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"xenosf"},"content":" for (int i \u003d 0; i \u003c getNumTasks(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"xenosf"},"content":" String taskNumberPrefix \u003d String.format(\"%3s-\", i + 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":103,"author":{"gitId":"xenosf"},"content":" String taskStr \u003d taskNumberPrefix + tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"xenosf"},"content":" tasksList.append(taskStr);","lastModifiedDate":"2023-08-23"},{"lineNumber":105,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"xenosf"},"content":" return tasksList.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":108,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":109,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"xenosf"},"content":" * Parses command with task number with format `{cmd} {index}`, getting corresponding task.","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"xenosf"},"content":" * @param input command.","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"xenosf"},"content":" * @return index of task with index specified in commands","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"xenosf"},"content":" * @throws InvalidTaskIndexException if index is invalid","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"xenosf"},"content":" * @throws TaskIndexMissingException if index is not specified","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"xenosf"},"content":" public static int parseTaskIndexCommand(String input) throws InvalidTaskIndexException, TaskIndexMissingException {","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"xenosf"},"content":" String[] splitInput \u003d input.split(\" \", 3);","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"xenosf"},"content":" if (splitInput.length \u003c 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"xenosf"},"content":" // task number not specified","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"xenosf"},"content":" throw new TaskIndexMissingException();","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"xenosf"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"xenosf"},"content":" String specifiedTask \u003d splitInput[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"xenosf"},"content":" int index \u003d Integer.parseInt(specifiedTask);","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"xenosf"},"content":" getTask(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"xenosf"},"content":" return index;","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"xenosf"},"content":" } catch (NumberFormatException | TaskOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"xenosf"},"content":" // cannot parse number from input","lastModifiedDate":"2023-08-24"},{"lineNumber":130,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskIndexException(specifiedTask);","lastModifiedDate":"2023-08-24"},{"lineNumber":131,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":132,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":136,"author":{"gitId":"xenosf"},"content":" * Parses delete commands.","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":138,"author":{"gitId":"xenosf"},"content":" * @param input delete command.","lastModifiedDate":"2023-08-24"},{"lineNumber":139,"author":{"gitId":"xenosf"},"content":" * @throws DudeException if parsing task from command fails","lastModifiedDate":"2023-08-24"},{"lineNumber":140,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"xenosf"},"content":" public static void parseDelete(String input) throws DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"xenosf"},"content":" int taskToDelete \u003d parseTaskIndexCommand(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"xenosf"},"content":" Task task \u003d removeTask(taskToDelete);","lastModifiedDate":"2023-08-24"},{"lineNumber":144,"author":{"gitId":"xenosf"},"content":" printMessage(String.format(deletedTask, task, getNumTasks()));","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":146,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":147,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":148,"author":{"gitId":"xenosf"},"content":" * Parses mark commands.","lastModifiedDate":"2023-08-24"},{"lineNumber":149,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":150,"author":{"gitId":"xenosf"},"content":" * @param input mark command.","lastModifiedDate":"2023-08-24"},{"lineNumber":151,"author":{"gitId":"xenosf"},"content":" * @throws DudeException if parsing task from command fails","lastModifiedDate":"2023-08-24"},{"lineNumber":152,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":153,"author":{"gitId":"xenosf"},"content":" public static void parseMark(String input) throws DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":154,"author":{"gitId":"xenosf"},"content":" int taskToMark \u003d parseTaskIndexCommand(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":155,"author":{"gitId":"xenosf"},"content":" Task task \u003d getTask(taskToMark);","lastModifiedDate":"2023-08-24"},{"lineNumber":156,"author":{"gitId":"xenosf"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":157,"author":{"gitId":"xenosf"},"content":" printMessage(markedAsDonePrefix + task);","lastModifiedDate":"2023-08-23"},{"lineNumber":158,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":159,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":160,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":161,"author":{"gitId":"xenosf"},"content":" * Parses unmark commands.","lastModifiedDate":"2023-08-24"},{"lineNumber":162,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":163,"author":{"gitId":"xenosf"},"content":" * @param input unmark command.","lastModifiedDate":"2023-08-24"},{"lineNumber":164,"author":{"gitId":"xenosf"},"content":" * @throws DudeException if parsing task from command fails","lastModifiedDate":"2023-08-24"},{"lineNumber":165,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":166,"author":{"gitId":"xenosf"},"content":" public static void parseUnmark(String input) throws DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":167,"author":{"gitId":"xenosf"},"content":" int taskToUnmark \u003d parseTaskIndexCommand(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":168,"author":{"gitId":"xenosf"},"content":" Task task \u003d getTask(taskToUnmark);","lastModifiedDate":"2023-08-24"},{"lineNumber":169,"author":{"gitId":"xenosf"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":170,"author":{"gitId":"xenosf"},"content":" printMessage(markedAsNotDonePrefix + task);","lastModifiedDate":"2023-08-23"},{"lineNumber":171,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":172,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":173,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":174,"author":{"gitId":"xenosf"},"content":" * Parses todo task command.","lastModifiedDate":"2023-08-23"},{"lineNumber":175,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":176,"author":{"gitId":"xenosf"},"content":" * @param input command.","lastModifiedDate":"2023-08-23"},{"lineNumber":177,"author":{"gitId":"xenosf"},"content":" * @throws TaskDescriptionMissingException if task description is missing","lastModifiedDate":"2023-08-24"},{"lineNumber":178,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":179,"author":{"gitId":"xenosf"},"content":" public static void parseTodo(String input) throws TaskDescriptionMissingException, SaveFileException {","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"xenosf"},"content":" String[] splitInput \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":181,"author":{"gitId":"xenosf"},"content":" if (splitInput.length \u003c 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":182,"author":{"gitId":"xenosf"},"content":" // task description not specified","lastModifiedDate":"2023-08-23"},{"lineNumber":183,"author":{"gitId":"xenosf"},"content":" throw new TaskDescriptionMissingException();","lastModifiedDate":"2023-08-24"},{"lineNumber":184,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":185,"author":{"gitId":"xenosf"},"content":" String description \u003d splitInput[1].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":186,"author":{"gitId":"xenosf"},"content":" Task task \u003d new ToDoTask(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":187,"author":{"gitId":"xenosf"},"content":" addTask(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":188,"author":{"gitId":"xenosf"},"content":" printMessage(String.format(addedTask, task, getNumTasks()));","lastModifiedDate":"2023-08-24"},{"lineNumber":189,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":190,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":191,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":" * Parses deadline task command.","lastModifiedDate":"2023-08-23"},{"lineNumber":194,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":195,"author":{"gitId":"xenosf"},"content":" * @param input command.","lastModifiedDate":"2023-08-23"},{"lineNumber":196,"author":{"gitId":"xenosf"},"content":" * @throws TaskDescriptionMissingException if task description is missing","lastModifiedDate":"2023-08-24"},{"lineNumber":197,"author":{"gitId":"xenosf"},"content":" * @throws TaskDeadlineMissingException if task deadline is missing","lastModifiedDate":"2023-08-24"},{"lineNumber":198,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":199,"author":{"gitId":"xenosf"},"content":" public static void parseDeadline(String input)","lastModifiedDate":"2023-08-24"},{"lineNumber":200,"author":{"gitId":"xenosf"},"content":" throws TaskDescriptionMissingException, TaskDeadlineMissingException, SaveFileException {","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"xenosf"},"content":" String[] splitInput \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":202,"author":{"gitId":"xenosf"},"content":" if (splitInput.length \u003c 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":203,"author":{"gitId":"xenosf"},"content":" // task description not specified","lastModifiedDate":"2023-08-23"},{"lineNumber":204,"author":{"gitId":"xenosf"},"content":" throw new TaskDescriptionMissingException();","lastModifiedDate":"2023-08-24"},{"lineNumber":205,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":206,"author":{"gitId":"xenosf"},"content":" String[] splitDeadline \u003d splitInput[1].split(\"/by\", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":207,"author":{"gitId":"xenosf"},"content":" if (splitDeadline.length \u003c 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":208,"author":{"gitId":"xenosf"},"content":" // deadline not specified","lastModifiedDate":"2023-08-23"},{"lineNumber":209,"author":{"gitId":"xenosf"},"content":" throw new TaskDeadlineMissingException();","lastModifiedDate":"2023-08-24"},{"lineNumber":210,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":211,"author":{"gitId":"xenosf"},"content":" String description \u003d splitDeadline[0].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":212,"author":{"gitId":"xenosf"},"content":" String deadline \u003d splitDeadline[1].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":213,"author":{"gitId":"xenosf"},"content":" Task task \u003d new DeadlineTask(description, deadline);","lastModifiedDate":"2023-08-23"},{"lineNumber":214,"author":{"gitId":"xenosf"},"content":" addTask(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" printMessage(String.format(addedTask, task, getNumTasks()));","lastModifiedDate":"2023-08-24"},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":217,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":218,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":219,"author":{"gitId":"xenosf"},"content":" * Parses event task command.","lastModifiedDate":"2023-08-23"},{"lineNumber":220,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":221,"author":{"gitId":"xenosf"},"content":" * @param input command.","lastModifiedDate":"2023-08-23"},{"lineNumber":222,"author":{"gitId":"xenosf"},"content":" * @throws TaskDescriptionMissingException if task description is missing","lastModifiedDate":"2023-08-24"},{"lineNumber":223,"author":{"gitId":"xenosf"},"content":" * @throws EventStartMissingException if event start is missing","lastModifiedDate":"2023-08-24"},{"lineNumber":224,"author":{"gitId":"xenosf"},"content":" * @throws EventEndMissingException if event end is missing","lastModifiedDate":"2023-08-24"},{"lineNumber":225,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":226,"author":{"gitId":"xenosf"},"content":" public static void parseEvent(String input)","lastModifiedDate":"2023-08-24"},{"lineNumber":227,"author":{"gitId":"xenosf"},"content":" throws TaskDescriptionMissingException, EventStartMissingException, EventEndMissingException, SaveFileException {","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"xenosf"},"content":" String[] splitInput \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":229,"author":{"gitId":"xenosf"},"content":" if (splitInput.length \u003c 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":230,"author":{"gitId":"xenosf"},"content":" // task description not specified","lastModifiedDate":"2023-08-23"},{"lineNumber":231,"author":{"gitId":"xenosf"},"content":" throw new TaskDescriptionMissingException();","lastModifiedDate":"2023-08-24"},{"lineNumber":232,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":233,"author":{"gitId":"xenosf"},"content":" String[] splitStart \u003d splitInput[1].split(\"/from\", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":234,"author":{"gitId":"xenosf"},"content":" if (splitStart.length \u003c 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":235,"author":{"gitId":"xenosf"},"content":" // start date not specified","lastModifiedDate":"2023-08-23"},{"lineNumber":236,"author":{"gitId":"xenosf"},"content":" throw new EventStartMissingException();","lastModifiedDate":"2023-08-24"},{"lineNumber":237,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":238,"author":{"gitId":"xenosf"},"content":" String[] splitEnd \u003d splitStart[1].split(\"/to\", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":239,"author":{"gitId":"xenosf"},"content":" if (splitEnd.length \u003c 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":240,"author":{"gitId":"xenosf"},"content":" // end date not specified","lastModifiedDate":"2023-08-23"},{"lineNumber":241,"author":{"gitId":"xenosf"},"content":" throw new EventEndMissingException();","lastModifiedDate":"2023-08-24"},{"lineNumber":242,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":243,"author":{"gitId":"xenosf"},"content":" String description \u003d splitStart[0].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":244,"author":{"gitId":"xenosf"},"content":" String start \u003d splitEnd[0].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":245,"author":{"gitId":"xenosf"},"content":" String end \u003d splitEnd[1].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":246,"author":{"gitId":"xenosf"},"content":" Task task \u003d new EventTask(description, start, end);","lastModifiedDate":"2023-08-23"},{"lineNumber":247,"author":{"gitId":"xenosf"},"content":" addTask(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":248,"author":{"gitId":"xenosf"},"content":" printMessage(String.format(addedTask, task, getNumTasks()));","lastModifiedDate":"2023-08-24"},{"lineNumber":249,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":250,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":251,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":252,"author":{"gitId":"xenosf"},"content":" * Parse input and act accordingly.","lastModifiedDate":"2023-08-23"},{"lineNumber":253,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":254,"author":{"gitId":"xenosf"},"content":" * @param input Input to parse.","lastModifiedDate":"2023-08-23"},{"lineNumber":255,"author":{"gitId":"xenosf"},"content":" * @return `true` if a subsequent command can be taken, `false` if not (i.e. quit)","lastModifiedDate":"2023-08-23"},{"lineNumber":256,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":257,"author":{"gitId":"xenosf"},"content":" public static boolean parseInput(String input) throws DudeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":258,"author":{"gitId":"xenosf"},"content":" // extract command (strip leading and trailing whitespace, take first word)","lastModifiedDate":"2023-08-23"},{"lineNumber":259,"author":{"gitId":"xenosf"},"content":" String[] splitInput \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":260,"author":{"gitId":"xenosf"},"content":" String cmdString \u003d splitInput[0].toLowerCase();","lastModifiedDate":"2023-08-24"},{"lineNumber":261,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":262,"author":{"gitId":"xenosf"},"content":" DudeCommand cmd \u003d DudeCommand.valueOf(cmdString);","lastModifiedDate":"2023-08-24"},{"lineNumber":263,"author":{"gitId":"xenosf"},"content":" switch (cmd) {","lastModifiedDate":"2023-08-23"},{"lineNumber":264,"author":{"gitId":"xenosf"},"content":" case bye:","lastModifiedDate":"2023-08-24"},{"lineNumber":265,"author":{"gitId":"xenosf"},"content":" // quit","lastModifiedDate":"2023-08-23"},{"lineNumber":266,"author":{"gitId":"xenosf"},"content":" // Print shutdown greeting","lastModifiedDate":"2023-08-23"},{"lineNumber":267,"author":{"gitId":"xenosf"},"content":" printMessage(goodbye);","lastModifiedDate":"2023-08-23"},{"lineNumber":268,"author":{"gitId":"xenosf"},"content":" return false;","lastModifiedDate":"2023-08-23"},{"lineNumber":269,"author":{"gitId":"xenosf"},"content":" case list:","lastModifiedDate":"2023-08-24"},{"lineNumber":270,"author":{"gitId":"xenosf"},"content":" // list tasks","lastModifiedDate":"2023-08-23"},{"lineNumber":271,"author":{"gitId":"xenosf"},"content":" printMessage(getTasksList());","lastModifiedDate":"2023-08-23"},{"lineNumber":272,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":273,"author":{"gitId":"xenosf"},"content":" case mark:","lastModifiedDate":"2023-08-24"},{"lineNumber":274,"author":{"gitId":"xenosf"},"content":" // mark as done","lastModifiedDate":"2023-08-24"},{"lineNumber":275,"author":{"gitId":"xenosf"},"content":" parseMark(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":276,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":277,"author":{"gitId":"xenosf"},"content":" case unmark:","lastModifiedDate":"2023-08-24"},{"lineNumber":278,"author":{"gitId":"xenosf"},"content":" // mark as not done","lastModifiedDate":"2023-08-24"},{"lineNumber":279,"author":{"gitId":"xenosf"},"content":" parseUnmark(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":280,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":281,"author":{"gitId":"xenosf"},"content":" case delete:","lastModifiedDate":"2023-08-24"},{"lineNumber":282,"author":{"gitId":"xenosf"},"content":" case remove: // alias because I keep typing remove lol","lastModifiedDate":"2023-08-24"},{"lineNumber":283,"author":{"gitId":"xenosf"},"content":" parseDelete(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":284,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":285,"author":{"gitId":"xenosf"},"content":" case todo:","lastModifiedDate":"2023-08-24"},{"lineNumber":286,"author":{"gitId":"xenosf"},"content":" // add todo task to list","lastModifiedDate":"2023-08-23"},{"lineNumber":287,"author":{"gitId":"xenosf"},"content":" parseTodo(input);","lastModifiedDate":"2023-08-23"},{"lineNumber":288,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":289,"author":{"gitId":"xenosf"},"content":" case deadline:","lastModifiedDate":"2023-08-24"},{"lineNumber":290,"author":{"gitId":"xenosf"},"content":" // add deadline task to list","lastModifiedDate":"2023-08-23"},{"lineNumber":291,"author":{"gitId":"xenosf"},"content":" parseDeadline(input);","lastModifiedDate":"2023-08-23"},{"lineNumber":292,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":293,"author":{"gitId":"xenosf"},"content":" case event:","lastModifiedDate":"2023-08-24"},{"lineNumber":294,"author":{"gitId":"xenosf"},"content":" // add event task to list","lastModifiedDate":"2023-08-23"},{"lineNumber":295,"author":{"gitId":"xenosf"},"content":" parseEvent(input);","lastModifiedDate":"2023-08-23"},{"lineNumber":296,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":297,"author":{"gitId":"xenosf"},"content":" default:","lastModifiedDate":"2023-08-23"},{"lineNumber":298,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":299,"author":{"gitId":"xenosf"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":300,"author":{"gitId":"xenosf"},"content":" // invalid command entered","lastModifiedDate":"2023-08-24"},{"lineNumber":301,"author":{"gitId":"xenosf"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-23"},{"lineNumber":302,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":303,"author":{"gitId":"xenosf"},"content":" return true;","lastModifiedDate":"2023-08-23"},{"lineNumber":304,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":305,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":306,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":307,"author":{"gitId":"xenosf"},"content":" * Format and print given message/prompt to console.","lastModifiedDate":"2023-08-23"},{"lineNumber":308,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":309,"author":{"gitId":"xenosf"},"content":" * @param message Message to print. Lines separated by \\n.","lastModifiedDate":"2023-08-23"},{"lineNumber":310,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":311,"author":{"gitId":"xenosf"},"content":" public static void printMessage(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":312,"author":{"gitId":"xenosf"},"content":" String[] lines \u003d message.split(\"\\\\n\");","lastModifiedDate":"2023-08-23"},{"lineNumber":313,"author":{"gitId":"xenosf"},"content":" String prefix \u003d \" \";","lastModifiedDate":"2023-08-23"},{"lineNumber":314,"author":{"gitId":"xenosf"},"content":" String output \u003d border + prefix +","lastModifiedDate":"2023-08-23"},{"lineNumber":315,"author":{"gitId":"xenosf"},"content":" String.join(\"\\n\" + prefix, lines) +","lastModifiedDate":"2023-08-23"},{"lineNumber":316,"author":{"gitId":"xenosf"},"content":" \"\\n\" + border;","lastModifiedDate":"2023-08-23"},{"lineNumber":317,"author":{"gitId":"xenosf"},"content":" System.out.println(output);","lastModifiedDate":"2023-08-23"},{"lineNumber":318,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":319,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":320,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":321,"author":{"gitId":"xenosf"},"content":" * Create new empty save file at SAVE_FILE_PATH if it does not already exist.","lastModifiedDate":"2023-08-30"},{"lineNumber":322,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":323,"author":{"gitId":"xenosf"},"content":" * @throws SaveFileException if file cannot be created","lastModifiedDate":"2023-08-30"},{"lineNumber":324,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":325,"author":{"gitId":"xenosf"},"content":" public static void createSaveFile() throws SaveFileException {","lastModifiedDate":"2023-08-30"},{"lineNumber":326,"author":{"gitId":"xenosf"},"content":" File saveFile \u003d new File(SAVE_FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":327,"author":{"gitId":"xenosf"},"content":" File parent \u003d saveFile.getParentFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":328,"author":{"gitId":"xenosf"},"content":" // check \u0026 create parent dir(s)","lastModifiedDate":"2023-08-30"},{"lineNumber":329,"author":{"gitId":"xenosf"},"content":" if (parent !\u003d null \u0026\u0026 !parent.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":330,"author":{"gitId":"xenosf"},"content":" parent.mkdirs();","lastModifiedDate":"2023-08-30"},{"lineNumber":331,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":332,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":333,"author":{"gitId":"xenosf"},"content":" // create save file","lastModifiedDate":"2023-08-30"},{"lineNumber":334,"author":{"gitId":"xenosf"},"content":" saveFile.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":335,"author":{"gitId":"xenosf"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":336,"author":{"gitId":"xenosf"},"content":" throw new SaveFileException(\"Error creating save file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":337,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":338,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":339,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":340,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":341,"author":{"gitId":"xenosf"},"content":" * Reads save file contents and sets list of Task instances.","lastModifiedDate":"2023-08-30"},{"lineNumber":342,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":343,"author":{"gitId":"xenosf"},"content":" * @throws SaveFileException if there is an error reading the file","lastModifiedDate":"2023-08-30"},{"lineNumber":344,"author":{"gitId":"xenosf"},"content":" * @throws InvalidTaskDataException if the text data format is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":345,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":346,"author":{"gitId":"xenosf"},"content":" public static void readSaveFile() throws SaveFileException, InvalidTaskDataException {","lastModifiedDate":"2023-08-30"},{"lineNumber":347,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":348,"author":{"gitId":"xenosf"},"content":" File f \u003d new File(SAVE_FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":349,"author":{"gitId":"xenosf"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-30"},{"lineNumber":350,"author":{"gitId":"xenosf"},"content":" ArrayList\u003cTask\u003e readTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":351,"author":{"gitId":"xenosf"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":352,"author":{"gitId":"xenosf"},"content":" String data \u003d s.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":353,"author":{"gitId":"xenosf"},"content":" if (data.isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":354,"author":{"gitId":"xenosf"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":355,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":356,"author":{"gitId":"xenosf"},"content":" String taskType \u003d data.split(Task.DELIMITER_REGEX)[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":357,"author":{"gitId":"xenosf"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":358,"author":{"gitId":"xenosf"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":359,"author":{"gitId":"xenosf"},"content":" readTasks.add(ToDoTask.fromData(data));","lastModifiedDate":"2023-08-30"},{"lineNumber":360,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":361,"author":{"gitId":"xenosf"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":362,"author":{"gitId":"xenosf"},"content":" readTasks.add(DeadlineTask.fromData(data));","lastModifiedDate":"2023-08-30"},{"lineNumber":363,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":364,"author":{"gitId":"xenosf"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":365,"author":{"gitId":"xenosf"},"content":" readTasks.add(EventTask.fromData(data));","lastModifiedDate":"2023-08-30"},{"lineNumber":366,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":367,"author":{"gitId":"xenosf"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":368,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":369,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":370,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":371,"author":{"gitId":"xenosf"},"content":" tasks \u003d readTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":372,"author":{"gitId":"xenosf"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":373,"author":{"gitId":"xenosf"},"content":" throw new SaveFileException(\"Error reading save file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":374,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":375,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":376,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":377,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":378,"author":{"gitId":"xenosf"},"content":" * Saves current list of tasks to save file.","lastModifiedDate":"2023-08-30"},{"lineNumber":379,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":380,"author":{"gitId":"xenosf"},"content":" * @throws SaveFileException if there is an error saving the file","lastModifiedDate":"2023-08-30"},{"lineNumber":381,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":382,"author":{"gitId":"xenosf"},"content":" public static void saveToSaveFile() throws SaveFileException {","lastModifiedDate":"2023-08-30"},{"lineNumber":383,"author":{"gitId":"xenosf"},"content":" StringBuilder s \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":384,"author":{"gitId":"xenosf"},"content":" for (int i \u003d 1; i \u003c\u003d getNumTasks(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":385,"author":{"gitId":"xenosf"},"content":" s.append(getTask(i).toData());","lastModifiedDate":"2023-08-30"},{"lineNumber":386,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":387,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":388,"author":{"gitId":"xenosf"},"content":" FileWriter fw \u003d new FileWriter(SAVE_FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":389,"author":{"gitId":"xenosf"},"content":" fw.write(s.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":390,"author":{"gitId":"xenosf"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":391,"author":{"gitId":"xenosf"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":392,"author":{"gitId":"xenosf"},"content":" throw new SaveFileException(\"Error writing save file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":393,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":394,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":395,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":396,"author":{"gitId":"xenosf"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-22"},{"lineNumber":397,"author":{"gitId":"xenosf"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":398,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":399,"author":{"gitId":"xenosf"},"content":" // Startup","lastModifiedDate":"2023-08-30"},{"lineNumber":400,"author":{"gitId":"xenosf"},"content":" createSaveFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":401,"author":{"gitId":"xenosf"},"content":" printMessage(hello); // Print startup greeting","lastModifiedDate":"2023-08-30"},{"lineNumber":402,"author":{"gitId":"xenosf"},"content":" readSaveFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":403,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":404,"author":{"gitId":"xenosf"},"content":" // Input loop -- wait for input, respond, repeat","lastModifiedDate":"2023-08-23"},{"lineNumber":405,"author":{"gitId":"xenosf"},"content":" boolean shouldContinue \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":406,"author":{"gitId":"xenosf"},"content":" while (shouldContinue) {","lastModifiedDate":"2023-08-23"},{"lineNumber":407,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":408,"author":{"gitId":"xenosf"},"content":" // read user input","lastModifiedDate":"2023-08-23"},{"lineNumber":409,"author":{"gitId":"xenosf"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":410,"author":{"gitId":"xenosf"},"content":" shouldContinue \u003d parseInput(input);","lastModifiedDate":"2023-08-23"},{"lineNumber":411,"author":{"gitId":"xenosf"},"content":" } catch (DudeException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":412,"author":{"gitId":"xenosf"},"content":" printMessage(e.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":413,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":414,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":415,"author":{"gitId":"xenosf"},"content":" } catch (DudeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":416,"author":{"gitId":"xenosf"},"content":" printMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":417,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":418,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":419,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"xenosf":419}},{"path":"src/main/java/DudeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" * Commands to be entered into Dude.","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"public enum DudeCommand {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" list,","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" todo,","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" deadline,","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" event,","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":" mark,","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":" unmark,","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":" remove,","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":" delete,","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":" bye,","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xenosf":14}},{"path":"src/main/java/DudeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" * Exception specific to Dude (Duke)","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"public class DudeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" * Constructor for Dude exception with message","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" * @param message Human-readable error message.","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":" public DudeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":" * Constructor for Dude exception with default message","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":" public DudeException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":" super(\"An error occurred. :(\");","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"xenosf":21}},{"path":"src/main/java/EventEndMissingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class EventEndMissingException extends DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public EventEndMissingException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(\"Please specify the event end date after the task\\n description and start date, prefixed by `\\\\to`.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xenosf":5}},{"path":"src/main/java/EventStartMissingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class EventStartMissingException extends DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public EventStartMissingException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(\"Please specify the event start date after the task\\ndescription, prefixed by `\\\\from`.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xenosf":5}},{"path":"src/main/java/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" * Start time","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" protected String startTime;","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" * End time","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":" protected String endTime;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":" * Constructor for Event task.","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":" * @param startTime Start time of event","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":" * @param endTime End time of event","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":" public EventTask(String description, String startTime, String endTime) {","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" * Constructor for Event task, specifying completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" * @param startTime Start time of event","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":" * @param endTime End time of event","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" * @param isDone Boolean representing task completion status","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" public EventTask(String description, String startTime, String endTime, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" * Gets Event task formatted with type and status icon","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" * @return Task formatted as a string.","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" return String.format(\"\u003cE\u003e%s (FROM: %s, TO: %s)\", super.toString(), this.startTime, this.endTime);","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" * Parses save file data into an event task instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" * @param data line from save file","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" * @return Task instance","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":" * @throws InvalidTaskDataException if data is not in the expected format","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" public static EventTask fromData(String data) throws InvalidTaskDataException {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":" expected format:","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" completed: 1, incomplete: 0","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" event: E || 1/0 || start || end || description","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" String[] splitData \u003d data.split(DELIMITER_REGEX, 5);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":" if (splitData.length \u003c 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":" String taskType \u003d splitData[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" String taskCompleted \u003d splitData[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" String taskStart \u003d splitData[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" String taskEnd \u003d splitData[3];","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" String taskDescription \u003d splitData[4];","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" if (!taskCompleted.equals(\"1\") \u0026\u0026 !taskCompleted.equals(\"0\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":" boolean isCompleted \u003d taskCompleted.equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" return new EventTask(taskDescription, taskStart, taskEnd, isCompleted);","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":" * Parses event task instance into save file string data","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" * @return Task data as string","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" public String toData() {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":" expected format:","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" completed: 1, incomplete: 0","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":" event: E || 1/0 || start || end || description","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"xenosf"},"content":" String taskCompleted \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"xenosf"},"content":" return String.join(DELIMITER, \"E\", taskCompleted,","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"xenosf"},"content":" this.startTime, this.endTime, this.description) + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"xenosf":95}},{"path":"src/main/java/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class InvalidCommandException extends DudeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" \"I don\u0027t know what that means.\\n\" +","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" \"Try checking if you\u0027ve typed the command correctly.\"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" );","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"xenosf":8}},{"path":"src/main/java/InvalidTaskDataException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class InvalidTaskDataException extends DudeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public InvalidTaskDataException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" \"Could not read task(s) from saved data.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" + \"The format is possibly corrupted.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" + \"Try checking the file at \"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" + Dude.SAVE_FILE_PATH","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" + \" and try again,\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":" + \"or delete the file to start over.\"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"xenosf":12}},{"path":"src/main/java/InvalidTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class InvalidTaskIndexException extends DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public InvalidTaskIndexException(String index) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" String.format(\"I can\u0027t find the task numbered \\\"%s\\\".\\nTry checking if you\u0027ve typed the correct task number.\",","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" index)","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" );","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xenosf":8}},{"path":"src/main/java/SaveFileException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class SaveFileException extends DudeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public SaveFileException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" message","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"xenosf":7}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" * Delimiter regex for save file data","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" public static final String DELIMITER \u003d \" || \";","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":" * Delimiter regex for save file data","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":" public static final String DELIMITER_REGEX \u003d \" \\\\|\\\\| \";","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":" * Constructor for task.","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" * Constructor for task, specifying completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":" * @param isDone Boolean representing task completion status","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" * Gets text status icon of task\u0027s completion status.","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" * @return space if not done; X if done.","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" return (this.isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":" * Gets task formatted with status icon","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" * @return Task formatted as a string. e.g. [X] completed task","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" * Marks task as done.","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" * Marks task as not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" * Parses save file data into a Task instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" * @param data line from save file","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" * @return Task instance","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" * @throws InvalidTaskDataException if data is not in the expected format","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" public static Task fromData(String data) throws InvalidTaskDataException {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" expected format:","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":" completed: 1, incomplete: 0","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" todo: T || 1/0 || description","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":" String[] splitData \u003d data.split(DELIMITER_REGEX, 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" if (splitData.length \u003c 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":" String taskType \u003d splitData[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":" String taskCompleted \u003d splitData[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" String taskDescription \u003d splitData[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":" if (!taskCompleted.equals(\"1\") \u0026\u0026 !taskCompleted.equals(\"0\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"xenosf"},"content":" boolean isCompleted \u003d taskCompleted.equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"xenosf"},"content":" return new Task(taskDescription, isCompleted);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" * Parses To Do task instance into save file string data","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"xenosf"},"content":" * @return Task data as string","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"xenosf"},"content":" public String toData() {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"xenosf"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"xenosf"},"content":" expected format:","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"xenosf"},"content":" completed: 1, incomplete: 0","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"xenosf"},"content":" todo: T || 1/0 || description","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"xenosf"},"content":" String taskCompleted \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"xenosf"},"content":" return String.join(DELIMITER, \"T\", taskCompleted, this.description) + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"xenosf":111}},{"path":"src/main/java/TaskDeadlineMissingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class TaskDeadlineMissingException extends DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public TaskDeadlineMissingException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(\"Please specify a task deadline after the task\\ndescription, prefixed by `\\\\by`.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xenosf":5}},{"path":"src/main/java/TaskDescriptionMissingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class TaskDescriptionMissingException extends DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public TaskDescriptionMissingException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(\"Please specify a task description.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xenosf":5}},{"path":"src/main/java/TaskIndexMissingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class TaskIndexMissingException extends DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public TaskIndexMissingException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(\"Please specify a task number.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xenosf":5}},{"path":"src/main/java/TaskOutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class TaskOutOfBoundsException extends IndexOutOfBoundsException {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public TaskOutOfBoundsException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(\"Task number out of bounds.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"xenosf":5}},{"path":"src/main/java/ToDoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class ToDoTask extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" * Constructor for ToDo task.","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" public ToDoTask(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":" * Constructor for ToDo task, specifying completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":" * @param isDone Boolean representing task completion status","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":" public ToDoTask(String description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":" * Gets Todo task formatted with type and status icon","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" * @return Task formatted as a string","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" return \"\u003cT\u003e\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" * Parses save file data into a To Do task instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":" * @param data line from save file","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" * @return Task instance","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" * @throws InvalidTaskDataException if data is not in the expected format","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" public static ToDoTask fromData(String data) throws InvalidTaskDataException {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" expected format:","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" completed: 1, incomplete: 0","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" todo: T || 1/0 || description","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":" String[] splitData \u003d data.split(DELIMITER_REGEX, 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" if (splitData.length \u003c 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" String taskType \u003d splitData[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" String taskCompleted \u003d splitData[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" String taskDescription \u003d splitData[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" if (!taskCompleted.equals(\"1\") \u0026\u0026 !taskCompleted.equals(\"0\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":" boolean isCompleted \u003d taskCompleted.equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" return new ToDoTask(taskDescription, isCompleted);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" * Parses To Do task instance into save file string data","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" * @return Task data as string","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":" public String toData() {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":" expected format:","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":" completed: 1, incomplete: 0","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":" todo: T || 1/0 || description","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" String taskCompleted \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" return String.join(DELIMITER, \"T\", taskCompleted, this.description) + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"xenosf":73}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"qwertyuiop","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":"hello.....","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"todo learn how to use the deadline command /by now","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":"deadline","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"deaDline discussion post","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":"deadline essay /by sunday 2359","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":"event","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"event anyhow","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":"event project meeting /to 1330h /from 1300h","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":"event project meeting /from mon 1300h /to 1330h","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":"event party /from mon 2200h /to tue 0330h","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":"mark 5","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":"mark 81 483","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":"todo a","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":"todo b","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":"todo c","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":"remove 2","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"xenosf":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":"-"},"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":"xenosf"},"content":"java -classpath ..\\bin Dude \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"xenosf":1,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":"java -classpath ../bin Dude \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":{"xenosf":1,"-":37}}] +[{"path":"src/main/java/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" * Deadline","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":" protected LocalDateTime deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":" * Constructor for Deadline task.","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":" * @param description Description of task.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":" * @param deadline Deadline for task.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":" public DeadlineTask(String description, LocalDateTime deadline) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" * Constructor for deadline task, specifying completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" * @param isDone Boolean representing task completion status","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":" * @param deadline Deadline for task","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" public DeadlineTask(String description, LocalDateTime deadline, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" * Returns Deadline task formatted with type and status icon","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" * @return Task formatted as a string.","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" return String.format(\"\u003cD\u003e%s (BY: %s)\", super.toString(),","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" deadline.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM, FormatStyle.SHORT)));","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" * Parses save file data into a deadline task instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" * @param data Line from save file.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" * @return Task instance.","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" * @throws InvalidTaskDataException If data is not in the expected format.","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" public static DeadlineTask fromData(String data) throws InvalidTaskDataException {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" expected format:","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":" completed: 1, incomplete: 0","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" deadline: D || 1/0 || deadline || description","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" String[] splitData \u003d data.split(DELIMITER_REGEX, 4);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" if (splitData.length \u003c 4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" String taskType \u003d splitData[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":" String taskCompleted \u003d splitData[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":" String taskDeadlineString \u003d splitData[2];","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":" LocalDateTime taskDeadline \u003d LocalDateTime.parse(taskDeadlineString);","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":" String taskDescription \u003d splitData[3];","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":" if (!taskCompleted.equals(\"1\") \u0026\u0026 !taskCompleted.equals(\"0\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" boolean isCompleted \u003d taskCompleted.equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" return new DeadlineTask(taskDescription, taskDeadline, isCompleted);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":" * Parses deadline task instance into save file string data","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":" * @return Task data as string","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" public String toData() {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" expected format:","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" completed: 1, incomplete: 0","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":" deadline: D || 1/0 || deadline || description","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":" String taskCompleted \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":" return String.join(DELIMITER, \"D\", taskCompleted, deadline.toString(), description) + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"xenosf":89}},{"path":"src/main/java/Dude.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":" * Dude (Duke, but renamed)","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":"public class Dude {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":" // Save-file related constants","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":" * Path to save file","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":" static final String SAVE_FILE_PATH \u003d \"./data/dude.txt\";","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":" // Messages","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" static String logo \u003d","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":" \" _| _| _ O\\n\" +","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":" \"(_||_|(_|(/_ /İ\\\\\\n\" +","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" \"------------ ```\\n\";","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" static String border \u003d \"-----------------------------------------------------------\\n\";","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" static String hello \u003d logo +","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" \"Hello! I\u0027m dude.\\n\" +","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":" \"What can I do for you?\";","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" static String goodbye \u003d","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":" static String taskListPrefix \u003d \"Here\u0027s your tasks list:\\n\";","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" static String emptyTaskList \u003d \"You currently have no tasks in your list.\";","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" static String addedTask \u003d \"Got it! I\u0027ve added this task:\\n\\t%s\\nYou now have a total of %d task(s).\";","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" static String deletedTask \u003d \"Got it! I\u0027ve removed this task:\\n\\t%s\\nYou now have a total of %d task(s).\";","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":" static String markedAsDonePrefix \u003d \"Nice! I\u0027ve marked this task as done:\\n\\t\";","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" static String markedAsNotDonePrefix \u003d \"Got it. I\u0027ve marked this task as not done:\\n\\t\";","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" * Tasks stored by user.","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" public static ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" * Add task to tasks list.","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" * @param task Task to add","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" * @throws SaveFileException if error saving","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" public static void addTask(Task task) throws SaveFileException {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" saveToSaveFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" * Remove task from tasks list.","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" * @param index 1-based index of task to remove","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" * @return Removed task","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" * @throws SaveFileException if error saving","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" public static Task removeTask(int index) throws TaskOutOfBoundsException, SaveFileException {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" Task removedTask \u003d tasks.remove(index - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" saveToSaveFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":" return removedTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":" throw new TaskOutOfBoundsException();","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" * Get number of tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" * @return Number of tasks.","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" public static int getNumTasks() {","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":" return tasks.size();","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" * Get task from list.","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" * @param index 1-based index of task to get.","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" * @throws TaskOutOfBoundsException if task number does not exist","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" public static Task getTask(int index) throws TaskOutOfBoundsException {","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":" return tasks.get(index - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":" throw new TaskOutOfBoundsException();","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":93,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"xenosf"},"content":" * Gets list of all tasks as a string.","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"xenosf"},"content":" * @return Tasks list formatted as a string.","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" public static String getTasksList() {","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"xenosf"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"xenosf"},"content":" return emptyTaskList;","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":102,"author":{"gitId":"xenosf"},"content":" StringBuilder tasksList \u003d new StringBuilder(taskListPrefix);","lastModifiedDate":"2023-08-23"},{"lineNumber":103,"author":{"gitId":"xenosf"},"content":" for (int i \u003d 0; i \u003c getNumTasks(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"xenosf"},"content":" String taskNumberPrefix \u003d String.format(\"%3s-\", i + 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":105,"author":{"gitId":"xenosf"},"content":" String taskStr \u003d taskNumberPrefix + tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"xenosf"},"content":" tasksList.append(taskStr);","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":108,"author":{"gitId":"xenosf"},"content":" return tasksList.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":109,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":110,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":111,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"xenosf"},"content":" * Converts datetime argument in task command into a LocalDateTime object.","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"xenosf"},"content":" * @param dateTimeString String argument for date and time.","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"xenosf"},"content":" * @return LocalDateTime object parsed from string.","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"xenosf"},"content":" * @throws InvalidDateTimeArgumentException If datetime cannot be parsed from the string.","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"xenosf"},"content":" public static LocalDateTime parseDateTime(String dateTimeString) throws InvalidDateTimeArgumentException {","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"xenosf"},"content":" String[] splitDateTime \u003d dateTimeString.split(\" \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"xenosf"},"content":" String dateString \u003d splitDateTime[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"xenosf"},"content":" String timeString \u003d splitDateTime[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"xenosf"},"content":" String[] splitDate \u003d dateString.split(\"/\", 3);","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"xenosf"},"content":" int date \u003d Integer.parseInt(splitDate[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"xenosf"},"content":" int month \u003d Integer.parseInt(splitDate[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"xenosf"},"content":" int year \u003d Integer.parseInt(splitDate[2]);","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"xenosf"},"content":" int hour \u003d Integer.parseInt(timeString.substring(0, 2));","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"xenosf"},"content":" int minute \u003d Integer.parseInt(timeString.substring(2));","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"xenosf"},"content":" return LocalDateTime.of(year, month, date, hour, minute);","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"xenosf"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException | DateTimeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"xenosf"},"content":" throw new InvalidDateTimeArgumentException();","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"xenosf"},"content":" * Parses command with task number with format `{cmd} {index}`, getting corresponding task.","lastModifiedDate":"2023-08-24"},{"lineNumber":138,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":139,"author":{"gitId":"xenosf"},"content":" * @param input command.","lastModifiedDate":"2023-08-24"},{"lineNumber":140,"author":{"gitId":"xenosf"},"content":" * @return index of task with index specified in commands","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"xenosf"},"content":" * @throws InvalidTaskIndexException if index is invalid","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"xenosf"},"content":" * @throws TaskIndexMissingException if index is not specified","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":144,"author":{"gitId":"xenosf"},"content":" public static int parseTaskIndexCommand(String input) throws InvalidTaskIndexException, TaskIndexMissingException {","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"xenosf"},"content":" String[] splitInput \u003d input.split(\" \", 3);","lastModifiedDate":"2023-08-24"},{"lineNumber":146,"author":{"gitId":"xenosf"},"content":" if (splitInput.length \u003c 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":147,"author":{"gitId":"xenosf"},"content":" // task number not specified","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"xenosf"},"content":" throw new TaskIndexMissingException();","lastModifiedDate":"2023-08-24"},{"lineNumber":149,"author":{"gitId":"xenosf"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":150,"author":{"gitId":"xenosf"},"content":" String specifiedTask \u003d splitInput[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":151,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":152,"author":{"gitId":"xenosf"},"content":" int index \u003d Integer.parseInt(specifiedTask);","lastModifiedDate":"2023-08-24"},{"lineNumber":153,"author":{"gitId":"xenosf"},"content":" getTask(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":154,"author":{"gitId":"xenosf"},"content":" return index;","lastModifiedDate":"2023-08-24"},{"lineNumber":155,"author":{"gitId":"xenosf"},"content":" } catch (NumberFormatException | TaskOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":156,"author":{"gitId":"xenosf"},"content":" // cannot parse number from input","lastModifiedDate":"2023-08-24"},{"lineNumber":157,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskIndexException(specifiedTask);","lastModifiedDate":"2023-08-24"},{"lineNumber":158,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":159,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":160,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":161,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":162,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":163,"author":{"gitId":"xenosf"},"content":" * Parses delete commands.","lastModifiedDate":"2023-08-24"},{"lineNumber":164,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":165,"author":{"gitId":"xenosf"},"content":" * @param input delete command.","lastModifiedDate":"2023-08-24"},{"lineNumber":166,"author":{"gitId":"xenosf"},"content":" * @throws DudeException if parsing task from command fails","lastModifiedDate":"2023-08-24"},{"lineNumber":167,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":168,"author":{"gitId":"xenosf"},"content":" public static void parseDelete(String input) throws DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":169,"author":{"gitId":"xenosf"},"content":" int taskToDelete \u003d parseTaskIndexCommand(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":170,"author":{"gitId":"xenosf"},"content":" Task task \u003d removeTask(taskToDelete);","lastModifiedDate":"2023-08-24"},{"lineNumber":171,"author":{"gitId":"xenosf"},"content":" printMessage(String.format(deletedTask, task, getNumTasks()));","lastModifiedDate":"2023-08-24"},{"lineNumber":172,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":173,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":174,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":175,"author":{"gitId":"xenosf"},"content":" * Parses mark commands.","lastModifiedDate":"2023-08-24"},{"lineNumber":176,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":177,"author":{"gitId":"xenosf"},"content":" * @param input mark command.","lastModifiedDate":"2023-08-24"},{"lineNumber":178,"author":{"gitId":"xenosf"},"content":" * @throws DudeException if parsing task from command fails","lastModifiedDate":"2023-08-24"},{"lineNumber":179,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":180,"author":{"gitId":"xenosf"},"content":" public static void parseMark(String input) throws DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":181,"author":{"gitId":"xenosf"},"content":" int taskToMark \u003d parseTaskIndexCommand(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":182,"author":{"gitId":"xenosf"},"content":" Task task \u003d getTask(taskToMark);","lastModifiedDate":"2023-08-24"},{"lineNumber":183,"author":{"gitId":"xenosf"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":184,"author":{"gitId":"xenosf"},"content":" printMessage(markedAsDonePrefix + task);","lastModifiedDate":"2023-08-23"},{"lineNumber":185,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":186,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":187,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":188,"author":{"gitId":"xenosf"},"content":" * Parses unmark commands.","lastModifiedDate":"2023-08-24"},{"lineNumber":189,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":190,"author":{"gitId":"xenosf"},"content":" * @param input unmark command.","lastModifiedDate":"2023-08-24"},{"lineNumber":191,"author":{"gitId":"xenosf"},"content":" * @throws DudeException if parsing task from command fails","lastModifiedDate":"2023-08-24"},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":" public static void parseUnmark(String input) throws DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":194,"author":{"gitId":"xenosf"},"content":" int taskToUnmark \u003d parseTaskIndexCommand(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":195,"author":{"gitId":"xenosf"},"content":" Task task \u003d getTask(taskToUnmark);","lastModifiedDate":"2023-08-24"},{"lineNumber":196,"author":{"gitId":"xenosf"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":197,"author":{"gitId":"xenosf"},"content":" printMessage(markedAsNotDonePrefix + task);","lastModifiedDate":"2023-08-23"},{"lineNumber":198,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":199,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":200,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":201,"author":{"gitId":"xenosf"},"content":" * Parses todo task command.","lastModifiedDate":"2023-08-23"},{"lineNumber":202,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":203,"author":{"gitId":"xenosf"},"content":" * @param input command.","lastModifiedDate":"2023-08-23"},{"lineNumber":204,"author":{"gitId":"xenosf"},"content":" * @throws TaskDescriptionMissingException if task description is missing","lastModifiedDate":"2023-08-24"},{"lineNumber":205,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":206,"author":{"gitId":"xenosf"},"content":" public static void parseTodo(String input) throws TaskDescriptionMissingException, SaveFileException {","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"xenosf"},"content":" String[] splitInput \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":208,"author":{"gitId":"xenosf"},"content":" if (splitInput.length \u003c 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":209,"author":{"gitId":"xenosf"},"content":" // task description not specified","lastModifiedDate":"2023-08-23"},{"lineNumber":210,"author":{"gitId":"xenosf"},"content":" throw new TaskDescriptionMissingException();","lastModifiedDate":"2023-08-24"},{"lineNumber":211,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":212,"author":{"gitId":"xenosf"},"content":" String description \u003d splitInput[1].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":213,"author":{"gitId":"xenosf"},"content":" Task task \u003d new ToDoTask(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":214,"author":{"gitId":"xenosf"},"content":" addTask(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" printMessage(String.format(addedTask, task, getNumTasks()));","lastModifiedDate":"2023-08-24"},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":217,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":218,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":219,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":220,"author":{"gitId":"xenosf"},"content":" * Parses deadline task command.","lastModifiedDate":"2023-08-23"},{"lineNumber":221,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":222,"author":{"gitId":"xenosf"},"content":" * @param input command.","lastModifiedDate":"2023-08-23"},{"lineNumber":223,"author":{"gitId":"xenosf"},"content":" * @throws TaskDescriptionMissingException If task description is missing.","lastModifiedDate":"2023-09-05"},{"lineNumber":224,"author":{"gitId":"xenosf"},"content":" * @throws TaskDeadlineMissingException If task deadline is missing.","lastModifiedDate":"2023-09-05"},{"lineNumber":225,"author":{"gitId":"xenosf"},"content":" * @throws InvalidDateTimeArgumentException If datetime cannot be parsed from the string argument.","lastModifiedDate":"2023-09-05"},{"lineNumber":226,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":227,"author":{"gitId":"xenosf"},"content":" public static void parseDeadline(String input)","lastModifiedDate":"2023-08-24"},{"lineNumber":228,"author":{"gitId":"xenosf"},"content":" throws TaskDescriptionMissingException, TaskDeadlineMissingException, SaveFileException,","lastModifiedDate":"2023-09-05"},{"lineNumber":229,"author":{"gitId":"xenosf"},"content":" InvalidDateTimeArgumentException {","lastModifiedDate":"2023-09-05"},{"lineNumber":230,"author":{"gitId":"xenosf"},"content":" String[] splitInput \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":231,"author":{"gitId":"xenosf"},"content":" if (splitInput.length \u003c 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":232,"author":{"gitId":"xenosf"},"content":" // task description not specified","lastModifiedDate":"2023-08-23"},{"lineNumber":233,"author":{"gitId":"xenosf"},"content":" throw new TaskDescriptionMissingException();","lastModifiedDate":"2023-08-24"},{"lineNumber":234,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":235,"author":{"gitId":"xenosf"},"content":" String[] splitDeadline \u003d splitInput[1].split(\"/by\", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":236,"author":{"gitId":"xenosf"},"content":" if (splitDeadline.length \u003c 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":237,"author":{"gitId":"xenosf"},"content":" // deadline not specified","lastModifiedDate":"2023-08-23"},{"lineNumber":238,"author":{"gitId":"xenosf"},"content":" throw new TaskDeadlineMissingException();","lastModifiedDate":"2023-08-24"},{"lineNumber":239,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":240,"author":{"gitId":"xenosf"},"content":" String description \u003d splitDeadline[0].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":241,"author":{"gitId":"xenosf"},"content":" String deadlineArg \u003d splitDeadline[1].trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":242,"author":{"gitId":"xenosf"},"content":" LocalDateTime deadline \u003d parseDateTime(deadlineArg);","lastModifiedDate":"2023-09-05"},{"lineNumber":243,"author":{"gitId":"xenosf"},"content":" Task task \u003d new DeadlineTask(description, deadline);","lastModifiedDate":"2023-08-23"},{"lineNumber":244,"author":{"gitId":"xenosf"},"content":" addTask(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":245,"author":{"gitId":"xenosf"},"content":" printMessage(String.format(addedTask, task, getNumTasks()));","lastModifiedDate":"2023-08-24"},{"lineNumber":246,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":247,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":248,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":249,"author":{"gitId":"xenosf"},"content":" * Parses event task command.","lastModifiedDate":"2023-08-23"},{"lineNumber":250,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":251,"author":{"gitId":"xenosf"},"content":" * @param input command.","lastModifiedDate":"2023-08-23"},{"lineNumber":252,"author":{"gitId":"xenosf"},"content":" * @throws TaskDescriptionMissingException If task description is missing.","lastModifiedDate":"2023-09-05"},{"lineNumber":253,"author":{"gitId":"xenosf"},"content":" * @throws EventStartMissingException If event start is missing.","lastModifiedDate":"2023-09-05"},{"lineNumber":254,"author":{"gitId":"xenosf"},"content":" * @throws EventEndMissingException If event end is missing.","lastModifiedDate":"2023-09-05"},{"lineNumber":255,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":256,"author":{"gitId":"xenosf"},"content":" public static void parseEvent(String input)","lastModifiedDate":"2023-08-24"},{"lineNumber":257,"author":{"gitId":"xenosf"},"content":" throws TaskDescriptionMissingException, EventStartMissingException, EventEndMissingException, SaveFileException,","lastModifiedDate":"2023-09-05"},{"lineNumber":258,"author":{"gitId":"xenosf"},"content":" InvalidDateTimeArgumentException {","lastModifiedDate":"2023-09-05"},{"lineNumber":259,"author":{"gitId":"xenosf"},"content":" String[] splitInput \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":260,"author":{"gitId":"xenosf"},"content":" if (splitInput.length \u003c 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":261,"author":{"gitId":"xenosf"},"content":" // task description not specified","lastModifiedDate":"2023-08-23"},{"lineNumber":262,"author":{"gitId":"xenosf"},"content":" throw new TaskDescriptionMissingException();","lastModifiedDate":"2023-08-24"},{"lineNumber":263,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":264,"author":{"gitId":"xenosf"},"content":" String[] splitStart \u003d splitInput[1].split(\"/from\", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":265,"author":{"gitId":"xenosf"},"content":" if (splitStart.length \u003c 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":266,"author":{"gitId":"xenosf"},"content":" // start date not specified","lastModifiedDate":"2023-08-23"},{"lineNumber":267,"author":{"gitId":"xenosf"},"content":" throw new EventStartMissingException();","lastModifiedDate":"2023-08-24"},{"lineNumber":268,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":269,"author":{"gitId":"xenosf"},"content":" String[] splitEnd \u003d splitStart[1].split(\"/to\", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":270,"author":{"gitId":"xenosf"},"content":" if (splitEnd.length \u003c 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":271,"author":{"gitId":"xenosf"},"content":" // end date not specified","lastModifiedDate":"2023-08-23"},{"lineNumber":272,"author":{"gitId":"xenosf"},"content":" throw new EventEndMissingException();","lastModifiedDate":"2023-08-24"},{"lineNumber":273,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":274,"author":{"gitId":"xenosf"},"content":" String description \u003d splitStart[0].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":275,"author":{"gitId":"xenosf"},"content":" String startArg \u003d splitEnd[0].trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":276,"author":{"gitId":"xenosf"},"content":" LocalDateTime start \u003d parseDateTime(startArg);","lastModifiedDate":"2023-09-05"},{"lineNumber":277,"author":{"gitId":"xenosf"},"content":" String endArg \u003d splitEnd[1].trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":278,"author":{"gitId":"xenosf"},"content":" LocalDateTime end \u003d parseDateTime(endArg);","lastModifiedDate":"2023-09-05"},{"lineNumber":279,"author":{"gitId":"xenosf"},"content":" Task task \u003d new EventTask(description, start, end);","lastModifiedDate":"2023-08-23"},{"lineNumber":280,"author":{"gitId":"xenosf"},"content":" addTask(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":281,"author":{"gitId":"xenosf"},"content":" printMessage(String.format(addedTask, task, getNumTasks()));","lastModifiedDate":"2023-08-24"},{"lineNumber":282,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":283,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":284,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":285,"author":{"gitId":"xenosf"},"content":" * Parse input and act accordingly.","lastModifiedDate":"2023-08-23"},{"lineNumber":286,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":287,"author":{"gitId":"xenosf"},"content":" * @param input Input to parse.","lastModifiedDate":"2023-08-23"},{"lineNumber":288,"author":{"gitId":"xenosf"},"content":" * @return `true` if a subsequent command can be taken, `false` if not (i.e. quit)","lastModifiedDate":"2023-08-23"},{"lineNumber":289,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":290,"author":{"gitId":"xenosf"},"content":" public static boolean parseInput(String input) throws DudeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":291,"author":{"gitId":"xenosf"},"content":" // extract command (strip leading and trailing whitespace, take first word)","lastModifiedDate":"2023-08-23"},{"lineNumber":292,"author":{"gitId":"xenosf"},"content":" String[] splitInput \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":293,"author":{"gitId":"xenosf"},"content":" String cmdString \u003d splitInput[0].toLowerCase();","lastModifiedDate":"2023-08-24"},{"lineNumber":294,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":295,"author":{"gitId":"xenosf"},"content":" DudeCommand cmd \u003d DudeCommand.valueOf(cmdString);","lastModifiedDate":"2023-08-24"},{"lineNumber":296,"author":{"gitId":"xenosf"},"content":" switch (cmd) {","lastModifiedDate":"2023-08-23"},{"lineNumber":297,"author":{"gitId":"xenosf"},"content":" case bye:","lastModifiedDate":"2023-08-24"},{"lineNumber":298,"author":{"gitId":"xenosf"},"content":" // quit","lastModifiedDate":"2023-08-23"},{"lineNumber":299,"author":{"gitId":"xenosf"},"content":" // Print shutdown greeting","lastModifiedDate":"2023-08-23"},{"lineNumber":300,"author":{"gitId":"xenosf"},"content":" printMessage(goodbye);","lastModifiedDate":"2023-08-23"},{"lineNumber":301,"author":{"gitId":"xenosf"},"content":" return false;","lastModifiedDate":"2023-08-23"},{"lineNumber":302,"author":{"gitId":"xenosf"},"content":" case list:","lastModifiedDate":"2023-08-24"},{"lineNumber":303,"author":{"gitId":"xenosf"},"content":" // list tasks","lastModifiedDate":"2023-08-23"},{"lineNumber":304,"author":{"gitId":"xenosf"},"content":" printMessage(getTasksList());","lastModifiedDate":"2023-08-23"},{"lineNumber":305,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":306,"author":{"gitId":"xenosf"},"content":" case mark:","lastModifiedDate":"2023-08-24"},{"lineNumber":307,"author":{"gitId":"xenosf"},"content":" // mark as done","lastModifiedDate":"2023-08-24"},{"lineNumber":308,"author":{"gitId":"xenosf"},"content":" parseMark(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":309,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":310,"author":{"gitId":"xenosf"},"content":" case unmark:","lastModifiedDate":"2023-08-24"},{"lineNumber":311,"author":{"gitId":"xenosf"},"content":" // mark as not done","lastModifiedDate":"2023-08-24"},{"lineNumber":312,"author":{"gitId":"xenosf"},"content":" parseUnmark(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":313,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":314,"author":{"gitId":"xenosf"},"content":" case delete:","lastModifiedDate":"2023-08-24"},{"lineNumber":315,"author":{"gitId":"xenosf"},"content":" case remove: // alias because I keep typing remove lol","lastModifiedDate":"2023-08-24"},{"lineNumber":316,"author":{"gitId":"xenosf"},"content":" parseDelete(input);","lastModifiedDate":"2023-08-24"},{"lineNumber":317,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":318,"author":{"gitId":"xenosf"},"content":" case todo:","lastModifiedDate":"2023-08-24"},{"lineNumber":319,"author":{"gitId":"xenosf"},"content":" // add todo task to list","lastModifiedDate":"2023-08-23"},{"lineNumber":320,"author":{"gitId":"xenosf"},"content":" parseTodo(input);","lastModifiedDate":"2023-08-23"},{"lineNumber":321,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":322,"author":{"gitId":"xenosf"},"content":" case deadline:","lastModifiedDate":"2023-08-24"},{"lineNumber":323,"author":{"gitId":"xenosf"},"content":" // add deadline task to list","lastModifiedDate":"2023-08-23"},{"lineNumber":324,"author":{"gitId":"xenosf"},"content":" parseDeadline(input);","lastModifiedDate":"2023-08-23"},{"lineNumber":325,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":326,"author":{"gitId":"xenosf"},"content":" case event:","lastModifiedDate":"2023-08-24"},{"lineNumber":327,"author":{"gitId":"xenosf"},"content":" // add event task to list","lastModifiedDate":"2023-08-23"},{"lineNumber":328,"author":{"gitId":"xenosf"},"content":" parseEvent(input);","lastModifiedDate":"2023-08-23"},{"lineNumber":329,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":330,"author":{"gitId":"xenosf"},"content":" default:","lastModifiedDate":"2023-08-23"},{"lineNumber":331,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":332,"author":{"gitId":"xenosf"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":333,"author":{"gitId":"xenosf"},"content":" // invalid command entered","lastModifiedDate":"2023-08-24"},{"lineNumber":334,"author":{"gitId":"xenosf"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-23"},{"lineNumber":335,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":336,"author":{"gitId":"xenosf"},"content":" return true;","lastModifiedDate":"2023-08-23"},{"lineNumber":337,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":338,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":339,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":340,"author":{"gitId":"xenosf"},"content":" * Format and print given message/prompt to console.","lastModifiedDate":"2023-08-23"},{"lineNumber":341,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":342,"author":{"gitId":"xenosf"},"content":" * @param message Message to print. Lines separated by \\n.","lastModifiedDate":"2023-08-23"},{"lineNumber":343,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":344,"author":{"gitId":"xenosf"},"content":" public static void printMessage(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":345,"author":{"gitId":"xenosf"},"content":" String[] lines \u003d message.split(\"\\\\n\");","lastModifiedDate":"2023-08-23"},{"lineNumber":346,"author":{"gitId":"xenosf"},"content":" String prefix \u003d \" \";","lastModifiedDate":"2023-08-23"},{"lineNumber":347,"author":{"gitId":"xenosf"},"content":" String output \u003d border + prefix +","lastModifiedDate":"2023-08-23"},{"lineNumber":348,"author":{"gitId":"xenosf"},"content":" String.join(\"\\n\" + prefix, lines) +","lastModifiedDate":"2023-08-23"},{"lineNumber":349,"author":{"gitId":"xenosf"},"content":" \"\\n\" + border;","lastModifiedDate":"2023-08-23"},{"lineNumber":350,"author":{"gitId":"xenosf"},"content":" System.out.println(output);","lastModifiedDate":"2023-08-23"},{"lineNumber":351,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":352,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":353,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":354,"author":{"gitId":"xenosf"},"content":" * Create new empty save file at SAVE_FILE_PATH if it does not already exist.","lastModifiedDate":"2023-08-30"},{"lineNumber":355,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":356,"author":{"gitId":"xenosf"},"content":" * @throws SaveFileException if file cannot be created","lastModifiedDate":"2023-08-30"},{"lineNumber":357,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":358,"author":{"gitId":"xenosf"},"content":" public static void createSaveFile() throws SaveFileException {","lastModifiedDate":"2023-08-30"},{"lineNumber":359,"author":{"gitId":"xenosf"},"content":" File saveFile \u003d new File(SAVE_FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":360,"author":{"gitId":"xenosf"},"content":" File parent \u003d saveFile.getParentFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":361,"author":{"gitId":"xenosf"},"content":" // check \u0026 create parent dir(s)","lastModifiedDate":"2023-08-30"},{"lineNumber":362,"author":{"gitId":"xenosf"},"content":" if (parent !\u003d null \u0026\u0026 !parent.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":363,"author":{"gitId":"xenosf"},"content":" parent.mkdirs();","lastModifiedDate":"2023-08-30"},{"lineNumber":364,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":365,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":366,"author":{"gitId":"xenosf"},"content":" // create save file","lastModifiedDate":"2023-08-30"},{"lineNumber":367,"author":{"gitId":"xenosf"},"content":" saveFile.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":368,"author":{"gitId":"xenosf"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":369,"author":{"gitId":"xenosf"},"content":" throw new SaveFileException(\"Error creating save file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":370,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":371,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":372,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":373,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":374,"author":{"gitId":"xenosf"},"content":" * Reads save file contents and sets list of Task instances.","lastModifiedDate":"2023-08-30"},{"lineNumber":375,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":376,"author":{"gitId":"xenosf"},"content":" * @throws SaveFileException if there is an error reading the file","lastModifiedDate":"2023-08-30"},{"lineNumber":377,"author":{"gitId":"xenosf"},"content":" * @throws InvalidTaskDataException if the text data format is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":378,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":379,"author":{"gitId":"xenosf"},"content":" public static void readSaveFile() throws SaveFileException, InvalidTaskDataException {","lastModifiedDate":"2023-08-30"},{"lineNumber":380,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":381,"author":{"gitId":"xenosf"},"content":" File f \u003d new File(SAVE_FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":382,"author":{"gitId":"xenosf"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-30"},{"lineNumber":383,"author":{"gitId":"xenosf"},"content":" ArrayList\u003cTask\u003e readTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":384,"author":{"gitId":"xenosf"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":385,"author":{"gitId":"xenosf"},"content":" String data \u003d s.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":386,"author":{"gitId":"xenosf"},"content":" if (data.isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":387,"author":{"gitId":"xenosf"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":388,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":389,"author":{"gitId":"xenosf"},"content":" String taskType \u003d data.split(Task.DELIMITER_REGEX)[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":390,"author":{"gitId":"xenosf"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":391,"author":{"gitId":"xenosf"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":392,"author":{"gitId":"xenosf"},"content":" readTasks.add(ToDoTask.fromData(data));","lastModifiedDate":"2023-08-30"},{"lineNumber":393,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":394,"author":{"gitId":"xenosf"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":395,"author":{"gitId":"xenosf"},"content":" readTasks.add(DeadlineTask.fromData(data));","lastModifiedDate":"2023-08-30"},{"lineNumber":396,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":397,"author":{"gitId":"xenosf"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":398,"author":{"gitId":"xenosf"},"content":" readTasks.add(EventTask.fromData(data));","lastModifiedDate":"2023-08-30"},{"lineNumber":399,"author":{"gitId":"xenosf"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":400,"author":{"gitId":"xenosf"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":401,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":402,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":403,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":404,"author":{"gitId":"xenosf"},"content":" tasks \u003d readTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":405,"author":{"gitId":"xenosf"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":406,"author":{"gitId":"xenosf"},"content":" throw new SaveFileException(\"Error reading save file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":407,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":408,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":409,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":410,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":411,"author":{"gitId":"xenosf"},"content":" * Saves current list of tasks to save file.","lastModifiedDate":"2023-08-30"},{"lineNumber":412,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":413,"author":{"gitId":"xenosf"},"content":" * @throws SaveFileException if there is an error saving the file","lastModifiedDate":"2023-08-30"},{"lineNumber":414,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":415,"author":{"gitId":"xenosf"},"content":" public static void saveToSaveFile() throws SaveFileException {","lastModifiedDate":"2023-08-30"},{"lineNumber":416,"author":{"gitId":"xenosf"},"content":" StringBuilder s \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":417,"author":{"gitId":"xenosf"},"content":" for (int i \u003d 1; i \u003c\u003d getNumTasks(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":418,"author":{"gitId":"xenosf"},"content":" s.append(getTask(i).toData());","lastModifiedDate":"2023-08-30"},{"lineNumber":419,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":420,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":421,"author":{"gitId":"xenosf"},"content":" FileWriter fw \u003d new FileWriter(SAVE_FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":422,"author":{"gitId":"xenosf"},"content":" fw.write(s.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":423,"author":{"gitId":"xenosf"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":424,"author":{"gitId":"xenosf"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":425,"author":{"gitId":"xenosf"},"content":" throw new SaveFileException(\"Error writing save file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":426,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":427,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":428,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":429,"author":{"gitId":"xenosf"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-22"},{"lineNumber":430,"author":{"gitId":"xenosf"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":431,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":432,"author":{"gitId":"xenosf"},"content":" // Startup","lastModifiedDate":"2023-08-30"},{"lineNumber":433,"author":{"gitId":"xenosf"},"content":" createSaveFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":434,"author":{"gitId":"xenosf"},"content":" printMessage(hello); // Print startup greeting","lastModifiedDate":"2023-08-30"},{"lineNumber":435,"author":{"gitId":"xenosf"},"content":" readSaveFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":436,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":437,"author":{"gitId":"xenosf"},"content":" // Input loop -- wait for input, respond, repeat","lastModifiedDate":"2023-08-23"},{"lineNumber":438,"author":{"gitId":"xenosf"},"content":" boolean shouldContinue \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":439,"author":{"gitId":"xenosf"},"content":" while (shouldContinue) {","lastModifiedDate":"2023-08-23"},{"lineNumber":440,"author":{"gitId":"xenosf"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":441,"author":{"gitId":"xenosf"},"content":" // read user input","lastModifiedDate":"2023-08-23"},{"lineNumber":442,"author":{"gitId":"xenosf"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":443,"author":{"gitId":"xenosf"},"content":" shouldContinue \u003d parseInput(input);","lastModifiedDate":"2023-08-23"},{"lineNumber":444,"author":{"gitId":"xenosf"},"content":" } catch (DudeException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":445,"author":{"gitId":"xenosf"},"content":" printMessage(e.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":446,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":447,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":448,"author":{"gitId":"xenosf"},"content":" } catch (DudeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":449,"author":{"gitId":"xenosf"},"content":" printMessage(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":450,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":451,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":452,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"xenosf":452}},{"path":"src/main/java/DudeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" * Commands to be entered into Dude.","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"public enum DudeCommand {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" list,","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" todo,","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" deadline,","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" event,","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":" mark,","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":" unmark,","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":" remove,","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":" delete,","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":" bye,","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xenosf":14}},{"path":"src/main/java/DudeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" * Exception specific to Dude (Duke)","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"public class DudeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" * Constructor for Dude exception with message","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" * @param message Human-readable error message.","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":" public DudeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":" * Constructor for Dude exception with default message","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":" public DudeException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":" super(\"An error occurred. :(\");","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"xenosf":21}},{"path":"src/main/java/EventEndMissingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class EventEndMissingException extends DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public EventEndMissingException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(\"Please specify the event end date after the task\\n description and start date, prefixed by `/to`.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xenosf":5}},{"path":"src/main/java/EventStartMissingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class EventStartMissingException extends DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public EventStartMissingException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(\"Please specify the event start date after the task\\ndescription, prefixed by `/from`.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xenosf":5}},{"path":"src/main/java/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" * Start time","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":" protected LocalDateTime startTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":" * End time","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":" protected LocalDateTime endTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":" * Constructor for Event task.","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":" * @param description Description of task.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" * @param startTime Start time of event.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":" * @param endTime End time of event.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" public EventTask(String description, LocalDateTime startTime, LocalDateTime endTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":" * Constructor for Event task, specifying completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" * @param description Description of task.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" * @param startTime Start time of event.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":" * @param endTime End time of event.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" * @param isDone Boolean representing task completion status.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" public EventTask(String description, LocalDateTime startTime, LocalDateTime endTime, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":" * Gets Event task formatted with type and status icon","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" * @return Task formatted as a string.","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" return String.format(\"\u003cE\u003e%s (FROM: %s | TO: %s)\", super.toString(),","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" startTime.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM, FormatStyle.SHORT)),","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" endTime.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM, FormatStyle.SHORT)));","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" * Parses save file data into an event task instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":" * @param data line from save file","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" * @return Task instance","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" * @throws InvalidTaskDataException if data is not in the expected format","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" public static EventTask fromData(String data) throws InvalidTaskDataException {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":" expected format:","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":" completed: 1, incomplete: 0","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":" event: E || 1/0 || start || end || description","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" String[] splitData \u003d data.split(DELIMITER_REGEX, 5);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" if (splitData.length \u003c 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" String taskType \u003d splitData[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" String taskCompleted \u003d splitData[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":" String taskStartString \u003d splitData[2];","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" LocalDateTime taskStart \u003d LocalDateTime.parse(taskStartString);","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":" String taskEndString \u003d splitData[3];","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" LocalDateTime taskEnd \u003d LocalDateTime.parse(taskEndString);","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" String taskDescription \u003d splitData[4];","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":" if (!taskCompleted.equals(\"1\") \u0026\u0026 !taskCompleted.equals(\"0\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":" boolean isCompleted \u003d taskCompleted.equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" return new EventTask(taskDescription, taskStart, taskEnd, isCompleted);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":" * Parses event task instance into save file string data.","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"xenosf"},"content":" * @return Task data as string.","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"xenosf"},"content":" public String toData() {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"xenosf"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"xenosf"},"content":" expected format:","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"xenosf"},"content":" completed: 1, incomplete: 0","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":" event: E || 1/0 || start || end || description","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"xenosf"},"content":" String taskCompleted \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"xenosf"},"content":" return String.join(DELIMITER, \"E\", taskCompleted,","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"xenosf"},"content":" startTime.toString(), endTime.toString(), description) + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"xenosf":103}},{"path":"src/main/java/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class InvalidCommandException extends DudeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" \"I don\u0027t know what that means.\\n\" +","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" \"Try checking if you\u0027ve typed the command correctly.\"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" );","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"xenosf":8}},{"path":"src/main/java/InvalidDateTimeArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class InvalidDateTimeArgumentException extends DudeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public InvalidDateTimeArgumentException() {","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" \"Invalid date/time format. Check if the date and time is\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" + \"in the format: \\\"DD/MM/YYYY hhmm\\\"\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" + \"e.g. 31/12/2023 2359\"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"xenosf":9}},{"path":"src/main/java/InvalidTaskDataException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class InvalidTaskDataException extends DudeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public InvalidTaskDataException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" \"Could not read task(s) from saved data.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" + \"The format is possibly corrupted.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" + \"Try checking the file at \"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" + Dude.SAVE_FILE_PATH","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" + \" and try again,\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":" + \"or delete the file to start over.\"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"xenosf":12}},{"path":"src/main/java/InvalidTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class InvalidTaskIndexException extends DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public InvalidTaskIndexException(String index) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" String.format(\"I can\u0027t find the task numbered \\\"%s\\\".\\nTry checking if you\u0027ve typed the correct task number.\",","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" index)","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" );","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xenosf":8}},{"path":"src/main/java/SaveFileException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class SaveFileException extends DudeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public SaveFileException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" message","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"xenosf":7}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" * Delimiter regex for save file data","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" public static final String DELIMITER \u003d \" || \";","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":" * Delimiter regex for save file data","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":" public static final String DELIMITER_REGEX \u003d \" \\\\|\\\\| \";","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":" * Constructor for task.","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" * Constructor for task, specifying completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":" * @param isDone Boolean representing task completion status","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" * Gets text status icon of task\u0027s completion status.","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" * @return space if not done; X if done.","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" return (this.isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":" * Gets task formatted with status icon","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" * @return Task formatted as a string. e.g. [X] completed task","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" * Marks task as done.","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" * Marks task as not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" * Parses save file data into a Task instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" * @param data line from save file","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" * @return Task instance","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" * @throws InvalidTaskDataException if data is not in the expected format","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" public static Task fromData(String data) throws InvalidTaskDataException {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" expected format:","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":" completed: 1, incomplete: 0","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" todo: T || 1/0 || description","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":" String[] splitData \u003d data.split(DELIMITER_REGEX, 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" if (splitData.length \u003c 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":" String taskType \u003d splitData[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":" String taskCompleted \u003d splitData[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" String taskDescription \u003d splitData[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":" if (!taskCompleted.equals(\"1\") \u0026\u0026 !taskCompleted.equals(\"0\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"xenosf"},"content":" boolean isCompleted \u003d taskCompleted.equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"xenosf"},"content":" return new Task(taskDescription, isCompleted);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" * Parses To Do task instance into save file string data","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"xenosf"},"content":" * @return Task data as string","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"xenosf"},"content":" public String toData() {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"xenosf"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"xenosf"},"content":" expected format:","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"xenosf"},"content":" completed: 1, incomplete: 0","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"xenosf"},"content":" todo: T || 1/0 || description","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"xenosf"},"content":" String taskCompleted \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"xenosf"},"content":" return String.join(DELIMITER, \"T\", taskCompleted, this.description) + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"xenosf":111}},{"path":"src/main/java/TaskDeadlineMissingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class TaskDeadlineMissingException extends DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public TaskDeadlineMissingException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(\"Please specify a task deadline after the task\\ndescription, prefixed by `/by`.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xenosf":5}},{"path":"src/main/java/TaskDescriptionMissingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class TaskDescriptionMissingException extends DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public TaskDescriptionMissingException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(\"Please specify a task description.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xenosf":5}},{"path":"src/main/java/TaskIndexMissingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class TaskIndexMissingException extends DudeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public TaskIndexMissingException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(\"Please specify a task number.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xenosf":5}},{"path":"src/main/java/TaskOutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class TaskOutOfBoundsException extends IndexOutOfBoundsException {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" public TaskOutOfBoundsException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" super(\"Task number out of bounds.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"xenosf":5}},{"path":"src/main/java/ToDoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"public class ToDoTask extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":" * Constructor for ToDo task.","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":" public ToDoTask(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":" * Constructor for ToDo task, specifying completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":" * @param isDone Boolean representing task completion status","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":" public ToDoTask(String description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":" * Gets Todo task formatted with type and status icon","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" * @return Task formatted as a string","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" return \"\u003cT\u003e\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" * Parses save file data into a To Do task instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":" * @param data line from save file","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" * @return Task instance","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" * @throws InvalidTaskDataException if data is not in the expected format","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" public static ToDoTask fromData(String data) throws InvalidTaskDataException {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" expected format:","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" completed: 1, incomplete: 0","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" todo: T || 1/0 || description","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":" String[] splitData \u003d data.split(DELIMITER_REGEX, 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" if (splitData.length \u003c 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" String taskType \u003d splitData[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" String taskCompleted \u003d splitData[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" String taskDescription \u003d splitData[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" if (!taskCompleted.equals(\"1\") \u0026\u0026 !taskCompleted.equals(\"0\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" throw new InvalidTaskDataException();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":" boolean isCompleted \u003d taskCompleted.equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" return new ToDoTask(taskDescription, isCompleted);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" * Parses To Do task instance into save file string data","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" * @return Task data as string","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":" public String toData() {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":" /*","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":" expected format:","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":" completed: 1, incomplete: 0","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":" todo: T || 1/0 || description","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" String taskCompleted \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" return String.join(DELIMITER, \"T\", taskCompleted, this.description) + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"xenosf":73}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"qwertyuiop","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":"hello.....","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"todo learn how to use the deadline command /by now","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":"deadline","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"deaDline discussion post","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":"deadline essay /by sunday 2359","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":"deadline essay /by 5/9/2023 2359","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"event","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":"event anyhow","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":"event project meeting /to 1/2/2023 1300","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":"event project meeting /from 1/2/2023 1400","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":"event project meeting /from mon 1300h /to 1400h","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"event project meeting /from 1/2/2023 1300 /to 1/2/2023 1400","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":"event party /from 1/2/2023 2200 /to 2/2/2023 0330","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":"mark 5","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":"mark 81 483","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":"todo a","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":"todo b","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":"todo c","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":"remove 2","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"xenosf":31}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":"if exist data\\dude.txt del data\\dude.txt","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":"java -classpath ..\\bin Dude \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"xenosf":2,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":"if [ -e \"./data/dude.txt\" ]","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"then","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":" rm data/dude.txt","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":"fi","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":"java -classpath ../bin Dude \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"xenosf":5,"-":37}}] diff --git a/xenosf_ip_master/commits.json b/xenosf_ip_master/commits.json index 36cd0e97..d5c82f58 100644 --- a/xenosf_ip_master/commits.json +++ b/xenosf_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"xenosf":[{"date":"2023-08-22","commitResults":[{"hash":"4b981a19da6b33a46c9e8625eee56d0a5b1f883b","isMergeCommit":false,"messageTitle":"rename duke to dude; set up greeting and exit messages","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":10}}}]},{"date":"2023-08-23","commitResults":[{"hash":"8e42713a7e113de51a9035dc7a3b446e4b22bc72","isMergeCommit":false,"messageTitle":"add echo user command feature \u0026 bye command","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"25b33c40fc9613ae152632cfaa59365a02663745","isMergeCommit":false,"messageTitle":"separate command and text parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"84c81e12051f5e2566fac71d79a966a5642b8799","isMergeCommit":false,"messageTitle":"move messages out of main function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":8}}},{"hash":"9e6ceafc0e19adca9b34af624c166394c7281411","isMergeCommit":false,"messageTitle":"move input parsing out of main function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":16}}},{"hash":"89798dd36ed42fa23368bc2cac9f4bc311330e32","isMergeCommit":false,"messageTitle":"add task list add and display feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"4d6baf7262c6988801bd0d88bf3349a774de8847","isMergeCommit":false,"messageTitle":"refactor tasks add and list to separate methods; add 0 tasks msg","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":8}}},{"hash":"2fe1842ee730f41c475cbaf6a5bc60678d196c0a","isMergeCommit":false,"messageTitle":"add mark and unmark task feature","messageBody":"","tags":["Level-5","Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":14}}},{"hash":"c8faeb6ed11d94e28c7f9c11337c05b46eff8c1e","isMergeCommit":false,"messageTitle":"streamline console print function calls","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":17}}},{"hash":"1d2a5316b20d14fe35ae056cf9d27a3a2bc61fae","isMergeCommit":false,"messageTitle":"change getTaskString to override toString instead","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":5}}},{"hash":"d5b0cabcba85e2c6afbbbc42cda8f864b7afced8","isMergeCommit":false,"messageTitle":"remove isdone getter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":12}}},{"hash":"fa637d77b22d10163ac09e12d7e2592d604209e3","isMergeCommit":false,"messageTitle":"add different types of tasks: deadline, event, todo","messageBody":"","tags":["A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":0}}},{"hash":"e5588aea144fc3fa86096d1861c8378dfa085713","isMergeCommit":false,"messageTitle":"change task type icon formatting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"b760360aff8fb092ad73b0415b75671ec78eed00","isMergeCommit":false,"messageTitle":"change task date display formatting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"5b912da575ae9294bebb4609ea96dc7c38987805","isMergeCommit":false,"messageTitle":"add todo task, deadline task, event task commands","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":142,"deletions":50}}},{"hash":"dcd5053bffa54724e0fd3a750cda27dcb8cf4740","isMergeCommit":false,"messageTitle":"change initial ascii art","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":4}}},{"hash":"60ea862cb5d31694778e7ced3dff0ac11df6e11a","isMergeCommit":false,"messageTitle":"fix bug in event end check","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"95290fe145b0ada3016a21c16ef6c0ca65364ed8","isMergeCommit":false,"messageTitle":"edit error message to fit in lines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"c045ef0e5000b9f5473233feac516f3831fa556e","isMergeCommit":false,"messageTitle":"implement automated testing","messageBody":"","tags":["A-TextUiTesting","A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":21,"deletions":0},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"33436c454027330c8b4e39d4b18b9dd70fd2253b","isMergeCommit":false,"messageTitle":"add javadoc for Dude class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"4ea3129fe97953acb58ed6813a57fedd62813d9b","isMergeCommit":false,"messageTitle":"add DudeException parent class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":1}}},{"hash":"a365c3d2d5b104a58c46c58a76cf7b7033d410ca","isMergeCommit":false,"messageTitle":"implement invalid command exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"f2f0bfd68481fc9f7e004230e792deeefce9763e","isMergeCommit":false,"messageTitle":"convert exception messages to actual exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":0}}},{"hash":"e81ec136b5d974d8a207bea96ff02f48650b83e3","isMergeCommit":false,"messageTitle":"add param for index","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"17a398b93a14839ae7a3d7a52fd24726004b2360","isMergeCommit":false,"messageTitle":"refactor tasks to use ArrayList","messageBody":"","tags":["A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":15}}},{"hash":"93aed1d5b311dd1177675a9ccd4a8f6fc366650e","isMergeCommit":false,"messageTitle":"add delete task method; refactor get task to use arraylist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"052553a65bb586e72a17b9d86e8e919f18fa0072","isMergeCommit":false,"messageTitle":"implement delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":44,"deletions":2}}},{"hash":"b9b1f03ced5d38cb7b7646c0fc9436db5f5faef7","isMergeCommit":false,"messageTitle":"split and refactor mark and unmark","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":28}}},{"hash":"3cba24bb2af9188ac1f10121833c31f4aa2c7830","isMergeCommit":false,"messageTitle":"convert command to lowercase before checking","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":1,"deletions":1}}},{"hash":"ce54ad04a921e844f50130f4d8c3851b6f8b7bd3","isMergeCommit":false,"messageTitle":"use enums for commands","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":38}}},{"hash":"60d65518c592b3baaa73653fe7e44b6ce16da12b","isMergeCommit":false,"messageTitle":"convert all dude errors to use exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":50}}}]},{"date":"2023-08-30","commitResults":[{"hash":"0950cca9abac8409d84ea0c7e24e2e0ab98a3323","isMergeCommit":false,"messageTitle":"Implement save feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":380,"deletions":28}}}]},{"date":"2023-09-01","commitResults":[{"hash":"60fa220aa56e3c65464407226cda16ddb9ef78b3","isMergeCommit":true,"messageTitle":"Merge pull request #1 from xenosf/branch-Level-7","messageBody":"Merge Branch level 7","tags":["Level-7"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"xenosf":{"java":882,"md":0,"fxml":0,"sh":1,"bat":1,"gradle":0,"txt":28}},"authorContributionVariance":{"xenosf":46890.766},"authorDisplayNameMap":{"xenosf":"CS2103T-T08-2 XENO..NONG"}} +{"authorDailyContributionsMap":{"xenosf":[{"date":"2023-08-22","commitResults":[{"hash":"4b981a19da6b33a46c9e8625eee56d0a5b1f883b","isMergeCommit":false,"messageTitle":"rename duke to dude; set up greeting and exit messages","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":10}}}]},{"date":"2023-08-23","commitResults":[{"hash":"8e42713a7e113de51a9035dc7a3b446e4b22bc72","isMergeCommit":false,"messageTitle":"add echo user command feature \u0026 bye command","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"25b33c40fc9613ae152632cfaa59365a02663745","isMergeCommit":false,"messageTitle":"separate command and text parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"84c81e12051f5e2566fac71d79a966a5642b8799","isMergeCommit":false,"messageTitle":"move messages out of main function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":8}}},{"hash":"9e6ceafc0e19adca9b34af624c166394c7281411","isMergeCommit":false,"messageTitle":"move input parsing out of main function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":16}}},{"hash":"89798dd36ed42fa23368bc2cac9f4bc311330e32","isMergeCommit":false,"messageTitle":"add task list add and display feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"4d6baf7262c6988801bd0d88bf3349a774de8847","isMergeCommit":false,"messageTitle":"refactor tasks add and list to separate methods; add 0 tasks msg","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":8}}},{"hash":"2fe1842ee730f41c475cbaf6a5bc60678d196c0a","isMergeCommit":false,"messageTitle":"add mark and unmark task feature","messageBody":"","tags":["Level-5","Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":14}}},{"hash":"c8faeb6ed11d94e28c7f9c11337c05b46eff8c1e","isMergeCommit":false,"messageTitle":"streamline console print function calls","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":17}}},{"hash":"1d2a5316b20d14fe35ae056cf9d27a3a2bc61fae","isMergeCommit":false,"messageTitle":"change getTaskString to override toString instead","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":5}}},{"hash":"d5b0cabcba85e2c6afbbbc42cda8f864b7afced8","isMergeCommit":false,"messageTitle":"remove isdone getter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":12}}},{"hash":"fa637d77b22d10163ac09e12d7e2592d604209e3","isMergeCommit":false,"messageTitle":"add different types of tasks: deadline, event, todo","messageBody":"","tags":["A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":0}}},{"hash":"e5588aea144fc3fa86096d1861c8378dfa085713","isMergeCommit":false,"messageTitle":"change task type icon formatting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"b760360aff8fb092ad73b0415b75671ec78eed00","isMergeCommit":false,"messageTitle":"change task date display formatting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"5b912da575ae9294bebb4609ea96dc7c38987805","isMergeCommit":false,"messageTitle":"add todo task, deadline task, event task commands","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":142,"deletions":50}}},{"hash":"dcd5053bffa54724e0fd3a750cda27dcb8cf4740","isMergeCommit":false,"messageTitle":"change initial ascii art","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":4}}},{"hash":"60ea862cb5d31694778e7ced3dff0ac11df6e11a","isMergeCommit":false,"messageTitle":"fix bug in event end check","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"95290fe145b0ada3016a21c16ef6c0ca65364ed8","isMergeCommit":false,"messageTitle":"edit error message to fit in lines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"c045ef0e5000b9f5473233feac516f3831fa556e","isMergeCommit":false,"messageTitle":"implement automated testing","messageBody":"","tags":["A-TextUiTesting","A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":21,"deletions":0},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"33436c454027330c8b4e39d4b18b9dd70fd2253b","isMergeCommit":false,"messageTitle":"add javadoc for Dude class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"4ea3129fe97953acb58ed6813a57fedd62813d9b","isMergeCommit":false,"messageTitle":"add DudeException parent class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":1}}},{"hash":"a365c3d2d5b104a58c46c58a76cf7b7033d410ca","isMergeCommit":false,"messageTitle":"implement invalid command exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"f2f0bfd68481fc9f7e004230e792deeefce9763e","isMergeCommit":false,"messageTitle":"convert exception messages to actual exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":0}}},{"hash":"e81ec136b5d974d8a207bea96ff02f48650b83e3","isMergeCommit":false,"messageTitle":"add param for index","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"17a398b93a14839ae7a3d7a52fd24726004b2360","isMergeCommit":false,"messageTitle":"refactor tasks to use ArrayList","messageBody":"","tags":["A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":15}}},{"hash":"93aed1d5b311dd1177675a9ccd4a8f6fc366650e","isMergeCommit":false,"messageTitle":"add delete task method; refactor get task to use arraylist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"052553a65bb586e72a17b9d86e8e919f18fa0072","isMergeCommit":false,"messageTitle":"implement delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":44,"deletions":2}}},{"hash":"b9b1f03ced5d38cb7b7646c0fc9436db5f5faef7","isMergeCommit":false,"messageTitle":"split and refactor mark and unmark","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":28}}},{"hash":"3cba24bb2af9188ac1f10121833c31f4aa2c7830","isMergeCommit":false,"messageTitle":"convert command to lowercase before checking","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":1,"deletions":1}}},{"hash":"ce54ad04a921e844f50130f4d8c3851b6f8b7bd3","isMergeCommit":false,"messageTitle":"use enums for commands","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":38}}},{"hash":"60d65518c592b3baaa73653fe7e44b6ce16da12b","isMergeCommit":false,"messageTitle":"convert all dude errors to use exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":50}}}]},{"date":"2023-08-30","commitResults":[{"hash":"0950cca9abac8409d84ea0c7e24e2e0ab98a3323","isMergeCommit":false,"messageTitle":"Implement save feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":380,"deletions":28}}}]},{"date":"2023-09-01","commitResults":[{"hash":"60fa220aa56e3c65464407226cda16ddb9ef78b3","isMergeCommit":true,"messageTitle":"Merge pull request #1 from xenosf/branch-Level-7","messageBody":"Merge Branch level 7","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"2455e437150afacf071acd779fc8b9d47c1e1452","isMergeCommit":false,"messageTitle":"Update test scripts to delete saved data","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":0},"sh":{"insertions":4,"deletions":0}}},{"hash":"0f9069dd4a7e34c9bdb83827a446b51393cdbd27","isMergeCommit":false,"messageTitle":"Add proper date time parsing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":3},"java":{"insertions":99,"deletions":44}}},{"hash":"14da243d3819e810fa34cc15e60d7cd7ca5df2b1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"Implement date and time input and processing for tasks that store\ndates/times.\n","tags":["Level-8"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"xenosf":{"java":937,"md":0,"fxml":0,"sh":5,"bat":2,"gradle":0,"txt":31}},"authorContributionVariance":{"xenosf":38720.777},"authorDisplayNameMap":{"xenosf":"CS2103T-T08-2 XENO..NONG"}} diff --git a/yanghengtang_ip_master/authorship.json b/yanghengtang_ip_master/authorship.json index 79339bf3..d49b7e94 100644 --- a/yanghengtang_ip_master/authorship.json +++ b/yanghengtang_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"yanghengtang":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":"yanghengtang"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" archiveFileName \u003d \"duke.jar\"","lastModifiedDate":"2023-08-30"},{"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":{"yanghengtang":2,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"D | 0 | return book | 2023-09-11","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"E | 0 | project meeting | 2023-09-11 | 2023-09-11","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"T | 1 | join sports club","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"yanghengtang":4}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.task.TaskException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" this.taskList \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" this.ui.printEntryMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" String fullCommand \u003d ui.nextCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" c.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" } catch (TaskException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" ui.addErrorMessage(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" } finally {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":" ui.printMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"yanghengtang"},"content":" };","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"yanghengtang"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yanghengtang"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":42,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"yanghengtang":40,"-":3}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" * Represents a Add Command to be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" private Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" super(false);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" * Executes the list of commands to add a Task from a TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList with the Task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui to show the status of the adding command.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage that saves the TaskList locally.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" taskList.add(this.task);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" ui.addAddMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskMessage(this.task);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskListSizeMessage(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":33}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" * Represents commands to be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" private boolean exit;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" public Command(boolean exit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" this.exit \u003d exit;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" * Executes the list of commands associated with the Command object.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList required for execution of some commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui required for execution of some commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage required for execution of some commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" * Returns a boolean value to indicate if Command object is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" * @return True if the Command object is an ExitCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" return this.exit;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":34}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" * Represents a Delete command to be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" super(false);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" * Executes the list of commands to delete a Task from a TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList with the Task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui to show the status of the deletion command.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage that saves the TaskList locally.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" Task task \u003d taskList.remove(this.index);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" ui.addDeleteMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskMessage(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskListSizeMessage(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":33}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" * Represents an Exit command to be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" public ExitCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" super(true);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" * Executes the list of commands to exit the chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList associated with the chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui to show the status of the exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage that saves the TaskList locally.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" storage.save(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" ui.addExitMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":27}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" * Represents a Find command to be executed.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" private String queryString;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" public FindCommand(String queryString) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" super(false);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" this.queryString \u003d queryString;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" * Executes the list of commands to find a Task from a TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList to be searched on.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui to show the status of the finding of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage that saves the TaskList locally.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" TaskList filteredTaskList \u003d taskList.find(this.queryString);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" ui.addFindMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskList(filteredTaskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yanghengtang":31}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" * Represents a Mark command to be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" super(false);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" * Executes the list of commands to mark a Task from a TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList with the Task to be marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui to show the status of the marking of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage that saves the TaskList locally.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" Task task \u003d taskList.mark(this.index);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" ui.addMarkMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskMessage(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskListSizeMessage(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":33}},{"path":"src/main/java/duke/command/PrintListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" * Represents a Print List command to be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"public class PrintListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" public PrintListCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" super(false);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" * Executes the list of commands to print the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui to print the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage that saves the TaskList locally.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskList(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":26}},{"path":"src/main/java/duke/command/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" * Represents an unknown command.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"public class UnknownCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" public UnknownCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" super(false);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" * Prints the error message indicating an unknown command has been entered.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList associated with the chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui used to print the error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage that saves the TaskList locally.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" ui.addCommandNotFound();","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":26}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" * Represents an unmark command to be executed.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" super(false);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" * Executes the list of commands to unmark a Task from a TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList with the Task to be unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui to show the status of the unmarking of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage that saves the TaskList locally.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" Task task \u003d taskList.unmark(this.index);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" ui.addUnmarkMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskMessage(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskListSizeMessage(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":33}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":" * Represents a task with a given deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" protected LocalDate byDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" public Deadline(String description, LocalDate byDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" this.byDate \u003d byDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" * Returns a string representation of the Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" * @return String representation of the Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" String status \u003d \"[\" + (super.isDone ? \"X\" : \" \") + \"]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" String deadline \u003d \"(by: \" + this.byDate + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" return \"[D]\" + status + \" \" + super.description + \" \" + deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yanghengtang":27}},{"path":"src/main/java/duke/task/DeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":" * Represents an error that occurred during the initialisation of a Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"public class DeadlineException extends TaskException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" public DeadlineException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" super(\"Valid Format: deadline (description) /by (YYYY-MM-DD)\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yanghengtang":12}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":" * Represents an event with a given start and end date.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" protected LocalDate fromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" protected LocalDate toDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" public Event(String description, LocalDate fromDate, LocalDate toDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" this.fromDate \u003d fromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" this.toDate \u003d toDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" * Returns a string representation of the Event object.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" * @return String representation of the Event object.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" String status \u003d \"[\" + (this.isDone ? \"X\" : \" \") + \"]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" String duration \u003d \"(from: \" + this.fromDate + \" to: \" + this.toDate + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" return \"[E]\" + status + \" \" + this.description + \" \" + duration;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yanghengtang":29}},{"path":"src/main/java/duke/task/EventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":" * Represents an error that occurred during the initialisation of a Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"public class EventException extends TaskException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" public EventException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" super(\"event (description) /from (YYYY-MM-DD) /to (YYYY-MM-DD)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yanghengtang":11}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":" * Represents a task with status indicating its completeness","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" * @return String representation of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" String status \u003d \"[\" + (this.isDone ? \"X\" : \" \") + \"]\";","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" return status + \" \" + this.description;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" * Updates the task status to \u0027completed\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":" * Updates the task status to \u0027uncompleted\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yanghengtang"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"yanghengtang"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"yanghengtang":39}},{"path":"src/main/java/duke/task/TaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":" * Represents an error that occurred during the initialisation of a Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"public class TaskException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" public TaskException(String format) {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" super(\"Oops! Invalid input for your task.\\nValid Format: \" + format);","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yanghengtang":11}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":" * Represents a task that is to be done.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" * Returns a string representation of the ToDo object.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" * @return String representation of the ToDo object.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" String status \u003d \"[\" + (super.isDone ? \"X\" : \" \") + \"]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" return \"[T]\" + status + \" \" + super.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yanghengtang":21}},{"path":"src/main/java/duke/task/ToDoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":" * Represents an error that occurred during the initialisation of a Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"public class ToDoException extends TaskException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" public ToDoException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" super(\"todo (description)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yanghengtang":11}},{"path":"src/main/java/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":"import duke.command.PrintListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"import duke.command.UnknownCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":"import duke.task.DeadlineException;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":"import duke.task.EventException;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":"import duke.task.TaskException;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":"import duke.task.ToDoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" * Converts a given String into Tasks and Commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" * Returns a Command with the given instructions.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" * @param input The given instruction to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" * @return Command object that correspond to the given instruction.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" * @throws TaskException if given input is in the wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":" public static Command parse(String input) throws TaskException {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yanghengtang"},"content":" return new PrintListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yanghengtang"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yanghengtang"},"content":" return new MarkCommand(Parser.parseUserMark(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yanghengtang"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yanghengtang"},"content":" return new UnmarkCommand(Parser.parseUserUnmark(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yanghengtang"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yanghengtang"},"content":" return new DeleteCommand(Parser.parseUserDelete(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yanghengtang"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yanghengtang"},"content":" String queryString \u003d Parser.parseUserFind(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yanghengtang"},"content":" return new FindCommand(queryString);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yanghengtang"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"yanghengtang"},"content":" Deadline deadline \u003d Parser.parseUserDeadline(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"yanghengtang"},"content":" return new AddCommand(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"yanghengtang"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"yanghengtang"},"content":" Event event \u003d Parser.parseUserEvent(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"yanghengtang"},"content":" return new AddCommand(event);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"yanghengtang"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"yanghengtang"},"content":" ToDo todo \u003d Parser.parseUserToDo(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"yanghengtang"},"content":" return new AddCommand(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"yanghengtang"},"content":" } else if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"yanghengtang"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"yanghengtang"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"yanghengtang"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"yanghengtang"},"content":" * Returns a Deadline object based on the information from the local file.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"yanghengtang"},"content":" * @param input The given information from local file.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"yanghengtang"},"content":" * @return Deadline object that correspond to the information given.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"yanghengtang"},"content":" public static Deadline parseLoadDeadline(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"yanghengtang"},"content":" int byIndex \u003d input.indexOf(\u0027|\u0027, 7);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"yanghengtang"},"content":" String description \u003d input.substring(8, byIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"yanghengtang"},"content":" String by \u003d input.substring(byIndex + 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"yanghengtang"},"content":" LocalDate byDate \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"yanghengtang"},"content":" Deadline deadline \u003d new Deadline(description, byDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"yanghengtang"},"content":" if (input.charAt(4) \u003d\u003d \u00271\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"yanghengtang"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"yanghengtang"},"content":" return deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"yanghengtang"},"content":" * Returns a Event object based on the information from the local file.","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"yanghengtang"},"content":" * @param input The given information from local file.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"yanghengtang"},"content":" * @return Event object that correspond to the information given.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"yanghengtang"},"content":" public static Event parseLoadEvent(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"yanghengtang"},"content":" int fromIndex \u003d input.indexOf(\u0027|\u0027, 7);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"yanghengtang"},"content":" int toIndex \u003d input.indexOf(\u0027|\u0027, fromIndex + 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"yanghengtang"},"content":" String description \u003d input.substring(8, fromIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"yanghengtang"},"content":" String from \u003d input.substring(fromIndex + 2, toIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"yanghengtang"},"content":" String to \u003d input.substring(toIndex + 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"yanghengtang"},"content":" LocalDate fromDate \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"yanghengtang"},"content":" LocalDate toDate \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"yanghengtang"},"content":" Event event \u003d new Event(description, fromDate, toDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"yanghengtang"},"content":" if (input.charAt(4) \u003d\u003d \u00271\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"yanghengtang"},"content":" event.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"yanghengtang"},"content":" return event;","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"yanghengtang"},"content":" * Returns a ToDo object based on the information from the local file.","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"yanghengtang"},"content":" * @param input The given information from local file.","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"yanghengtang"},"content":" * @return ToDo object that correspond to the information given.","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"yanghengtang"},"content":" public static ToDo parseLoadToDo(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"yanghengtang"},"content":" String description \u003d input.substring(8);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"yanghengtang"},"content":" ToDo todo \u003d new ToDo(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"yanghengtang"},"content":" if (input.charAt(4) \u003d\u003d \u00271\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"yanghengtang"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"yanghengtang"},"content":" return todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"yanghengtang"},"content":" * Returns a Deadline object based on the user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"yanghengtang"},"content":" * @param input The user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"yanghengtang"},"content":" * @return Deadline object that corresponds to the user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"yanghengtang"},"content":" * @throws DeadlineException if given input is missing information or in wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"yanghengtang"},"content":" public static Deadline parseUserDeadline(String input) throws DeadlineException {","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"yanghengtang"},"content":" int byIndex \u003d input.indexOf(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"yanghengtang"},"content":" if (input.length() \u003c\u003d 9) {","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"yanghengtang"},"content":" throw new DeadlineException();","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"yanghengtang"},"content":" } else if (byIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"yanghengtang"},"content":" throw new DeadlineException();","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"yanghengtang"},"content":" String description \u003d input.substring(9, byIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"yanghengtang"},"content":" String by \u003d input.substring(byIndex + 4);","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"yanghengtang"},"content":" LocalDate byDate \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"yanghengtang"},"content":" Deadline deadline \u003d new Deadline(description, byDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"yanghengtang"},"content":" return deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"yanghengtang"},"content":" * Returns a Event object based on the user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"yanghengtang"},"content":" * @param input The user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"yanghengtang"},"content":" * @return Event object that corresponds to the user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"yanghengtang"},"content":" * @throws EventException if given input is missing information or in wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"yanghengtang"},"content":" public static Event parseUserEvent(String input) throws EventException {","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"yanghengtang"},"content":" int fromIndex \u003d input.indexOf(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"yanghengtang"},"content":" int toIndex \u003d input.indexOf(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"yanghengtang"},"content":" if (input.length() \u003c\u003d 6) {","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"yanghengtang"},"content":" throw new EventException();","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"yanghengtang"},"content":" } else if (fromIndex \u003d\u003d -1 || toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"yanghengtang"},"content":" throw new EventException();","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"yanghengtang"},"content":" } else if (fromIndex \u003e toIndex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"yanghengtang"},"content":" throw new EventException();","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"yanghengtang"},"content":" String description \u003d input.substring(6, fromIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"yanghengtang"},"content":" String from \u003d input.substring(fromIndex + 6, toIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"yanghengtang"},"content":" String to \u003d input.substring(toIndex + 4);","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"yanghengtang"},"content":" LocalDate fromDate \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"yanghengtang"},"content":" LocalDate toDate \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"yanghengtang"},"content":" Event event \u003d new Event(description, fromDate, toDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"yanghengtang"},"content":" return event;","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"yanghengtang"},"content":" * Returns a ToDo object based on the user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"yanghengtang"},"content":" * @param input The user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"yanghengtang"},"content":" * @return ToDo object that corresponds to the user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"yanghengtang"},"content":" * @throws ToDoException if given input is missing information or in wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"yanghengtang"},"content":" public static ToDo parseUserToDo(String input) throws ToDoException {","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"yanghengtang"},"content":" if (input.length() \u003c\u003d 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"yanghengtang"},"content":" throw new ToDoException();","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"yanghengtang"},"content":" ToDo todo \u003d new ToDo(input.substring(5));","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"yanghengtang"},"content":" return todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"yanghengtang"},"content":" * Returns the index of the Task to be mark based on user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"yanghengtang"},"content":" * @param input The given user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"yanghengtang"},"content":" * @return The index of the Task the user wishes to mark.","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"yanghengtang"},"content":" * @throws TaskException if given input is missing information or in wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"yanghengtang"},"content":" public static int parseUserMark(String input) throws TaskException {","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"yanghengtang"},"content":" int index \u003d Integer.valueOf(input.substring(5)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"yanghengtang"},"content":" if (input.length() \u003c\u003d 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"yanghengtang"},"content":" throw new TaskException(\"mark (task number)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"yanghengtang"},"content":" return index;","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"yanghengtang"},"content":" * Returns the index of Task to be unmark based on user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"yanghengtang"},"content":" * @param input The given user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"yanghengtang"},"content":" * @return The index of the Task the user wishes to unmark.","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"yanghengtang"},"content":" * @throws TaskException if given input is missing information or in wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"yanghengtang"},"content":" public static int parseUserUnmark(String input) throws TaskException {","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"yanghengtang"},"content":" int index \u003d Integer.valueOf(input.substring(7)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"yanghengtang"},"content":" if (input.length() \u003c\u003d 7) {","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"yanghengtang"},"content":" throw new TaskException(\"unmark (task number)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"yanghengtang"},"content":" return index;","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"yanghengtang"},"content":" * Returns the index of the Task to be deleted based on user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"yanghengtang"},"content":" * @param input The given user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"yanghengtang"},"content":" * @return The index of the Task the user wishes to delete.","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"yanghengtang"},"content":" * @throws TaskException if given input is missing information or in wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"yanghengtang"},"content":" public static int parseUserDelete(String input) throws TaskException {","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"yanghengtang"},"content":" int index \u003d Integer.valueOf(input.substring(7)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"yanghengtang"},"content":" if (input.length() \u003c\u003d 7) {","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"yanghengtang"},"content":" throw new TaskException(\"delete (task number)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":247,"author":{"gitId":"yanghengtang"},"content":" return index;","lastModifiedDate":"2023-08-30"},{"lineNumber":248,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":249,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":250,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":251,"author":{"gitId":"yanghengtang"},"content":" * Returns the query string to be searched based on user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":252,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":253,"author":{"gitId":"yanghengtang"},"content":" * @param input The given user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":254,"author":{"gitId":"yanghengtang"},"content":" * @return The string the users wishes to search.","lastModifiedDate":"2023-09-01"},{"lineNumber":255,"author":{"gitId":"yanghengtang"},"content":" * @throws TaskException if given input is missing information or in wrong format.","lastModifiedDate":"2023-09-01"},{"lineNumber":256,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":257,"author":{"gitId":"yanghengtang"},"content":" public static String parseUserFind(String input) throws TaskException {","lastModifiedDate":"2023-08-31"},{"lineNumber":258,"author":{"gitId":"yanghengtang"},"content":" if (input.length() \u003c\u003d 5) {","lastModifiedDate":"2023-08-31"},{"lineNumber":259,"author":{"gitId":"yanghengtang"},"content":" throw new TaskException(\"find (query string)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":260,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":261,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":262,"author":{"gitId":"yanghengtang"},"content":" return input.substring(5);","lastModifiedDate":"2023-08-31"},{"lineNumber":263,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":264,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":265,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":266,"author":{"gitId":"yanghengtang"},"content":" * Returns the String of the given TaskList in the data file format.","lastModifiedDate":"2023-09-01"},{"lineNumber":267,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":268,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList to be parsed into data.","lastModifiedDate":"2023-09-01"},{"lineNumber":269,"author":{"gitId":"yanghengtang"},"content":" * @return The String of the given TaskList in the data file format.","lastModifiedDate":"2023-09-01"},{"lineNumber":270,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":271,"author":{"gitId":"yanghengtang"},"content":" public static String parseTaskListToData(TaskList taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":272,"author":{"gitId":"yanghengtang"},"content":" String input \u003d taskList.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":273,"author":{"gitId":"yanghengtang"},"content":" String newData \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":274,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":275,"author":{"gitId":"yanghengtang"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":276,"author":{"gitId":"yanghengtang"},"content":" int startIndex \u003d input.indexOf((i + 1) + \".\");","lastModifiedDate":"2023-09-01"},{"lineNumber":277,"author":{"gitId":"yanghengtang"},"content":" int endIndex \u003d input.indexOf(\"\\n\", startIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":278,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":279,"author":{"gitId":"yanghengtang"},"content":" String subInput \u003d input.substring(startIndex + 2, endIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":280,"author":{"gitId":"yanghengtang"},"content":" String taskType \u003d String.valueOf(subInput.charAt(1));","lastModifiedDate":"2023-09-01"},{"lineNumber":281,"author":{"gitId":"yanghengtang"},"content":" String status \u003d subInput.charAt(4) \u003d\u003d \u0027X\u0027 ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":282,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":283,"author":{"gitId":"yanghengtang"},"content":" newData +\u003d taskType + \" | \" + status + \" | \";","lastModifiedDate":"2023-09-01"},{"lineNumber":284,"author":{"gitId":"yanghengtang"},"content":" if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":285,"author":{"gitId":"yanghengtang"},"content":" int byIndex \u003d subInput.indexOf(\"(by:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":286,"author":{"gitId":"yanghengtang"},"content":" int subEndIndex \u003d subInput.indexOf(\")\");","lastModifiedDate":"2023-09-01"},{"lineNumber":287,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":288,"author":{"gitId":"yanghengtang"},"content":" String description \u003d subInput.substring(7, byIndex - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":289,"author":{"gitId":"yanghengtang"},"content":" String by \u003d subInput.substring(byIndex + 5, subEndIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":290,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":291,"author":{"gitId":"yanghengtang"},"content":" newData +\u003d description + \" | \" + by;","lastModifiedDate":"2023-09-01"},{"lineNumber":292,"author":{"gitId":"yanghengtang"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":293,"author":{"gitId":"yanghengtang"},"content":" int fromIndex \u003d subInput.indexOf(\"(from:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":294,"author":{"gitId":"yanghengtang"},"content":" int toIndex \u003d subInput.indexOf(\"to:\", fromIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":295,"author":{"gitId":"yanghengtang"},"content":" int subEndIndex \u003d subInput.indexOf(\")\");","lastModifiedDate":"2023-09-01"},{"lineNumber":296,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":297,"author":{"gitId":"yanghengtang"},"content":" String description \u003d subInput.substring(7, fromIndex - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":298,"author":{"gitId":"yanghengtang"},"content":" String from \u003d subInput.substring(fromIndex + 7, toIndex - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":299,"author":{"gitId":"yanghengtang"},"content":" String to \u003d subInput.substring(toIndex + 4, subEndIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":300,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":301,"author":{"gitId":"yanghengtang"},"content":" newData +\u003d description + \" | \" + from + \" | \" + to;","lastModifiedDate":"2023-09-01"},{"lineNumber":302,"author":{"gitId":"yanghengtang"},"content":" } else if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":303,"author":{"gitId":"yanghengtang"},"content":" String description \u003d subInput.substring(7);","lastModifiedDate":"2023-09-01"},{"lineNumber":304,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":305,"author":{"gitId":"yanghengtang"},"content":" newData +\u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":306,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":307,"author":{"gitId":"yanghengtang"},"content":" newData +\u003d System.lineSeparator();","lastModifiedDate":"2023-09-01"},{"lineNumber":308,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":309,"author":{"gitId":"yanghengtang"},"content":" return newData;","lastModifiedDate":"2023-09-01"},{"lineNumber":310,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":311,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":311}},{"path":"src/main/java/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" * Represents a storage for the list of Tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" private File file;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" public Storage(String path) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" this.file \u003d new File(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" if (!this.file.getParentFile().exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" this.file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" if (!this.file.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" this.file.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" System.out.println(\"Error: Unable to create local file\");","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yanghengtang"},"content":" * Returns an ArrayList of Tasks from local data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yanghengtang"},"content":" * @return ArrayList consisting of Task read from the data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yanghengtang"},"content":" public ArrayList\u003cTask\u003e load() {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"yanghengtang"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yanghengtang"},"content":" Scanner sc \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"yanghengtang"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"yanghengtang"},"content":" sc \u003d new Scanner(this.file);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yanghengtang"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"yanghengtang"},"content":" System.out.println(\"Error: Unable to load local file\");","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yanghengtang"},"content":" while (sc !\u003d null \u0026\u0026 sc.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"yanghengtang"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"yanghengtang"},"content":" if (input.charAt(0) \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"yanghengtang"},"content":" Deadline deadline \u003d Parser.parseLoadDeadline(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"yanghengtang"},"content":" list.add(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"yanghengtang"},"content":" } else if (input.charAt(0) \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"yanghengtang"},"content":" Event event \u003d Parser.parseLoadEvent(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"yanghengtang"},"content":" list.add(event);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"yanghengtang"},"content":" } else if (input.charAt(0) \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"yanghengtang"},"content":" ToDo todo \u003d Parser.parseLoadToDo(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"yanghengtang"},"content":" list.add(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"yanghengtang"},"content":" return list;","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"yanghengtang"},"content":" * Save the given TaskList into a local data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList to be saved locally.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"yanghengtang"},"content":" public void save(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"yanghengtang"},"content":" String newData \u003d Parser.parseTaskListToData(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"yanghengtang"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"yanghengtang"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"yanghengtang"},"content":" fw.write(newData);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"yanghengtang"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"yanghengtang"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"yanghengtang"},"content":" System.out.println(\"Error: Unable to save list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":85}},{"path":"src/main/java/duke/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" * Represent a list consisting of Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" this.list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" * Constructs a TaskList with a given ArrayList.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" * @param list The initial list of Task to be stored in the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" public TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" * Returns a string representation of the TaskList with individual Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" * @return The string representation of the list of Task in the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yanghengtang"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yanghengtang"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yanghengtang"},"content":" output +\u003d (i + 1) + \".\"+ list.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yanghengtang"},"content":" return output;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yanghengtang"},"content":" * Add a given Task into the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yanghengtang"},"content":" * @param task The given Task to be added into the TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yanghengtang"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"yanghengtang"},"content":" this.list.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"yanghengtang"},"content":" * Removes a Task of the given index and returns the removed Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"yanghengtang"},"content":" * If given index is out of bound, returns null.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"yanghengtang"},"content":" * @param index The index of Task to be removed.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"yanghengtang"},"content":" * @return The Task object that has been removed from the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"yanghengtang"},"content":" public Task remove(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"yanghengtang"},"content":" if (index \u003c 0 || index \u003e\u003d list.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"yanghengtang"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"yanghengtang"},"content":" return this.list.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"yanghengtang"},"content":" * Update the status of the Task of given index to completed and","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"yanghengtang"},"content":" * returns the Task. If given index is out of bound, returns null.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"yanghengtang"},"content":" * @param index The index of the Task to be marked complete.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"yanghengtang"},"content":" * @return The Task object that has been marked complete.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"yanghengtang"},"content":" public Task mark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"yanghengtang"},"content":" if (index \u003c 0 || index \u003e\u003d list.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"yanghengtang"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"yanghengtang"},"content":" this.list.get(index).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"yanghengtang"},"content":" return this.list.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"yanghengtang"},"content":" * Update the status of the Task of given index to uncompleted and","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"yanghengtang"},"content":" * returns the Task. If given index is out of bound, returns null.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"yanghengtang"},"content":" * @param index The index of the Task to be marked incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"yanghengtang"},"content":" * @return The Task object that has been marked incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"yanghengtang"},"content":" public Task unmark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"yanghengtang"},"content":" if (index \u003c 0 || index \u003e\u003d list.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"yanghengtang"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"yanghengtang"},"content":" this.list.get(index).markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"yanghengtang"},"content":" return this.list.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"yanghengtang"},"content":" * Returns the number of Task in the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"yanghengtang"},"content":" * @return The number of Task in the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"yanghengtang"},"content":" public int size() {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"yanghengtang"},"content":" return this.list.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"yanghengtang"},"content":" public TaskList find(String string) {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"yanghengtang"},"content":" ArrayList\u003cTask\u003e filteredList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"yanghengtang"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"yanghengtang"},"content":" Task task \u003d list.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"yanghengtang"},"content":" if (task.toString().contains(string)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"yanghengtang"},"content":" filteredList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"yanghengtang"},"content":" return new TaskList(filteredList);","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":115}},{"path":"src/main/java/duke/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" * Represents user interface of the chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" private String message;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" private static final String HORIZONTAL_LINE \u003d \"____________________________________________________________\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" public Ui () {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" this.message \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" * Returns the next line of user input from the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" * @return Next line of user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" public String nextCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" if (!scanner.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" return \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" * Prints the entry message of the chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" public void printEntryMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yanghengtang"},"content":" String entryMessage \u003d HORIZONTAL_LINE","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yanghengtang"},"content":" + \"Hello! I\u0027m Chad \\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yanghengtang"},"content":" + \"What can I do for you? \\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yanghengtang"},"content":" + HORIZONTAL_LINE;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yanghengtang"},"content":" System.out.println(entryMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yanghengtang"},"content":" * Prints the exit message of the chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yanghengtang"},"content":" public void addExitMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yanghengtang"},"content":" this.message \u003d \"Bye. Hope to see you again soon!\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"yanghengtang"},"content":" * Prints the current message in the Ui object and clears the message.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"yanghengtang"},"content":" public void printMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"yanghengtang"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"yanghengtang"},"content":" System.out.print(this.message);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"yanghengtang"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"yanghengtang"},"content":" this.message \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"yanghengtang"},"content":" * Adds all the String representation of Tasks in a given TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"yanghengtang"},"content":" public void addTaskList(TaskList taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d taskList.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"yanghengtang"},"content":" * Adds a message to indicate that a given task has been successfully added.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"yanghengtang"},"content":" public void addAddMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d \"Got it. I\u0027ve added this task:\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"yanghengtang"},"content":" * Adds a message to indicate that a given task has been successfully deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"yanghengtang"},"content":" public void addDeleteMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d \"Noted. I\u0027ve removed this task:\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"yanghengtang"},"content":" * Adds a message to indicate that a given task has been successfully marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"yanghengtang"},"content":" public void addMarkMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d \"Nice! I\u0027ve marked this task as done:\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"yanghengtang"},"content":" * Adds a message to indicate that a given task has been successfully unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"yanghengtang"},"content":" public void addUnmarkMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d \"OK, I\u0027ve marked this task as not done yet:\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"yanghengtang"},"content":" * Add the error message from a given Exeception.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"yanghengtang"},"content":" * @param e The Exception thrown from the execution of a method.","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"yanghengtang"},"content":" public void addErrorMessage(Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d \"Oops! we encountered an error\\n\" + e.getMessage() + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"yanghengtang"},"content":" * Adds the error message when the parser cannot find a matching command.","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"yanghengtang"},"content":" public void addCommandNotFound() {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d \"Oops! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"yanghengtang"},"content":" * Adds the message to indicate the find query is successful.","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"yanghengtang"},"content":" public void addFindMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"yanghengtang"},"content":" * Adds the String representation of the given Task into the message.","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"yanghengtang"},"content":" * @param task The given Task to be added into the message of the UI.","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"yanghengtang"},"content":" public void addTaskMessage(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d task.toString() + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"yanghengtang"},"content":" * Adds the message indicating the size of the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"yanghengtang"},"content":" public void addTaskListSizeMessage(TaskList taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d \"Now you have \" + taskList.size() + \" tasks in the list.\" + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":137}},{"path":"src/test/java/duke/util/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.task.DeadlineException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" public void parseLoadDeadlineTest_standardInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" String input \u003d \"D | 0 | return book | 2023-09-11\";","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" Deadline deadline \u003d new Deadline(\"return book\", LocalDate.parse(\"2023-09-11\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" Assertions.assertEquals(Parser.parseLoadDeadline(input).toString(), deadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" public void parseUserDeadlineTest_missingByDate() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" String input \u003d \"deadline return book\";","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" Parser.parseUserDeadline(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" } catch (DeadlineException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" Assertions.assertEquals(e.getMessage(), new DeadlineException().getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":31}},{"path":"src/test/java/duke/util/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" public void removeTest_invalidIndex() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" Assertions.assertEquals(taskList.remove(1), null);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" public void markTest_invalidIndex() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" Assertions.assertEquals(taskList.mark(1), null);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"unmark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yanghengtang":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"yanghengtang":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"yanghengtang":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"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":"yanghengtang"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"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":"yanghengtang"},"content":" archiveFileName \u003d \"duke.jar\"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"yanghengtang"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"yanghengtang"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"yanghengtang":7,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"D | 0 | return book | 2023-09-11","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"E | 0 | project meeting | 2023-09-11 | 2023-09-11","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"T | 1 | join sports club","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"yanghengtang":4}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.task.TaskException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" * Represents a Task Management Chat Bot.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" * Constructor for Duke class.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" * @param filePath The given file path to the data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" this.taskList \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" * Runs the program.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" this.ui.printEntryMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yanghengtang"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"yanghengtang"},"content":" String fullCommand \u003d ui.nextCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yanghengtang"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yanghengtang"},"content":" c.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yanghengtang"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yanghengtang"},"content":" } catch (TaskException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"yanghengtang"},"content":" ui.addErrorMessage(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"yanghengtang"},"content":" } finally {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"yanghengtang"},"content":" ui.printMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"yanghengtang"},"content":" };","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"yanghengtang"},"content":" * The main entry point for Duke.","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"yanghengtang"},"content":" * @param args The given String array.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"yanghengtang"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"yanghengtang"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":56,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"yanghengtang":54,"-":3}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" * Represents a Add Command to be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" private Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" * Constructor for AddCommand class.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" * @param task The given Task to be added to a TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" super(false);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" * Executes the list of commands to add a Task from a TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList with the Task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui to show the status of the adding command.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage that saves the TaskList locally.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" taskList.add(this.task);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":" ui.addAddMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskMessage(this.task);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskListSizeMessage(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":38}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" * Represents commands to be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" private boolean exit;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" public Command(boolean exit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" this.exit \u003d exit;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" * Executes the list of commands associated with the Command object.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList required for execution of some commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui required for execution of some commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage required for execution of some commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" * Returns a boolean value to indicate if Command object is an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" * @return True if the Command object is an ExitCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" return this.exit;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":34}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" * Represents a Delete command to be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" * Constructor for DeleteCommand class.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" * @param index The TaskList index of the Task to be deleted.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" super(false);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" * Executes the list of commands to delete a Task from a TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList with the Task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui to show the status of the deletion command.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage that saves the TaskList locally.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" Task task \u003d taskList.remove(this.index);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":" ui.addDeleteMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskMessage(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskListSizeMessage(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":38}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" * Represents an Exit command to be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" public ExitCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" super(true);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" * Executes the list of commands to exit the chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList associated with the chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui to show the status of the exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage that saves the TaskList locally.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" storage.save(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" ui.addExitMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":27}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" * Represents a Find command to be executed.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" private String queryString;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" * Constructor for Find Command.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" * @param queryString The given String to be searched on a TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" public FindCommand(String queryString) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" super(false);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" this.queryString \u003d queryString;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" * Executes the list of commands to find a Task from a TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList to be searched on.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui to show the status of the finding of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage that saves the TaskList locally.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" TaskList filteredTaskList \u003d taskList.find(this.queryString);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" ui.addFindMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskList(filteredTaskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"yanghengtang":36}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" * Represents a Mark command to be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" * Constructor for MarkCommand class.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" * @param index The TaskList index of the Task to be marked.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" super(false);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" * Executes the list of commands to mark a Task from a TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList with the Task to be marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui to show the status of the marking of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage that saves the TaskList locally.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" Task task \u003d taskList.mark(this.index);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":" ui.addMarkMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskMessage(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskListSizeMessage(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":38}},{"path":"src/main/java/duke/command/PrintListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" * Represents a Print List command to be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"public class PrintListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" public PrintListCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" super(false);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" * Executes the list of commands to print the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui to print the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage that saves the TaskList locally.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskList(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":26}},{"path":"src/main/java/duke/command/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" * Represents an unknown command.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"public class UnknownCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" public UnknownCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" super(false);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" * Prints the error message indicating an unknown command has been entered.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList associated with the chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui used to print the error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage that saves the TaskList locally.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" ui.addCommandNotFound();","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":26}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" * Represents an unmark command to be executed.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" * Constructor for UnmarkCommand class.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" * @param index The TaskList index of the Task to be unmarked.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" super(false);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" * Executes the list of commands to unmark a Task from a TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList with the Task to be unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" * @param ui The given Ui to show the status of the unmarking of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" * @param storage The given Storage that saves the TaskList locally.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" Task task \u003d taskList.unmark(this.index);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":" ui.addUnmarkMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskMessage(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yanghengtang"},"content":" ui.addTaskListSizeMessage(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":38}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":" * Represents a task with a given deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" protected LocalDate byDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" * Constructor for Deadline class.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" * @param description The given description for the deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" * @param byDate The given deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" public Deadline(String description, LocalDate byDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" this.byDate \u003d byDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" * Returns a string representation of the Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" * @return String representation of the Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" String status \u003d \"[\" + (super.isDone ? \"X\" : \" \") + \"]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" String deadline \u003d \"(by: \" + this.byDate + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" return \"[D]\" + status + \" \" + super.description + \" \" + deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yanghengtang":33}},{"path":"src/main/java/duke/task/DeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":" * Represents an error that occurred during the initialisation of a Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"public class DeadlineException extends TaskException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" public DeadlineException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" super(\"Valid Format: deadline (description) /by (YYYY-MM-DD)\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yanghengtang":12}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":" * Represents an event with a given start and end date.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" protected LocalDate fromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" protected LocalDate toDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" * Constructor for Event class.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" * @param description The description for the Event.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" * @param fromDate The start date for the Event.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" * @param toDate The end date for the Event.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" public Event(String description, LocalDate fromDate, LocalDate toDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" this.fromDate \u003d fromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" this.toDate \u003d toDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" * Returns a string representation of the Event object.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" * @return String representation of the Event object.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" String status \u003d \"[\" + (this.isDone ? \"X\" : \" \") + \"]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" String duration \u003d \"(from: \" + this.fromDate + \" to: \" + this.toDate + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" return \"[E]\" + status + \" \" + this.description + \" \" + duration;","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yanghengtang":35}},{"path":"src/main/java/duke/task/EventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":" * Represents an error that occurred during the initialisation of a Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"public class EventException extends TaskException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" public EventException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" super(\"event (description) /from (YYYY-MM-DD) /to (YYYY-MM-DD)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yanghengtang":11}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":" * Represents a task with status indicating its completeness","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" * Constructor for Task class.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" * @param description The given description for the Task.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" * @return String representation of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" String status \u003d \"[\" + (this.isDone ? \"X\" : \" \") + \"]\";","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" return status + \" \" + this.description;","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" * Updates the task status to \u0027completed\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yanghengtang"},"content":" * Updates the task status to \u0027uncompleted\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yanghengtang"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"yanghengtang"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"yanghengtang":44}},{"path":"src/main/java/duke/task/TaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":" * Represents an error that occurred during the initialisation of a Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"public class TaskException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" public TaskException(String format) {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" super(\"Oops! Invalid input for your task.\\nValid Format: \" + format);","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yanghengtang":11}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":" * Represents a task that is to be done.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" * Returns a string representation of the ToDo object.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" * @return String representation of the ToDo object.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" String status \u003d \"[\" + (super.isDone ? \"X\" : \" \") + \"]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" return \"[T]\" + status + \" \" + super.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yanghengtang":21}},{"path":"src/main/java/duke/task/ToDoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":" * Represents an error that occurred during the initialisation of a Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"public class ToDoException extends TaskException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" public ToDoException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" super(\"todo (description)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yanghengtang":11}},{"path":"src/main/java/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"import duke.command.PrintListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":"import duke.command.UnknownCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":"import duke.task.DeadlineException;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":"import duke.task.EventException;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":"import duke.task.TaskException;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":"import duke.task.ToDoException;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" * Converts a given String into Tasks and Commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" * Returns a Command with the given instructions.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" * @param input The given instruction to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" * @return Command object that correspond to the given instruction.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" * @throws TaskException if given input is in the wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" public static Command parse(String input) throws TaskException {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":" if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" return new PrintListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yanghengtang"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yanghengtang"},"content":" return new MarkCommand(Parser.parseUserMark(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yanghengtang"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yanghengtang"},"content":" return new UnmarkCommand(Parser.parseUserUnmark(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yanghengtang"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yanghengtang"},"content":" return new DeleteCommand(Parser.parseUserDelete(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yanghengtang"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yanghengtang"},"content":" String queryString \u003d Parser.parseUserFind(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yanghengtang"},"content":" return new FindCommand(queryString);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yanghengtang"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"yanghengtang"},"content":" Deadline deadline \u003d Parser.parseUserDeadline(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"yanghengtang"},"content":" return new AddCommand(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"yanghengtang"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"yanghengtang"},"content":" Event event \u003d Parser.parseUserEvent(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"yanghengtang"},"content":" return new AddCommand(event);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"yanghengtang"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"yanghengtang"},"content":" ToDo todo \u003d Parser.parseUserToDo(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"yanghengtang"},"content":" return new AddCommand(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"yanghengtang"},"content":" } else if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"yanghengtang"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"yanghengtang"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"yanghengtang"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"yanghengtang"},"content":" * Returns a Deadline object based on the information from the local file.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"yanghengtang"},"content":" * @param input The given information from local file.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"yanghengtang"},"content":" * @return Deadline object that correspond to the information given.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"yanghengtang"},"content":" public static Deadline parseLoadDeadline(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"yanghengtang"},"content":" int byIndex \u003d input.indexOf(\u0027|\u0027, 7);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"yanghengtang"},"content":" String description \u003d input.substring(8, byIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"yanghengtang"},"content":" String by \u003d input.substring(byIndex + 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"yanghengtang"},"content":" LocalDate byDate \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"yanghengtang"},"content":" Deadline deadline \u003d new Deadline(description, byDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"yanghengtang"},"content":" if (input.charAt(4) \u003d\u003d \u00271\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"yanghengtang"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"yanghengtang"},"content":" return deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"yanghengtang"},"content":" * Returns a Event object based on the information from the local file.","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"yanghengtang"},"content":" * @param input The given information from local file.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"yanghengtang"},"content":" * @return Event object that correspond to the information given.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"yanghengtang"},"content":" public static Event parseLoadEvent(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"yanghengtang"},"content":" int fromIndex \u003d input.indexOf(\u0027|\u0027, 7);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"yanghengtang"},"content":" int toIndex \u003d input.indexOf(\u0027|\u0027, fromIndex + 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"yanghengtang"},"content":" String description \u003d input.substring(8, fromIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"yanghengtang"},"content":" String from \u003d input.substring(fromIndex + 2, toIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"yanghengtang"},"content":" String to \u003d input.substring(toIndex + 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"yanghengtang"},"content":" LocalDate fromDate \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"yanghengtang"},"content":" LocalDate toDate \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"yanghengtang"},"content":" Event event \u003d new Event(description, fromDate, toDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"yanghengtang"},"content":" if (input.charAt(4) \u003d\u003d \u00271\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"yanghengtang"},"content":" event.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"yanghengtang"},"content":" return event;","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"yanghengtang"},"content":" * Returns a ToDo object based on the information from the local file.","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"yanghengtang"},"content":" * @param input The given information from local file.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"yanghengtang"},"content":" * @return ToDo object that correspond to the information given.","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"yanghengtang"},"content":" public static ToDo parseLoadToDo(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"yanghengtang"},"content":" String description \u003d input.substring(8);","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"yanghengtang"},"content":" ToDo todo \u003d new ToDo(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"yanghengtang"},"content":" if (input.charAt(4) \u003d\u003d \u00271\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"yanghengtang"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"yanghengtang"},"content":" return todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"yanghengtang"},"content":" * Returns a Deadline object based on the user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"yanghengtang"},"content":" * @param input The user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"yanghengtang"},"content":" * @return Deadline object that corresponds to the user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"yanghengtang"},"content":" * @throws DeadlineException if given input is missing information or in wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"yanghengtang"},"content":" public static Deadline parseUserDeadline(String input) throws DeadlineException {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"yanghengtang"},"content":" int byIndex \u003d input.indexOf(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"yanghengtang"},"content":" if (input.length() \u003c\u003d 9) {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"yanghengtang"},"content":" throw new DeadlineException();","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"yanghengtang"},"content":" } else if (byIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"yanghengtang"},"content":" throw new DeadlineException();","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"yanghengtang"},"content":" String description \u003d input.substring(9, byIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"yanghengtang"},"content":" String by \u003d input.substring(byIndex + 4);","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"yanghengtang"},"content":" LocalDate byDate \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"yanghengtang"},"content":" Deadline deadline \u003d new Deadline(description, byDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"yanghengtang"},"content":" return deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"yanghengtang"},"content":" * Returns a Event object based on the user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"yanghengtang"},"content":" * @param input The user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"yanghengtang"},"content":" * @return Event object that corresponds to the user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"yanghengtang"},"content":" * @throws EventException if given input is missing information or in wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"yanghengtang"},"content":" public static Event parseUserEvent(String input) throws EventException {","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"yanghengtang"},"content":" int fromIndex \u003d input.indexOf(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"yanghengtang"},"content":" int toIndex \u003d input.indexOf(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"yanghengtang"},"content":" if (input.length() \u003c\u003d 6) {","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"yanghengtang"},"content":" throw new EventException();","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"yanghengtang"},"content":" } else if (fromIndex \u003d\u003d -1 || toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"yanghengtang"},"content":" throw new EventException();","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"yanghengtang"},"content":" } else if (fromIndex \u003e toIndex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"yanghengtang"},"content":" throw new EventException();","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"yanghengtang"},"content":" String description \u003d input.substring(6, fromIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"yanghengtang"},"content":" String from \u003d input.substring(fromIndex + 6, toIndex - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"yanghengtang"},"content":" String to \u003d input.substring(toIndex + 4);","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"yanghengtang"},"content":" LocalDate fromDate \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"yanghengtang"},"content":" LocalDate toDate \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"yanghengtang"},"content":" Event event \u003d new Event(description, fromDate, toDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"yanghengtang"},"content":" return event;","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"yanghengtang"},"content":" * Returns a ToDo object based on the user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"yanghengtang"},"content":" * @param input The user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"yanghengtang"},"content":" * @return ToDo object that corresponds to the user given input.","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"yanghengtang"},"content":" * @throws ToDoException if given input is missing information or in wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"yanghengtang"},"content":" public static ToDo parseUserToDo(String input) throws ToDoException {","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"yanghengtang"},"content":" if (input.length() \u003c\u003d 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"yanghengtang"},"content":" throw new ToDoException();","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"yanghengtang"},"content":" ToDo todo \u003d new ToDo(input.substring(5));","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"yanghengtang"},"content":" return todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"yanghengtang"},"content":" * Returns the index of the Task to be mark based on user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"yanghengtang"},"content":" * @param input The given user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"yanghengtang"},"content":" * @return The index of the Task the user wishes to mark.","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"yanghengtang"},"content":" * @throws TaskException if given input is missing information or in wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"yanghengtang"},"content":" public static int parseUserMark(String input) throws TaskException {","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"yanghengtang"},"content":" int index \u003d Integer.valueOf(input.substring(5)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"yanghengtang"},"content":" if (input.length() \u003c\u003d 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"yanghengtang"},"content":" throw new TaskException(\"mark (task number)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"yanghengtang"},"content":" return index;","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"yanghengtang"},"content":" * Returns the index of Task to be unmark based on user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"yanghengtang"},"content":" * @param input The given user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"yanghengtang"},"content":" * @return The index of the Task the user wishes to unmark.","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"yanghengtang"},"content":" * @throws TaskException if given input is missing information or in wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"yanghengtang"},"content":" public static int parseUserUnmark(String input) throws TaskException {","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"yanghengtang"},"content":" int index \u003d Integer.valueOf(input.substring(7)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"yanghengtang"},"content":" if (input.length() \u003c\u003d 7) {","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"yanghengtang"},"content":" throw new TaskException(\"unmark (task number)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"yanghengtang"},"content":" return index;","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"yanghengtang"},"content":" * Returns the index of the Task to be deleted based on user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"yanghengtang"},"content":" * @param input The given user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"yanghengtang"},"content":" * @return The index of the Task the user wishes to delete.","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"yanghengtang"},"content":" * @throws TaskException if given input is missing information or in wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"yanghengtang"},"content":" public static int parseUserDelete(String input) throws TaskException {","lastModifiedDate":"2023-08-30"},{"lineNumber":240,"author":{"gitId":"yanghengtang"},"content":" int index \u003d Integer.valueOf(input.substring(7)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"yanghengtang"},"content":" if (input.length() \u003c\u003d 7) {","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"yanghengtang"},"content":" throw new TaskException(\"delete (task number)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"yanghengtang"},"content":" return index;","lastModifiedDate":"2023-08-30"},{"lineNumber":247,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":248,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":250,"author":{"gitId":"yanghengtang"},"content":" * Returns the query string to be searched based on user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":251,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":252,"author":{"gitId":"yanghengtang"},"content":" * @param input The given user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":253,"author":{"gitId":"yanghengtang"},"content":" * @return The string the users wishes to search.","lastModifiedDate":"2023-09-01"},{"lineNumber":254,"author":{"gitId":"yanghengtang"},"content":" * @throws TaskException if given input is missing information or in wrong format.","lastModifiedDate":"2023-09-01"},{"lineNumber":255,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":256,"author":{"gitId":"yanghengtang"},"content":" public static String parseUserFind(String input) throws TaskException {","lastModifiedDate":"2023-08-31"},{"lineNumber":257,"author":{"gitId":"yanghengtang"},"content":" if (input.length() \u003c\u003d 5) {","lastModifiedDate":"2023-08-31"},{"lineNumber":258,"author":{"gitId":"yanghengtang"},"content":" throw new TaskException(\"find (query string)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":259,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":260,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":261,"author":{"gitId":"yanghengtang"},"content":" return input.substring(5);","lastModifiedDate":"2023-08-31"},{"lineNumber":262,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":263,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":264,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":265,"author":{"gitId":"yanghengtang"},"content":" * Returns the String of the given TaskList in the data file format.","lastModifiedDate":"2023-09-01"},{"lineNumber":266,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":267,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList to be parsed into data.","lastModifiedDate":"2023-09-01"},{"lineNumber":268,"author":{"gitId":"yanghengtang"},"content":" * @return The String of the given TaskList in the data file format.","lastModifiedDate":"2023-09-01"},{"lineNumber":269,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":270,"author":{"gitId":"yanghengtang"},"content":" public static String parseTaskListToData(TaskList taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":271,"author":{"gitId":"yanghengtang"},"content":" String input \u003d taskList.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":272,"author":{"gitId":"yanghengtang"},"content":" String newData \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":273,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":274,"author":{"gitId":"yanghengtang"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":275,"author":{"gitId":"yanghengtang"},"content":" int startIndex \u003d input.indexOf((i + 1) + \".\");","lastModifiedDate":"2023-09-01"},{"lineNumber":276,"author":{"gitId":"yanghengtang"},"content":" int endIndex \u003d input.indexOf(\"\\n\", startIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":277,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":278,"author":{"gitId":"yanghengtang"},"content":" String subInput \u003d input.substring(startIndex + 2, endIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":279,"author":{"gitId":"yanghengtang"},"content":" String taskType \u003d String.valueOf(subInput.charAt(1));","lastModifiedDate":"2023-09-01"},{"lineNumber":280,"author":{"gitId":"yanghengtang"},"content":" String status \u003d subInput.charAt(4) \u003d\u003d \u0027X\u0027 ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":281,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":282,"author":{"gitId":"yanghengtang"},"content":" newData +\u003d taskType + \" | \" + status + \" | \";","lastModifiedDate":"2023-09-01"},{"lineNumber":283,"author":{"gitId":"yanghengtang"},"content":" if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":284,"author":{"gitId":"yanghengtang"},"content":" int byIndex \u003d subInput.indexOf(\"(by:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":285,"author":{"gitId":"yanghengtang"},"content":" int subEndIndex \u003d subInput.indexOf(\")\");","lastModifiedDate":"2023-09-01"},{"lineNumber":286,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":287,"author":{"gitId":"yanghengtang"},"content":" String description \u003d subInput.substring(7, byIndex - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":288,"author":{"gitId":"yanghengtang"},"content":" String by \u003d subInput.substring(byIndex + 5, subEndIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":289,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":290,"author":{"gitId":"yanghengtang"},"content":" newData +\u003d description + \" | \" + by;","lastModifiedDate":"2023-09-01"},{"lineNumber":291,"author":{"gitId":"yanghengtang"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":292,"author":{"gitId":"yanghengtang"},"content":" int fromIndex \u003d subInput.indexOf(\"(from:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":293,"author":{"gitId":"yanghengtang"},"content":" int toIndex \u003d subInput.indexOf(\"to:\", fromIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":294,"author":{"gitId":"yanghengtang"},"content":" int subEndIndex \u003d subInput.indexOf(\")\");","lastModifiedDate":"2023-09-01"},{"lineNumber":295,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":296,"author":{"gitId":"yanghengtang"},"content":" String description \u003d subInput.substring(7, fromIndex - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":297,"author":{"gitId":"yanghengtang"},"content":" String from \u003d subInput.substring(fromIndex + 7, toIndex - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":298,"author":{"gitId":"yanghengtang"},"content":" String to \u003d subInput.substring(toIndex + 4, subEndIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":299,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":300,"author":{"gitId":"yanghengtang"},"content":" newData +\u003d description + \" | \" + from + \" | \" + to;","lastModifiedDate":"2023-09-01"},{"lineNumber":301,"author":{"gitId":"yanghengtang"},"content":" } else if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":302,"author":{"gitId":"yanghengtang"},"content":" String description \u003d subInput.substring(7);","lastModifiedDate":"2023-09-01"},{"lineNumber":303,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":304,"author":{"gitId":"yanghengtang"},"content":" newData +\u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":305,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":306,"author":{"gitId":"yanghengtang"},"content":" newData +\u003d System.lineSeparator();","lastModifiedDate":"2023-09-01"},{"lineNumber":307,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":308,"author":{"gitId":"yanghengtang"},"content":" return newData;","lastModifiedDate":"2023-09-01"},{"lineNumber":309,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":310,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":310}},{"path":"src/main/java/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" * Represents a storage for the list of Tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" private File file;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" * Constructor for Storage object.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" * @param path The given path to the data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" public Storage(String path) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" this.file \u003d new File(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" if (!this.file.getParentFile().exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" this.file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" if (!this.file.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" this.file.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" System.out.println(\"Error: Unable to create local file\");","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"yanghengtang"},"content":" * Returns an ArrayList of Tasks from local data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"yanghengtang"},"content":" * @return ArrayList consisting of Task read from the data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yanghengtang"},"content":" public ArrayList\u003cTask\u003e load() {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"yanghengtang"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"yanghengtang"},"content":" Scanner sc \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yanghengtang"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"yanghengtang"},"content":" sc \u003d new Scanner(this.file);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"yanghengtang"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"yanghengtang"},"content":" System.out.println(\"Error: Unable to load local file\");","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"yanghengtang"},"content":" while (sc !\u003d null \u0026\u0026 sc.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"yanghengtang"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"yanghengtang"},"content":" if (input.charAt(0) \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"yanghengtang"},"content":" Deadline deadline \u003d Parser.parseLoadDeadline(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"yanghengtang"},"content":" list.add(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"yanghengtang"},"content":" } else if (input.charAt(0) \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"yanghengtang"},"content":" Event event \u003d Parser.parseLoadEvent(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"yanghengtang"},"content":" list.add(event);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"yanghengtang"},"content":" } else if (input.charAt(0) \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"yanghengtang"},"content":" ToDo todo \u003d Parser.parseLoadToDo(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"yanghengtang"},"content":" list.add(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"yanghengtang"},"content":" return list;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"yanghengtang"},"content":" * Save the given TaskList into a local data file.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList to be saved locally.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"yanghengtang"},"content":" public void save(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"yanghengtang"},"content":" String newData \u003d Parser.parseTaskListToData(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"yanghengtang"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"yanghengtang"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"yanghengtang"},"content":" fw.write(newData);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"yanghengtang"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"yanghengtang"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"yanghengtang"},"content":" System.out.println(\"Error: Unable to save list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":90}},{"path":"src/main/java/duke/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" * Represent a list consisting of Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" this.list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" * Constructs a TaskList with a given ArrayList.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" * @param list The initial list of Task to be stored in the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" public TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" * Returns a string representation of the TaskList with individual Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" * @return The string representation of the list of Task in the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"yanghengtang"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"yanghengtang"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"yanghengtang"},"content":" output +\u003d (i + 1) + \".\" + list.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yanghengtang"},"content":" return output;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"yanghengtang"},"content":" * Add a given Task into the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"yanghengtang"},"content":" * @param task The given Task to be added into the TaskList","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yanghengtang"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"yanghengtang"},"content":" this.list.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"yanghengtang"},"content":" * Removes a Task of the given index and returns the removed Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"yanghengtang"},"content":" * If given index is out of bound, returns null.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"yanghengtang"},"content":" * @param index The index of Task to be removed.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"yanghengtang"},"content":" * @return The Task object that has been removed from the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"yanghengtang"},"content":" public Task remove(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"yanghengtang"},"content":" if (index \u003c 0 || index \u003e\u003d list.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"yanghengtang"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"yanghengtang"},"content":" return this.list.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"yanghengtang"},"content":" * Update the status of the Task of given index to completed and","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"yanghengtang"},"content":" * returns the Task. If given index is out of bound, returns null.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"yanghengtang"},"content":" * @param index The index of the Task to be marked complete.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"yanghengtang"},"content":" * @return The Task object that has been marked complete.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"yanghengtang"},"content":" public Task mark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"yanghengtang"},"content":" if (index \u003c 0 || index \u003e\u003d list.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"yanghengtang"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"yanghengtang"},"content":" this.list.get(index).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"yanghengtang"},"content":" return this.list.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"yanghengtang"},"content":" * Update the status of the Task of given index to uncompleted and","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"yanghengtang"},"content":" * returns the Task. If given index is out of bound, returns null.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"yanghengtang"},"content":" * @param index The index of the Task to be marked incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"yanghengtang"},"content":" * @return The Task object that has been marked incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"yanghengtang"},"content":" public Task unmark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"yanghengtang"},"content":" if (index \u003c 0 || index \u003e\u003d list.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"yanghengtang"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"yanghengtang"},"content":" this.list.get(index).markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"yanghengtang"},"content":" return this.list.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"yanghengtang"},"content":" * Returns the number of Task in the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"yanghengtang"},"content":" * @return The number of Task in the TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"yanghengtang"},"content":" public int size() {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"yanghengtang"},"content":" return this.list.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"yanghengtang"},"content":" * Returns a list of Task with matching description as the given string.","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"yanghengtang"},"content":" * @param string The given String to be searched on the TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"yanghengtang"},"content":" * @return TaskList with Task of matching descriptions.","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"yanghengtang"},"content":" public TaskList find(String string) {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"yanghengtang"},"content":" ArrayList\u003cTask\u003e filteredList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"yanghengtang"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"yanghengtang"},"content":" Task task \u003d list.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"yanghengtang"},"content":" if (task.toString().contains(string)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"yanghengtang"},"content":" filteredList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"yanghengtang"},"content":" return new TaskList(filteredList);","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":121}},{"path":"src/main/java/duke/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":" * Represents user interface of the chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" private static final String HORIZONTAL_LINE \u003d \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" private String message;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" * Constructor for UI class.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":" this.message \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" * Returns the next line of user input from the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" * @return Next line of user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" public String nextCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" if (!scanner.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" return \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"yanghengtang"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yanghengtang"},"content":" * Prints the entry message of the chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yanghengtang"},"content":" public void printEntryMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"yanghengtang"},"content":" String entryMessage \u003d HORIZONTAL_LINE","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"yanghengtang"},"content":" + \"Hello! I\u0027m Chad \\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"yanghengtang"},"content":" + \"What can I do for you? \\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"yanghengtang"},"content":" + HORIZONTAL_LINE;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"yanghengtang"},"content":" System.out.println(entryMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"yanghengtang"},"content":" * Prints the exit message of the chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"yanghengtang"},"content":" public void addExitMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yanghengtang"},"content":" this.message \u003d \"Bye. Hope to see you again soon!\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"yanghengtang"},"content":" * Prints the current message in the Ui object and clears the message.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"yanghengtang"},"content":" public void printMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"yanghengtang"},"content":" System.out.print(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"yanghengtang"},"content":" System.out.print(this.message);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"yanghengtang"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"yanghengtang"},"content":" this.message \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"yanghengtang"},"content":" * Adds all the String representation of Tasks in a given TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"yanghengtang"},"content":" public void addTaskList(TaskList taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d taskList.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"yanghengtang"},"content":" * Adds a message to indicate that a given task has been successfully added.","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"yanghengtang"},"content":" public void addAddMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d \"Got it. I\u0027ve added this task:\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"yanghengtang"},"content":" * Adds a message to indicate that a given task has been successfully deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"yanghengtang"},"content":" public void addDeleteMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d \"Noted. I\u0027ve removed this task:\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"yanghengtang"},"content":" * Adds a message to indicate that a given task has been successfully marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"yanghengtang"},"content":" public void addMarkMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d \"Nice! I\u0027ve marked this task as done:\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"yanghengtang"},"content":" * Adds a message to indicate that a given task has been successfully unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"yanghengtang"},"content":" public void addUnmarkMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d \"OK, I\u0027ve marked this task as not done yet:\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"yanghengtang"},"content":" * Add the error message from a given Exeception.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"yanghengtang"},"content":" * @param e The Exception thrown from the execution of a method.","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"yanghengtang"},"content":" public void addErrorMessage(Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d \"Oops! we encountered an error\\n\" + e.getMessage() + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"yanghengtang"},"content":" * Adds the error message when the parser cannot find a matching command.","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"yanghengtang"},"content":" public void addCommandNotFound() {","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d \"Oops! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"yanghengtang"},"content":" * Adds the message to indicate the find query is successful.","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"yanghengtang"},"content":" public void addFindMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"yanghengtang"},"content":" * Adds the String representation of the given Task into the message.","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"yanghengtang"},"content":" * @param task The given Task to be added into the message of the UI.","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"yanghengtang"},"content":" public void addTaskMessage(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d task.toString() + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"yanghengtang"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"yanghengtang"},"content":" * Adds the message indicating the size of the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"yanghengtang"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"yanghengtang"},"content":" * @param taskList The given TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"yanghengtang"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"yanghengtang"},"content":" public void addTaskListSizeMessage(TaskList taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"yanghengtang"},"content":" this.message +\u003d \"Now you have \" + taskList.size() + \" tasks in the list.\" + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":140}},{"path":"src/test/java/duke/util/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import duke.task.DeadlineException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" public void parseLoadDeadlineTest_standardInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" String input \u003d \"D | 0 | return book | 2023-09-11\";","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" Deadline deadline \u003d new Deadline(\"return book\", LocalDate.parse(\"2023-09-11\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" Assertions.assertEquals(Parser.parseLoadDeadline(input).toString(), deadline.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"yanghengtang"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"yanghengtang"},"content":" public void parseUserDeadlineTest_missingByDate() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"yanghengtang"},"content":" String input \u003d \"deadline return book\";","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"yanghengtang"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"yanghengtang"},"content":" Parser.parseUserDeadline(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"yanghengtang"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"yanghengtang"},"content":" } catch (DeadlineException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"yanghengtang"},"content":" Assertions.assertEquals(e.getMessage(), new DeadlineException().getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":31}},{"path":"src/test/java/duke/util/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"yanghengtang"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"yanghengtang"},"content":" public void removeTest_invalidIndex() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"yanghengtang"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"yanghengtang"},"content":" Assertions.assertEquals(taskList.remove(1), null);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"yanghengtang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"yanghengtang"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"yanghengtang"},"content":" public void markTest_invalidIndex() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"yanghengtang"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":" Assertions.assertEquals(taskList.mark(1), null);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"yanghengtang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"yanghengtang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"yanghengtang":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yanghengtang"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"yanghengtang"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"yanghengtang"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yanghengtang"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"yanghengtang"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yanghengtang"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yanghengtang"},"content":"unmark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yanghengtang"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yanghengtang":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"yanghengtang"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"yanghengtang":1,"-":20}}] diff --git a/yanghengtang_ip_master/commits.json b/yanghengtang_ip_master/commits.json index a5e423cc..88e37d4a 100644 --- a/yanghengtang_ip_master/commits.json +++ b/yanghengtang_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"yanghengtang":[{"date":"2023-08-23","commitResults":[{"hash":"20327e71b207efe08c151112b8bcbb38c2ac7ad7","isMergeCommit":false,"messageTitle":"Implement initial skeletal version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"6754bdb695a6a302631fdc6632636c23b68130f7","isMergeCommit":false,"messageTitle":"Implement Echo functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"f8d2529cc061b3c6e60be0bda9a0a88c72ec5567","isMergeCommit":false,"messageTitle":"Implement Add, List functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"8538f65f679f5d9e7b54848e026e17ae02f24731","isMergeCommit":false,"messageTitle":"Add Task.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"b6d19c4af013b59eaea2d07c9bcf70e94a8b129a","isMergeCommit":false,"messageTitle":"Update Duke.java to use Task class","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":3}}}]},{"date":"2023-08-24","commitResults":[{"hash":"57f4473a1721cf95b1740b85d05c558b2de190f0","isMergeCommit":false,"messageTitle":"Fix List output format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"9218d109b24b6f2fe381404c80c62ea247241f59","isMergeCommit":false,"messageTitle":"Add Deadline.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"0ebec01bef06324c7402b8286269e19d7fe6c2a1","isMergeCommit":false,"messageTitle":"Add Event.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"5b3bc2f71f48e0d6a77b4ca9b99de8d6c3596be8","isMergeCommit":false,"messageTitle":"Add ToDo.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"210ad0fbb6ddb5164a7c8319572c377645c28f66","isMergeCommit":false,"messageTitle":"Update Duke.java to handle ToDo, Event, Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":0}}},{"hash":"140e1ce225ce95d0988a993e5030eb4e1d745ed4","isMergeCommit":false,"messageTitle":"Fix Duke.java Scanner bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":9}}},{"hash":"9f866c821f32ff3678e26144fe8fe8c9dc1fca58","isMergeCommit":false,"messageTitle":"Fix Duke exit message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"601d921516c073a72b1720fe0a34ff169934d541","isMergeCommit":false,"messageTitle":"Add test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"cbd8222e7f0a502daa90b65913ecf531b3352438","isMergeCommit":false,"messageTitle":"Add error handling for invalid action input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"054c80756c3c81f5ec60be50ecc795b9179795b8","isMergeCommit":false,"messageTitle":"Add error handling for adding ToDo task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":7}}},{"hash":"9b9482101c67974b0a7377e1ea1ee2a1f73208cb","isMergeCommit":false,"messageTitle":"Add error handling for adding Event task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":11}}},{"hash":"853d0076a24c98420002ff3654003aa03bab91dd","isMergeCommit":false,"messageTitle":"Fix task counter bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"6f77c95dc24caf8bf4106b451d5f01cd791629c8","isMergeCommit":false,"messageTitle":"Add error handling for adding Deadline task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":9}}},{"hash":"deecb0642bf4a49e861906d17269b94a7e73ad38","isMergeCommit":false,"messageTitle":"Add error handling for Mark and Unmark action","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":12}}},{"hash":"e29f60fbf2320b3ea2d07bc38194c875170c12f0","isMergeCommit":false,"messageTitle":"Update error messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"2abd8682fed83709edf5b781b0442d120dc565f1","isMergeCommit":false,"messageTitle":"Update parsing of string of Event and Deadline task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"0b9e85ebf5a2e40102068b4309ef5c147c256e86","isMergeCommit":false,"messageTitle":"Update error messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"787d474528d64fde92d6cc446948e7f0f697312e","isMergeCommit":false,"messageTitle":"Add Delete functionality for List","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"6f12dc7b445104c2908d73341639e3bb6d7a4ff4","isMergeCommit":false,"messageTitle":"Refactor Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":95,"deletions":65}}},{"hash":"4ebba5c116a607019c4164109be051d7555e77b6","isMergeCommit":false,"messageTitle":"Add DeadlineException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"80869f804c3db3eda285691b18d7034d4c763885","isMergeCommit":false,"messageTitle":"Add EventException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"9b06ce8efeb962640c58d6135b2688960eac9401","isMergeCommit":false,"messageTitle":"Add TaskException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"a0bdad0c27209592058347d5c30e1598167397d5","isMergeCommit":false,"messageTitle":"Add ToDoException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"5bbe27cf12edc58281dc72fc046413d8d952b6ac","isMergeCommit":false,"messageTitle":"Update error handling in Duke","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":33}}}]},{"date":"2023-08-29","commitResults":[{"hash":"5cd49af0832e4d3f67e62d88c9c1803f02bea131","isMergeCommit":false,"messageTitle":"Add duke.txt data file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}},{"hash":"016d3c344d0a6641a39e40933e8a088246f3b1fe","isMergeCommit":false,"messageTitle":"Add load file functionality for Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":1}}},{"hash":"f46bb857470e44e1bb8b0e803411cf73364b9d24","isMergeCommit":false,"messageTitle":"Add save file functionality for Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":0}}},{"hash":"e957ab5612c6611b974abc51f4e14be68da5844a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"e87d150e2f0fbe73aacd89a4f7559d6e2234d140","isMergeCommit":false,"messageTitle":"Update Deadline.java to handle LocalDate type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"4a8bfce6c7dde624aced23fdd74726eb78dbdc0d","isMergeCommit":false,"messageTitle":"Update Event.java to handle LocalDate type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":3}}},{"hash":"af319e1550aa1d0682ad3537719b9e5704bbcb07","isMergeCommit":false,"messageTitle":"Update Duke.java to handle LocalDate type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":4}}},{"hash":"f4ad4bacdb063359689bf2c57040180be64f0598","isMergeCommit":false,"messageTitle":"Update data file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2}}},{"hash":"9c7902836cd921d4e649133a765555de16ae6413","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"5fac1d5b5ea3edd6208432c465dc5b6426a68e3e","isMergeCommit":false,"messageTitle":"Add Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":0}}},{"hash":"3972c8a5c4cdc405375d92e2c702a8da52de229e","isMergeCommit":false,"messageTitle":"Add Storage.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":0}}},{"hash":"163c7a3a4da6a56806a220b0f103ca4506d3f868","isMergeCommit":false,"messageTitle":"Add TaskList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":0}}},{"hash":"892caff61a9d5fa8a8cba44179c99898bef5b65d","isMergeCommit":false,"messageTitle":"Add Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":0}}},{"hash":"aae0821594104547ec8559a81e85f8d8030ac021","isMergeCommit":false,"messageTitle":"Refactor Duke.java to work with new classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":266}}},{"hash":"efc96e203adc91f211542c4640e0f6d64c323b99","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"207b5985e7266afec08ec37a4d18a908c47a7ddb","isMergeCommit":false,"messageTitle":"Refactor into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":2},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"d4df8a4c5e2fa68ffe0622697d20847bbb1628fa","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"3e465623a89bd7fd7d1db2c7072fcb4c8c9a449c","isMergeCommit":false,"messageTitle":"Add Command.java abstract class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"d27a1a500891acb20f684a4173c409266c4b4044","isMergeCommit":false,"messageTitle":"Add AddCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"65cb3c3488c09ce827441c78e1b8fe510804f5e4","isMergeCommit":false,"messageTitle":"Add DeleteCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"950f1c5cb2e8c9c34e13561f29e2d87f5e5816c7","isMergeCommit":false,"messageTitle":"Add ExitCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"593a5407cf42c795bb995a96be68d742ae6a4d0f","isMergeCommit":false,"messageTitle":"Add MarkCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"e53597da6d8eb9b796b4539d79b5dfac0bf2732c","isMergeCommit":false,"messageTitle":"Add PrintListCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"36ba877bffa1b57ecd77088c1af88d1fdeee3edc","isMergeCommit":false,"messageTitle":"Add UnknownCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"6fa7666d6dd5190ceba2afacaeb5c25730f8e114","isMergeCommit":false,"messageTitle":"Add UnmarkCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"bd54fd66e306674143847852380f02cfaf1cd3ec","isMergeCommit":false,"messageTitle":"Refactor Duke.java to include Command class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":60}}},{"hash":"a7a82a7f48ca14c3eb36528b626726aee8d7424c","isMergeCommit":false,"messageTitle":"Refactor Parser.java to include Command class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":18}}},{"hash":"5fd12676f93af58af6d63d0aff1d4efd8177771d","isMergeCommit":false,"messageTitle":"Refactor Ui.java to include Command class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"00585ad282357ddc1f9f86d00a09c0ba287936d3","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fcb17f5c24da05155d726c3d0af032cabbdb744d","isMergeCommit":false,"messageTitle":"Update data file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"ac06ba66da5c832b5825a6f9ed9ffe02ec599a84","isMergeCommit":false,"messageTitle":"Update mainClass name in build.gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"362fe543357d28db29177e0e6dfe29f37bd9644c","isMergeCommit":false,"messageTitle":"Update DeadlineException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":5}}},{"hash":"9df34f8b459387a051b1528ca5332b0d9b5c10ec","isMergeCommit":false,"messageTitle":"Update EventException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":5}}},{"hash":"6065bfc8d6037c70919674fd468a06d2faf30e43","isMergeCommit":false,"messageTitle":"Update TaskException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":3}}},{"hash":"a504bc7155566383f3346388c274f08e84703b30","isMergeCommit":false,"messageTitle":"Update ToDoException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":5}}},{"hash":"03c3ba16459eb8ba80fb604dcb010ac09ab04bf2","isMergeCommit":false,"messageTitle":"Update Parser.java to handle new Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":12}}},{"hash":"6846ccfe712ba9a537507c1db2a62cd016399be9","isMergeCommit":false,"messageTitle":"Update TaskList.java to handle out of bound index","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"62890f31182d77862ea9309f1d2659b562fd0aa7","isMergeCommit":false,"messageTitle":"Add ParserTest.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":0}}},{"hash":"0afca73c3568eb6dfce50acc0fb4926beaad58c1","isMergeCommit":false,"messageTitle":"Add TaskListTest.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"7c7366acffb7c040eebf05ec3fe6b7161681910a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"ab2dbdb1498199ca50d4f0ac553b359ad743cf90","isMergeCommit":false,"messageTitle":"Update build.gradle jar shadowJar archiveFileName","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"49d7382750bfce869bd2dc078dc56bad80246933","isMergeCommit":false,"messageTitle":"Add Javadocs for AddCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"a3646e6560d6c37b89d3cef53d4dc045169f107e","isMergeCommit":false,"messageTitle":"Add Javadocs for Command.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"ae994113739ee13eeb103e5eacb50acfdbc31b6b","isMergeCommit":false,"messageTitle":"Add Javadocs for DeleteCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"b7ff26d4966442778219d743e41f31ad7b6c4960","isMergeCommit":false,"messageTitle":"Add Javadocs for ExitCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"9824d9ba54e9989a2a9de8c23d6013feac7eb647","isMergeCommit":false,"messageTitle":"Add Javadocs for MarkCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"a87b5f52c2af5f55b8d92392b16e5d2588e610d1","isMergeCommit":false,"messageTitle":"Add Javadocs for PrintListCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"888712b05c0ca24d811028aa3b9257899d4c77ab","isMergeCommit":false,"messageTitle":"Add Javadocs for UnknownCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"4c1511eb52986f2995c95fc57ec70312e7bbdf20","isMergeCommit":false,"messageTitle":"Add Javadocs for UnmarkCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"d9c1b4b64d333f00b46fd096ccd4e669f820cac8","isMergeCommit":false,"messageTitle":"Add Javadocs for Deadline.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"d96e1031829f7b03774aa86c13d64636fc3b8322","isMergeCommit":false,"messageTitle":"Add Javadocs for DeadlineException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"f7e66f0e2de9387a2ca70fd72c249ff9173340f6","isMergeCommit":false,"messageTitle":"Add Javadocs for Event.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"dcf8376ca6d565fa8cbc3b98ef6c61d1dfc3ac8f","isMergeCommit":false,"messageTitle":"Add Javadocs for EventException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"c79fa5156a98b6e4904a5400eb5021922fd220bc","isMergeCommit":false,"messageTitle":"Add Javadocs for TaskException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"f39efd520554c770fc5d05513df5372bc4f303a4","isMergeCommit":false,"messageTitle":"Add Javadocs for ToDoException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"94ee101c8a771544eddc3d82d52f5f426294ce2f","isMergeCommit":false,"messageTitle":"Add Javadocs for Task.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"b5fd67aa1bc052543d37f823620232d7c179b87f","isMergeCommit":false,"messageTitle":"Add Javadocs for ToDo.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"d1cb44e639836c18d77aa4e3ae664159bdc1c4e0","isMergeCommit":false,"messageTitle":"Add Javadocs for Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":0}}},{"hash":"05583419ef1ce6d48c81dabf2080377529e2ad24","isMergeCommit":false,"messageTitle":"Add Javadocs for Storage.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"1293f5453fb4976b025b02527f456ebafbf6468a","isMergeCommit":false,"messageTitle":"Add Javadocs for TaskList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":0}}},{"hash":"ecd5941b52ff6583e7ef14bd9db210474a60a84e","isMergeCommit":false,"messageTitle":"Add Javadocs for Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":0}}},{"hash":"05a6aafa0e443f108afad2b91e3b992d74690b1a","isMergeCommit":false,"messageTitle":"Update AddCommand.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"ec214f11606f47055ac36cc9fcc20192881594d4","isMergeCommit":false,"messageTitle":"Update Command.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"ef5bc7c149376a1e0dda9360787a6b04a10bb07c","isMergeCommit":false,"messageTitle":"Update DeleteCommand.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"9fd117c28c5ce262c497e66fcf856110bc7d6c49","isMergeCommit":false,"messageTitle":"Update ExitCommand.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"ef04bc73bb3559f9eaa8d50fcc541f706bdba851","isMergeCommit":false,"messageTitle":"Update MarkCommand.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"76b9b086e35451e6de312cfa9b7f8f6b0a5f0cb9","isMergeCommit":false,"messageTitle":"Update PrintListCommand.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"148d9208b4da7f4768e5dacbfcf0c7d4fcec0dcc","isMergeCommit":false,"messageTitle":"Update UnknownCommand.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"b853aab3f33a05726e60c735f97f0f927474675c","isMergeCommit":false,"messageTitle":"Update UnmarkCommand.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"fc7a3b2cce96b377ed4906c7bdd71de2fa32b408","isMergeCommit":false,"messageTitle":"Update Deadline.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"c5a90220a82ecbce770b1dd73de0c6d3d1fd3b42","isMergeCommit":false,"messageTitle":"Update Event.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"4a2bd1714ed8eb62fae68d48d545020b48cdf005","isMergeCommit":false,"messageTitle":"Update ToDo.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"2eab95b970dcdd60b8f6567d576ba590fa9eae59","isMergeCommit":false,"messageTitle":"Update Parser.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":2}}},{"hash":"1e30fd4b3614c26d0fbc10f393ca1bbca248819d","isMergeCommit":false,"messageTitle":"Update Storage.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"2233e288a6b6fd0750c0bb1d5c3783de93dd03c9","isMergeCommit":false,"messageTitle":"Update Ui.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"13a06be6256aeae96b6c3a16abd691fb82b80164","isMergeCommit":false,"messageTitle":"Update Duke.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"c3edf3be7450cb244e9ac3c4832cb4b9d70d24fd","isMergeCommit":false,"messageTitle":"Add support for Find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":1}}},{"hash":"fa064a6e422a5ddd275afd6f2537d3b223d46d20","isMergeCommit":false,"messageTitle":"Add FindCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"f107019dc5ca1bfbf596d209c9946611dd039b8c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"61b2f75dc2055e9eb5bec98dd72915340daa081b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"e0f01c3bce42534bc07b93f7f962b4d9c53d6953","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"902750d7176aeb036cee4f764888d23874687af5","isMergeCommit":false,"messageTitle":"Fix missing import statement bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"569f2044a5f685f69f98c0b1ee249f3112733bcf","isMergeCommit":false,"messageTitle":"Add functionality to check and create file or directory if not found","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"6fea9057d1cdfb677ae44b97cbf92cffd6bb02d3","isMergeCommit":false,"messageTitle":"Update JavaDoc for AddCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"265faa34aa3483b3f2114d6f6aadbeb76c4e038d","isMergeCommit":false,"messageTitle":"Update JavaDoc for Command.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"87f1f7fc9aed4885f68da8ef2f9ddd7a12b2f19f","isMergeCommit":false,"messageTitle":"Update JavaDoc for DeleteCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"cd8f803e4070ae5c20bcc3179f44cc0981bb3632","isMergeCommit":false,"messageTitle":"Update JavaDoc for ExitCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"4e4c49c22aa9254e75fb470ccb3d8d70f8af3e25","isMergeCommit":false,"messageTitle":"Add JavaDoc for FindCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"4da3b1fbf28778ea6c27d6e174440c556921e489","isMergeCommit":false,"messageTitle":"Update JavaDoc for MarkCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"0d28b83dde236917bcfe2a94ade5c02cc7af15d1","isMergeCommit":false,"messageTitle":"Update JavaDoc for PrintListCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"da03f5d44dda9f5ef5a65d5e88e75fb905aafdba","isMergeCommit":false,"messageTitle":"Update JavaDoc for UnknownCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"c8168f5d3f214563a672283504a9338cc824bd77","isMergeCommit":false,"messageTitle":"Update JavaDoc for UnmarkCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"02c7b22f054bcdd9edbdeae9260b042091966772","isMergeCommit":false,"messageTitle":"Update JavaDoc for Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"4b70119980a3e3225b0f23a6cbd0352392eb667d","isMergeCommit":false,"messageTitle":"Refactor Parser and Storage for parsing of TaskList to data","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":36}}},{"hash":"efdb44c1f64b69d252d9c270c0b5e7a74a646513","isMergeCommit":false,"messageTitle":"Update Ui.java logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":61}}},{"hash":"7f58cca295b3499eadb59bdb86b1b2f02e98b9d7","isMergeCommit":false,"messageTitle":"Refactor to work with updated Ui logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":11}}},{"hash":"ca5212f9cbe7574b920a63614b362ae292733aa4","isMergeCommit":false,"messageTitle":"Update error handling for FileNotFoundException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":14}}}]}]},"authorFileTypeContributionMap":{"yanghengtang":{"java":1176,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":2,"txt":12}},"authorContributionVariance":{"yanghengtang":97606.68},"authorDisplayNameMap":{"yanghengtang":"CS2103T-T08-1 TANG..HENG"}} +{"authorDailyContributionsMap":{"yanghengtang":[{"date":"2023-08-23","commitResults":[{"hash":"20327e71b207efe08c151112b8bcbb38c2ac7ad7","isMergeCommit":false,"messageTitle":"Implement initial skeletal version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"6754bdb695a6a302631fdc6632636c23b68130f7","isMergeCommit":false,"messageTitle":"Implement Echo functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"f8d2529cc061b3c6e60be0bda9a0a88c72ec5567","isMergeCommit":false,"messageTitle":"Implement Add, List functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"8538f65f679f5d9e7b54848e026e17ae02f24731","isMergeCommit":false,"messageTitle":"Add Task.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"b6d19c4af013b59eaea2d07c9bcf70e94a8b129a","isMergeCommit":false,"messageTitle":"Update Duke.java to use Task class","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":3}}}]},{"date":"2023-08-24","commitResults":[{"hash":"57f4473a1721cf95b1740b85d05c558b2de190f0","isMergeCommit":false,"messageTitle":"Fix List output format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"9218d109b24b6f2fe381404c80c62ea247241f59","isMergeCommit":false,"messageTitle":"Add Deadline.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"0ebec01bef06324c7402b8286269e19d7fe6c2a1","isMergeCommit":false,"messageTitle":"Add Event.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"5b3bc2f71f48e0d6a77b4ca9b99de8d6c3596be8","isMergeCommit":false,"messageTitle":"Add ToDo.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"210ad0fbb6ddb5164a7c8319572c377645c28f66","isMergeCommit":false,"messageTitle":"Update Duke.java to handle ToDo, Event, Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":0}}},{"hash":"140e1ce225ce95d0988a993e5030eb4e1d745ed4","isMergeCommit":false,"messageTitle":"Fix Duke.java Scanner bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":9}}},{"hash":"9f866c821f32ff3678e26144fe8fe8c9dc1fca58","isMergeCommit":false,"messageTitle":"Fix Duke exit message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"601d921516c073a72b1720fe0a34ff169934d541","isMergeCommit":false,"messageTitle":"Add test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"cbd8222e7f0a502daa90b65913ecf531b3352438","isMergeCommit":false,"messageTitle":"Add error handling for invalid action input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"054c80756c3c81f5ec60be50ecc795b9179795b8","isMergeCommit":false,"messageTitle":"Add error handling for adding ToDo task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":7}}},{"hash":"9b9482101c67974b0a7377e1ea1ee2a1f73208cb","isMergeCommit":false,"messageTitle":"Add error handling for adding Event task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":11}}},{"hash":"853d0076a24c98420002ff3654003aa03bab91dd","isMergeCommit":false,"messageTitle":"Fix task counter bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"6f77c95dc24caf8bf4106b451d5f01cd791629c8","isMergeCommit":false,"messageTitle":"Add error handling for adding Deadline task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":9}}},{"hash":"deecb0642bf4a49e861906d17269b94a7e73ad38","isMergeCommit":false,"messageTitle":"Add error handling for Mark and Unmark action","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":12}}},{"hash":"e29f60fbf2320b3ea2d07bc38194c875170c12f0","isMergeCommit":false,"messageTitle":"Update error messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"2abd8682fed83709edf5b781b0442d120dc565f1","isMergeCommit":false,"messageTitle":"Update parsing of string of Event and Deadline task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"0b9e85ebf5a2e40102068b4309ef5c147c256e86","isMergeCommit":false,"messageTitle":"Update error messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"787d474528d64fde92d6cc446948e7f0f697312e","isMergeCommit":false,"messageTitle":"Add Delete functionality for List","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"6f12dc7b445104c2908d73341639e3bb6d7a4ff4","isMergeCommit":false,"messageTitle":"Refactor Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":95,"deletions":65}}},{"hash":"4ebba5c116a607019c4164109be051d7555e77b6","isMergeCommit":false,"messageTitle":"Add DeadlineException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"80869f804c3db3eda285691b18d7034d4c763885","isMergeCommit":false,"messageTitle":"Add EventException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"9b06ce8efeb962640c58d6135b2688960eac9401","isMergeCommit":false,"messageTitle":"Add TaskException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"a0bdad0c27209592058347d5c30e1598167397d5","isMergeCommit":false,"messageTitle":"Add ToDoException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"5bbe27cf12edc58281dc72fc046413d8d952b6ac","isMergeCommit":false,"messageTitle":"Update error handling in Duke","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":33}}}]},{"date":"2023-08-29","commitResults":[{"hash":"5cd49af0832e4d3f67e62d88c9c1803f02bea131","isMergeCommit":false,"messageTitle":"Add duke.txt data file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}},{"hash":"016d3c344d0a6641a39e40933e8a088246f3b1fe","isMergeCommit":false,"messageTitle":"Add load file functionality for Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":1}}},{"hash":"f46bb857470e44e1bb8b0e803411cf73364b9d24","isMergeCommit":false,"messageTitle":"Add save file functionality for Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":0}}},{"hash":"e957ab5612c6611b974abc51f4e14be68da5844a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"e87d150e2f0fbe73aacd89a4f7559d6e2234d140","isMergeCommit":false,"messageTitle":"Update Deadline.java to handle LocalDate type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"4a8bfce6c7dde624aced23fdd74726eb78dbdc0d","isMergeCommit":false,"messageTitle":"Update Event.java to handle LocalDate type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":3}}},{"hash":"af319e1550aa1d0682ad3537719b9e5704bbcb07","isMergeCommit":false,"messageTitle":"Update Duke.java to handle LocalDate type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":4}}},{"hash":"f4ad4bacdb063359689bf2c57040180be64f0598","isMergeCommit":false,"messageTitle":"Update data file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2}}},{"hash":"9c7902836cd921d4e649133a765555de16ae6413","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"5fac1d5b5ea3edd6208432c465dc5b6426a68e3e","isMergeCommit":false,"messageTitle":"Add Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":0}}},{"hash":"3972c8a5c4cdc405375d92e2c702a8da52de229e","isMergeCommit":false,"messageTitle":"Add Storage.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":0}}},{"hash":"163c7a3a4da6a56806a220b0f103ca4506d3f868","isMergeCommit":false,"messageTitle":"Add TaskList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":0}}},{"hash":"892caff61a9d5fa8a8cba44179c99898bef5b65d","isMergeCommit":false,"messageTitle":"Add Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":0}}},{"hash":"aae0821594104547ec8559a81e85f8d8030ac021","isMergeCommit":false,"messageTitle":"Refactor Duke.java to work with new classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":266}}},{"hash":"efc96e203adc91f211542c4640e0f6d64c323b99","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"207b5985e7266afec08ec37a4d18a908c47a7ddb","isMergeCommit":false,"messageTitle":"Refactor into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":2},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"d4df8a4c5e2fa68ffe0622697d20847bbb1628fa","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"3e465623a89bd7fd7d1db2c7072fcb4c8c9a449c","isMergeCommit":false,"messageTitle":"Add Command.java abstract class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"d27a1a500891acb20f684a4173c409266c4b4044","isMergeCommit":false,"messageTitle":"Add AddCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"65cb3c3488c09ce827441c78e1b8fe510804f5e4","isMergeCommit":false,"messageTitle":"Add DeleteCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"950f1c5cb2e8c9c34e13561f29e2d87f5e5816c7","isMergeCommit":false,"messageTitle":"Add ExitCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"593a5407cf42c795bb995a96be68d742ae6a4d0f","isMergeCommit":false,"messageTitle":"Add MarkCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"e53597da6d8eb9b796b4539d79b5dfac0bf2732c","isMergeCommit":false,"messageTitle":"Add PrintListCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"36ba877bffa1b57ecd77088c1af88d1fdeee3edc","isMergeCommit":false,"messageTitle":"Add UnknownCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"6fa7666d6dd5190ceba2afacaeb5c25730f8e114","isMergeCommit":false,"messageTitle":"Add UnmarkCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"bd54fd66e306674143847852380f02cfaf1cd3ec","isMergeCommit":false,"messageTitle":"Refactor Duke.java to include Command class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":60}}},{"hash":"a7a82a7f48ca14c3eb36528b626726aee8d7424c","isMergeCommit":false,"messageTitle":"Refactor Parser.java to include Command class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":18}}},{"hash":"5fd12676f93af58af6d63d0aff1d4efd8177771d","isMergeCommit":false,"messageTitle":"Refactor Ui.java to include Command class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"00585ad282357ddc1f9f86d00a09c0ba287936d3","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fcb17f5c24da05155d726c3d0af032cabbdb744d","isMergeCommit":false,"messageTitle":"Update data file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"ac06ba66da5c832b5825a6f9ed9ffe02ec599a84","isMergeCommit":false,"messageTitle":"Update mainClass name in build.gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"362fe543357d28db29177e0e6dfe29f37bd9644c","isMergeCommit":false,"messageTitle":"Update DeadlineException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":5}}},{"hash":"9df34f8b459387a051b1528ca5332b0d9b5c10ec","isMergeCommit":false,"messageTitle":"Update EventException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":5}}},{"hash":"6065bfc8d6037c70919674fd468a06d2faf30e43","isMergeCommit":false,"messageTitle":"Update TaskException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":3}}},{"hash":"a504bc7155566383f3346388c274f08e84703b30","isMergeCommit":false,"messageTitle":"Update ToDoException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":5}}},{"hash":"03c3ba16459eb8ba80fb604dcb010ac09ab04bf2","isMergeCommit":false,"messageTitle":"Update Parser.java to handle new Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":12}}},{"hash":"6846ccfe712ba9a537507c1db2a62cd016399be9","isMergeCommit":false,"messageTitle":"Update TaskList.java to handle out of bound index","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"62890f31182d77862ea9309f1d2659b562fd0aa7","isMergeCommit":false,"messageTitle":"Add ParserTest.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":0}}},{"hash":"0afca73c3568eb6dfce50acc0fb4926beaad58c1","isMergeCommit":false,"messageTitle":"Add TaskListTest.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"7c7366acffb7c040eebf05ec3fe6b7161681910a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"ab2dbdb1498199ca50d4f0ac553b359ad743cf90","isMergeCommit":false,"messageTitle":"Update build.gradle jar shadowJar archiveFileName","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"49d7382750bfce869bd2dc078dc56bad80246933","isMergeCommit":false,"messageTitle":"Add Javadocs for AddCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"a3646e6560d6c37b89d3cef53d4dc045169f107e","isMergeCommit":false,"messageTitle":"Add Javadocs for Command.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"ae994113739ee13eeb103e5eacb50acfdbc31b6b","isMergeCommit":false,"messageTitle":"Add Javadocs for DeleteCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"b7ff26d4966442778219d743e41f31ad7b6c4960","isMergeCommit":false,"messageTitle":"Add Javadocs for ExitCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"9824d9ba54e9989a2a9de8c23d6013feac7eb647","isMergeCommit":false,"messageTitle":"Add Javadocs for MarkCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"a87b5f52c2af5f55b8d92392b16e5d2588e610d1","isMergeCommit":false,"messageTitle":"Add Javadocs for PrintListCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"888712b05c0ca24d811028aa3b9257899d4c77ab","isMergeCommit":false,"messageTitle":"Add Javadocs for UnknownCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"4c1511eb52986f2995c95fc57ec70312e7bbdf20","isMergeCommit":false,"messageTitle":"Add Javadocs for UnmarkCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"d9c1b4b64d333f00b46fd096ccd4e669f820cac8","isMergeCommit":false,"messageTitle":"Add Javadocs for Deadline.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"d96e1031829f7b03774aa86c13d64636fc3b8322","isMergeCommit":false,"messageTitle":"Add Javadocs for DeadlineException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"f7e66f0e2de9387a2ca70fd72c249ff9173340f6","isMergeCommit":false,"messageTitle":"Add Javadocs for Event.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"dcf8376ca6d565fa8cbc3b98ef6c61d1dfc3ac8f","isMergeCommit":false,"messageTitle":"Add Javadocs for EventException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"c79fa5156a98b6e4904a5400eb5021922fd220bc","isMergeCommit":false,"messageTitle":"Add Javadocs for TaskException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"f39efd520554c770fc5d05513df5372bc4f303a4","isMergeCommit":false,"messageTitle":"Add Javadocs for ToDoException.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"94ee101c8a771544eddc3d82d52f5f426294ce2f","isMergeCommit":false,"messageTitle":"Add Javadocs for Task.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"b5fd67aa1bc052543d37f823620232d7c179b87f","isMergeCommit":false,"messageTitle":"Add Javadocs for ToDo.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"d1cb44e639836c18d77aa4e3ae664159bdc1c4e0","isMergeCommit":false,"messageTitle":"Add Javadocs for Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":0}}},{"hash":"05583419ef1ce6d48c81dabf2080377529e2ad24","isMergeCommit":false,"messageTitle":"Add Javadocs for Storage.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"1293f5453fb4976b025b02527f456ebafbf6468a","isMergeCommit":false,"messageTitle":"Add Javadocs for TaskList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":0}}},{"hash":"ecd5941b52ff6583e7ef14bd9db210474a60a84e","isMergeCommit":false,"messageTitle":"Add Javadocs for Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":0}}},{"hash":"05a6aafa0e443f108afad2b91e3b992d74690b1a","isMergeCommit":false,"messageTitle":"Update AddCommand.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"ec214f11606f47055ac36cc9fcc20192881594d4","isMergeCommit":false,"messageTitle":"Update Command.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"ef5bc7c149376a1e0dda9360787a6b04a10bb07c","isMergeCommit":false,"messageTitle":"Update DeleteCommand.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"9fd117c28c5ce262c497e66fcf856110bc7d6c49","isMergeCommit":false,"messageTitle":"Update ExitCommand.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"ef04bc73bb3559f9eaa8d50fcc541f706bdba851","isMergeCommit":false,"messageTitle":"Update MarkCommand.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"76b9b086e35451e6de312cfa9b7f8f6b0a5f0cb9","isMergeCommit":false,"messageTitle":"Update PrintListCommand.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"148d9208b4da7f4768e5dacbfcf0c7d4fcec0dcc","isMergeCommit":false,"messageTitle":"Update UnknownCommand.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"b853aab3f33a05726e60c735f97f0f927474675c","isMergeCommit":false,"messageTitle":"Update UnmarkCommand.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"fc7a3b2cce96b377ed4906c7bdd71de2fa32b408","isMergeCommit":false,"messageTitle":"Update Deadline.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"c5a90220a82ecbce770b1dd73de0c6d3d1fd3b42","isMergeCommit":false,"messageTitle":"Update Event.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"4a2bd1714ed8eb62fae68d48d545020b48cdf005","isMergeCommit":false,"messageTitle":"Update ToDo.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"2eab95b970dcdd60b8f6567d576ba590fa9eae59","isMergeCommit":false,"messageTitle":"Update Parser.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":2}}},{"hash":"1e30fd4b3614c26d0fbc10f393ca1bbca248819d","isMergeCommit":false,"messageTitle":"Update Storage.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"2233e288a6b6fd0750c0bb1d5c3783de93dd03c9","isMergeCommit":false,"messageTitle":"Update Ui.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"13a06be6256aeae96b6c3a16abd691fb82b80164","isMergeCommit":false,"messageTitle":"Update Duke.java code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"c3edf3be7450cb244e9ac3c4832cb4b9d70d24fd","isMergeCommit":false,"messageTitle":"Add support for Find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":1}}},{"hash":"fa064a6e422a5ddd275afd6f2537d3b223d46d20","isMergeCommit":false,"messageTitle":"Add FindCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"f107019dc5ca1bfbf596d209c9946611dd039b8c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"61b2f75dc2055e9eb5bec98dd72915340daa081b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"e0f01c3bce42534bc07b93f7f962b4d9c53d6953","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"902750d7176aeb036cee4f764888d23874687af5","isMergeCommit":false,"messageTitle":"Fix missing import statement bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"569f2044a5f685f69f98c0b1ee249f3112733bcf","isMergeCommit":false,"messageTitle":"Add functionality to check and create file or directory if not found","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"6fea9057d1cdfb677ae44b97cbf92cffd6bb02d3","isMergeCommit":false,"messageTitle":"Update JavaDoc for AddCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"265faa34aa3483b3f2114d6f6aadbeb76c4e038d","isMergeCommit":false,"messageTitle":"Update JavaDoc for Command.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"87f1f7fc9aed4885f68da8ef2f9ddd7a12b2f19f","isMergeCommit":false,"messageTitle":"Update JavaDoc for DeleteCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"cd8f803e4070ae5c20bcc3179f44cc0981bb3632","isMergeCommit":false,"messageTitle":"Update JavaDoc for ExitCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"4e4c49c22aa9254e75fb470ccb3d8d70f8af3e25","isMergeCommit":false,"messageTitle":"Add JavaDoc for FindCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"4da3b1fbf28778ea6c27d6e174440c556921e489","isMergeCommit":false,"messageTitle":"Update JavaDoc for MarkCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"0d28b83dde236917bcfe2a94ade5c02cc7af15d1","isMergeCommit":false,"messageTitle":"Update JavaDoc for PrintListCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"da03f5d44dda9f5ef5a65d5e88e75fb905aafdba","isMergeCommit":false,"messageTitle":"Update JavaDoc for UnknownCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"c8168f5d3f214563a672283504a9338cc824bd77","isMergeCommit":false,"messageTitle":"Update JavaDoc for UnmarkCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"02c7b22f054bcdd9edbdeae9260b042091966772","isMergeCommit":false,"messageTitle":"Update JavaDoc for Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"4b70119980a3e3225b0f23a6cbd0352392eb667d","isMergeCommit":false,"messageTitle":"Refactor Parser and Storage for parsing of TaskList to data","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":36}}},{"hash":"efdb44c1f64b69d252d9c270c0b5e7a74a646513","isMergeCommit":false,"messageTitle":"Update Ui.java logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":61}}},{"hash":"7f58cca295b3499eadb59bdb86b1b2f02e98b9d7","isMergeCommit":false,"messageTitle":"Refactor to work with updated Ui logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":11}}},{"hash":"ca5212f9cbe7574b920a63614b362ae292733aa4","isMergeCommit":false,"messageTitle":"Update error handling for FileNotFoundException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":14}}}]},{"date":"2023-09-05","commitResults":[{"hash":"dc7a1a50f3cdaf8fb6f7914b413e8be9743864b1","isMergeCommit":false,"messageTitle":"Update build.gradle to include Checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"b3a0b4af3318260c00d81bf16571ed98a50ad5e9","isMergeCommit":false,"messageTitle":"Fix Duke.java style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"e4e0e4898c36fe27f19034037440db269d655e9b","isMergeCommit":false,"messageTitle":"Fix AddCommand.java style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"d63b48cb9bb15c391e1598c6051d83453e60133f","isMergeCommit":false,"messageTitle":"Fix DeleteCommand.java style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"d7c0e9ad72f5afdf7ea7be2258de4e96fa8e0c8b","isMergeCommit":false,"messageTitle":"Fix FindCommand.java style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"ad15a5601f9344b6633d6f0b256d7ddece6bf3e9","isMergeCommit":false,"messageTitle":"Fix MarkCommand.java style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"5804ea00b1e18ac3740c16bb2c0fd373d16325d8","isMergeCommit":false,"messageTitle":"Fix UnmarkCommand.java style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"189cdc2386eb8f4500faa7e7760c74d57920e557","isMergeCommit":false,"messageTitle":"Fix Deadline.java style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"c04ba051f0c263f17c3358084421e9b890f6ca31","isMergeCommit":false,"messageTitle":"Fix Event.java style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"192826c6984335c2f96b29c53d5e0c1d0a0ba297","isMergeCommit":false,"messageTitle":"Fix Task.java style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"c0b5fb3a38b88488c0231e893d80b643e639342f","isMergeCommit":false,"messageTitle":"Fix ToDoException.java style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"9adbf9945368e8b44b484b5237cc64bfd9485c58","isMergeCommit":false,"messageTitle":"Fix Parser.java style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":3}}},{"hash":"a54df93dadfe54bfae0d93f42298cea41fcda2c4","isMergeCommit":false,"messageTitle":"Fix Storage.java style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}},{"hash":"68807e93448ccf023131ce271e764035ce960ccf","isMergeCommit":false,"messageTitle":"Fix TaskList.java style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":3}}},{"hash":"4706525b3e339667a638b5a1ed4553ad334ab7a2","isMergeCommit":false,"messageTitle":"Fix Ui.java style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":4}}},{"hash":"ec630976ea72255c248b0ab803fa50b13f0f200b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"yanghengtang":{"java":1245,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":7,"txt":12}},"authorContributionVariance":{"yanghengtang":81368.45},"authorDisplayNameMap":{"yanghengtang":"CS2103T-T08-1 TANG..HENG"}} diff --git a/yytan25_ip_master/authorship.json b/yytan25_ip_master/authorship.json index aa1d4acf..5a37ebfe 100644 --- a/yytan25_ip_master/authorship.json +++ b/yytan25_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"Task/eat breakfast/N","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"Task/eat lunch/N","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"Task/eat dinner/N","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"Task/Eat supper/N","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"Deadline/eat my words/N/2023-09-01T23:59","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"yytan25":5}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":" protected LocalDateTime due;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":" * Constructs a new {@code Deadline} object, with {@code isCompleted} set to false.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" * @param details Details of the {@code Deadline}.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" * @param due Due date and time of the {@code Deadline}, stored as a {@code LocalDateTime} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" public Deadline(String details, LocalDateTime due) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" super(details);","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" this.due \u003d due;","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" * Loads a {@code Deadline} object that was previously stored in the hard disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" * The {@code isCompleted} parameter corresponds to the completion status in the last","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" * instance of {@code Duke}.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" * @param details Details of the {@code Deadline}.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" * @param isCompleted Completion status of the {@code Deadline}.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" * @param due Due date and time of the {@code Deadline}, stored as a {@code LocalDateTime} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" public Deadline(String details, boolean isCompleted, LocalDateTime due) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" super(details, isCompleted);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" this.due \u003d due;","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" * Returns the string representation of the {@code Deadline}, to be","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":" * printed in the {@code list} method.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":" * @return String representation of the {@code Deadline}.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"E, dd MMM yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" DateTimeFormatter timeFormatter \u003d DateTimeFormatter.ofPattern(\"HH:mm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":" + this.due.toLocalDate().format(dateFormatter) + \" \"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":" + this.due.toLocalTime().format(timeFormatter) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"yytan25":49}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" boolean isRunning \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" * Initiates a new {@code Duke} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" * @throws IOException When the {@code saveTasksToDisk()} method in the {@code Storage} class","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" * fails to function properly.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" public Duke() throws IOException {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" this.storage \u003d new Storage(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" this.parser \u003d new Parser(this, tasks, ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" this.run();","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" * Contains the tasks required for {@code Duke} to start.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" * Also acts as a driver method for the {@code Parser} to read the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":" * @throws IOException When the {@code saveTasksToDisk()} method in the {@code Storage} class","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" * fails to function properly.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":" public void run() throws IOException {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":" storage.launchOnStart();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":" storage.readTasksFromDisk(\"./data/tasks.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":" System.out.println(\"File not found. Please check your directory and try again.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":" this.exit(2);","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":" ui.printSelfIntroduction();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"yytan25"},"content":" while (this.isRunning) {","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"yytan25"},"content":" if (ui.getInvalidInputCount() \u003e\u003d 10) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"yytan25"},"content":" this.exit(1);","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"yytan25"},"content":" } else if (ui.getInvalidInputCount() \u003d\u003d 8) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"yytan25"},"content":" System.out.println(\"If you keep giving me nonsense, I\u0027m leaving!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"yytan25"},"content":" String msg \u003d sc.nextLine();","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"yytan25"},"content":" parser.readInput(msg);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"yytan25"},"content":" this.exit(0);","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"yytan25"},"content":" * Creates a new {@code Task} object with details input by the user and adds it to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"yytan25"},"content":" public void createTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"yytan25"},"content":" String details \u003d parser.checkTaskInput(\"task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"yytan25"},"content":" if (details !\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"yytan25"},"content":" tasks.add(new Task(details));","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Don\u0027t expect me to %s for you!%n\", details);","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"yytan25"},"content":" * Creates a new {@code Todo} object with details input by the user and adds it to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"yytan25"},"content":" public void createToDo() {","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"yytan25"},"content":" String details \u003d parser.checkTaskInput(\"todo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"yytan25"},"content":" if (details !\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"yytan25"},"content":" tasks.add(new ToDo(details));","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Stop talking to me! Go and %s!%n\", details);","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"yytan25"},"content":" * Creates a new {@code Deadline} object with details input by the user and adds it to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"yytan25"},"content":" * If no time is input by the user, the time will be set to 23:59 by default.","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"yytan25"},"content":" public void createDeadline() {","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"yytan25"},"content":" String details \u003d parser.checkTaskInput(\"deadline\");","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"yytan25"},"content":" if (details \u003d\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"yytan25"},"content":" LocalDate dueDate \u003d parser.checkDateInput(\"deadline\", \"due\");","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"yytan25"},"content":" if (dueDate \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"yytan25"},"content":" LocalTime dueTime \u003d parser.checkTimeInput(\"deadline\", \"due\");","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"yytan25"},"content":" if (dueTime \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"yytan25"},"content":" // Shouldn\u0027t reach here as creation of deadline without time input is supported.","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"yytan25"},"content":" // Invalid input is also handled in the Parser class.","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"yytan25"},"content":" // Default dueTime is 23:59.","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"yytan25"},"content":" LocalDateTime due \u003d dueTime.atDate(dueDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"yytan25"},"content":" if (parser.checkStartDateTime(\"deadline\", due)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"yytan25"},"content":" tasks.add(new Deadline(details, due));","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Just saying, better %s now.%n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"yytan25"},"content":" + \"Not like it\u0027s my problem if you don\u0027t.%n\", details);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"yytan25"},"content":" * Creates a new {@code Event} object with details input by the user and adds it to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"yytan25"},"content":" public void createEvent() {","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"yytan25"},"content":" String details \u003d parser.checkTaskInput(\"event\");","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"yytan25"},"content":" if (details \u003d\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"yytan25"},"content":" LocalDate startDate \u003d parser.checkDateInput(\"event\", \"start\");","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"yytan25"},"content":" if (startDate \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"yytan25"},"content":" LocalTime startTime \u003d parser.checkTimeInput(\"event\", \"start\");","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"yytan25"},"content":" if (startTime \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"yytan25"},"content":" LocalDate endDate \u003d parser.checkDateInput(\"event\", \"end\");","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"yytan25"},"content":" if (endDate \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"yytan25"},"content":" LocalTime endTime \u003d parser.checkTimeInput(\"event\", \"end\");","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"yytan25"},"content":" if (endTime \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"yytan25"},"content":" LocalDateTime start \u003d startTime.atDate(startDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"yytan25"},"content":" LocalDateTime end \u003d endTime.atDate(endDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"yytan25"},"content":" if (parser.checkStartDateTime(\"event\", end) \u0026\u0026","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"yytan25"},"content":" parser.checkTimeInterval(\"event\", start, end)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"yytan25"},"content":" tasks.add(new Event(details, start, end));","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Wow, you have a %s?%n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"yytan25"},"content":" + \"Uhh, n-not like I wanna join you!%n\", details);","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":149,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":151,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"yytan25"},"content":" * Prints all stored Task objects and prints them in a list format.","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"yytan25"},"content":" * Also shows the completion status of each task marked with an \"[X]\", and the","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"yytan25"},"content":" * breakdown of completed/incomplete tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"yytan25"},"content":" public void list() {","lastModifiedDate":"2023-08-20"},{"lineNumber":157,"author":{"gitId":"yytan25"},"content":" int numOfTasks \u003d tasks.getNumOfTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"yytan25"},"content":" int numOfCompletedTasks \u003d tasks.getNumOfCompletedTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"You have %d tasks. (%d complete, %d incomplete)%n\",","lastModifiedDate":"2023-08-21"},{"lineNumber":160,"author":{"gitId":"yytan25"},"content":" numOfTasks, numOfCompletedTasks, numOfTasks - numOfCompletedTasks);","lastModifiedDate":"2023-08-21"},{"lineNumber":161,"author":{"gitId":"yytan25"},"content":" for (int i \u003d 0; i \u003c numOfTasks; i++) {","lastModifiedDate":"2023-08-20"},{"lineNumber":162,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"%d. \" + tasks.get(i).toString()","lastModifiedDate":"2023-08-20"},{"lineNumber":163,"author":{"gitId":"yytan25"},"content":" + \"%n\", i + 1);","lastModifiedDate":"2023-08-20"},{"lineNumber":164,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":165,"author":{"gitId":"yytan25"},"content":" if (numOfCompletedTasks \u003d\u003d numOfTasks) {","lastModifiedDate":"2023-08-21"},{"lineNumber":166,"author":{"gitId":"yytan25"},"content":" System.out.println(\"You\u0027ve completed all your tasks. Good for you.\");","lastModifiedDate":"2023-08-21"},{"lineNumber":167,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":168,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Don\u0027t expect me to remember them for you!\");","lastModifiedDate":"2023-08-20"},{"lineNumber":169,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":170,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":172,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":173,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"yytan25"},"content":" * Marks a selected task as complete, with the task number input by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"yytan25"},"content":" public void markAsComplete() {","lastModifiedDate":"2023-08-20"},{"lineNumber":177,"author":{"gitId":"yytan25"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"yytan25"},"content":" System.out.println(\"No tasks to mark.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":179,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Please create a task first.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":180,"author":{"gitId":"yytan25"},"content":" ui.incrementInvalidInputs();","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":183,"author":{"gitId":"yytan25"},"content":" Integer taskNumber \u003d parser.launchConfirmationScreen(\"mark as complete\");","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"yytan25"},"content":" if (taskNumber !\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":185,"author":{"gitId":"yytan25"},"content":" Task task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-20"},{"lineNumber":186,"author":{"gitId":"yytan25"},"content":" if (!task.isCompleted) {","lastModifiedDate":"2023-08-20"},{"lineNumber":187,"author":{"gitId":"yytan25"},"content":" task.setCompleted();","lastModifiedDate":"2023-08-20"},{"lineNumber":188,"author":{"gitId":"yytan25"},"content":" tasks.incrementCompletedTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Task %d set as complete.%n\", taskNumber);","lastModifiedDate":"2023-08-20"},{"lineNumber":190,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":191,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Task %d is already complete.%n Stop wasting my time!%n\", taskNumber);","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":193,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":194,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":196,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":197,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":198,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"yytan25"},"content":" * Marks a selected task as incomplete, with the task number input by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"yytan25"},"content":" public void markAsIncomplete() {","lastModifiedDate":"2023-08-20"},{"lineNumber":202,"author":{"gitId":"yytan25"},"content":" if (!tasks.hasCompletedTasks()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"yytan25"},"content":" System.out.println(\"No tasks to unmark.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":204,"author":{"gitId":"yytan25"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"yytan25"},"content":" System.out.println(\"You have no completed tasks.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":206,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":207,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Please create a task first.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":208,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":209,"author":{"gitId":"yytan25"},"content":" ui.incrementInvalidInputs();","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":212,"author":{"gitId":"yytan25"},"content":" Integer taskNumber \u003d parser.launchConfirmationScreen(\"mark as incomplete\");","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"yytan25"},"content":" if (taskNumber !\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":214,"author":{"gitId":"yytan25"},"content":" Task task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-20"},{"lineNumber":215,"author":{"gitId":"yytan25"},"content":" if (task.isCompleted) {","lastModifiedDate":"2023-08-20"},{"lineNumber":216,"author":{"gitId":"yytan25"},"content":" task.setIncomplete();","lastModifiedDate":"2023-08-20"},{"lineNumber":217,"author":{"gitId":"yytan25"},"content":" tasks.decrementCompletedTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Task %d set as incomplete.%n\", taskNumber);","lastModifiedDate":"2023-08-20"},{"lineNumber":219,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":220,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Task %d is already incomplete.%n Stop wasting my time!%n\", taskNumber);","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":222,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":223,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":225,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":226,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":227,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"yytan25"},"content":" * Deletes a selected task from the list, with the task number input by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"yytan25"},"content":" public void deleteTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":231,"author":{"gitId":"yytan25"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"yytan25"},"content":" System.out.println(\"No tasks to delete.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":233,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Please create a task first.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":234,"author":{"gitId":"yytan25"},"content":" ui.incrementInvalidInputs();","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":237,"author":{"gitId":"yytan25"},"content":" Integer taskNumber \u003d parser.launchConfirmationScreen(\"delete\");","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"yytan25"},"content":" if (taskNumber !\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":239,"author":{"gitId":"yytan25"},"content":" Task task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":240,"author":{"gitId":"yytan25"},"content":" tasks.remove(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":241,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Task %d deleted successfully.%n You now have %d tasks.%n\",","lastModifiedDate":"2023-09-01"},{"lineNumber":242,"author":{"gitId":"yytan25"},"content":" taskNumber, tasks.getNumOfTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":244,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":246,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":247,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":248,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":249,"author":{"gitId":"yytan25"},"content":" * Finds all tasks containing a keyword input by the user, and prints them in a list format.","lastModifiedDate":"2023-09-01"},{"lineNumber":250,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":251,"author":{"gitId":"yytan25"},"content":" public void findTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":252,"author":{"gitId":"yytan25"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":253,"author":{"gitId":"yytan25"},"content":" System.out.println(\"No tasks to find.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":254,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Please create a task first.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":255,"author":{"gitId":"yytan25"},"content":" ui.incrementInvalidInputs();","lastModifiedDate":"2023-09-01"},{"lineNumber":256,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":257,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":258,"author":{"gitId":"yytan25"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d parser.getMatchingTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":259,"author":{"gitId":"yytan25"},"content":" if (matchingTasks \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":260,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Keyword cannot be empty. Please try again.%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":261,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":262,"author":{"gitId":"yytan25"},"content":" } else if (matchingTasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":263,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"No tasks with your keyword. Please try again.%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":264,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":265,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":266,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Here are the matching tasks in your list:%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":267,"author":{"gitId":"yytan25"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":268,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"%d. \" + matchingTasks.get(i).toString()","lastModifiedDate":"2023-09-01"},{"lineNumber":269,"author":{"gitId":"yytan25"},"content":" + \"%n\", i + 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":270,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":271,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":272,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":273,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":274,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":275,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":276,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":277,"author":{"gitId":"yytan25"},"content":" * Terminates the {@code Duke} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":278,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":279,"author":{"gitId":"yytan25"},"content":" * @param status Indicates the cause of termination as follows:","lastModifiedDate":"2023-09-01"},{"lineNumber":280,"author":{"gitId":"yytan25"},"content":" * 0 - Normal operations.","lastModifiedDate":"2023-09-01"},{"lineNumber":281,"author":{"gitId":"yytan25"},"content":" * 1 - Excessive invalid inputs from user.","lastModifiedDate":"2023-09-01"},{"lineNumber":282,"author":{"gitId":"yytan25"},"content":" * 2 - When {@code FileNotFoundException} is thrown.","lastModifiedDate":"2023-09-01"},{"lineNumber":283,"author":{"gitId":"yytan25"},"content":" * @throws IOException When the {@code saveTasksToDisk()} method in the {@code Storage} class","lastModifiedDate":"2023-09-01"},{"lineNumber":284,"author":{"gitId":"yytan25"},"content":" * fails to function properly.","lastModifiedDate":"2023-09-01"},{"lineNumber":285,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":286,"author":{"gitId":"yytan25"},"content":" public void exit(int status) throws IOException {","lastModifiedDate":"2023-08-26"},{"lineNumber":287,"author":{"gitId":"yytan25"},"content":" storage.saveTasksToDisk(\"./data/tasks.txt\", tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":288,"author":{"gitId":"yytan25"},"content":" if (status \u003d\u003d 1) {","lastModifiedDate":"2023-08-26"},{"lineNumber":289,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"I\u0027ve had enough of your nonsense!%n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":290,"author":{"gitId":"yytan25"},"content":" \"Don\u0027t let me see you again!%n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":291,"author":{"gitId":"yytan25"},"content":" } else if (status \u003d\u003d 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":292,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Finally I can rest. Bye!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":293,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":294,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":295,"author":{"gitId":"yytan25"},"content":" System.exit(0);","lastModifiedDate":"2023-08-24"},{"lineNumber":296,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":297,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":298,"author":{"gitId":"yytan25"},"content":" public static void main(String[] args) throws IOException {","lastModifiedDate":"2023-08-26"},{"lineNumber":299,"author":{"gitId":"yytan25"},"content":" new Duke();","lastModifiedDate":"2023-08-19"},{"lineNumber":300,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":301,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"yytan25":298,"-":3}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":" protected LocalDateTime end;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":" * Constructs a new {@code Event} object, with {@code isCompleted} set to false.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" * @param details Details of the {@code Event}.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" * @param start Start date and time of the {@code Event}, stored as a {@code LocalDateTime} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" * @param end End date and time of the {@code Event}, stored as a {@code LocalDateTime} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" public Event(String details, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" super(details);","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" * Loads a {@code Event} object that was previously stored in the hard disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" * The {@code isCompleted} parameter corresponds to the completion status in the last","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" * instance of {@code Duke}.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" * @param details Details of the {@code Event}.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" * @param isCompleted Completion status of the {@code Event}.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" * @param start Start date and time of the {@code Event}, stored as a {@code LocalDateTime} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" * @param end End date and time of the {@code Event}, stored as a {@code LocalDateTime} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" public Event(String details, boolean isCompleted, LocalDateTime start,","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" LocalDateTime end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" super(details, isCompleted);","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":" * Returns the string representation of the {@code Event}, to be","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":" * printed in the {@code list} method.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":" * @return String representation of the {@code Event}.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yytan25"},"content":" DateTimeFormatter timeFormatter \u003d DateTimeFormatter.ofPattern(\"HH:mm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"yytan25"},"content":" String startDate \u003d this.start.toLocalDate().format(dateFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"yytan25"},"content":" String endDate \u003d this.end.toLocalDate().format(dateFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"yytan25"},"content":" String startTime \u003d this.start.toLocalTime().format(timeFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"yytan25"},"content":" String endTime \u003d this.end.toLocalTime().format(timeFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"yytan25"},"content":" return \"[E]\" + super.toString() + String.format(","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"yytan25"},"content":" \" (from: %s to: %s)\",","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"yytan25"},"content":" startDate + \" \" + startTime,","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"yytan25"},"content":" endDate + \" \" + endTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"yytan25":60}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":"import java.util.InputMismatchException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" private final Duke duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" public enum Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" TASK, TODO, DEADLINE, EVENT, LIST, MARK, UNMARK, DELETE, COMMANDS, BYE, FIND","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" * Constructs a new {@code Parser} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" * Can only be instantiated with a {@code Duke} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" * @param duke {@code Duke} object that called the constructor.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" * @param tasks {@code TaskList} object instantiated by the same {@code Duke} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" * @param ui {@code Ui} object instantiated by the same {@code Duke} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" Parser(Duke duke, duke.TaskList tasks, duke.Ui ui) { // Can only be instantiated with a Duke object","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" this.duke \u003d duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" * Parses the user input from the {@code Scanner}.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":" * If the input corresponds to one of the valid commands, the {@code executeCommand} method","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" * will execute the command. Otherwise, an error message will be printed. (This will be","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":" * treated as an invalid input.)","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":" * @param message Input from the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":" public void readInput(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":" executeCommand(Command.valueOf(message.toUpperCase()));","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":" catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"I\u0027m just a robot!%n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":" + \"I don\u0027t understand what %s is!%n\", message);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yytan25"},"content":" ui.incrementInvalidInputs();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"yytan25"},"content":" * Executes the command generated from the {@code readInput} method.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"yytan25"},"content":" * @param command Command to be executed.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"yytan25"},"content":" public void executeCommand(Command command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"yytan25"},"content":" switch (command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"yytan25"},"content":" case TASK:","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"yytan25"},"content":" duke.createTask();","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"yytan25"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"yytan25"},"content":" duke.createToDo();","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"yytan25"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"yytan25"},"content":" duke.createDeadline();","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"yytan25"},"content":" case EVENT:","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"yytan25"},"content":" duke.createEvent();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"yytan25"},"content":" case LIST:","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"yytan25"},"content":" duke.list();","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"yytan25"},"content":" case MARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"yytan25"},"content":" duke.markAsComplete();","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"yytan25"},"content":" case UNMARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"yytan25"},"content":" duke.markAsIncomplete();","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"yytan25"},"content":" case DELETE:","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"yytan25"},"content":" duke.deleteTask();","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"yytan25"},"content":" case COMMANDS:","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"yytan25"},"content":" ui.printCommands();","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"yytan25"},"content":" case BYE:","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"yytan25"},"content":" duke.isRunning \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"yytan25"},"content":" case FIND:","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"yytan25"},"content":" duke.findTask();","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"yytan25"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"yytan25"},"content":" // Shouldn\u0027t reach here","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"yytan25"},"content":" // Input errors should already be caught in the readInput() method.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"yytan25"},"content":" * Instantiates a {@code Scanner} object that reads the user\u0027s input when attempting","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"yytan25"},"content":" * to instantiate a {@code Task}. Then, checks if the details are empty, or if there","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"yytan25"},"content":" * already exists a {@code Task} of the same name.","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"yytan25"},"content":" * @param taskType Type of the {@code Task} being instantiated.","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"yytan25"},"content":" * @return Details of the {@code Task} for valid inputs; {@code null} otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"yytan25"},"content":" public String checkTaskInput(String taskType) {","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"yytan25"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Input %s details.%n\", taskType);","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"yytan25"},"content":" String message \u003d sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"yytan25"},"content":" if (message.isBlank()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"The %s details cannot be empty.%n\", taskType);","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"yytan25"},"content":" } else if (tasks.checkDuplicates(message)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Task %s already exists.%n\", message);","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"yytan25"},"content":" return message;","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"yytan25"},"content":" * Instantiates a {@code Scanner} object that reads the user\u0027s input when inputting a","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"yytan25"},"content":" * date. Then, checks if the details are empty, and if the format of the date is valid.","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"yytan25"},"content":" * @param taskType Type of the {@code Task} being instantiated.","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"yytan25"},"content":" * @param input Description of the date input, to be printed in the UI.","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"yytan25"},"content":" * @return {@code LocalDate} object corresponding to the user input if valid;","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"yytan25"},"content":" * null otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"yytan25"},"content":" public LocalDate checkDateInput(String taskType, String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"yytan25"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Input %s %s date. (Required format: YYYY-MM-DD)%n\",","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"yytan25"},"content":" taskType, input);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"yytan25"},"content":" String message \u003d sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"yytan25"},"content":" if (message.isBlank()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"The %s %s cannot be empty.%n\", taskType, input);","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"yytan25"},"content":" return LocalDate.parse(message);","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"yytan25"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Invalid date format. Please try again.%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"yytan25"},"content":" * Instantiates a {@code Scanner} object that reads the user\u0027s input when inputting a","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"yytan25"},"content":" * time. Then, checks if the details are empty, and if the format of the time is valid.","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"yytan25"},"content":" * If the task is a {@code Deadline}, and there is no input from the user, {@code checkTimeInput}","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"yytan25"},"content":" * will return {@code LocalTime.of(23, 59)}.","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"yytan25"},"content":" * @param taskType Type of the {@code Task} being instantiated.","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"yytan25"},"content":" * @param input Description of the time input, to be printed in the UI.","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"yytan25"},"content":" * @return {@code LocalTime} object corresponding to the user input if valid;","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"yytan25"},"content":" * null otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"yytan25"},"content":" public LocalTime checkTimeInput(String taskType, String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"yytan25"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Input %s %s time. (Required format: HH:MM)%n\",","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"yytan25"},"content":" taskType, input);","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"yytan25"},"content":" String message \u003d sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"yytan25"},"content":" if (message.isBlank()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"yytan25"},"content":" if (taskType.equals(\"deadline\") \u0026\u0026 input.equals(\"due\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"yytan25"},"content":" return LocalTime.of(23, 59);","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"The %s %s cannot be empty.%n\", taskType, input);","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"yytan25"},"content":" return LocalTime.parse(message);","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"yytan25"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Invalid time format. Please try again.%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"yytan25"},"content":" * Checks if the input {@code LocalDateTime} is at or after the current system time.","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"yytan25"},"content":" * @param taskType Type of the {@code Task} being instantiated.","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"yytan25"},"content":" * @param dateTime {@code LocalDateTime} of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"yytan25"},"content":" * @return {@code true} if the {@code LocalDateTime} is at or after the current system time;","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"yytan25"},"content":" * {@code false} otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"yytan25"},"content":" public boolean checkStartDateTime(String taskType, LocalDateTime dateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"yytan25"},"content":" if (dateTime.isBefore(LocalDateTime.now())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Cannot create %s before the current time. \"","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"yytan25"},"content":" + \"Please try again.%n\", taskType);","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"yytan25"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"yytan25"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"yytan25"},"content":" * Checks if the end time of a {@code Task} is at or after the start time.","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"yytan25"},"content":" * @param taskType Type of the {@code Task} being instantiated. Currently, only {@code Event}s","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"yytan25"},"content":" * require this method.","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"yytan25"},"content":" * @param start Start time of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"yytan25"},"content":" * @param end End time of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"yytan25"},"content":" * @return {@code true} if the end time is at or after the start time; {@code false} otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"yytan25"},"content":" public boolean checkTimeInterval(String taskType, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"yytan25"},"content":" if (end.isBefore(start)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Invalid %s time interval. Please try again.%n\", taskType);","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"yytan25"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"yytan25"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"yytan25"},"content":" * Gets all tasks in the {@code TaskList} containing a keyword input by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"yytan25"},"content":" * @return {@code ArrayList} of tasks matching the keyword; {@code null} if the user input is blank.","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"yytan25"},"content":" public ArrayList\u003cTask\u003e getMatchingTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"yytan25"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":234,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Please input search keyword.%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"yytan25"},"content":" String keyword \u003d sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"yytan25"},"content":" if (keyword.isBlank()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"yytan25"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":240,"author":{"gitId":"yytan25"},"content":" for (int i \u003d 0; i \u003c tasks.getNumOfTasks(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":241,"author":{"gitId":"yytan25"},"content":" Task t \u003d tasks.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":242,"author":{"gitId":"yytan25"},"content":" String details \u003d t.getDetails();","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"yytan25"},"content":" if (details.contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"yytan25"},"content":" matchingTasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":246,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":247,"author":{"gitId":"yytan25"},"content":" return matchingTasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":249,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":250,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":251,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":252,"author":{"gitId":"yytan25"},"content":" * Instantiates a new {@code Scanner} object that reads the user\u0027s input when attempting","lastModifiedDate":"2023-09-01"},{"lineNumber":253,"author":{"gitId":"yytan25"},"content":" * to mark, unmark, or delete a {@code Task}. Only positive integer inputs less than or","lastModifiedDate":"2023-09-01"},{"lineNumber":254,"author":{"gitId":"yytan25"},"content":" * equal to the total number of tasks are accepted.","lastModifiedDate":"2023-09-01"},{"lineNumber":255,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":256,"author":{"gitId":"yytan25"},"content":" * @param message Description of the command, to be printed in the UI.","lastModifiedDate":"2023-09-01"},{"lineNumber":257,"author":{"gitId":"yytan25"},"content":" * @return {@code taskNumber} that corresponds to the index of the {@code Task} in the","lastModifiedDate":"2023-09-01"},{"lineNumber":258,"author":{"gitId":"yytan25"},"content":" * {@code TaskList} if input is valid; {@code null} otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":259,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":260,"author":{"gitId":"yytan25"},"content":" public Integer launchConfirmationScreen(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":261,"author":{"gitId":"yytan25"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":262,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Please input the task number you wish to %s.%n\",","lastModifiedDate":"2023-09-01"},{"lineNumber":263,"author":{"gitId":"yytan25"},"content":" message);","lastModifiedDate":"2023-09-01"},{"lineNumber":264,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":265,"author":{"gitId":"yytan25"},"content":" for (int i \u003d 0; i \u003c tasks.getNumOfTasks(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":266,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"%d. \" + tasks.get(i).toString()","lastModifiedDate":"2023-09-01"},{"lineNumber":267,"author":{"gitId":"yytan25"},"content":" + \"%n\", i + 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":268,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":269,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":270,"author":{"gitId":"yytan25"},"content":" int taskNumber \u003d sc.nextInt();","lastModifiedDate":"2023-09-01"},{"lineNumber":271,"author":{"gitId":"yytan25"},"content":" if (taskNumber \u003e tasks.getNumOfTasks() || taskNumber \u003c 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":272,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Request unsuccessful. (reason: invalid task number)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":273,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":274,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":275,"author":{"gitId":"yytan25"},"content":" return taskNumber;","lastModifiedDate":"2023-09-01"},{"lineNumber":276,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":277,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":278,"author":{"gitId":"yytan25"},"content":" catch (InputMismatchException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":279,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Request unsuccessful. (reason: invalid input)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":280,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":281,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":282,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":283,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":284,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"yytan25":284}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" public Storage(duke.TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" * Greets the user and creates the requisite folder and text file, if required.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" @SuppressWarnings(\"ResultOfMethodCallIgnored\")","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" public void launchOnStart() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" File f \u003d new File(\"./data\");","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" f.mkdirs();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" File file \u003d new File(\"./data/tasks.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Due to technical issues, I\u0027m only available in guest mode.%n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" + \"I sincerely apologise for the inconvenience caused.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" * Reads previously saved tasks from the specified {@code filePath}, parses them and","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":" * directly adds them to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":" * @param filePath Relative path of the text file containing details on the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":" * @throws FileNotFoundException When the system is unable to find the specified file.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":" * @throws IllegalArgumentException When the system is unable to parse the saved tasks,","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":" * possibly due to the file being corrupted.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" public void readTasksFromDisk(String filePath) throws FileNotFoundException,","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":" IllegalArgumentException {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":" Scanner sc \u003d new Scanner(f);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":" String[] args \u003d sc.nextLine().split(\"/\", -1);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yytan25"},"content":" duke.TaskList.TaskType type;","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"yytan25"},"content":" LocalDateTime due \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"yytan25"},"content":" LocalDateTime start \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"yytan25"},"content":" LocalDateTime end \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"yytan25"},"content":" type \u003d TaskList.TaskType.valueOf(args[0].toUpperCase());","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"yytan25"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Task not found\");","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"yytan25"},"content":" String details \u003d args[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"yytan25"},"content":" boolean isCompleted \u003d args[2].equals(\"Y\");","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"yytan25"},"content":" if (type \u003d\u003d TaskList.TaskType.DEADLINE) {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"yytan25"},"content":" due \u003d LocalDateTime.parse(args[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"yytan25"},"content":" } else if (type \u003d\u003d TaskList.TaskType.EVENT) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"yytan25"},"content":" start \u003d LocalDateTime.parse(args[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"yytan25"},"content":" end \u003d LocalDateTime.parse(args[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"yytan25"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Could not retrieve date and/or time\");","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"yytan25"},"content":" switch (type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"yytan25"},"content":" case TASK:","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"yytan25"},"content":" Task t \u003d new Task(details, isCompleted);","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"yytan25"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"yytan25"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"yytan25"},"content":" ToDo todo \u003d new ToDo(details, isCompleted);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"yytan25"},"content":" tasks.add(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"yytan25"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"yytan25"},"content":" Deadline d \u003d new Deadline(details, isCompleted, due);","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"yytan25"},"content":" tasks.add(d);","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"yytan25"},"content":" case EVENT:","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"yytan25"},"content":" Event e \u003d new Event(details, isCompleted, start, end);","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"yytan25"},"content":" tasks.add(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"yytan25"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"yytan25"},"content":" // Shouldn\u0027t reach here","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"yytan25"},"content":" * Saves the tasks in the {@code TaskList} in the text file specified by the {@code filePath}.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"yytan25"},"content":" * @param filePath Relative path of the text file to be written to.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"yytan25"},"content":" * @param tasks {@code TaskList} containing the current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"yytan25"},"content":" * @throws IOException When the {@code FileWriter} is unable to write to the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"yytan25"},"content":" public void saveTasksToDisk(String filePath, duke.TaskList tasks) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"yytan25"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"yytan25"},"content":" BufferedWriter bw \u003d new BufferedWriter(fw);","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"yytan25"},"content":" for (int i \u003d 0; i \u003c tasks.getNumOfTasks(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"yytan25"},"content":" duke.TaskList.TaskType type \u003d tasks.getTaskType(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"yytan25"},"content":" Task t \u003d tasks.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"yytan25"},"content":" switch (type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"yytan25"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"yytan25"},"content":" bw.write(String.format(\"ToDo/%s/%c\",","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"yytan25"},"content":" t.getDetails(),","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"yytan25"},"content":" t.isCompleted ? \u0027Y\u0027 : \u0027N\u0027));","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"yytan25"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"yytan25"},"content":" bw.write(String.format(\"Deadline/%s/%c/%s\",","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"yytan25"},"content":" t.getDetails(),","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"yytan25"},"content":" t.isCompleted ? \u0027Y\u0027 : \u0027N\u0027,","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"yytan25"},"content":" ((Deadline) t).due));","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"yytan25"},"content":" case EVENT:","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"yytan25"},"content":" bw.write(String.format(\"Event/%s/%c/%s/%s\",","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"yytan25"},"content":" t.getDetails(),","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"yytan25"},"content":" t.isCompleted ? \u0027Y\u0027 : \u0027N\u0027,","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"yytan25"},"content":" ((Event) t).start,","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"yytan25"},"content":" ((Event) t).end));","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"yytan25"},"content":" case TASK:","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"yytan25"},"content":" bw.write(String.format(\"Task/%s/%c\",","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"yytan25"},"content":" t.getDetails(),","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"yytan25"},"content":" t.isCompleted ? \u0027Y\u0027 : \u0027N\u0027));","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"yytan25"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"yytan25"},"content":" // Shouldn\u0027t reach here","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"yytan25"},"content":" bw.newLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"yytan25"},"content":" bw.flush();","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"yytan25"},"content":" bw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"yytan25"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"yytan25":147}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":" protected String details;","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":" protected boolean isCompleted;","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":" * Constructs a new {@code Task} object, with {@code isCompleted} set to false.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":" * @param details Details of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" public Task(String details) {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" * Loads a {@code Task} object that was previously stored in the hard disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" * The {@code isCompleted} parameter corresponds to the completion status in the last","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" * instance of {@code Duke}.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" * @param details Details of the {@code Task}. ","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" * @param isCompleted Completion status of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" public Task(String details, boolean isCompleted) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" this.isCompleted \u003d isCompleted;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" * Sets the {@code Task} as completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" public void setCompleted() {","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" this.isCompleted \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":" * Sets the {@code Task} as incomplete.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":" public void setIncomplete() {","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":" * Gets the details of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":" * @return Details of the {@code Task.}","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"yytan25"},"content":" protected String getDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"yytan25"},"content":" return this.details;","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"yytan25"},"content":" * Returns the string representation of the {@code Task}, to be","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"yytan25"},"content":" * printed in the {@code list} method.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"yytan25"},"content":" * @return String representation of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"yytan25"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":62,"author":{"gitId":"yytan25"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"yytan25"},"content":" if (this.isCompleted) {","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"yytan25"},"content":" return \"[X] \" + this.details;","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"yytan25"},"content":" return \"[ ] \" + this.details;","lastModifiedDate":"2023-08-20"},{"lineNumber":67,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":69,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"yytan25":69}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":" private int numOfTasks \u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":" private int numOfCompletedTasks \u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":" public enum TaskType {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":" TASK, TODO, DEADLINE, EVENT","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" * Creates a new {@code ArrayList} to store the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" * Adds a {@code Task} to the {@code ArrayList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" * @param t {@code Task} to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" public void add(Task t) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" this.numOfTasks++;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" if (t.isCompleted) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" this.numOfCompletedTasks++;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" * Gets the {@code Task} object at the specified index.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":" * @param i Index of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" * @return {@code Task} object at index i.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":" public Task get(int i) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":" if (i \u003e -1 \u0026\u0026 i \u003c numOfTasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":" return tasks.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":" * Gets the total number of {@code Task}s in the {@code ArrayList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"yytan25"},"content":" * @return Total number of {@code Task}s.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"yytan25"},"content":" public int getNumOfTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"yytan25"},"content":" return this.numOfTasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"yytan25"},"content":" * Gets the total number of completed {@code Task}s in the {@code ArrayList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"yytan25"},"content":" * @return Total number of completed {@code Task}s.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"yytan25"},"content":" public int getNumOfCompletedTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"yytan25"},"content":" return this.numOfCompletedTasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"yytan25"},"content":" * Checks if the {@code ArrayList} is empty.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"yytan25"},"content":" * @return {@code true} iff the {@code ArrayList} is empty; {@code false} otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"yytan25"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"yytan25"},"content":" return this.numOfTasks \u003d\u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"yytan25"},"content":" * Checks if there are completed tasks in the {@code ArrayList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"yytan25"},"content":" * @return {@code true} iff the {@code ArrayList} contains at least one completed task;","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"yytan25"},"content":" * {@code false} otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"yytan25"},"content":" public boolean hasCompletedTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"yytan25"},"content":" return this.numOfCompletedTasks \u003e 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"yytan25"},"content":" * Increments the number of completed tasks when a {@code Task} is marked as complete.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"yytan25"},"content":" public void incrementCompletedTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"yytan25"},"content":" this.numOfCompletedTasks++;","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"yytan25"},"content":" * Decrements the number of completed tasks when a {@code Task} is marked as incomplete.","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"yytan25"},"content":" public void decrementCompletedTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"yytan25"},"content":" this.numOfCompletedTasks--;","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"yytan25"},"content":" * Checks if there already exists a {@code Task} in the {@code ArrayList} with the","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"yytan25"},"content":" * given details.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"yytan25"},"content":" * @param details Details to be checked.","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"yytan25"},"content":" * @return {@code true} iff there exists a {@code Task} with the given details;","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"yytan25"},"content":" * false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"yytan25"},"content":" public boolean checkDuplicates(String details) {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"yytan25"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"yytan25"},"content":" if (details.equals(t.getDetails())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"yytan25"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"yytan25"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"yytan25"},"content":" * Gets the {@code TaskType} of the {@code Task} at the specified index.","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"yytan25"},"content":" * @param i Index of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"yytan25"},"content":" * @return {@code TaskType} of {@code Task} at index i.","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"yytan25"},"content":" public TaskType getTaskType(int i) {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"yytan25"},"content":" Task t \u003d this.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"yytan25"},"content":" if (t instanceof ToDo) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"yytan25"},"content":" return TaskType.TODO;","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"yytan25"},"content":" } else if (t instanceof Deadline) {","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"yytan25"},"content":" return TaskType.DEADLINE;","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"yytan25"},"content":" } else if (t instanceof Event) {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"yytan25"},"content":" return TaskType.EVENT;","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"yytan25"},"content":" return TaskType.TASK;","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"yytan25"},"content":" * Removes a {@code Task} from the {@code ArrayList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"yytan25"},"content":" * @param t {@code Task} to be removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"yytan25"},"content":" public void remove(Task t) {","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"yytan25"},"content":" tasks.remove(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"yytan25"},"content":" this.numOfTasks--;","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"yytan25"},"content":" if (t.isCompleted) {","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"yytan25"},"content":" this.numOfCompletedTasks--;","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"yytan25":147}},{"path":"src/main/java/duke/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":" * Constructs a new {@code ToDo} object, with {@code isCompleted} set to false.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":" * @param details Details of the {@code ToDo}.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":" public ToDo(String details) {","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":" super(details);","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" * Loads a {@code ToDo} object that was previously stored in the hard disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" * The {@code isCompleted} parameter corresponds to the completion status in the last","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" * instance of {@code Duke}.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" * @param details Details of the {@code ToDo}.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" * @param isCompleted Completion status of the {@code ToDo}.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" public ToDo(String details, boolean isCompleted) {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" super(details, isCompleted);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" * Returns the string representation of the {@code ToDo}, to be","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" * printed in the {@code list} method.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" * @return String representation of the {@code ToDo}.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"yytan25":37}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":" private final String name;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":" private int invalidInputCount \u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":" public Ui() {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":" this.name \u003d \"Meg\";","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" * Prints a horizontal line to demarcate the end of an operation.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" public void printHorizontalLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" for (int i \u003d 0; i \u003c 20; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" System.out.print(\"-\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" System.out.println();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" * Prints the available commands for the user, when {@code Duke} is started or","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" * when the user inputs {@code commands}.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" public void printCommands() {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mtask\\033[0m - Create a new task%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mtodo\\033[0m - Create a new todo%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mdeadline\\033[0m - Create a new deadline%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mevent\\033[0m - Create a new event%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mlist\\033[0m - View your current tasks and completion status%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mmark\\033[0m - Mark a task as complete%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3munmark\\033[0m - Mark a task as incomplete%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mdelete\\033[0m - Delete a task%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mbye\\033[0m - Exit the program%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mfind\\033[0m - Find all tasks containing a given keyword%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":" * Prints the statements when {@code Duke} is first instantiated.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":" public void printSelfIntroduction() {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"I\u0027m %s. Nice to meet you.%n\", this.name);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":" System.out.println(\"I support the following commands:\" + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":" printCommands();","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yytan25"},"content":" * Prints the statements when a user operation is over.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"yytan25"},"content":" public void printEndOfOperation() {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"yytan25"},"content":" System.out.println();","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Anything else you want me to do?%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Just so you know, you can input \\033[3mcommands\\033[0m to view the commands again.%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"yytan25"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"yytan25"},"content":" * Increments the number of invalid inputs. When the number of consecutive invalid","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"yytan25"},"content":" * inputs reaches a certain threshold, {@code Duke} will forcibly terminate.","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"yytan25"},"content":" public void incrementInvalidInputs() {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"yytan25"},"content":" this.invalidInputCount++;","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"yytan25"},"content":" * Gets the number of consecutive invalid inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"yytan25"},"content":" * @return Number of consecutive invalid inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"yytan25"},"content":" public int getInvalidInputCount() {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"yytan25"},"content":" return this.invalidInputCount;","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"yytan25":76}},{"path":"src/test/java/duke/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":"import java.time.Month;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" public void deadline_toString_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" Deadline d \u003d new Deadline(\"test\",","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" LocalDateTime.of(LocalDate.of(2023, Month.JANUARY, 1),","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" LocalTime.of(23, 59)));","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" assertEquals(\"[D][ ] test (by: Sun, 01 Jan 2023 23:59)\",","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" d.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" public void deadline_completed_toString_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" Deadline d \u003d new Deadline(\"test\", true,","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" LocalDateTime.of(LocalDate.of(2023, Month.JANUARY, 1),","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" LocalTime.of(23, 59)));","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" assertEquals(\"[D][X] test (by: Sun, 01 Jan 2023 23:59)\",","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" d.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"yytan25":30}},{"path":"src/test/java/duke/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":"import java.time.Month;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":"public class EventTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" public void event_toString_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" Event e \u003d new Event(\"test\",","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" LocalDateTime.of(LocalDate.of(2023, Month.JANUARY, 1),","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" LocalTime.of(0, 0)),","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" LocalDateTime.of(LocalDate.of(2023, Month.JANUARY, 1),","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" LocalTime.of(23, 59)));","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" assertEquals(\"[E][ ] test (from: 01 Jan 2023 00:00 to: 01 Jan 2023 23:59)\",","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" e.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" public void event_completed_toString_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" Event e \u003d new Event(\"test\", true,","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" LocalDateTime.of(LocalDate.of(2023, Month.JANUARY, 1),","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" LocalTime.of(0, 0)),","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" LocalDateTime.of(LocalDate.of(2023, Month.JANUARY, 1),","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" LocalTime.of(23, 59)));","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" assertEquals(\"[E][X] test (from: 01 Jan 2023 00:00 to: 01 Jan 2023 23:59)\",","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" e.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"yytan25":37}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" public void addTask_numTasksIncremented() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" tasks.add(new Task(\"test\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" assertEquals(1, tasks.getNumOfTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" public void addCompletedTask_numTasksIncremented() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" tasks.add(new Task(\"test\", true));","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" assertEquals(1, tasks.getNumOfTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" public void addCompletedTask_numCompletedTasksIncremented() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" tasks.add(new Task(\"test\", true));","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" assertEquals(1, tasks.getNumOfCompletedTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" public void addTask_getTaskType_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" tasks.add(new Task(\"test\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":" assertEquals(TaskList.TaskType.TASK, tasks.getTaskType(0));","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":" public void addToDo_getTaskType_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":" tasks.add(new ToDo(\"test\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" assertEquals(TaskList.TaskType.TODO, tasks.getTaskType(0));","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":" public void addDeadline_getTaskType_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yytan25"},"content":" tasks.add(new Deadline(\"test\", LocalDateTime.MIN));","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"yytan25"},"content":" assertEquals(TaskList.TaskType.DEADLINE, tasks.getTaskType(0));","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"yytan25"},"content":" public void addEvent_getTaskType_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"yytan25"},"content":" tasks.add(new Event(\"test\", LocalDateTime.MIN, LocalDateTime.MAX));","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"yytan25"},"content":" assertEquals(TaskList.TaskType.EVENT, tasks.getTaskType(0));","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"yytan25"},"content":" public void removeTask_numTasksDecremented() {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"yytan25"},"content":" Task t \u003d new Task(\"test\");","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"yytan25"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"yytan25"},"content":" tasks.remove(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"yytan25"},"content":" assertEquals(0, tasks.getNumOfTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"yytan25"},"content":" public void removeCompletedTask_numTasksDecremented() {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"yytan25"},"content":" Task t \u003d new Task(\"test\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"yytan25"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"yytan25"},"content":" tasks.remove(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"yytan25"},"content":" assertEquals(0, tasks.getNumOfTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"yytan25"},"content":" public void removeCompletedTask_numCompletedTasksDecremented() {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"yytan25"},"content":" Task t \u003d new Task(\"test\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"yytan25"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"yytan25"},"content":" tasks.remove(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"yytan25"},"content":" assertEquals(0, tasks.getNumOfCompletedTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"yytan25"},"content":" public void checkDuplicates_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"yytan25"},"content":" Task t \u003d new Task(\"test\");","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"yytan25"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"yytan25"},"content":" assertTrue(tasks.checkDuplicates(\"test\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"yytan25":96}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"finish software engineering assignment","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"fri 2359","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"event","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"party at Jon\u0027s","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"fri 8pm","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"sat 2am","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":"list","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yytan25":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"echo \"The output will be redirected to stdoutput.txt\"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-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":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-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"}],"authorContributionMap":{"yytan25":2,"-":21}}] +[{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"Task/eat breakfast/N","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"Task/eat lunch/N","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"Task/eat dinner/N","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"Task/Eat supper/N","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"Deadline/eat my words/N/2023-09-01T23:59","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"yytan25":5}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":" * The {@code Deadline} class.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":" protected LocalDateTime due;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" * Constructs a new {@code Deadline} object, with {@code isCompleted} set to false.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" * @param details Details of the {@code Deadline}.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" * @param due Due date and time of the {@code Deadline}, stored as a {@code LocalDateTime} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" public Deadline(String details, LocalDateTime due) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" super(details);","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" this.due \u003d due;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" * Loads a {@code Deadline} object that was previously stored in the hard disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" * The {@code isCompleted} parameter corresponds to the completion status in the last","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" * instance of {@code Duke}.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" * @param details Details of the {@code Deadline}.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" * @param isCompleted Completion status of the {@code Deadline}.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" * @param due Due date and time of the {@code Deadline}, stored as a {@code LocalDateTime} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" public Deadline(String details, boolean isCompleted, LocalDateTime due) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" super(details, isCompleted);","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" this.due \u003d due;","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":" * Returns the string representation of the {@code Deadline}, to be","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":" * printed in the {@code list} method.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":" * @return String representation of the {@code Deadline}.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"E, dd MMM yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":" DateTimeFormatter timeFormatter \u003d DateTimeFormatter.ofPattern(\"HH:mm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":" + this.due.toLocalDate().format(dateFormatter) + \" \"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yytan25"},"content":" + this.due.toLocalTime().format(timeFormatter) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"yytan25":52}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" * The {@code Duke} class. Main class that drives other functions.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" * Initiates a new {@code Duke} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" * @throws IOException When the {@code saveTasksToDisk()} method in the {@code Storage} class","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" * fails to function properly.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" public Duke() throws IOException {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" this.storage \u003d new Storage(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" this.parser \u003d new Parser(this, tasks, ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" this.run();","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":" * Contains the tasks required for {@code Duke} to start.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" * Also acts as a driver method for the {@code Parser} to read the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":" * @throws IOException When the {@code saveTasksToDisk()} method in the {@code Storage} class","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":" * fails to function properly.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":" public void run() throws IOException {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" storage.launchOnStart();","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":" storage.readTasksFromDisk(\"./data/tasks.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":" System.out.println(\"File not found. Please check your directory and try again.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":" this.exit(2);","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"yytan25"},"content":" ui.printSelfIntroduction();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"yytan25"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"yytan25"},"content":" while (true) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"yytan25"},"content":" if (ui.getInvalidInputCount() \u003e\u003d 10) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"yytan25"},"content":" this.exit(1);","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"yytan25"},"content":" } else if (ui.getInvalidInputCount() \u003d\u003d 8) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"yytan25"},"content":" System.out.println(\"If you keep giving me nonsense, I\u0027m leaving!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"yytan25"},"content":" String msg \u003d sc.nextLine();","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"yytan25"},"content":" parser.readInput(msg);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"yytan25"},"content":" this.exit(0);","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"yytan25"},"content":" * Creates a new {@code Task} object with details input by the user and adds it to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"yytan25"},"content":" public void createTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"yytan25"},"content":" String details \u003d parser.checkTaskInput(\"task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"yytan25"},"content":" if (details !\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"yytan25"},"content":" tasks.add(new Task(details));","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Don\u0027t expect me to %s for you!%n\", details);","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"yytan25"},"content":" * Creates a new {@code Todo} object with details input by the user and adds it to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"yytan25"},"content":" public void createToDo() {","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"yytan25"},"content":" String details \u003d parser.checkTaskInput(\"todo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"yytan25"},"content":" if (details !\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"yytan25"},"content":" tasks.add(new ToDo(details));","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Stop talking to me! Go and %s!%n\", details);","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"yytan25"},"content":" * Creates a new {@code Deadline} object with details input by the user and adds it to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"yytan25"},"content":" * If no time is input by the user, the time will be set to 23:59 by default.","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"yytan25"},"content":" public void createDeadline() {","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"yytan25"},"content":" String details \u003d parser.checkTaskInput(\"deadline\");","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"yytan25"},"content":" if (details \u003d\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"yytan25"},"content":" LocalDate dueDate \u003d parser.checkDateInput(\"deadline\", \"due\");","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"yytan25"},"content":" if (dueDate \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"yytan25"},"content":" LocalTime dueTime \u003d parser.checkTimeInput(\"deadline\", \"due\");","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"yytan25"},"content":" if (dueTime \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"yytan25"},"content":" // Shouldn\u0027t reach here as creation of deadline without time input is supported.","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"yytan25"},"content":" // Invalid input is also handled in the Parser class.","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"yytan25"},"content":" // Default dueTime is 23:59.","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"yytan25"},"content":" LocalDateTime due \u003d dueTime.atDate(dueDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"yytan25"},"content":" if (parser.checkStartDateTime(\"deadline\", due)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"yytan25"},"content":" tasks.add(new Deadline(details, due));","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Just saying, better %s now.%n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"yytan25"},"content":" + \"Not like it\u0027s my problem if you don\u0027t.%n\", details);","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"yytan25"},"content":" * Creates a new {@code Event} object with details input by the user and adds it to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"yytan25"},"content":" public void createEvent() {","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"yytan25"},"content":" String details \u003d parser.checkTaskInput(\"event\");","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"yytan25"},"content":" if (details \u003d\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"yytan25"},"content":" LocalDate startDate \u003d parser.checkDateInput(\"event\", \"start\");","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"yytan25"},"content":" if (startDate \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"yytan25"},"content":" LocalTime startTime \u003d parser.checkTimeInput(\"event\", \"start\");","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"yytan25"},"content":" if (startTime \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"yytan25"},"content":" LocalDate endDate \u003d parser.checkDateInput(\"event\", \"end\");","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"yytan25"},"content":" if (endDate \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"yytan25"},"content":" LocalTime endTime \u003d parser.checkTimeInput(\"event\", \"end\");","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"yytan25"},"content":" if (endTime \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"yytan25"},"content":" LocalDateTime start \u003d startTime.atDate(startDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"yytan25"},"content":" LocalDateTime end \u003d endTime.atDate(endDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"yytan25"},"content":" if (parser.checkStartDateTime(\"event\", end)","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"yytan25"},"content":" \u0026\u0026 parser.checkTimeInterval(\"event\", start, end)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"yytan25"},"content":" tasks.add(new Event(details, start, end));","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Wow, you have a %s?%n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"yytan25"},"content":" + \"Uhh, n-not like I wanna join you!%n\", details);","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":152,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":154,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"yytan25"},"content":" * Prints all stored Task objects and prints them in a list format.","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"yytan25"},"content":" * Also shows the completion status of each task marked with an \"[X]\", and the","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"yytan25"},"content":" * breakdown of completed/incomplete tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"yytan25"},"content":" public void list() {","lastModifiedDate":"2023-08-20"},{"lineNumber":160,"author":{"gitId":"yytan25"},"content":" int numOfTasks \u003d tasks.getNumOfTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"yytan25"},"content":" int numOfCompletedTasks \u003d tasks.getNumOfCompletedTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"You have %d tasks. (%d complete, %d incomplete)%n\",","lastModifiedDate":"2023-08-21"},{"lineNumber":163,"author":{"gitId":"yytan25"},"content":" numOfTasks, numOfCompletedTasks, numOfTasks - numOfCompletedTasks);","lastModifiedDate":"2023-08-21"},{"lineNumber":164,"author":{"gitId":"yytan25"},"content":" for (int i \u003d 0; i \u003c numOfTasks; i++) {","lastModifiedDate":"2023-08-20"},{"lineNumber":165,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"%d. \" + tasks.get(i).toString()","lastModifiedDate":"2023-08-20"},{"lineNumber":166,"author":{"gitId":"yytan25"},"content":" + \"%n\", i + 1);","lastModifiedDate":"2023-08-20"},{"lineNumber":167,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":168,"author":{"gitId":"yytan25"},"content":" if (numOfCompletedTasks \u003d\u003d numOfTasks) {","lastModifiedDate":"2023-08-21"},{"lineNumber":169,"author":{"gitId":"yytan25"},"content":" System.out.println(\"You\u0027ve completed all your tasks. Good for you.\");","lastModifiedDate":"2023-08-21"},{"lineNumber":170,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":171,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Don\u0027t expect me to remember them for you!\");","lastModifiedDate":"2023-08-20"},{"lineNumber":172,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":173,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":175,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":176,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"yytan25"},"content":" * Marks a selected task as complete, with the task number input by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"yytan25"},"content":" public void markAsComplete() {","lastModifiedDate":"2023-08-20"},{"lineNumber":180,"author":{"gitId":"yytan25"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"yytan25"},"content":" System.out.println(\"No tasks to mark.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":182,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Please create a task first.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":183,"author":{"gitId":"yytan25"},"content":" ui.incrementInvalidInputs();","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":186,"author":{"gitId":"yytan25"},"content":" Integer taskNumber \u003d parser.launchConfirmationScreen(\"mark as complete\");","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"yytan25"},"content":" if (taskNumber !\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":188,"author":{"gitId":"yytan25"},"content":" Task task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-20"},{"lineNumber":189,"author":{"gitId":"yytan25"},"content":" if (!task.isCompleted) {","lastModifiedDate":"2023-08-20"},{"lineNumber":190,"author":{"gitId":"yytan25"},"content":" task.setCompleted();","lastModifiedDate":"2023-08-20"},{"lineNumber":191,"author":{"gitId":"yytan25"},"content":" tasks.incrementCompletedTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Task %d set as complete.%n\", taskNumber);","lastModifiedDate":"2023-08-20"},{"lineNumber":193,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":194,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Task %d is already complete.%n Stop wasting my time!%n\", taskNumber);","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":196,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":197,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":199,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":200,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":201,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"yytan25"},"content":" * Marks a selected task as incomplete, with the task number input by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"yytan25"},"content":" public void markAsIncomplete() {","lastModifiedDate":"2023-08-20"},{"lineNumber":205,"author":{"gitId":"yytan25"},"content":" if (!tasks.hasCompletedTasks()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"yytan25"},"content":" System.out.println(\"No tasks to unmark.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":207,"author":{"gitId":"yytan25"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"yytan25"},"content":" System.out.println(\"You have no completed tasks.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":209,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":210,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Please create a task first.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":211,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":212,"author":{"gitId":"yytan25"},"content":" ui.incrementInvalidInputs();","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":215,"author":{"gitId":"yytan25"},"content":" Integer taskNumber \u003d parser.launchConfirmationScreen(\"mark as incomplete\");","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"yytan25"},"content":" if (taskNumber !\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":217,"author":{"gitId":"yytan25"},"content":" Task task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-20"},{"lineNumber":218,"author":{"gitId":"yytan25"},"content":" if (task.isCompleted) {","lastModifiedDate":"2023-08-20"},{"lineNumber":219,"author":{"gitId":"yytan25"},"content":" task.setIncomplete();","lastModifiedDate":"2023-08-20"},{"lineNumber":220,"author":{"gitId":"yytan25"},"content":" tasks.decrementCompletedTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Task %d set as incomplete.%n\", taskNumber);","lastModifiedDate":"2023-08-20"},{"lineNumber":222,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":223,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Task %d is already incomplete.%n Stop wasting my time!%n\", taskNumber);","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":225,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":226,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":228,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":229,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":230,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"yytan25"},"content":" * Deletes a selected task from the list, with the task number input by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"yytan25"},"content":" public void deleteTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":234,"author":{"gitId":"yytan25"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"yytan25"},"content":" System.out.println(\"No tasks to delete.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":236,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Please create a task first.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":237,"author":{"gitId":"yytan25"},"content":" ui.incrementInvalidInputs();","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":240,"author":{"gitId":"yytan25"},"content":" Integer taskNumber \u003d parser.launchConfirmationScreen(\"delete\");","lastModifiedDate":"2023-09-01"},{"lineNumber":241,"author":{"gitId":"yytan25"},"content":" if (taskNumber !\u003d null) {","lastModifiedDate":"2023-08-24"},{"lineNumber":242,"author":{"gitId":"yytan25"},"content":" Task task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":243,"author":{"gitId":"yytan25"},"content":" tasks.remove(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":244,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Task %d deleted successfully.%n You now have %d tasks.%n\",","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"yytan25"},"content":" taskNumber, tasks.getNumOfTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":246,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":247,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":249,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":250,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":251,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":252,"author":{"gitId":"yytan25"},"content":" * Finds all tasks containing a keyword input by the user, and prints them in a list format.","lastModifiedDate":"2023-09-01"},{"lineNumber":253,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":254,"author":{"gitId":"yytan25"},"content":" public void findTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":255,"author":{"gitId":"yytan25"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":256,"author":{"gitId":"yytan25"},"content":" System.out.println(\"No tasks to find.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":257,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Please create a task first.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":258,"author":{"gitId":"yytan25"},"content":" ui.incrementInvalidInputs();","lastModifiedDate":"2023-09-01"},{"lineNumber":259,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":260,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":261,"author":{"gitId":"yytan25"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d parser.getMatchingTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":262,"author":{"gitId":"yytan25"},"content":" if (matchingTasks \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":263,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Keyword cannot be empty. Please try again.%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":264,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":265,"author":{"gitId":"yytan25"},"content":" } else if (matchingTasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":266,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"No tasks with your keyword. Please try again.%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":267,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":268,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":269,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Here are the matching tasks in your list:%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":270,"author":{"gitId":"yytan25"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":271,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"%d. \" + matchingTasks.get(i).toString()","lastModifiedDate":"2023-09-01"},{"lineNumber":272,"author":{"gitId":"yytan25"},"content":" + \"%n\", i + 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":273,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":274,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":275,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":276,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":277,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":278,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":279,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":280,"author":{"gitId":"yytan25"},"content":" * Terminates the {@code Duke} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":281,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":282,"author":{"gitId":"yytan25"},"content":" * @param status Indicates the cause of termination as follows:","lastModifiedDate":"2023-09-01"},{"lineNumber":283,"author":{"gitId":"yytan25"},"content":" * 0 - Normal operations.","lastModifiedDate":"2023-09-01"},{"lineNumber":284,"author":{"gitId":"yytan25"},"content":" * 1 - Excessive invalid inputs from user.","lastModifiedDate":"2023-09-01"},{"lineNumber":285,"author":{"gitId":"yytan25"},"content":" * 2 - When {@code FileNotFoundException} is thrown.","lastModifiedDate":"2023-09-01"},{"lineNumber":286,"author":{"gitId":"yytan25"},"content":" * @throws IOException When the {@code saveTasksToDisk()} method in the {@code Storage} class","lastModifiedDate":"2023-09-01"},{"lineNumber":287,"author":{"gitId":"yytan25"},"content":" * fails to function properly.","lastModifiedDate":"2023-09-01"},{"lineNumber":288,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":289,"author":{"gitId":"yytan25"},"content":" public void exit(int status) throws IOException {","lastModifiedDate":"2023-08-26"},{"lineNumber":290,"author":{"gitId":"yytan25"},"content":" storage.saveTasksToDisk(\"./data/tasks.txt\", tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":291,"author":{"gitId":"yytan25"},"content":" if (status \u003d\u003d 1) {","lastModifiedDate":"2023-08-26"},{"lineNumber":292,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"I\u0027ve had enough of your nonsense!%n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":293,"author":{"gitId":"yytan25"},"content":" + \"Don\u0027t let me see you again!%n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":294,"author":{"gitId":"yytan25"},"content":" } else if (status \u003d\u003d 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":295,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Finally I can rest. Bye!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":296,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":297,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":298,"author":{"gitId":"yytan25"},"content":" System.exit(0);","lastModifiedDate":"2023-08-24"},{"lineNumber":299,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":300,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":301,"author":{"gitId":"yytan25"},"content":" public static void main(String[] args) throws IOException {","lastModifiedDate":"2023-08-26"},{"lineNumber":302,"author":{"gitId":"yytan25"},"content":" new Duke();","lastModifiedDate":"2023-08-19"},{"lineNumber":303,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":304,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"yytan25":301,"-":3}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":" * The {@code Event} class.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":" protected LocalDateTime end;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" * Constructs a new {@code Event} object, with {@code isCompleted} set to false.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" * @param details Details of the {@code Event}.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" * @param start Start date and time of the {@code Event}, stored as a {@code LocalDateTime} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" * @param end End date and time of the {@code Event}, stored as a {@code LocalDateTime} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" public Event(String details, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" super(details);","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" * Loads a {@code Event} object that was previously stored in the hard disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" * The {@code isCompleted} parameter corresponds to the completion status in the last","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" * instance of {@code Duke}.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" * @param details Details of the {@code Event}.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" * @param isCompleted Completion status of the {@code Event}.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" * @param start Start date and time of the {@code Event}, stored as a {@code LocalDateTime} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" * @param end End date and time of the {@code Event}, stored as a {@code LocalDateTime} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":" public Event(String details, boolean isCompleted, LocalDateTime start,","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" LocalDateTime end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":" super(details, isCompleted);","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":" * Returns the string representation of the {@code Event}, to be","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":" * printed in the {@code list} method.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":" * @return String representation of the {@code Event}.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yytan25"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"yytan25"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"yytan25"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"yytan25"},"content":" DateTimeFormatter timeFormatter \u003d DateTimeFormatter.ofPattern(\"HH:mm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"yytan25"},"content":" String startDate \u003d this.start.toLocalDate().format(dateFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"yytan25"},"content":" String endDate \u003d this.end.toLocalDate().format(dateFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"yytan25"},"content":" String startTime \u003d this.start.toLocalTime().format(timeFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"yytan25"},"content":" String endTime \u003d this.end.toLocalTime().format(timeFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"yytan25"},"content":" return \"[E]\" + super.toString() + String.format(","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"yytan25"},"content":" \" (from: %s to: %s)\",","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"yytan25"},"content":" startDate + \" \" + startTime,","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"yytan25"},"content":" endDate + \" \" + endTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"yytan25":63}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":"import java.util.InputMismatchException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" * The {@code Parser} class. Deals with making sense of the user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" private final Duke duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" * Enumeration of all possible user commands.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" public enum Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" TASK, TODO, DEADLINE, EVENT, LIST, MARK, UNMARK, DELETE, COMMANDS, BYE, FIND","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" * Constructs a new {@code Parser} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" * Can only be instantiated with a {@code Duke} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" * @param duke {@code Duke} object that called the constructor.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" * @param tasks {@code TaskList} object instantiated by the same {@code Duke} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" * @param ui {@code Ui} object instantiated by the same {@code Duke} object.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" Parser(Duke duke, duke.TaskList tasks, duke.Ui ui) { // Can only be instantiated with a Duke object","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":" this.duke \u003d duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":" * Parses the user input from the {@code Scanner}.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" * If the input corresponds to one of the valid commands, the {@code executeCommand} method","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":" * will execute the command. Otherwise, an error message will be printed. (This will be","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":" * treated as an invalid input.)","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":" * @param message Input from the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yytan25"},"content":" public void readInput(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"yytan25"},"content":" executeCommand(Command.valueOf(message.toUpperCase()));","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"yytan25"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"I\u0027m just a robot!%n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"yytan25"},"content":" + \"I don\u0027t understand what %s is!%n\", message);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"yytan25"},"content":" ui.incrementInvalidInputs();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"yytan25"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Something went wrong: \" + e);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"yytan25"},"content":" * Executes the command generated from the {@code readInput} method.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"yytan25"},"content":" * @param command Command to be executed.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"yytan25"},"content":" public void executeCommand(Command command) throws IOException {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"yytan25"},"content":" switch (command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"yytan25"},"content":" case TASK:","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"yytan25"},"content":" duke.createTask();","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"yytan25"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"yytan25"},"content":" duke.createToDo();","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"yytan25"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"yytan25"},"content":" duke.createDeadline();","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"yytan25"},"content":" case EVENT:","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"yytan25"},"content":" duke.createEvent();","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"yytan25"},"content":" case LIST:","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"yytan25"},"content":" duke.list();","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"yytan25"},"content":" case MARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"yytan25"},"content":" duke.markAsComplete();","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"yytan25"},"content":" case UNMARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"yytan25"},"content":" duke.markAsIncomplete();","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"yytan25"},"content":" case DELETE:","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"yytan25"},"content":" duke.deleteTask();","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"yytan25"},"content":" case COMMANDS:","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"yytan25"},"content":" ui.printCommands();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"yytan25"},"content":" case BYE:","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"yytan25"},"content":" duke.exit(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"yytan25"},"content":" case FIND:","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"yytan25"},"content":" duke.findTask();","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"yytan25"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"yytan25"},"content":" // Shouldn\u0027t reach here","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"yytan25"},"content":" // Input errors should already be caught in the readInput() method.","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"yytan25"},"content":" * Instantiates a {@code Scanner} object that reads the user\u0027s input when attempting","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"yytan25"},"content":" * to instantiate a {@code Task}. Then, checks if the details are empty, or if there","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"yytan25"},"content":" * already exists a {@code Task} of the same name.","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"yytan25"},"content":" * @param taskType Type of the {@code Task} being instantiated.","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"yytan25"},"content":" * @return Details of the {@code Task} for valid inputs; {@code null} otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"yytan25"},"content":" public String checkTaskInput(String taskType) {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"yytan25"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Input %s details.%n\", taskType);","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"yytan25"},"content":" String message \u003d sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"yytan25"},"content":" if (message.isBlank()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"The %s details cannot be empty.%n\", taskType);","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"yytan25"},"content":" } else if (tasks.checkDuplicates(message)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Task %s already exists.%n\", message);","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"yytan25"},"content":" return message;","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"yytan25"},"content":" * Instantiates a {@code Scanner} object that reads the user\u0027s input when inputting a","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"yytan25"},"content":" * date. Then, checks if the details are empty, and if the format of the date is valid.","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"yytan25"},"content":" * @param taskType Type of the {@code Task} being instantiated.","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"yytan25"},"content":" * @param input Description of the date input, to be printed in the UI.","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"yytan25"},"content":" * @return {@code LocalDate} object corresponding to the user input if valid;","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"yytan25"},"content":" * null otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"yytan25"},"content":" public LocalDate checkDateInput(String taskType, String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"yytan25"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Input %s %s date. (Required format: YYYY-MM-DD)%n\",","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"yytan25"},"content":" taskType, input);","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"yytan25"},"content":" String message \u003d sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"yytan25"},"content":" if (message.isBlank()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"The %s %s cannot be empty.%n\", taskType, input);","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"yytan25"},"content":" return LocalDate.parse(message);","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"yytan25"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Invalid date format. Please try again.%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"yytan25"},"content":" * Instantiates a {@code Scanner} object that reads the user\u0027s input when inputting a","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"yytan25"},"content":" * time. Then, checks if the details are empty, and if the format of the time is valid.","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"yytan25"},"content":" * If the task is a {@code Deadline}, and there is no input from the user, {@code checkTimeInput}","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"yytan25"},"content":" * will return {@code LocalTime.of(23, 59)}.","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"yytan25"},"content":" * @param taskType Type of the {@code Task} being instantiated.","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"yytan25"},"content":" * @param input Description of the time input, to be printed in the UI.","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"yytan25"},"content":" * @return {@code LocalTime} object corresponding to the user input if valid;","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"yytan25"},"content":" * null otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"yytan25"},"content":" public LocalTime checkTimeInput(String taskType, String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"yytan25"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Input %s %s time. (Required format: HH:MM)%n\",","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"yytan25"},"content":" taskType, input);","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"yytan25"},"content":" String message \u003d sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"yytan25"},"content":" if (message.isBlank()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"yytan25"},"content":" if (taskType.equals(\"deadline\") \u0026\u0026 input.equals(\"due\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"yytan25"},"content":" return LocalTime.of(23, 59);","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"The %s %s cannot be empty.%n\", taskType, input);","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"yytan25"},"content":" return LocalTime.parse(message);","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"yytan25"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Invalid time format. Please try again.%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"yytan25"},"content":" * Checks if the input {@code LocalDateTime} is at or after the current system time.","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"yytan25"},"content":" * @param taskType Type of the {@code Task} being instantiated.","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"yytan25"},"content":" * @param dateTime {@code LocalDateTime} of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"yytan25"},"content":" * @return {@code true} if the {@code LocalDateTime} is at or after the current system time;","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"yytan25"},"content":" * {@code false} otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"yytan25"},"content":" public boolean checkStartDateTime(String taskType, LocalDateTime dateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"yytan25"},"content":" if (dateTime.isBefore(LocalDateTime.now())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Cannot create %s before the current time. \"","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"yytan25"},"content":" + \"Please try again.%n\", taskType);","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"yytan25"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"yytan25"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"yytan25"},"content":" * Checks if the end time of a {@code Task} is at or after the start time.","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"yytan25"},"content":" * @param taskType Type of the {@code Task} being instantiated. Currently, only {@code Event}s","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"yytan25"},"content":" * require this method.","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"yytan25"},"content":" * @param start Start time of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"yytan25"},"content":" * @param end End time of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"yytan25"},"content":" * @return {@code true} if the end time is at or after the start time; {@code false} otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"yytan25"},"content":" public boolean checkTimeInterval(String taskType, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"yytan25"},"content":" if (end.isBefore(start)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Invalid %s time interval. Please try again.%n\", taskType);","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"yytan25"},"content":" ui.printEndOfOperation();","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"yytan25"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"yytan25"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":234,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"yytan25"},"content":" * Gets all tasks in the {@code TaskList} containing a keyword input by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"yytan25"},"content":" * @return {@code ArrayList} of tasks matching the keyword; {@code null} if the user input is blank.","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":240,"author":{"gitId":"yytan25"},"content":" public ArrayList\u003cTask\u003e getMatchingTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":241,"author":{"gitId":"yytan25"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":242,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Please input search keyword.%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"yytan25"},"content":" String keyword \u003d sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"yytan25"},"content":" if (keyword.isBlank()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":246,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":247,"author":{"gitId":"yytan25"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"yytan25"},"content":" for (int i \u003d 0; i \u003c tasks.getNumOfTasks(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":249,"author":{"gitId":"yytan25"},"content":" Task t \u003d tasks.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":250,"author":{"gitId":"yytan25"},"content":" String details \u003d t.getDetails();","lastModifiedDate":"2023-09-01"},{"lineNumber":251,"author":{"gitId":"yytan25"},"content":" if (details.contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":252,"author":{"gitId":"yytan25"},"content":" matchingTasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":253,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":254,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":255,"author":{"gitId":"yytan25"},"content":" return matchingTasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":256,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":257,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":258,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":259,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":260,"author":{"gitId":"yytan25"},"content":" * Instantiates a new {@code Scanner} object that reads the user\u0027s input when attempting","lastModifiedDate":"2023-09-01"},{"lineNumber":261,"author":{"gitId":"yytan25"},"content":" * to mark, unmark, or delete a {@code Task}. Only positive integer inputs less than or","lastModifiedDate":"2023-09-01"},{"lineNumber":262,"author":{"gitId":"yytan25"},"content":" * equal to the total number of tasks are accepted.","lastModifiedDate":"2023-09-01"},{"lineNumber":263,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":264,"author":{"gitId":"yytan25"},"content":" * @param message Description of the command, to be printed in the UI.","lastModifiedDate":"2023-09-01"},{"lineNumber":265,"author":{"gitId":"yytan25"},"content":" * @return {@code taskNumber} that corresponds to the index of the {@code Task} in the","lastModifiedDate":"2023-09-01"},{"lineNumber":266,"author":{"gitId":"yytan25"},"content":" * {@code TaskList} if input is valid; {@code null} otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":267,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":268,"author":{"gitId":"yytan25"},"content":" public Integer launchConfirmationScreen(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":269,"author":{"gitId":"yytan25"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":270,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Please input the task number you wish to %s.%n\",","lastModifiedDate":"2023-09-01"},{"lineNumber":271,"author":{"gitId":"yytan25"},"content":" message);","lastModifiedDate":"2023-09-01"},{"lineNumber":272,"author":{"gitId":"yytan25"},"content":" ui.printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":273,"author":{"gitId":"yytan25"},"content":" for (int i \u003d 0; i \u003c tasks.getNumOfTasks(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":274,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"%d. \" + tasks.get(i).toString()","lastModifiedDate":"2023-09-01"},{"lineNumber":275,"author":{"gitId":"yytan25"},"content":" + \"%n\", i + 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":276,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":277,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":278,"author":{"gitId":"yytan25"},"content":" int taskNumber \u003d sc.nextInt();","lastModifiedDate":"2023-09-01"},{"lineNumber":279,"author":{"gitId":"yytan25"},"content":" if (taskNumber \u003e tasks.getNumOfTasks() || taskNumber \u003c 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":280,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Request unsuccessful. (reason: invalid task number)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":281,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":282,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":283,"author":{"gitId":"yytan25"},"content":" return taskNumber;","lastModifiedDate":"2023-09-01"},{"lineNumber":284,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":285,"author":{"gitId":"yytan25"},"content":" } catch (InputMismatchException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":286,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Request unsuccessful. (reason: invalid input)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":287,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":288,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":289,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":290,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":291,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"yytan25":291}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" * The {@code Storage} class. Deals with writing to, and reading from, text files.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" public Storage(duke.TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" * Greets the user and creates the requisite folder and text file, if required.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" @SuppressWarnings(\"ResultOfMethodCallIgnored\")","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" public void launchOnStart() {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" File f \u003d new File(\"./data\");","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" f.mkdirs();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" File file \u003d new File(\"./data/tasks.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Due to technical issues, I\u0027m only available in guest mode.%n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" + \"I sincerely apologise for the inconvenience caused.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":" * Reads previously saved tasks from the specified {@code filePath}, parses them and","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":" * directly adds them to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":" * @param filePath Relative path of the text file containing details on the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":" * @throws FileNotFoundException When the system is unable to find the specified file.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" * @throws IllegalArgumentException When the system is unable to parse the saved tasks,","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":" * possibly due to the file being corrupted.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":" public void readTasksFromDisk(String filePath) throws FileNotFoundException,","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":" IllegalArgumentException {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yytan25"},"content":" Scanner sc \u003d new Scanner(f);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"yytan25"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"yytan25"},"content":" String[] args \u003d sc.nextLine().split(\"/\", -1);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"yytan25"},"content":" duke.TaskList.TaskType type;","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"yytan25"},"content":" LocalDateTime due \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"yytan25"},"content":" LocalDateTime start \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"yytan25"},"content":" LocalDateTime end \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"yytan25"},"content":" type \u003d TaskList.TaskType.valueOf(args[0].toUpperCase());","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"yytan25"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Task not found\");","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"yytan25"},"content":" String details \u003d args[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"yytan25"},"content":" boolean isCompleted \u003d args[2].equals(\"Y\");","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"yytan25"},"content":" if (type \u003d\u003d TaskList.TaskType.DEADLINE) {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"yytan25"},"content":" due \u003d LocalDateTime.parse(args[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"yytan25"},"content":" } else if (type \u003d\u003d TaskList.TaskType.EVENT) {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"yytan25"},"content":" start \u003d LocalDateTime.parse(args[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"yytan25"},"content":" end \u003d LocalDateTime.parse(args[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"yytan25"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Could not retrieve date and/or time\");","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"yytan25"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"yytan25"},"content":" switch (type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"yytan25"},"content":" case TASK:","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"yytan25"},"content":" Task t \u003d new Task(details, isCompleted);","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"yytan25"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"yytan25"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"yytan25"},"content":" ToDo todo \u003d new ToDo(details, isCompleted);","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"yytan25"},"content":" tasks.add(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"yytan25"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"yytan25"},"content":" Deadline d \u003d new Deadline(details, isCompleted, due);","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"yytan25"},"content":" tasks.add(d);","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"yytan25"},"content":" case EVENT:","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"yytan25"},"content":" Event e \u003d new Event(details, isCompleted, start, end);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"yytan25"},"content":" tasks.add(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"yytan25"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"yytan25"},"content":" // Shouldn\u0027t reach here","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"yytan25"},"content":" * Saves the tasks in the {@code TaskList} in the text file specified by the {@code filePath}.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"yytan25"},"content":" * @param filePath Relative path of the text file to be written to.","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"yytan25"},"content":" * @param tasks {@code TaskList} containing the current tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"yytan25"},"content":" * @throws IOException When the {@code FileWriter} is unable to write to the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"yytan25"},"content":" public void saveTasksToDisk(String filePath, duke.TaskList tasks) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"yytan25"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"yytan25"},"content":" BufferedWriter bw \u003d new BufferedWriter(fw);","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"yytan25"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"yytan25"},"content":" for (int i \u003d 0; i \u003c tasks.getNumOfTasks(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"yytan25"},"content":" duke.TaskList.TaskType type \u003d tasks.getTaskType(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"yytan25"},"content":" Task t \u003d tasks.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"yytan25"},"content":" switch (type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"yytan25"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"yytan25"},"content":" bw.write(String.format(\"ToDo/%s/%c\",","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"yytan25"},"content":" t.getDetails(),","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"yytan25"},"content":" t.isCompleted ? \u0027Y\u0027 : \u0027N\u0027));","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"yytan25"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"yytan25"},"content":" bw.write(String.format(\"Deadline/%s/%c/%s\",","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"yytan25"},"content":" t.getDetails(),","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"yytan25"},"content":" t.isCompleted ? \u0027Y\u0027 : \u0027N\u0027, (","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"yytan25"},"content":" (Deadline) t).due));","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"yytan25"},"content":" case EVENT:","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"yytan25"},"content":" bw.write(String.format(\"Event/%s/%c/%s/%s\",","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"yytan25"},"content":" t.getDetails(),","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"yytan25"},"content":" t.isCompleted ? \u0027Y\u0027 : \u0027N\u0027, (","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"yytan25"},"content":" (Event) t).start, (","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"yytan25"},"content":" (Event) t).end));","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"yytan25"},"content":" case TASK:","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"yytan25"},"content":" bw.write(String.format(\"Task/%s/%c\",","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"yytan25"},"content":" t.getDetails(),","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"yytan25"},"content":" t.isCompleted ? \u0027Y\u0027 : \u0027N\u0027));","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"yytan25"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"yytan25"},"content":" // Shouldn\u0027t reach here","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"yytan25"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"yytan25"},"content":" bw.newLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"yytan25"},"content":" bw.flush();","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"yytan25"},"content":" bw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"yytan25"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"yytan25"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"yytan25":150}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":" * The {@code Task} class. Contains all methods that are common to any generic task.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":" protected String details;","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":" protected boolean isCompleted;","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":" * Constructs a new {@code Task} object, with {@code isCompleted} set to false.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" * @param details Details of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" public Task(String details) {","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" * Loads a {@code Task} object that was previously stored in the hard disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" * The {@code isCompleted} parameter corresponds to the completion status in the last","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" * instance of {@code Duke}.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" * @param details Details of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" * @param isCompleted Completion status of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" public Task(String details, boolean isCompleted) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" this.details \u003d details;","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" this.isCompleted \u003d isCompleted;","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" * Sets the {@code Task} as completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" public void setCompleted() {","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":" this.isCompleted \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":" * Sets the {@code Task} as incomplete.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":" public void setIncomplete() {","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yytan25"},"content":" * Gets the details of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"yytan25"},"content":" * @return Details of the {@code Task.}","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"yytan25"},"content":" protected String getDetails() {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"yytan25"},"content":" return this.details;","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"yytan25"},"content":" * Returns the string representation of the {@code Task}, to be","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"yytan25"},"content":" * printed in the {@code list} method.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"yytan25"},"content":" * @return String representation of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"yytan25"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"yytan25"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"yytan25"},"content":" if (this.isCompleted) {","lastModifiedDate":"2023-08-20"},{"lineNumber":67,"author":{"gitId":"yytan25"},"content":" return \"[X] \" + this.details;","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":69,"author":{"gitId":"yytan25"},"content":" return \"[ ] \" + this.details;","lastModifiedDate":"2023-08-20"},{"lineNumber":70,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":71,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":72,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"yytan25":72}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":" * The {@code TaskList} class. Deals with storing tasks and performing","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":" * operations on tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":" private int numOfTasks \u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" private int numOfCompletedTasks \u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" * Enumeration of all task types, for type checking purposes.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" public enum TaskType {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" TASK, TODO, DEADLINE, EVENT","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" * Creates a new {@code ArrayList} to store the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" * Adds a {@code Task} to the {@code ArrayList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" * @param t {@code Task} to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" public void add(Task t) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" this.numOfTasks++;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":" if (t.isCompleted) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" this.numOfCompletedTasks++;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":" * Gets the {@code Task} object at the specified index.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":" * @param i Index of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":" * @return {@code Task} object at index i.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":" public Task get(int i) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":" if (i \u003e -1 \u0026\u0026 i \u003c numOfTasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yytan25"},"content":" return tasks.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"yytan25"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"yytan25"},"content":" * Gets the total number of {@code Task}s in the {@code ArrayList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"yytan25"},"content":" * @return Total number of {@code Task}s.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"yytan25"},"content":" public int getNumOfTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"yytan25"},"content":" return this.numOfTasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"yytan25"},"content":" * Gets the total number of completed {@code Task}s in the {@code ArrayList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"yytan25"},"content":" * @return Total number of completed {@code Task}s.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"yytan25"},"content":" public int getNumOfCompletedTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"yytan25"},"content":" return this.numOfCompletedTasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"yytan25"},"content":" * Checks if the {@code ArrayList} is empty.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"yytan25"},"content":" * @return {@code true} iff the {@code ArrayList} is empty; {@code false} otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"yytan25"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"yytan25"},"content":" return this.numOfTasks \u003d\u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"yytan25"},"content":" * Checks if there are completed tasks in the {@code ArrayList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"yytan25"},"content":" * @return {@code true} iff the {@code ArrayList} contains at least one completed task;","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"yytan25"},"content":" * {@code false} otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"yytan25"},"content":" public boolean hasCompletedTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"yytan25"},"content":" return this.numOfCompletedTasks \u003e 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"yytan25"},"content":" * Increments the number of completed tasks when a {@code Task} is marked as complete.","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"yytan25"},"content":" public void incrementCompletedTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"yytan25"},"content":" this.numOfCompletedTasks++;","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"yytan25"},"content":" * Decrements the number of completed tasks when a {@code Task} is marked as incomplete.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"yytan25"},"content":" public void decrementCompletedTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"yytan25"},"content":" this.numOfCompletedTasks--;","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"yytan25"},"content":" * Checks if there already exists a {@code Task} in the {@code ArrayList} with the","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"yytan25"},"content":" * given details.","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"yytan25"},"content":" * @param details Details to be checked.","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"yytan25"},"content":" * @return {@code true} iff there exists a {@code Task} with the given details;","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"yytan25"},"content":" * false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"yytan25"},"content":" public boolean checkDuplicates(String details) {","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"yytan25"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"yytan25"},"content":" if (details.equals(t.getDetails())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"yytan25"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"yytan25"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"yytan25"},"content":" * Gets the {@code TaskType} of the {@code Task} at the specified index.","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"yytan25"},"content":" * @param i Index of the {@code Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"yytan25"},"content":" * @return {@code TaskType} of {@code Task} at index i.","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"yytan25"},"content":" public TaskType getTaskType(int i) {","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"yytan25"},"content":" Task t \u003d this.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"yytan25"},"content":" if (t instanceof ToDo) {","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"yytan25"},"content":" return TaskType.TODO;","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"yytan25"},"content":" } else if (t instanceof Deadline) {","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"yytan25"},"content":" return TaskType.DEADLINE;","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"yytan25"},"content":" } else if (t instanceof Event) {","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"yytan25"},"content":" return TaskType.EVENT;","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"yytan25"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"yytan25"},"content":" return TaskType.TASK;","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"yytan25"},"content":" * Removes a {@code Task} from the {@code ArrayList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"yytan25"},"content":" * @param t {@code Task} to be removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"yytan25"},"content":" public void remove(Task t) {","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"yytan25"},"content":" tasks.remove(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"yytan25"},"content":" this.numOfTasks--;","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"yytan25"},"content":" if (t.isCompleted) {","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"yytan25"},"content":" this.numOfCompletedTasks--;","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"yytan25":155}},{"path":"src/main/java/duke/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":" * The {@code ToDo} class.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":" * Constructs a new {@code ToDo} object, with {@code isCompleted} set to false.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":" * @param details Details of the {@code ToDo}.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" public ToDo(String details) {","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" super(details);","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" * Loads a {@code ToDo} object that was previously stored in the hard disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" * The {@code isCompleted} parameter corresponds to the completion status in the last","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" * instance of {@code Duke}.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" * @param details Details of the {@code ToDo}.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" * @param isCompleted Completion status of the {@code ToDo}.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" public ToDo(String details, boolean isCompleted) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" super(details, isCompleted);","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" * Returns the string representation of the {@code ToDo}, to be","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" * printed in the {@code list} method.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" * @return String representation of the {@code ToDo}.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"yytan25":40}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":" * The {@code Ui} class. Deals with interactions with the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":" private final String name;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":" private int invalidInputCount \u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":" public Ui() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":" this.name \u003d \"Meg\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" * Prints a horizontal line to demarcate the end of an operation.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" public void printHorizontalLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" for (int i \u003d 0; i \u003c 20; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" System.out.print(\"-\");","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" System.out.println();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" * Prints the available commands for the user, when {@code Duke} is started or","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" * when the user inputs {@code commands}.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" public void printCommands() {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mtask\\033[0m - Create a new task%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mtodo\\033[0m - Create a new todo%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mdeadline\\033[0m - Create a new deadline%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mevent\\033[0m - Create a new event%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mlist\\033[0m - View your current tasks and completion status%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mmark\\033[0m - Mark a task as complete%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3munmark\\033[0m - Mark a task as incomplete%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mdelete\\033[0m - Delete a task%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mbye\\033[0m - Exit the program%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"\\033[3mfind\\033[0m - Find all tasks containing a given keyword%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" * Prints the statements when {@code Duke} is first instantiated.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":" public void printSelfIntroduction() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"I\u0027m %s. Nice to meet you.%n\", this.name);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":" System.out.println(\"I support the following commands:\" + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":" printCommands();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"yytan25"},"content":" * Prints the statements when a user operation is over.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"yytan25"},"content":" public void printEndOfOperation() {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"yytan25"},"content":" System.out.println();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Anything else you want me to do?%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"yytan25"},"content":" System.out.printf(\"Just so you know, you can input \\033[3mcommands\\033[0m to view the commands again.%n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"yytan25"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"yytan25"},"content":" * Increments the number of invalid inputs. When the number of consecutive invalid","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"yytan25"},"content":" * inputs reaches a certain threshold, {@code Duke} will forcibly terminate.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"yytan25"},"content":" public void incrementInvalidInputs() {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"yytan25"},"content":" this.invalidInputCount++;","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"yytan25"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"yytan25"},"content":" * Gets the number of consecutive invalid inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"yytan25"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"yytan25"},"content":" * @return Number of consecutive invalid inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"yytan25"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"yytan25"},"content":" public int getInvalidInputCount() {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"yytan25"},"content":" return this.invalidInputCount;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"yytan25":79}},{"path":"src/test/java/duke/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":"import java.time.Month;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" public void deadline_toString_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" Deadline d \u003d new Deadline(\"test\",","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" LocalDateTime.of(LocalDate.of(2023, Month.JANUARY, 1),","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" LocalTime.of(23, 59)));","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" assertEquals(\"[D][ ] test (by: Sun, 01 Jan 2023 23:59)\",","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" d.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" public void deadlineCompleted_toString_success() {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" Deadline d \u003d new Deadline(\"test\", true,","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" LocalDateTime.of(LocalDate.of(2023, Month.JANUARY, 1),","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" LocalTime.of(23, 59)));","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" assertEquals(\"[D][X] test (by: Sun, 01 Jan 2023 23:59)\",","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" d.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"yytan25":30}},{"path":"src/test/java/duke/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":"import java.time.Month;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":"public class EventTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" public void event_toString_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" Event e \u003d new Event(\"test\",","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" LocalDateTime.of(LocalDate.of(2023, Month.JANUARY, 1),","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":" LocalTime.of(0, 0)),","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" LocalDateTime.of(LocalDate.of(2023, Month.JANUARY, 1),","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" LocalTime.of(23, 59)));","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" assertEquals(\"[E][ ] test (from: 01 Jan 2023 00:00 to: 01 Jan 2023 23:59)\",","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" e.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" public void eventCompleted_toString_success() {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" Event e \u003d new Event(\"test\", true,","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" LocalDateTime.of(LocalDate.of(2023, Month.JANUARY, 1),","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" LocalTime.of(0, 0)),","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" LocalDateTime.of(LocalDate.of(2023, Month.JANUARY, 1),","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" LocalTime.of(23, 59)));","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":" assertEquals(\"[E][X] test (from: 01 Jan 2023 00:00 to: 01 Jan 2023 23:59)\",","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" e.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"yytan25":36}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"yytan25"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"yytan25"},"content":" public void addTask_numTasksIncremented() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"yytan25"},"content":" tasks.add(new Task(\"test\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"yytan25"},"content":" assertEquals(1, tasks.getNumOfTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"yytan25"},"content":" public void addCompletedTask_numTasksIncremented() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"yytan25"},"content":" tasks.add(new Task(\"test\", true));","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"yytan25"},"content":" assertEquals(1, tasks.getNumOfTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"yytan25"},"content":" public void addCompletedTask_numCompletedTasksIncremented() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"yytan25"},"content":" tasks.add(new Task(\"test\", true));","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"yytan25"},"content":" assertEquals(1, tasks.getNumOfCompletedTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"yytan25"},"content":" public void addTask_getTaskType_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"yytan25"},"content":" tasks.add(new Task(\"test\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"yytan25"},"content":" assertEquals(TaskList.TaskType.TASK, tasks.getTaskType(0));","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"yytan25"},"content":" public void addToDo_getTaskType_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"yytan25"},"content":" tasks.add(new ToDo(\"test\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"yytan25"},"content":" assertEquals(TaskList.TaskType.TODO, tasks.getTaskType(0));","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"yytan25"},"content":" public void addDeadline_getTaskType_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"yytan25"},"content":" tasks.add(new Deadline(\"test\", LocalDateTime.MIN));","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"yytan25"},"content":" assertEquals(TaskList.TaskType.DEADLINE, tasks.getTaskType(0));","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"yytan25"},"content":" public void addEvent_getTaskType_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"yytan25"},"content":" tasks.add(new Event(\"test\", LocalDateTime.MIN, LocalDateTime.MAX));","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"yytan25"},"content":" assertEquals(TaskList.TaskType.EVENT, tasks.getTaskType(0));","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"yytan25"},"content":" public void removeTask_numTasksDecremented() {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"yytan25"},"content":" Task t \u003d new Task(\"test\");","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"yytan25"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"yytan25"},"content":" tasks.remove(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"yytan25"},"content":" assertEquals(0, tasks.getNumOfTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"yytan25"},"content":" public void removeCompletedTask_numTasksDecremented() {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"yytan25"},"content":" Task t \u003d new Task(\"test\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"yytan25"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"yytan25"},"content":" tasks.remove(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"yytan25"},"content":" assertEquals(0, tasks.getNumOfTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"yytan25"},"content":" public void removeCompletedTask_numCompletedTasksDecremented() {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"yytan25"},"content":" Task t \u003d new Task(\"test\", true);","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"yytan25"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"yytan25"},"content":" tasks.remove(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"yytan25"},"content":" assertEquals(0, tasks.getNumOfCompletedTasks());","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"yytan25"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"yytan25"},"content":" public void checkDuplicates_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"yytan25"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"yytan25"},"content":" Task t \u003d new Task(\"test\");","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"yytan25"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"yytan25"},"content":" assertTrue(tasks.checkDuplicates(\"test\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"yytan25"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"yytan25"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"yytan25":96}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"yytan25"},"content":"deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"yytan25"},"content":"finish software engineering assignment","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"fri 2359","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"event","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"yytan25"},"content":"party at Jon\u0027s","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"yytan25"},"content":"fri 8pm","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"yytan25"},"content":"sat 2am","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"yytan25"},"content":"list","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"yytan25":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"yytan25"},"content":"echo \"The output will be redirected to stdoutput.txt\"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"yytan25"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-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":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-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"}],"authorContributionMap":{"yytan25":2,"-":21}}] diff --git a/yytan25_ip_master/commits.json b/yytan25_ip_master/commits.json index b82b91d1..5aa1c3fb 100644 --- a/yytan25_ip_master/commits.json +++ b/yytan25_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"yytan25":[{"date":"2023-08-19","commitResults":[{"hash":"ca7df2bc7a702aa9498199af78c92f9979322449","isMergeCommit":false,"messageTitle":"Completed Level-0 features","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":6}}},{"hash":"55e5d54bba306697324dbfc0e8f8405f4dcbb0ca","isMergeCommit":false,"messageTitle":"Completed Level-0 features","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":6}}}]},{"date":"2023-08-20","commitResults":[{"hash":"c7f0a8961c3bce76c761c159ada10d0f2162309c","isMergeCommit":false,"messageTitle":"Complete Level-1 features","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":7}}},{"hash":"63db283c5417a2befbae9ab3f8e86bfb0270b574","isMergeCommit":false,"messageTitle":"Complete Level-2 features","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":3}}},{"hash":"99d6f4b60a852b0bbc280525ea4f67c415b0ff23","isMergeCommit":false,"messageTitle":"Add OOP elements to Level-2 features","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":11}}},{"hash":"27cd3ef0ffbd4895cb532f62133add663954ddbc","isMergeCommit":false,"messageTitle":"Add Level-3 features","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":12}}},{"hash":"04516010ca1b9c4a8b68c55611768cea6bb33e15","isMergeCommit":false,"messageTitle":"Add Level-4 features","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":7}}}]},{"date":"2023-08-21","commitResults":[{"hash":"17288e6591df8620e63bd44e4a90d1099826e4d4","isMergeCommit":false,"messageTitle":"Add run() method","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":42,"deletions":25}}},{"hash":"57ef808ada56c4c2a633510ed47267f8bf253688","isMergeCommit":false,"messageTitle":"Enhance list() method and minor QoL changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"e40ead08c6107ff98310a85085725b54579ed484","isMergeCommit":false,"messageTitle":"Add Level-5 features","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":1},"java":{"insertions":142,"deletions":62},"bat":{"insertions":3,"deletions":0}}},{"hash":"c0948a6c0be4c060fc205b2bb801e692b7a94465","isMergeCommit":false,"messageTitle":"Add Level-6 features","messageBody":"","tags":["Level-6","A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":53}}},{"hash":"820cc7f3556189731f4e77452aa26ca05ff1f363","isMergeCommit":false,"messageTitle":"Add Java enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":17}}}]},{"date":"2023-08-26","commitResults":[{"hash":"60da57be00042a81cfb81edfb5aa3b28584669ca","isMergeCommit":false,"messageTitle":"Add Level-7 features","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":175,"deletions":9},"bat":{"insertions":0,"deletions":1}}},{"hash":"01a43bf4b31124a18019e6ba58127a8322a3e031","isMergeCommit":false,"messageTitle":"Fix minor bugs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"2cfbfc26acf83f7bfaf06b0bce86d990af78330f","isMergeCommit":true,"messageTitle":"Fix minor bugs","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"0957234a1691cb62af8819778f1681276d35e200","isMergeCommit":false,"messageTitle":"Add Level-8 features","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":43}}},{"hash":"99453a2fbad86d16f2efb90ce544717811847853","isMergeCommit":false,"messageTitle":"Add Level-8 features","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"d148f66b2b58b57aa3e96bb02b8e56f740f6dd90","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"8c6551faf1596946678eda424ecd6be1615d586e","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":440,"deletions":350}}},{"hash":"6792abd51dea8d22d702e988ddcf5bff5a3f806f","isMergeCommit":false,"messageTitle":"Add minor QoL changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"c11cdbf858fec3ea08bce1b79570fcb0dd4d0fdd","isMergeCommit":true,"messageTitle":"Add minor QoL changes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"138feee3b8315ea62236a2d4cb510ad66caf63b9","isMergeCommit":false,"messageTitle":"Add package \u0027duke\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"d90b2d7cebf263be76ff2733083be4401821cd7a","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"a6030ccd4a40a2dde31708f9c684facd8818e37d","isMergeCommit":false,"messageTitle":"Add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":194,"deletions":17}}},{"hash":"35f126b4e4ddf9d93c0f947ff324c8f572c60a9f","isMergeCommit":false,"messageTitle":"Improve parsing of date \u0026 time input","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":79,"deletions":32}}},{"hash":"f784c7eef36603a34f88dc18bd08814d1d56fadf","isMergeCommit":false,"messageTitle":"Add additional checks for date and time inputs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":33,"deletions":8}}},{"hash":"37451cccfaa2bc1aadafdf5e3efd113607cac88e","isMergeCommit":false,"messageTitle":"Add Javadoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":332,"deletions":22}}},{"hash":"2b05408a2137c6506d5d86159b62184869461f09","isMergeCommit":false,"messageTitle":"Tweak the code to comply with Java coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":113}}},{"hash":"a41285f89783d3e40aad2d731d372cd21fb228a2","isMergeCommit":false,"messageTitle":"Remove redundant method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":11}}},{"hash":"0acffd8aeb13b7514fe6bc3492a1edd7d367bfe2","isMergeCommit":false,"messageTitle":"Add Level-9 features","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":51,"deletions":1}}},{"hash":"7d164cc404588c3ea916cfbf8b7090dc616ec8e3","isMergeCommit":false,"messageTitle":"Edit JUnit test cases","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"cd9eb75a432f7877331e28f79a92a0adb8bdf457","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"22331196eaabf08705bc72fcfb4fb58480b4e171","isMergeCommit":true,"messageTitle":"Edit JUnit test cases","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"86ccfe6306d61f5a3405d923150432a19ff99a95","isMergeCommit":true,"messageTitle":"Edit JUnit test cases","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9c5f2f6343a577e445dbb1e6784239eaf096a297","isMergeCommit":false,"messageTitle":"Add Javadoc for new methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":210,"deletions":54}}}]}]},"authorFileTypeContributionMap":{"yytan25":{"java":1330,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":0,"txt":13}},"authorContributionVariance":{"yytan25":265413.44},"authorDisplayNameMap":{"yytan25":"CS2103T-W11-3 TAN ..G YI"}} +{"authorDailyContributionsMap":{"yytan25":[{"date":"2023-08-19","commitResults":[{"hash":"ca7df2bc7a702aa9498199af78c92f9979322449","isMergeCommit":false,"messageTitle":"Completed Level-0 features","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":6}}},{"hash":"55e5d54bba306697324dbfc0e8f8405f4dcbb0ca","isMergeCommit":false,"messageTitle":"Completed Level-0 features","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":6}}}]},{"date":"2023-08-20","commitResults":[{"hash":"c7f0a8961c3bce76c761c159ada10d0f2162309c","isMergeCommit":false,"messageTitle":"Complete Level-1 features","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":7}}},{"hash":"63db283c5417a2befbae9ab3f8e86bfb0270b574","isMergeCommit":false,"messageTitle":"Complete Level-2 features","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":3}}},{"hash":"99d6f4b60a852b0bbc280525ea4f67c415b0ff23","isMergeCommit":false,"messageTitle":"Add OOP elements to Level-2 features","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":11}}},{"hash":"27cd3ef0ffbd4895cb532f62133add663954ddbc","isMergeCommit":false,"messageTitle":"Add Level-3 features","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":12}}},{"hash":"04516010ca1b9c4a8b68c55611768cea6bb33e15","isMergeCommit":false,"messageTitle":"Add Level-4 features","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":7}}}]},{"date":"2023-08-21","commitResults":[{"hash":"17288e6591df8620e63bd44e4a90d1099826e4d4","isMergeCommit":false,"messageTitle":"Add run() method","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":42,"deletions":25}}},{"hash":"57ef808ada56c4c2a633510ed47267f8bf253688","isMergeCommit":false,"messageTitle":"Enhance list() method and minor QoL changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"e40ead08c6107ff98310a85085725b54579ed484","isMergeCommit":false,"messageTitle":"Add Level-5 features","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":1},"java":{"insertions":142,"deletions":62},"bat":{"insertions":3,"deletions":0}}},{"hash":"c0948a6c0be4c060fc205b2bb801e692b7a94465","isMergeCommit":false,"messageTitle":"Add Level-6 features","messageBody":"","tags":["Level-6","A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":53}}},{"hash":"820cc7f3556189731f4e77452aa26ca05ff1f363","isMergeCommit":false,"messageTitle":"Add Java enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":17}}}]},{"date":"2023-08-26","commitResults":[{"hash":"60da57be00042a81cfb81edfb5aa3b28584669ca","isMergeCommit":false,"messageTitle":"Add Level-7 features","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":175,"deletions":9},"bat":{"insertions":0,"deletions":1}}},{"hash":"01a43bf4b31124a18019e6ba58127a8322a3e031","isMergeCommit":false,"messageTitle":"Fix minor bugs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"2cfbfc26acf83f7bfaf06b0bce86d990af78330f","isMergeCommit":true,"messageTitle":"Fix minor bugs","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"0957234a1691cb62af8819778f1681276d35e200","isMergeCommit":false,"messageTitle":"Add Level-8 features","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":43}}},{"hash":"99453a2fbad86d16f2efb90ce544717811847853","isMergeCommit":false,"messageTitle":"Add Level-8 features","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"d148f66b2b58b57aa3e96bb02b8e56f740f6dd90","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"8c6551faf1596946678eda424ecd6be1615d586e","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":440,"deletions":350}}},{"hash":"6792abd51dea8d22d702e988ddcf5bff5a3f806f","isMergeCommit":false,"messageTitle":"Add minor QoL changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"c11cdbf858fec3ea08bce1b79570fcb0dd4d0fdd","isMergeCommit":true,"messageTitle":"Add minor QoL changes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"138feee3b8315ea62236a2d4cb510ad66caf63b9","isMergeCommit":false,"messageTitle":"Add package \u0027duke\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"d90b2d7cebf263be76ff2733083be4401821cd7a","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"a6030ccd4a40a2dde31708f9c684facd8818e37d","isMergeCommit":false,"messageTitle":"Add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":194,"deletions":17}}},{"hash":"35f126b4e4ddf9d93c0f947ff324c8f572c60a9f","isMergeCommit":false,"messageTitle":"Improve parsing of date \u0026 time input","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":79,"deletions":32}}},{"hash":"f784c7eef36603a34f88dc18bd08814d1d56fadf","isMergeCommit":false,"messageTitle":"Add additional checks for date and time inputs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":33,"deletions":8}}},{"hash":"37451cccfaa2bc1aadafdf5e3efd113607cac88e","isMergeCommit":false,"messageTitle":"Add Javadoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":332,"deletions":22}}},{"hash":"2b05408a2137c6506d5d86159b62184869461f09","isMergeCommit":false,"messageTitle":"Tweak the code to comply with Java coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":113}}},{"hash":"a41285f89783d3e40aad2d731d372cd21fb228a2","isMergeCommit":false,"messageTitle":"Remove redundant method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":11}}},{"hash":"0acffd8aeb13b7514fe6bc3492a1edd7d367bfe2","isMergeCommit":false,"messageTitle":"Add Level-9 features","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":51,"deletions":1}}},{"hash":"7d164cc404588c3ea916cfbf8b7090dc616ec8e3","isMergeCommit":false,"messageTitle":"Edit JUnit test cases","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"cd9eb75a432f7877331e28f79a92a0adb8bdf457","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"22331196eaabf08705bc72fcfb4fb58480b4e171","isMergeCommit":true,"messageTitle":"Edit JUnit test cases","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"86ccfe6306d61f5a3405d923150432a19ff99a95","isMergeCommit":true,"messageTitle":"Edit JUnit test cases","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9c5f2f6343a577e445dbb1e6784239eaf096a297","isMergeCommit":false,"messageTitle":"Add Javadoc for new methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":210,"deletions":54}}}]},{"date":"2023-09-05","commitResults":[{"hash":"7fb0f2c8262efc9218fcba3e484a8b846e46a38b","isMergeCommit":false,"messageTitle":"Add support for Checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":39}}}]}]},"authorFileTypeContributionMap":{"yytan25":{"java":1365,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":0,"txt":13}},"authorContributionVariance":{"yytan25":215991.61},"authorDisplayNameMap":{"yytan25":"CS2103T-W11-3 TAN ..G YI"}} diff --git a/zhengyup_ip_master/authorship.json b/zhengyup_ip_master/authorship.json index 76fa478b..5f37e354 100644 --- a/zhengyup_ip_master/authorship.json +++ b/zhengyup_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"# duke project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":"3. After that, locate the `src/main/java/duke.java` file, right-click it, and choose `Run duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"zhengyup":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":"zhengyup"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" archiveFileName \u003d \u0027Duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"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":{"zhengyup":2,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * Main class for the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" * This class handles user interactions and manages tasks using the Archive class.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" private UI ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" * Constructs a Duke instance with the specified file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" * @param FILEPATH file path for storing task data.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":" public Duke(String FILEPATH) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" ui \u003d new UI();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" storage \u003d new Storage(FILEPATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":" * Runs the Duke application, handling user interactions and task management.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":" ui.printIntro();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" while (true) {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" String input \u003d ui.getInput();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" if (input.equals(\"GET SCHWIFTY\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" System.out.print(\"I LIKE WHAT YOU\u0027VE GOT. GOOD JOB.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" return;","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" tasks.print();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" tasks.markTask(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" tasks.unmarkTask(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" tasks.deleteTask(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" else if (input.startsWith(\"find\")){","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":" tasks.find(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":" else {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":" tasks.addTask(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"zhengyup"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":57,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"zhengyup"},"content":" * The entry point for running the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"zhengyup"},"content":" * @param args The command-line arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"zhengyup"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"zhengyup"},"content":" new Duke(\"data/saved.txt\").run();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"zhengyup":63,"-":3}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.InvalidDateFormatException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.InvalidInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" * The Storage class handles loading and saving tasks from/to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":" private final String FILEPATH;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" * Constructs a Storage instance with the specified file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" * @param FILEPATH The file path to store task data.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" public Storage(String FILEPATH){","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" this.FILEPATH \u003d FILEPATH;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" * Loads tasks from the file specified in the constructor.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":" * @return A list of tasks loaded from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" public List\u003cTask\u003e load() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" File f \u003d new File(FILEPATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":" Files.createDirectories(Paths.get(\"data\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":" list \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":" loadTask(s.nextLine(), list);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"zhengyup"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"zhengyup"},"content":" list \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"zhengyup"},"content":" return list;","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"zhengyup"},"content":" * Loads a task from the input string and adds it to the provided list.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"zhengyup"},"content":" * @param input The input string representing the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"zhengyup"},"content":" * @param list The list to which the task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"zhengyup"},"content":" public void loadTask(String input, List\u003cTask\u003e list) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"zhengyup"},"content":" boolean isMarked;","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"zhengyup"},"content":" int markedIndex \u003d input.indexOf(\"|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"zhengyup"},"content":" isMarked \u003d input.charAt(markedIndex + 2) \u003d\u003d \u00271\u0027;","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"zhengyup"},"content":" int titleIndex \u003d input.indexOf(\"|\", markedIndex + 1) + 2;","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"zhengyup"},"content":" if (input.startsWith(\"T\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"zhengyup"},"content":" String title \u003d input.substring(titleIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"zhengyup"},"content":" list.add(new Todo(title, isMarked));","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"zhengyup"},"content":" } else if (input.startsWith(\"D\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"zhengyup"},"content":" int byIndex \u003d input.indexOf(\"|\", titleIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"zhengyup"},"content":" String title \u003d input.substring(titleIndex, byIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"zhengyup"},"content":" String dueDateString \u003d input.substring(byIndex + 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"zhengyup"},"content":" list.add(new Deadline(title, parseDate(dueDateString), isMarked));","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"zhengyup"},"content":" } else if (input.startsWith(\"E\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"zhengyup"},"content":" int fromIndex \u003d input.indexOf(\"|\", titleIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"zhengyup"},"content":" String title \u003d input.substring(titleIndex, fromIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"zhengyup"},"content":" int toIndex \u003d input.indexOf(\"|\", fromIndex + 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"zhengyup"},"content":" String from \u003d input.substring(fromIndex + 2, toIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"zhengyup"},"content":" String to \u003d input.substring(toIndex + 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"zhengyup"},"content":" list.add(new Event(title, parseDate(from), parseDate(to), isMarked));","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"zhengyup"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"zhengyup"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"zhengyup"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"zhengyup"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"zhengyup"},"content":" * Saves tasks from the provided TaskList instance to the file specified in the constructor.","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"zhengyup"},"content":" * @param tasks The TaskList instance containing tasks to be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"zhengyup"},"content":" public void save(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"zhengyup"},"content":" FileWriter fw \u003d new FileWriter(FILEPATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"zhengyup"},"content":" for (int i \u003d 0; i \u003c tasks.list.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"zhengyup"},"content":" fw.write(tasks.list.get(i).toSave() + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"zhengyup"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"zhengyup"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"zhengyup"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"zhengyup"},"content":" * Parses a date-time string into a LocalDateTime instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"zhengyup"},"content":" * @param input The input date-time string.","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"zhengyup"},"content":" * @return A LocalDateTime instance parsed from the input string.","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"zhengyup"},"content":" * @throws InvalidDateFormatException If the input string has an invalid date-time format.","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"zhengyup"},"content":" public LocalDateTime parseDate(String input) throws InvalidDateFormatException {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"zhengyup"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"zhengyup"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(input, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"zhengyup"},"content":" return dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"zhengyup"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"zhengyup"},"content":" throw new InvalidDateFormatException();","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"zhengyup":127}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" * Represents an archive of tasks in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" * This class provides methods to manage and manipulate tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":" protected List\u003cTask\u003e list;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" * Constructs a new TaskList object with the specified list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" * @param list The initial list of tasks to be managed.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" public TaskList(List\u003cTask\u003e list){","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" * Prints the list of tasks in the archive along with their indices.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" public void print() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" System.out.println(i + \". \" + list.get(i));","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":" * Marks a task as completed based on user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" * @param input The input string containing the task index to mark.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" * @throws OutOfIndexException If the provided index is out of the valid range.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" public void markTask(String input) throws OutOfIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":" int item \u003d input.charAt(5) - \u00270\u0027;","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":" if (item \u003c 0 || item \u003e list.size() - 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":" throw new OutOfIndexException();","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" Task curr \u003d list.get(item);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":" curr.setMark(true);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"I HAVE MARKED THIS TASK:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"zhengyup"},"content":" System.out.println(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"zhengyup"},"content":" * Marks a completed task as incomplete based on user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"zhengyup"},"content":" * @param input The input string containing the task index to unmark.","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"zhengyup"},"content":" * @throws OutOfIndexException If the provided index is out of the valid range.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"zhengyup"},"content":" public void unmarkTask(String input) throws OutOfIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"zhengyup"},"content":" int item \u003d input.charAt(5) - \u00270\u0027;","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"zhengyup"},"content":" if (item \u003c 0 || item \u003e list.size() - 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"zhengyup"},"content":" throw new OutOfIndexException();","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"zhengyup"},"content":" Task curr \u003d list.get(item);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"zhengyup"},"content":" curr.setMark(false);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"I HAVE UNMARKED THIS TASK:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"zhengyup"},"content":" System.out.println(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"zhengyup"},"content":" * Deletes a task based on user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"zhengyup"},"content":" * @param input The input string containing the task index to delete.","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"zhengyup"},"content":" * @throws OutOfIndexException If the provided index is out of the valid range.","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"zhengyup"},"content":" public void deleteTask(String input) throws OutOfIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"zhengyup"},"content":" int item \u003d input.charAt(7) - \u00270\u0027;","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"zhengyup"},"content":" if (item \u003c 0 || item \u003e list.size() - 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"zhengyup"},"content":" throw new OutOfIndexException();","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"zhengyup"},"content":" Task curr \u003d list.remove(item);","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"I HAVE DELETED THE FOLLOWING TASK:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"zhengyup"},"content":" System.out.println(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"NOW YOU HAVE \" + list.size() + \" TASKS LEFT\");","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"zhengyup"},"content":" * Adds a task to the archive based on user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"zhengyup"},"content":" * @param input The input string containing the task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"zhengyup"},"content":" * @throws EmptyDeadlineException If the deadline task is missing required details.","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"zhengyup"},"content":" * @throws EmptyTodoException If the todo task is missing a title.","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"zhengyup"},"content":" * @throws EmptyEventException If the event task is missing required details.","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"zhengyup"},"content":" * @throws MissingByException If the deadline task is missing the \"by\" date.","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"zhengyup"},"content":" * @throws MissingFromException If the event task is missing the start date.","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"zhengyup"},"content":" * @throws MissingToException If the event task is missing the end date.","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"zhengyup"},"content":" * @throws MissingTitleException If a task is missing its title.","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"zhengyup"},"content":" * @throws InvalidInputException If the input doesn\u0027t match any valid task format.","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"zhengyup"},"content":" public void addTask(String input) throws InvalidDateFormatException, EmptyDeadlineException, EmptyTodoException, EmptyEventException,","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"zhengyup"},"content":" MissingByException, MissingFromException, MissingToException, MissingTitleException, InvalidInputException {","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"zhengyup"},"content":" Task added \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"zhengyup"},"content":" if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"zhengyup"},"content":" if (input.length() \u003c 6) {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"zhengyup"},"content":" throw new EmptyTodoException();","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"zhengyup"},"content":" String title \u003d input.substring(5);","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"zhengyup"},"content":" added \u003d new Todo(title, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"zhengyup"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"zhengyup"},"content":" if (input.length() \u003c 10) {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"zhengyup"},"content":" throw new EmptyDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"zhengyup"},"content":" int index \u003d input.indexOf(\"/by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"zhengyup"},"content":" if (index \u003d\u003d -1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"zhengyup"},"content":" throw new MissingByException();","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"zhengyup"},"content":" if (index \u003c 10) {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"zhengyup"},"content":" throw new MissingTitleException();","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"zhengyup"},"content":" String title \u003d input.substring(9, index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"zhengyup"},"content":" String dueDate \u003d input.substring(index + 4);","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"zhengyup"},"content":" added \u003d new Deadline(title, parseDate(dueDate), false);","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"zhengyup"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"zhengyup"},"content":" if (input.length() \u003c 7) {","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"zhengyup"},"content":" throw new EmptyEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"zhengyup"},"content":" int fromIndex \u003d input.indexOf(\"/from\");","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"zhengyup"},"content":" if (fromIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"zhengyup"},"content":" throw new MissingFromException();","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"zhengyup"},"content":" if (fromIndex \u003c 7) {","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"zhengyup"},"content":" throw new MissingTitleException();","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"zhengyup"},"content":" String title \u003d input.substring(6, fromIndex - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"zhengyup"},"content":" int toIndex \u003d input.indexOf(\"/to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"zhengyup"},"content":" if (toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"zhengyup"},"content":" throw new MissingToException();","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"zhengyup"},"content":" String from \u003d input.substring(fromIndex + 6, toIndex - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"zhengyup"},"content":" String to \u003d input.substring(toIndex + 4);","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"zhengyup"},"content":" added \u003d new Event(title, parseDate(from), parseDate(to), false);","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"zhengyup"},"content":" if (added !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"zhengyup"},"content":" list.add(added);","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"I\u0027VE ADDED THIS TASK:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"zhengyup"},"content":" System.out.println(added);","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"YOU HAVE \" + list.size() + \" TASKS IN THE LIST\");","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"zhengyup"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"zhengyup"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"zhengyup"},"content":" * Parses a date-time string into a LocalDateTime instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"zhengyup"},"content":" * @param input The input date-time string.","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"zhengyup"},"content":" * @return A LocalDateTime instance parsed from the input string.","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"zhengyup"},"content":" * @throws InvalidDateFormatException If the input string has an invalid date-time format.","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"zhengyup"},"content":" public LocalDateTime parseDate(String input) throws InvalidDateFormatException{","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"zhengyup"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"zhengyup"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(input, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"zhengyup"},"content":" return dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"zhengyup"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"zhengyup"},"content":" throw new InvalidDateFormatException();","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"zhengyup"},"content":" * Finds tasks in the task list that match the given keyword(s) in their titles.","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"zhengyup"},"content":" * @param input The input string containing the keyword(s) to search for.","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"zhengyup"},"content":" * @return A list of tasks that match the search criteria.","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"zhengyup"},"content":" * @throws InvalidFindException If the provided search input is too short to be valid.","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"zhengyup"},"content":" public List\u003cTask\u003e find(String input) throws InvalidFindException{","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"zhengyup"},"content":" if (input.length() \u003c 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"zhengyup"},"content":" throw new InvalidFindException();","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"zhengyup"},"content":" String keywords \u003d input.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"zhengyup"},"content":" for (Task curr : list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"zhengyup"},"content":" if (curr.getTitle().indexOf(keywords) !\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"zhengyup"},"content":" filteredTasks.add(curr);","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"TASKS FOUND:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"zhengyup"},"content":" for (int i \u003d 0; i \u003c filteredTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"zhengyup"},"content":" System.out.println(i + \". \" + filteredTasks.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"zhengyup"},"content":" return filteredTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"zhengyup":197}},{"path":"src/main/java/duke/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" * The UI class handles user interactions and printing messages in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"public class UI {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" private final String LOGO \u003d \" ___\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" \" . -^ `--,\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" \" /# \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d`-_\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" \" /# (--\u003d\u003d\u003d\u003d___\u003d\u003d\u003d\u003d\\\\\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" \" /# .- --. . --.|\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" \"/## | * ) ( * ),\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" \"|## \\\\ /\\\\ \\\\ / |\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" \"|### --- \\\\ --- |\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" \"|#### ___) #|\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":" \"|###### ##|\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":" \" \\\\##### ---------- /\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" \" \\\\#### (\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" \" `\\\\### |\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":" \" \\\\### |\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" \" \\\\## |\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" \" \\\\###. .)\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" \" `\u003d\u003d\u003d\u003d\u003d\u003d/\";","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" * Constructs a UI object.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" public UI() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" * Prints the introduction message with the Duke logo.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":" public void printIntro() {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"Hello from\\n\" + LOGO);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"Hello I\u0027m HEAD\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" * Reads a line of input from the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":" * @return The user input as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":" public String getInput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"SHOW ME WHAT YOU\u0027VE GOT\");","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" return input;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"zhengyup":52}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is used to handle errors specific to the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" private String message;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" * Constructs a new DukeException with the specified error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" * @param message The error message associated with the exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" this.message \u003d message;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" * Returns the error message associated with this exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" * @return The error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" return this.message;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"zhengyup":32}},{"path":"src/main/java/duke/exceptions/EmptyDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for empty deadline entries in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user attempts to add a deadline task without a title or due date.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class EmptyDeadlineException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new EmptyDeadlineException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the correct format for adding a deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public EmptyDeadlineException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"I DON\u0027T LIKE WHAT YOU\u0027VE GOT! Missing entry. ENTER deadline (title) /by (dueDate) to\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" \" add a deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"zhengyup":17}},{"path":"src/main/java/duke/exceptions/EmptyEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for empty event entries in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user attempts to add an event task without a title, start date, or end date.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class EmptyEventException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new EmptyEventException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the correct format for adding an event.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public EmptyEventException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"I DON\u0027T LIKE WHAT YOU\u0027VE GOT! Missing entry. ENTER event (title) /from (from) /to (to) to\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" \" add an event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"zhengyup":17}},{"path":"src/main/java/duke/exceptions/EmptyTodoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for empty todo entries in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user attempts to add a todo task without a title.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class EmptyTodoException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new EmptyTodoException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the correct format for adding a todo.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public EmptyTodoException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"I DON\u0027T LIKE WHAT YOU\u0027VE GOT! Missing title of todo. ENTER todo (title) to add a todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"zhengyup":16}},{"path":"src/main/java/duke/exceptions/InvalidDateFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"public class InvalidDateFormatException extends DukeException{","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" public InvalidDateFormatException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" super(\"Invalid date format! input dates for by/from/to using the following format : dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"zhengyup":7}},{"path":"src/main/java/duke/exceptions/InvalidFindException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"public class InvalidFindException extends DukeException{","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" public InvalidFindException(){","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" super(\"Invalid find command. Enter find (keyword / key phrases)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"zhengyup":7}},{"path":"src/main/java/duke/exceptions/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for invalid input entries in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user provides an input that doesn\u0027t match any valid command formats.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class InvalidInputException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new InvalidInputException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the correct format to start various types of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public InvalidInputException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"I DON\u0027T LIKE WHAT YOU\u0027VE GOT! START WITH todo (title) or \" +","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" \"deadline (title) /by (dueDate) or event (title) /from (from) /to (to)\");","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"zhengyup":17}},{"path":"src/main/java/duke/exceptions/MissingByException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for missing \"by\" date entries in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user attempts to add a deadline task without specifying the \"by\" date.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class MissingByException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new MissingByException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the correct format for adding a deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public MissingByException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"I DON\u0027T LIKE WHAT YOU\u0027VE GOT! Missing by. ENTER deadline (title) /by (dueDate) to add a deadline\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"zhengyup":16}},{"path":"src/main/java/duke/exceptions/MissingFromException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for missing \"from\" date entries in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user attempts to add an event task without specifying the start date.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class MissingFromException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new MissingFromException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the correct format for adding an event.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public MissingFromException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"I DON\u0027T LIKE WHAT YOU\u0027VE GOT! Missing event start date. ENTER event (title) /from (from)\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" \" /to (to) to add an event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"zhengyup":18}},{"path":"src/main/java/duke/exceptions/MissingTitleException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for missing title entries in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user attempts to add a task without providing a title.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class MissingTitleException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new MissingTitleException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the importance of providing a title for tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public MissingTitleException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"I DON\u0027T LIKE WHAT YOU\u0027VE GOT! MISSING TITLE!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"zhengyup":16}},{"path":"src/main/java/duke/exceptions/MissingToException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for missing \"to\" date entries in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user attempts to add an event task without specifying the end date.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class MissingToException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new MissingToException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the correct format for adding an event.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public MissingToException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"I DON\u0027T LIKE WHAT YOU\u0027VE GOT! Missing event end date. ENTER event (title) /from (from) /to\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" \" (to) to add an event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"zhengyup":17}},{"path":"src/main/java/duke/exceptions/OutOfIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for out-of-index task access in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user attempts to access a task using an index that is out of the valid range.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class OutOfIndexException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new OutOfIndexException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the fact that they provided an invalid task index.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public OutOfIndexException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"You have provided a number out of index of the stored tasks\");","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"zhengyup":17}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":" * Represents a task with a deadline in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":" * This class extends the base class Task and includes the due date of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" private LocalDateTime dueDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" private String printDateString;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" private String saveDateString;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" * Constructs a new Deadline object with a title and due date.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":" * @param title The title of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" * @param dueDate The due date of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" * @param isMarked The marking status of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" public Deadline(String title, LocalDateTime dueDate, boolean isMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" super(title, isMarked);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":" this.printDateString \u003d this.dueDate.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" this.saveDateString \u003d this.dueDate.format(DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" * Generates a string representation of the Deadline object.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" * @return A formatted string indicating the status, title, and due date of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" String mark \u003d super.isMarked ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" return \"[D]\" + mark + title + \" (by: \" + this.printDateString + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" * Generates a formatted string to represent the Deadline object for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":" * @return A formatted string for saving the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":" public String toSave() {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":" String res \u003d \"D\";","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":" res +\u003d (isMarked ? \"| 1\" : \"| 0\");","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" res +\u003d \"| \" + title;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":" res +\u003d \"| \" + saveDateString;","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":" return res;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"zhengyup"},"content":" * Retrieves the due date of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"zhengyup"},"content":" * @return The due date of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"zhengyup"},"content":" public LocalDateTime getDueDate() {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"zhengyup"},"content":" return this.dueDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zhengyup":63}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":" * Represents an event task in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":" * This class extends the base class Task and includes the start and end dates of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" private String printFromString;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" private String saveFromString;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" private String printToString;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" private String saveToString;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" * Constructs a new Event object with a title, start date, and end date.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":" * @param title The title of the event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" * @param from The start date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" * @param to The end date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" * @param isMarked The marking status of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" public Event(String title, LocalDateTime from, LocalDateTime to, boolean isMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" super(title, isMarked);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" this.printFromString \u003d this.from.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":" this.printToString \u003d this.to.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" this.saveFromString \u003d this.from.format(DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" this.saveToString \u003d this.to.format(DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" * Generates a string representation of the Event object.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":" * @return A formatted string indicating the status, title, start date, and end date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":" String mark \u003d super.isMarked ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" return \"[E]\" + mark + title + \" (from: \" + this.printFromString + \" to: \" + this.printToString + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":" * Generates a formatted string to represent the Event object for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":" * @return A formatted string for saving the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"zhengyup"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"zhengyup"},"content":" public String toSave() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"zhengyup"},"content":" String res \u003d \"E\";","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"zhengyup"},"content":" res +\u003d (isMarked ? \"| 1\" : \"| 0\");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"zhengyup"},"content":" res +\u003d \"| \" + title;","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"zhengyup"},"content":" res +\u003d \"| \" + saveFromString;","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"zhengyup"},"content":" res +\u003d \"| \" + saveToString;","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"zhengyup"},"content":" return res;","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"zhengyup"},"content":" * Retrieves the start date of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"zhengyup"},"content":" * @return The start date of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"zhengyup"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"zhengyup"},"content":" return this.from;","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"zhengyup"},"content":" * Retrieves the end date of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"zhengyup"},"content":" * @return The end date of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"zhengyup"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"zhengyup"},"content":" return to;","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zhengyup":80}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Abstract base class representing a task in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * Subclasses (e.g., Deadline, Event) extend this class to represent specific types of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" protected String title;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" protected boolean isMarked \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" * Constructs a new Task object with a title.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" * @param title The title of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" * @param isMarked The marking status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":" public Task(String title, boolean isMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":" this.title \u003d title;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" this.isMarked \u003d isMarked;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" public void setMark(boolean isMarked) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" this.isMarked \u003d isMarked;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" * Retrieves the marking status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" * @return True if the task is marked as completed, false otherwise.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":" public boolean getIsMarked() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" return this.isMarked;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" * Retrieves the title of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" * @return The title of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" public String getTitle() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" return this.title;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":" * Generates a string representation of the Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":" * @return A formatted string indicating the status (marked or unmarked) and title of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":" String mark \u003d this.isMarked ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"zhengyup"},"content":" return mark + title;","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"zhengyup"},"content":" * Generates a formatted string to represent the Task object for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"zhengyup"},"content":" * @return A formatted string for saving the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"zhengyup"},"content":" public abstract String toSave();","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zhengyup":62}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Represents a todo task in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This class extends the base class Task and represents a simple todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new Todo object with a title.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" * @param title The title of the todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" * @param isMarked The marking status of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" public Todo(String title, boolean isMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" super(title, isMarked);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" * Generates a string representation of the Todo object.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":" * @return A formatted string indicating the status (marked or unmarked) and title of the todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":" String mark \u003d super.isMarked ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" return \"[T]\" + mark + title;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" * Generates a formatted string to represent the Todo object for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" * @return A formatted string for saving the Todo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":" public String toSave() {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" String res \u003d \"T\";","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" res +\u003d (isMarked ? \"| 1\" : \"| 0\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" res +\u003d \"| \" + title;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":" return res;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zhengyup":42}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" * Test class for the Storage class.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" * Contains test cases for the loadTask method.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" * Test loading a Todo task with valid input.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":" * Verifies that the task is created and added to the list correctly.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" public void loadTask_Todo_ValidInput_TaskCreatedAndAddedToList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" Storage storage \u003d new Storage(\"testFILEPATH\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":" String input \u003d \"T | 1| Title\";","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" storage.loadTask(input, list);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":" assertEquals(1, list.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" assertEquals(Todo.class, list.get(0).getClass());","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" assertEquals(\"Title\", list.get(0).getTitle());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" assertEquals(true, list.get(0).getIsMarked());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" * Test loading a Deadline task with valid input.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":" * Verifies that the task is created and added to the list correctly.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" public void loadTask_Deadline_ValidInput_TaskCreatedAndAddedToList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" Storage storage \u003d new Storage(\"testFILEPATH\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":" String input \u003d \"D | 1| Deadline Title| 01/01/2023 14:00\";","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":" storage.loadTask(input, list);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" assertEquals(1, list.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":" assertEquals(Deadline.class, list.get(0).getClass());","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":" assertEquals(\"Deadline Title\", list.get(0).getTitle());","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"zhengyup"},"content":" assertEquals(true, list.get(0).getIsMarked());","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"zhengyup"},"content":" assertEquals(LocalDateTime.of(2023, 1, 1, 14, 0), ((Deadline) list.get(0)).getDueDate());","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"zhengyup"},"content":" * Test loading an Event task with valid input.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"zhengyup"},"content":" * Verifies that the task is created and added to the list correctly.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"zhengyup"},"content":" public void loadTask_Event_ValidInput_TaskCreatedAndAddedToList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"zhengyup"},"content":" Storage storage \u003d new Storage(\"testFILEPATH\");","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"zhengyup"},"content":" String input \u003d \"E| 1| Event Title| 01/01/2023 14:00| 01/01/2023 16:00\";","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"zhengyup"},"content":" storage.loadTask(input, list);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"zhengyup"},"content":" assertEquals(1, list.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"zhengyup"},"content":" assertEquals(\"Event Title\", list.get(0).getTitle());","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"zhengyup"},"content":" assertEquals(true,list.get(0).getIsMarked());","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"zhengyup"},"content":" assertEquals(LocalDateTime.of(2023, 1, 1, 14, 0), ((Event) list.get(0)).getFrom());","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"zhengyup"},"content":" assertEquals(LocalDateTime.of(2023, 1, 1, 16, 0), ((Event) list.get(0)).getTo());","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"zhengyup"},"content":" * Test loading with invalid input.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"zhengyup"},"content":" * Verifies that no task is added to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"zhengyup"},"content":" public void loadTask_InvalidInput_NoTaskAddedToList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"zhengyup"},"content":" Storage storage \u003d new Storage(\"testFILEPATH\");","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"zhengyup"},"content":" String input \u003d \"InvalidInput\";","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"zhengyup"},"content":" storage.loadTask(input, list);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"zhengyup"},"content":" assertEquals(0, list.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"zhengyup":90}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"import duke.Exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":"import duke.Tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":"import duke.Tasks.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e branch-A-CodingStandard","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" * Test class for the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" * Contains test cases for the markTask method.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" * Test marking a task with an input index greater than the list size.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":" * Verifies that an exception is thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":" public void markTask_inputMoreThanSize_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e temp \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" for (int i \u003d 0; i \u003c 3; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":" temp.add(new Todo(\"foo\", false));","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" TaskList test \u003d new TaskList(temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":" test.markTask(\"mark 6\");","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" assertEquals(\"You have provided a number out of index of the stored tasks\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" * Test marking a task with a negative input index.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":" * Verifies that an exception is thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":" public void markTask_inputLessThanZero_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e temp \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":" for (int i \u003d 0; i \u003c 5; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" temp.add(new Todo(\"foo\", false));","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":" TaskList test \u003d new TaskList(temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"zhengyup"},"content":" test.markTask(\"mark -1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"zhengyup"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"zhengyup"},"content":" assertEquals(\"You have provided a number out of index of the stored tasks\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"zhengyup"},"content":" * Test marking a task with a non-integer input index.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"zhengyup"},"content":" * Verifies that the task\u0027s marked status is not changed.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"zhengyup"},"content":" public void markTask_inputNonInteger_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e temp \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"zhengyup"},"content":" Task todo \u003d new Todo(\"foo\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"zhengyup"},"content":" temp.add(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"zhengyup"},"content":" TaskList test \u003d new TaskList(temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"zhengyup"},"content":" test.markTask(\"mark test\");","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"zhengyup"},"content":" assertEquals(true, todo.getIsMarked());","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"zhengyup"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"zhengyup"},"content":" assertEquals(\"You have provided a number out of index of the stored tasks\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"zhengyup"},"content":" * Test marking a task with an input index within the valid range.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"zhengyup"},"content":" * Verifies that the task\u0027s marked status is changed to true.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"zhengyup"},"content":" public void markTask_inputWithinRange_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e temp \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"zhengyup"},"content":" Task todo \u003d new Todo(\"foo\", false);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"zhengyup"},"content":" temp.add(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"zhengyup"},"content":" TaskList test \u003d new TaskList(temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"zhengyup"},"content":" test.markTask(\"mark 0\");","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"zhengyup"},"content":" assertEquals(true, todo.getIsMarked());","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"zhengyup"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"zhengyup"},"content":" assertEquals(\"You have provided a number out of index of the stored tasks\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"zhengyup"},"content":" * Test marking an already marked task.","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"zhengyup"},"content":" * Verifies that the task\u0027s marked status remains true.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"zhengyup"},"content":" public void markTask_markAlreadyMarkedTask_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e temp \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"zhengyup"},"content":" Task todo \u003d new Todo(\"foo\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"zhengyup"},"content":" temp.add(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"zhengyup"},"content":" TaskList test \u003d new TaskList(temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"zhengyup"},"content":" test.markTask(\"mark 0\");","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"zhengyup"},"content":" assertEquals(true, todo.getIsMarked());","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"zhengyup"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"zhengyup"},"content":" assertEquals(\"You have provided a number out of index of the stored tasks\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"zhengyup":113}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"todo test todo","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"deadline test deadline /by today","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"deadline test /by today","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":"deadline test","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":"event test event /from today /to tomorrow","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"event test event /to tomorrow","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"event test event /from today","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":"event /from today /to tomorrow","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":"event","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":"mark 0","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":"mark 10","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":"unmark 0","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":"unmark 10","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":"delete 0","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":"GET SCHWIFTY","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"zhengyup":18}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"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":"zhengyup"},"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":{"zhengyup":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"# duke project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":"3. After that, locate the `src/main/java/duke.java` file, right-click it, and choose `Run duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"zhengyup":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":"zhengyup"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"checkstyle {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" archiveFileName \u003d \u0027Duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"zhengyup":7,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * Main class for the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" * This class handles user interactions and manages tasks using the Archive class.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" private UI ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" * Constructs a Duke instance with the specified file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" * @param filePath file path for storing task data.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" ui \u003d new UI();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":" * Runs the Duke application, handling user interactions and task management.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":" ui.printIntro();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" while (true) {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" String input \u003d ui.getInput();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" if (input.equals(\"GET SCHWIFTY\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" System.out.print(\"I LIKE WHAT YOU\u0027VE GOT. GOOD JOB.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" return;","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" tasks.print();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" tasks.markTask(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" tasks.unmarkTask(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" tasks.deleteTask(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" tasks.find(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":" tasks.addTask(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":55,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"zhengyup"},"content":" * The entry point for running the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"zhengyup"},"content":" * @param args The command-line arguments.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"zhengyup"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"zhengyup"},"content":" new Duke(\"data/saved.txt\").run();","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"zhengyup":61,"-":3}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.InvalidDateFormatException;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.InvalidInputException;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" * The Storage class handles loading and saving tasks from/to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" private final String filePath;","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":" * Constructs a Storage instance with the specified file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" * @param filePath The file path to store task data.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" * Loads tasks from the file specified in the constructor.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" * @return A list of tasks loaded from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" public List\u003cTask\u003e load() {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":" Files.createDirectories(Paths.get(\"data\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" list \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":" loadTask(s.nextLine(), list);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"zhengyup"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"zhengyup"},"content":" list \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"zhengyup"},"content":" return list;","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"zhengyup"},"content":" * Loads a task from the input string and adds it to the provided list.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"zhengyup"},"content":" * @param input The input string representing the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"zhengyup"},"content":" * @param list The list to which the task will be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"zhengyup"},"content":" public void loadTask(String input, List\u003cTask\u003e list) {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"zhengyup"},"content":" boolean isMarked;","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"zhengyup"},"content":" int markedIndex \u003d input.indexOf(\"|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"zhengyup"},"content":" isMarked \u003d input.charAt(markedIndex + 2) \u003d\u003d \u00271\u0027;","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"zhengyup"},"content":" int titleIndex \u003d input.indexOf(\"|\", markedIndex + 1) + 2;","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"zhengyup"},"content":" if (input.startsWith(\"T\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"zhengyup"},"content":" String title \u003d input.substring(titleIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"zhengyup"},"content":" list.add(new Todo(title, isMarked));","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"zhengyup"},"content":" } else if (input.startsWith(\"D\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"zhengyup"},"content":" int byIndex \u003d input.indexOf(\"|\", titleIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"zhengyup"},"content":" String title \u003d input.substring(titleIndex, byIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"zhengyup"},"content":" String dueDateString \u003d input.substring(byIndex + 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"zhengyup"},"content":" list.add(new Deadline(title, parseDate(dueDateString), isMarked));","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"zhengyup"},"content":" } else if (input.startsWith(\"E\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"zhengyup"},"content":" int fromIndex \u003d input.indexOf(\"|\", titleIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"zhengyup"},"content":" String title \u003d input.substring(titleIndex, fromIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"zhengyup"},"content":" int toIndex \u003d input.indexOf(\"|\", fromIndex + 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"zhengyup"},"content":" String from \u003d input.substring(fromIndex + 2, toIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"zhengyup"},"content":" String to \u003d input.substring(toIndex + 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"zhengyup"},"content":" list.add(new Event(title, parseDate(from), parseDate(to), isMarked));","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"zhengyup"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"zhengyup"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"zhengyup"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"zhengyup"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"zhengyup"},"content":" * Saves tasks from the provided TaskList instance to the file specified in the constructor.","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"zhengyup"},"content":" * @param tasks The TaskList instance containing tasks to be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"zhengyup"},"content":" public void save(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"zhengyup"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"zhengyup"},"content":" for (int i \u003d 0; i \u003c tasks.list.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"zhengyup"},"content":" fw.write(tasks.list.get(i).toSave() + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"zhengyup"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"zhengyup"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"zhengyup"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"zhengyup"},"content":" * Parses a date-time string into a LocalDateTime instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"zhengyup"},"content":" * @param input The input date-time string.","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"zhengyup"},"content":" * @return A LocalDateTime instance parsed from the input string.","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"zhengyup"},"content":" * @throws InvalidDateFormatException If the input string has an invalid date-time format.","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"zhengyup"},"content":" public LocalDateTime parseDate(String input) throws InvalidDateFormatException {","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"zhengyup"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"zhengyup"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(input, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"zhengyup"},"content":" return dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"zhengyup"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"zhengyup"},"content":" throw new InvalidDateFormatException();","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"zhengyup":128}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.EmptyDeadlineException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.EmptyEventException;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.EmptyTodoException;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.InvalidDateFormatException;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.InvalidFindException;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.InvalidInputException;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.MissingByException;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.MissingFromException;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.MissingTitleException;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.MissingToException;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.OutOfIndexException;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" * Represents an archive of tasks in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":" * This class provides methods to manage and manipulate tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":" protected List\u003cTask\u003e list;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" * Constructs a new TaskList object with the specified list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" * @param list The initial list of tasks to be managed.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" public TaskList(List\u003cTask\u003e list) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" * Prints the list of tasks in the archive along with their indices.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" public void print() {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" System.out.println(i + \". \" + list.get(i));","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" * Marks a task as completed based on user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":" * @param input The input string containing the task index to mark.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"zhengyup"},"content":" * @throws OutOfIndexException If the provided index is out of the valid range.","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"zhengyup"},"content":" public void markTask(String input) throws OutOfIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"zhengyup"},"content":" int item \u003d input.charAt(5) - \u00270\u0027;","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"zhengyup"},"content":" if (item \u003c 0 || item \u003e list.size() - 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"zhengyup"},"content":" throw new OutOfIndexException();","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"zhengyup"},"content":" Task curr \u003d list.get(item);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"zhengyup"},"content":" curr.setMark(true);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"I HAVE MARKED THIS TASK:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"zhengyup"},"content":" System.out.println(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"zhengyup"},"content":" * Marks a completed task as incomplete based on user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"zhengyup"},"content":" * @param input The input string containing the task index to unmark.","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"zhengyup"},"content":" * @throws OutOfIndexException If the provided index is out of the valid range.","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"zhengyup"},"content":" public void unmarkTask(String input) throws OutOfIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"zhengyup"},"content":" int item \u003d input.charAt(5) - \u00270\u0027;","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"zhengyup"},"content":" if (item \u003c 0 || item \u003e list.size() - 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"zhengyup"},"content":" throw new OutOfIndexException();","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"zhengyup"},"content":" Task curr \u003d list.get(item);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"zhengyup"},"content":" curr.setMark(false);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"I HAVE UNMARKED THIS TASK:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"zhengyup"},"content":" System.out.println(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"zhengyup"},"content":" * Deletes a task based on user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"zhengyup"},"content":" * @param input The input string containing the task index to delete.","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"zhengyup"},"content":" * @throws OutOfIndexException If the provided index is out of the valid range.","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"zhengyup"},"content":" public void deleteTask(String input) throws OutOfIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"zhengyup"},"content":" int item \u003d input.charAt(7) - \u00270\u0027;","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"zhengyup"},"content":" if (item \u003c 0 || item \u003e list.size() - 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"zhengyup"},"content":" throw new OutOfIndexException();","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"zhengyup"},"content":" Task curr \u003d list.remove(item);","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"I HAVE DELETED THE FOLLOWING TASK:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"zhengyup"},"content":" System.out.println(curr);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"NOW YOU HAVE \" + list.size() + \" TASKS LEFT\");","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"zhengyup"},"content":" * Adds a task to the archive based on user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"zhengyup"},"content":" * @param input The input string containing the task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"zhengyup"},"content":" * @throws EmptyDeadlineException If the deadline task is missing required details.","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"zhengyup"},"content":" * @throws EmptyTodoException If the todo task is missing a title.","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"zhengyup"},"content":" * @throws EmptyEventException If the event task is missing required details.","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"zhengyup"},"content":" * @throws MissingByException If the deadline task is missing the \"by\" date.","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"zhengyup"},"content":" * @throws MissingFromException If the event task is missing the start date.","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"zhengyup"},"content":" * @throws MissingToException If the event task is missing the end date.","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"zhengyup"},"content":" * @throws MissingTitleException If a task is missing its title.","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"zhengyup"},"content":" * @throws InvalidInputException If the input doesn\u0027t match any valid task format.","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"zhengyup"},"content":" public void addTask(String input) throws InvalidDateFormatException, EmptyDeadlineException,","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"zhengyup"},"content":" EmptyTodoException, EmptyEventException, MissingByException, MissingFromException,","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"zhengyup"},"content":" MissingToException, MissingTitleException, InvalidInputException {","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"zhengyup"},"content":" Task added \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"zhengyup"},"content":" if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"zhengyup"},"content":" if (input.length() \u003c 6) {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"zhengyup"},"content":" throw new EmptyTodoException();","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"zhengyup"},"content":" String title \u003d input.substring(5);","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"zhengyup"},"content":" added \u003d new Todo(title, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"zhengyup"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"zhengyup"},"content":" if (input.length() \u003c 10) {","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"zhengyup"},"content":" throw new EmptyDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"zhengyup"},"content":" int index \u003d input.indexOf(\"/by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"zhengyup"},"content":" if (index \u003d\u003d -1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"zhengyup"},"content":" throw new MissingByException();","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"zhengyup"},"content":" if (index \u003c 10) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"zhengyup"},"content":" throw new MissingTitleException();","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"zhengyup"},"content":" String title \u003d input.substring(9, index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"zhengyup"},"content":" String dueDate \u003d input.substring(index + 4);","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"zhengyup"},"content":" added \u003d new Deadline(title, parseDate(dueDate), false);","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"zhengyup"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"zhengyup"},"content":" if (input.length() \u003c 7) {","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"zhengyup"},"content":" throw new EmptyEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"zhengyup"},"content":" int fromIndex \u003d input.indexOf(\"/from\");","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"zhengyup"},"content":" if (fromIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"zhengyup"},"content":" throw new MissingFromException();","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"zhengyup"},"content":" if (fromIndex \u003c 7) {","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"zhengyup"},"content":" throw new MissingTitleException();","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"zhengyup"},"content":" String title \u003d input.substring(6, fromIndex - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"zhengyup"},"content":" int toIndex \u003d input.indexOf(\"/to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"zhengyup"},"content":" if (toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"zhengyup"},"content":" throw new MissingToException();","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"zhengyup"},"content":" String from \u003d input.substring(fromIndex + 6, toIndex - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"zhengyup"},"content":" String to \u003d input.substring(toIndex + 4);","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"zhengyup"},"content":" added \u003d new Event(title, parseDate(from), parseDate(to), false);","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"zhengyup"},"content":" if (added !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"zhengyup"},"content":" list.add(added);","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"I\u0027VE ADDED THIS TASK:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"zhengyup"},"content":" System.out.println(added);","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"YOU HAVE \" + list.size() + \" TASKS IN THE LIST\");","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"zhengyup"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"zhengyup"},"content":" throw new InvalidInputException();","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"zhengyup"},"content":" * Parses a date-time string into a LocalDateTime instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"zhengyup"},"content":" * @param input The input date-time string.","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"zhengyup"},"content":" * @return A LocalDateTime instance parsed from the input string.","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"zhengyup"},"content":" * @throws InvalidDateFormatException If the input string has an invalid date-time format.","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"zhengyup"},"content":" public LocalDateTime parseDate(String input) throws InvalidDateFormatException {","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"zhengyup"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"zhengyup"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(input, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"zhengyup"},"content":" return dateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"zhengyup"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"zhengyup"},"content":" throw new InvalidDateFormatException();","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"zhengyup"},"content":" * Finds tasks in the task list that match the given keyword(s) in their titles.","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"zhengyup"},"content":" * @param input The input string containing the keyword(s) to search for.","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"zhengyup"},"content":" * @return A list of tasks that match the search criteria.","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"zhengyup"},"content":" * @throws InvalidFindException If the provided search input is too short to be valid.","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"zhengyup"},"content":" public List\u003cTask\u003e find(String input) throws InvalidFindException {","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"zhengyup"},"content":" if (input.length() \u003c 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"zhengyup"},"content":" throw new InvalidFindException();","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"zhengyup"},"content":" String keywords \u003d input.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"zhengyup"},"content":" for (Task curr : list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"zhengyup"},"content":" if (curr.getTitle().indexOf(keywords) !\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"zhengyup"},"content":" filteredTasks.add(curr);","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"TASKS FOUND:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"zhengyup"},"content":" for (int i \u003d 0; i \u003c filteredTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"zhengyup"},"content":" System.out.println(i + \". \" + filteredTasks.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"zhengyup"},"content":" return filteredTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"zhengyup":208}},{"path":"src/main/java/duke/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" * The UI class handles user interactions and printing messages in the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"public class UI {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" private final String logo \u003d \" ___\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" + \" . -^ `--,\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" + \" /# \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d`-_\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" + \" /# (--\u003d\u003d\u003d\u003d___\u003d\u003d\u003d\u003d\\\\\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" + \" /# .- --. . --.|\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" + \"/## | * ) ( * ),\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" + \"|## \\\\ /\\\\ \\\\ / |\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" + \"|### --- \\\\ --- |\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" + \"|#### ___) #|\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":" + \"|###### ##|\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":" + \" \\\\##### ---------- /\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" + \" \\\\#### (\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" + \" `\\\\### |\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":" + \" \\\\### |\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" + \" \\\\## |\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" + \" \\\\###. .)\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" + \" `\u003d\u003d\u003d\u003d\u003d\u003d/\";","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" * Constructs a UI object.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" public UI() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" * Prints the introduction message with the Duke logo.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":" public void printIntro() {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"Hello I\u0027m HEAD\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" * Reads a line of input from the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":" * @return The user input as a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":" public String getInput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":" System.out.println(\"SHOW ME WHAT YOU\u0027VE GOT\");","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" return input;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"zhengyup":52}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is used to handle errors specific to the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" private String message;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" * Constructs a new DukeException with the specified error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" * @param message The error message associated with the exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" this.message \u003d message;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" * Returns the error message associated with this exception.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" * @return The error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" return this.message;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"zhengyup":32}},{"path":"src/main/java/duke/exceptions/EmptyDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for empty deadline entries in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user attempts to add a deadline task without a title or due date.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class EmptyDeadlineException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new EmptyDeadlineException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the correct format for adding a deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public EmptyDeadlineException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"I DON\u0027T LIKE WHAT YOU\u0027VE GOT! Missing entry. ENTER deadline (title) /by (dueDate) to\"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" + \" add a deadline\");","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"zhengyup":17}},{"path":"src/main/java/duke/exceptions/EmptyEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for empty event entries in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user attempts to add an event task without a title, start date, or end date.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class EmptyEventException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new EmptyEventException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the correct format for adding an event.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public EmptyEventException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"I DON\u0027T LIKE WHAT YOU\u0027VE GOT! Missing entry. ENTER event (title) /from (from) /to (to) to\"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" + \" add an event\");","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"zhengyup":17}},{"path":"src/main/java/duke/exceptions/EmptyTodoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for empty todo entries in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user attempts to add a todo task without a title.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class EmptyTodoException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new EmptyTodoException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the correct format for adding a todo.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public EmptyTodoException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"I DON\u0027T LIKE WHAT YOU\u0027VE GOT! Missing title of todo. ENTER todo (title) to add a todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"zhengyup":16}},{"path":"src/main/java/duke/exceptions/InvalidDateFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * The \u003ccode\u003eInvalidDateFormatException\u003c/code\u003e class represents an exception that is","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * thrown when an invalid date format is encountered in Duke\u0027s task input. This exception","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" * is typically thrown when dates for \u0027by\u0027, \u0027from\u0027, or \u0027to\u0027 fields are not in the","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":" * expected format: \"dd/MM/yyyy HH:mm\".","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" * @author [Your Name]","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * @version [Version Number]","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":"public class InvalidDateFormatException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" * Constructs an \u003ccode\u003eInvalidDateFormatException\u003c/code\u003e with a default error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" * The default error message informs the user about the expected date format.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":" public InvalidDateFormatException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":" super(\"Invalid date format! Input dates for \u0027by\u0027, \u0027from\u0027, or \u0027to\u0027 should use the following format:\"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" + \" dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"zhengyup":23}},{"path":"src/main/java/duke/exceptions/InvalidFindException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * The \u003ccode\u003eInvalidFindException\u003c/code\u003e class represents an exception that is","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * thrown when an invalid \"find\" command is encountered in Duke\u0027s input. This exception","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" * is typically thrown when the \"find\" command does not include a valid keyword or key phrase.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":" * The correct format for the \"find\" command is \"find (keyword / key phrases)\".","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" * @author [Your Name]","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * @version [Version Number]","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":"public class InvalidFindException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" * Constructs an \u003ccode\u003eInvalidFindException\u003c/code\u003e with a default error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" * The default error message instructs the user on the correct usage of the \"find\" command.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":" public InvalidFindException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":" super(\"Invalid find command. Enter \u0027find (keyword / key phrases)\u0027\");","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"zhengyup":21}},{"path":"src/main/java/duke/exceptions/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for invalid input entries in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user provides an input that doesn\u0027t match any valid command formats.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class InvalidInputException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new InvalidInputException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the correct format to start various types of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public InvalidInputException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"I DON\u0027T LIKE WHAT YOU\u0027VE GOT! START WITH todo (title) or \"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" + \"deadline (title) /by (dueDate) or event (title) /from (from) /to (to)\");","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"zhengyup":17}},{"path":"src/main/java/duke/exceptions/MissingByException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for missing \"by\" date entries in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user attempts to add a deadline task without specifying the \"by\" date.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class MissingByException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new MissingByException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the correct format for adding a deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public MissingByException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"I DON\u0027T LIKE WHAT YOU\u0027VE GOT! Missing by. ENTER deadline (title) /by (dueDate) to add a deadline\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"zhengyup":16}},{"path":"src/main/java/duke/exceptions/MissingFromException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for missing \"from\" date entries in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user attempts to add an event task without specifying the start date.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class MissingFromException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new MissingFromException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the correct format for adding an event.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public MissingFromException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"I DON\u0027T LIKE WHAT YOU\u0027VE GOT! Missing event start date. ENTER event (title) /from (from)\"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" + \" /to (to) to add an event\");","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"zhengyup":18}},{"path":"src/main/java/duke/exceptions/MissingTitleException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for missing title entries in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user attempts to add a task without providing a title.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class MissingTitleException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new MissingTitleException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the importance of providing a title for tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public MissingTitleException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"I DON\u0027T LIKE WHAT YOU\u0027VE GOT! MISSING TITLE!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"zhengyup":16}},{"path":"src/main/java/duke/exceptions/MissingToException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for missing \"to\" date entries in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user attempts to add an event task without specifying the end date.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class MissingToException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new MissingToException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the correct format for adding an event.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public MissingToException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"I DON\u0027T LIKE WHAT YOU\u0027VE GOT! Missing event end date. ENTER event (title) /from (from) /to\"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" + \" (to) to add an event\");","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"zhengyup":17}},{"path":"src/main/java/duke/exceptions/OutOfIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Custom exception class for out-of-index task access in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This exception is thrown when a user attempts to access a task using an index that is out of the valid range.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class OutOfIndexException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new OutOfIndexException with a predefined error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" * The error message informs the user about the fact that they provided an invalid task index.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" public OutOfIndexException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" super(\"You have provided a number out of index of the stored tasks\");","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"zhengyup":17}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":" * Represents a task with a deadline in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":" * This class extends the base class Task and includes the due date of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" private LocalDateTime dueDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" private String printDateString;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" private String saveDateString;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" * Constructs a new Deadline object with a title and due date.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":" * @param title The title of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" * @param dueDate The due date of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" * @param isMarked The marking status of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" public Deadline(String title, LocalDateTime dueDate, boolean isMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" super(title, isMarked);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":" this.printDateString \u003d this.dueDate.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" this.saveDateString \u003d this.dueDate.format(DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" * Generates a string representation of the Deadline object.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" * @return A formatted string indicating the status, title, and due date of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" String mark \u003d super.isMarked ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" return \"[D]\" + mark + title + \" (by: \" + this.printDateString + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" * Generates a formatted string to represent the Deadline object for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":" * @return A formatted string for saving the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":" public String toSave() {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":" String res \u003d \"D\";","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":" res +\u003d (isMarked ? \"| 1\" : \"| 0\");","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" res +\u003d \"| \" + title;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":" res +\u003d \"| \" + saveDateString;","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":" return res;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"zhengyup"},"content":" * Retrieves the due date of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"zhengyup"},"content":" * @return The due date of the deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"zhengyup"},"content":" public LocalDateTime getDueDate() {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"zhengyup"},"content":" return this.dueDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zhengyup":63}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":" * Represents an event task in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":" * This class extends the base class Task and includes the start and end dates of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" private String printFromString;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" private String saveFromString;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" private String printToString;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" private String saveToString;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" * Constructs a new Event object with a title, start date, and end date.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":" * @param title The title of the event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" * @param from The start date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" * @param to The end date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" * @param isMarked The marking status of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" public Event(String title, LocalDateTime from, LocalDateTime to, boolean isMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" super(title, isMarked);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" this.printFromString \u003d this.from.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":" this.printToString \u003d this.to.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" this.saveFromString \u003d this.from.format(DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" this.saveToString \u003d this.to.format(DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" * Generates a string representation of the Event object.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":" * @return A formatted string indicating the status, title, start date, and end date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":" String mark \u003d super.isMarked ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" return \"[E]\" + mark + title + \" (from: \" + this.printFromString + \" to: \" + this.printToString + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":" * Generates a formatted string to represent the Event object for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":" * @return A formatted string for saving the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"zhengyup"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"zhengyup"},"content":" public String toSave() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"zhengyup"},"content":" String res \u003d \"E\";","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"zhengyup"},"content":" res +\u003d (isMarked ? \"| 1\" : \"| 0\");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"zhengyup"},"content":" res +\u003d \"| \" + title;","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"zhengyup"},"content":" res +\u003d \"| \" + saveFromString;","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"zhengyup"},"content":" res +\u003d \"| \" + saveToString;","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"zhengyup"},"content":" return res;","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"zhengyup"},"content":" * Retrieves the start date of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"zhengyup"},"content":" * @return The start date of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"zhengyup"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"zhengyup"},"content":" return this.from;","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"zhengyup"},"content":" * Retrieves the end date of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"zhengyup"},"content":" * @return The end date of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"zhengyup"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"zhengyup"},"content":" return to;","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zhengyup":80}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Abstract base class representing a task in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * Subclasses (e.g., Deadline, Event) extend this class to represent specific types of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" protected String title;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" protected boolean isMarked \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" * Constructs a new Task object with a title.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" * @param title The title of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" * @param isMarked The marking status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":" public Task(String title, boolean isMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":" this.title \u003d title;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" this.isMarked \u003d isMarked;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" public void setMark(boolean isMarked) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" this.isMarked \u003d isMarked;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" * Retrieves the marking status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" * @return True if the task is marked as completed, false otherwise.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":" public boolean getIsMarked() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" return this.isMarked;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" * Retrieves the title of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" * @return The title of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" public String getTitle() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" return this.title;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":" * Generates a string representation of the Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":" * @return A formatted string indicating the status (marked or unmarked) and title of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":" String mark \u003d this.isMarked ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"zhengyup"},"content":" return mark + title;","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"zhengyup"},"content":" * Generates a formatted string to represent the Task object for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"zhengyup"},"content":" * @return A formatted string for saving the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"zhengyup"},"content":" public abstract String toSave();","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zhengyup":62}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":" * Represents a todo task in the Duke application.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":" * This class extends the base class Task and represents a simple todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":" * Constructs a new Todo object with a title.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":" * @param title The title of the todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":" * @param isMarked The marking status of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" public Todo(String title, boolean isMarked) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" super(title, isMarked);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" * Generates a string representation of the Todo object.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":" * @return A formatted string indicating the status (marked or unmarked) and title of the todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":" String mark \u003d super.isMarked ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" return \"[T]\" + mark + title;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" * Generates a formatted string to represent the Todo object for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" * @return A formatted string for saving the Todo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":" public String toSave() {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" String res \u003d \"T\";","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" res +\u003d (isMarked ? \"| 1\" : \"| 0\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" res +\u003d \"| \" + title;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":" return res;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"zhengyup":42}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"import java.util.List;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":" * Test class for the Storage class.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" * Contains test cases for the loadTask method.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" * Test loading a Todo task with valid input.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" * Verifies that the task is created and added to the list correctly.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" //CHECKSTYLE.OFF: MethodName","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" public void loadTask_Todo_ValidInput_TaskCreatedAndAddedToList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":" Storage storage \u003d new Storage(\"testFILEPATH\");","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" String input \u003d \"T | 1| Title\";","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" storage.loadTask(input, list);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":" assertEquals(1, list.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" assertEquals(Todo.class, list.get(0).getClass());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" assertEquals(\"Title\", list.get(0).getTitle());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":" assertEquals(true, list.get(0).getIsMarked());","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":" * Test loading a Deadline task with valid input.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" * Verifies that the task is created and added to the list correctly.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":" public void loadTask_Deadline_ValidInput_TaskCreatedAndAddedToList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" Storage storage \u003d new Storage(\"testFILEPATH\");","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":" String input \u003d \"D | 1| Deadline Title| 01/01/2023 14:00\";","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"zhengyup"},"content":" storage.loadTask(input, list);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"zhengyup"},"content":" assertEquals(1, list.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"zhengyup"},"content":" assertEquals(Deadline.class, list.get(0).getClass());","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"zhengyup"},"content":" assertEquals(\"Deadline Title\", list.get(0).getTitle());","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"zhengyup"},"content":" assertEquals(true, list.get(0).getIsMarked());","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"zhengyup"},"content":" assertEquals(LocalDateTime.of(2023, 1, 1, 14, 0), ((Deadline) list.get(0)).getDueDate());","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"zhengyup"},"content":" * Test loading an Event task with valid input.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"zhengyup"},"content":" * Verifies that the task is created and added to the list correctly.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"zhengyup"},"content":" public void loadTask_Event_ValidInput_TaskCreatedAndAddedToList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"zhengyup"},"content":" Storage storage \u003d new Storage(\"testFILEPATH\");","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"zhengyup"},"content":" String input \u003d \"E| 1| Event Title| 01/01/2023 14:00| 01/01/2023 16:00\";","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"zhengyup"},"content":" storage.loadTask(input, list);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"zhengyup"},"content":" assertEquals(1, list.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"zhengyup"},"content":" assertEquals(\"Event Title\", list.get(0).getTitle());","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"zhengyup"},"content":" assertEquals(true, list.get(0).getIsMarked());","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"zhengyup"},"content":" assertEquals(LocalDateTime.of(2023, 1, 1, 14, 0), ((Event) list.get(0)).getFrom());","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"zhengyup"},"content":" assertEquals(LocalDateTime.of(2023, 1, 1, 16, 0), ((Event) list.get(0)).getTo());","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"zhengyup"},"content":" * Test loading with invalid input.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"zhengyup"},"content":" * Verifies that no task is added to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"zhengyup"},"content":" public void loadTask_InvalidInput_NoTaskAddedToList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"zhengyup"},"content":" Storage storage \u003d new Storage(\"testFILEPATH\");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"zhengyup"},"content":" String input \u003d \"InvalidInput\";","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"zhengyup"},"content":" storage.loadTask(input, list);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"zhengyup"},"content":" assertEquals(0, list.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"zhengyup"},"content":" //CHECKSTYLE.ON: MethodName","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"zhengyup":96}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":" * Test class for the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":" * Contains test cases for the markTask method.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":"//CHECKSTYLE.OFF: MethodName","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"zhengyup"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"zhengyup"},"content":" * Test marking a task with an input index greater than the list size.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"zhengyup"},"content":" * Verifies that an exception is thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"zhengyup"},"content":" public void markTask_inputMoreThanSize_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e temp \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"zhengyup"},"content":" for (int i \u003d 0; i \u003c 3; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"zhengyup"},"content":" temp.add(new Todo(\"foo\", false));","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"zhengyup"},"content":" TaskList test \u003d new TaskList(temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"zhengyup"},"content":" test.markTask(\"mark 6\");","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"zhengyup"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"zhengyup"},"content":" assertEquals(\"You have provided a number out of index of the stored tasks\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"zhengyup"},"content":" * Test marking a task with a negative input index.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"zhengyup"},"content":" * Verifies that an exception is thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"zhengyup"},"content":" public void markTask_inputLessThanZero_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e temp \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"zhengyup"},"content":" for (int i \u003d 0; i \u003c 5; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"zhengyup"},"content":" temp.add(new Todo(\"foo\", false));","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"zhengyup"},"content":" TaskList test \u003d new TaskList(temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"zhengyup"},"content":" test.markTask(\"mark -1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"zhengyup"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"zhengyup"},"content":" assertEquals(\"You have provided a number out of index of the stored tasks\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"zhengyup"},"content":" * Test marking a task with a non-integer input index.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"zhengyup"},"content":" * Verifies that the task\u0027s marked status is not changed.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"zhengyup"},"content":" public void markTask_inputNonInteger_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e temp \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"zhengyup"},"content":" Task todo \u003d new Todo(\"foo\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"zhengyup"},"content":" temp.add(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"zhengyup"},"content":" TaskList test \u003d new TaskList(temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"zhengyup"},"content":" test.markTask(\"mark test\");","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"zhengyup"},"content":" assertEquals(true, todo.getIsMarked());","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"zhengyup"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"zhengyup"},"content":" assertEquals(\"You have provided a number out of index of the stored tasks\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"zhengyup"},"content":" * Test marking a task with an input index within the valid range.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"zhengyup"},"content":" * Verifies that the task\u0027s marked status is changed to true.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"zhengyup"},"content":" public void markTask_inputWithinRange_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e temp \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"zhengyup"},"content":" Task todo \u003d new Todo(\"foo\", false);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"zhengyup"},"content":" temp.add(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"zhengyup"},"content":" TaskList test \u003d new TaskList(temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"zhengyup"},"content":" test.markTask(\"mark 0\");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"zhengyup"},"content":" assertEquals(true, todo.getIsMarked());","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"zhengyup"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"zhengyup"},"content":" assertEquals(\"You have provided a number out of index of the stored tasks\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"zhengyup"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"zhengyup"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"zhengyup"},"content":" * Test marking an already marked task.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"zhengyup"},"content":" * Verifies that the task\u0027s marked status remains true.","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"zhengyup"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"zhengyup"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"zhengyup"},"content":" public void markTask_markAlreadyMarkedTask_success() {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"zhengyup"},"content":" List\u003cTask\u003e temp \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"zhengyup"},"content":" Task todo \u003d new Todo(\"foo\", true);","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"zhengyup"},"content":" temp.add(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"zhengyup"},"content":" TaskList test \u003d new TaskList(temp);","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"zhengyup"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"zhengyup"},"content":" test.markTask(\"mark 0\");","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"zhengyup"},"content":" assertEquals(true, todo.getIsMarked());","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"zhengyup"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"zhengyup"},"content":" assertEquals(\"You have provided a number out of index of the stored tasks\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"zhengyup"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"zhengyup"},"content":" //CHECKSTYLE.ON: MethodName","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"zhengyup"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"zhengyup":110}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"zhengyup"},"content":"todo test todo","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"zhengyup"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"zhengyup"},"content":"deadline test deadline /by today","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"zhengyup"},"content":"deadline test /by today","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"zhengyup"},"content":"deadline test","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"zhengyup"},"content":"event test event /from today /to tomorrow","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"zhengyup"},"content":"event test event /to tomorrow","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"zhengyup"},"content":"event test event /from today","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"zhengyup"},"content":"event /from today /to tomorrow","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"zhengyup"},"content":"event","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"zhengyup"},"content":"mark 0","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"zhengyup"},"content":"mark 10","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"zhengyup"},"content":"unmark 0","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"zhengyup"},"content":"unmark 10","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"zhengyup"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"zhengyup"},"content":"delete 0","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"zhengyup"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"zhengyup"},"content":"GET SCHWIFTY","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"zhengyup":18}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"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":"zhengyup"},"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":{"zhengyup":1,"-":20}}] diff --git a/zhengyup_ip_master/commits.json b/zhengyup_ip_master/commits.json index ed4dd8fa..0d0b347b 100644 --- a/zhengyup_ip_master/commits.json +++ b/zhengyup_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"zhengyup":[{"date":"2023-08-23","commitResults":[{"hash":"6fd3d98f20d053fbcc8cb750cc3b707c1c7a7b1a","isMergeCommit":false,"messageTitle":"implemented skeletal version, changed duke to HEAD and changed logo","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":5}}},{"hash":"fe5f6d716c4651e3e6f6696756b53da2ce41f425","isMergeCommit":false,"messageTitle":"completed level 1, echoes input and exits when input GET SCHWIFTY","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"f532effde327b1c230e3192fc44e02d60d52cc33","isMergeCommit":false,"messageTitle":"Level 2 completed, added an arraylist to keep track of inputs and prints the list when list is entered","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"7b86127a5a1dc0b051e1cae6dff79ac0f52dde1a","isMergeCommit":false,"messageTitle":"added class to represent Task and completed level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":3}}},{"hash":"96b9d4d9b6613d5d472e16ee8f0ba67a34af87ca","isMergeCommit":false,"messageTitle":"created todo, event and deadline classes. yet to integrate to the functionality of Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":4}}}]},{"date":"2023-08-24","commitResults":[{"hash":"3e2fc4b28774226050259734ee8806771e02f13c","isMergeCommit":false,"messageTitle":"added functionality for level 4, works as expected from manual testing","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":10}}},{"hash":"ae2ede8df6113122046f572bcadeb0a194b74932","isMergeCommit":false,"messageTitle":"completed A-TEXTUiTesting, e","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"sh":{"insertions":0,"deletions":0}}},{"hash":"1d4113dc3b235a381361f4ee26cd6dca5126a959","isMergeCommit":false,"messageTitle":"added exception classes and handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"035f85483ba6cf647a7eacbbc014abccbb6131e9","isMergeCommit":false,"messageTitle":"implemented the deletion of tasks, and added a new error to handle selecting an index out of range for delete, mark and unmark operations. Not yet integrated","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"e0311bcfa5b0e5edf64be9970a5cf3583fdc284d","isMergeCommit":false,"messageTitle":"added archive class to manage tasks. added abstraction to reduce the amount of code in Duke.java.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":17,"deletions":0},"java":{"insertions":9,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"6132de88bbefdbccb40a87091c8467379e9c42b2","isMergeCommit":false,"messageTitle":"Allow the saving and retrieval of tasks between uses of the chatbot","messageBody":"Users are not able to save tasks between separate uses of the chatbot.\n\nusing filereaders and writers we can save the tasks in a text file.\n\nThis gives a simple implementation of a local database\n","fileTypesAndContributionMap":{"java":{"insertions":527,"deletions":88}}},{"hash":"63511dde03a7ab278fbc07d0ae50677e8775983a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"6f64b4ffc7554023a01b6bd98c55c6159679c58f","isMergeCommit":false,"messageTitle":"Add ability to understand date times given in dd/MM/yyyy HH:mm format and prompt for the correct format otherwise","messageBody":"Date was previously treated as a string, which creates problems when trying to do chronological operations on tasks.\n\nImplemented using java LocalDateTime, receives in one format and prints in another\n","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":29}}},{"hash":"ad717a0931ea00a973f52c62c03f07b2192f0801","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"a8f5919b952bddd8e8779d052f0fb322634e189a","isMergeCommit":false,"messageTitle":"Refactor code to extract out closely related code as classes and as such use more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":145,"deletions":99}}},{"hash":"f6e3a80770645dd83bc87310834c118fa671a037","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"8126f7c78281b7826394b8e5dbb69b07e4f13e05","isMergeCommit":false,"messageTitle":"Restructure folders to place duke related files in the duke package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":27}}},{"hash":"c0617b30bf2eede6bf13e32cc155fa9fcb52f9ff","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"976dbb62855e12689fa96f6e0c3a920a8b62fb34","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7e630c93fbdacdb8b059457c7c3246c5e30831b3","isMergeCommit":false,"messageTitle":"set up gradle for testing","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"a85f84d16bbdfd26edb0650f96d1e42b1730b040","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"d72e25fc286d2e43c957bf90e65f0c6e3a134d88","isMergeCommit":false,"messageTitle":"add JUnit tests to test the loadTask function in storage and the markTask function in TaskList","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":205,"deletions":33},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"8baec5bf11f6ce9b91fd905650c17c9bba17f1ed","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"4473c46bab231030181948d3fcdbd018213f7876","isMergeCommit":false,"messageTitle":"add JavaDocs for all classes","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":189,"deletions":16}}},{"hash":"806cff7aae73bf7c3efe9b775ff242f192162687","isMergeCommit":false,"messageTitle":"fix code violations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":66}}},{"hash":"f6b43503e2d1f198b8973e9cb148d2d2cb9d3162","isMergeCommit":false,"messageTitle":"add find functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":1}}},{"hash":"07c76b238c8fd4ffa0ca1994c1073661319e0562","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"caccc31bf58d27ddf75c5c2f1c5462ee56b2450d","isMergeCommit":true,"messageTitle":"Resolve merge conflicts between the javadoc and coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"54674e5277ec5a6dae5034a1f624f4c8ffcf06d5","isMergeCommit":true,"messageTitle":"Resolve merge conflict between master branch and branch-Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"zhengyup":{"java":1086,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":2,"txt":18}},"authorContributionVariance":{"zhengyup":87865.51},"authorDisplayNameMap":{"zhengyup":"CS2103T-W17-2 POH ..G YU"}} +{"authorDailyContributionsMap":{"zhengyup":[{"date":"2023-08-23","commitResults":[{"hash":"6fd3d98f20d053fbcc8cb750cc3b707c1c7a7b1a","isMergeCommit":false,"messageTitle":"implemented skeletal version, changed duke to HEAD and changed logo","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":5}}},{"hash":"fe5f6d716c4651e3e6f6696756b53da2ce41f425","isMergeCommit":false,"messageTitle":"completed level 1, echoes input and exits when input GET SCHWIFTY","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"f532effde327b1c230e3192fc44e02d60d52cc33","isMergeCommit":false,"messageTitle":"Level 2 completed, added an arraylist to keep track of inputs and prints the list when list is entered","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"7b86127a5a1dc0b051e1cae6dff79ac0f52dde1a","isMergeCommit":false,"messageTitle":"added class to represent Task and completed level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":3}}},{"hash":"96b9d4d9b6613d5d472e16ee8f0ba67a34af87ca","isMergeCommit":false,"messageTitle":"created todo, event and deadline classes. yet to integrate to the functionality of Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":4}}}]},{"date":"2023-08-24","commitResults":[{"hash":"3e2fc4b28774226050259734ee8806771e02f13c","isMergeCommit":false,"messageTitle":"added functionality for level 4, works as expected from manual testing","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":10}}},{"hash":"ae2ede8df6113122046f572bcadeb0a194b74932","isMergeCommit":false,"messageTitle":"completed A-TEXTUiTesting, e","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"sh":{"insertions":0,"deletions":0}}},{"hash":"1d4113dc3b235a381361f4ee26cd6dca5126a959","isMergeCommit":false,"messageTitle":"added exception classes and handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"035f85483ba6cf647a7eacbbc014abccbb6131e9","isMergeCommit":false,"messageTitle":"implemented the deletion of tasks, and added a new error to handle selecting an index out of range for delete, mark and unmark operations. Not yet integrated","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"e0311bcfa5b0e5edf64be9970a5cf3583fdc284d","isMergeCommit":false,"messageTitle":"added archive class to manage tasks. added abstraction to reduce the amount of code in Duke.java.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":17,"deletions":0},"java":{"insertions":9,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"6132de88bbefdbccb40a87091c8467379e9c42b2","isMergeCommit":false,"messageTitle":"Allow the saving and retrieval of tasks between uses of the chatbot","messageBody":"Users are not able to save tasks between separate uses of the chatbot.\n\nusing filereaders and writers we can save the tasks in a text file.\n\nThis gives a simple implementation of a local database\n","fileTypesAndContributionMap":{"java":{"insertions":527,"deletions":88}}},{"hash":"63511dde03a7ab278fbc07d0ae50677e8775983a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"6f64b4ffc7554023a01b6bd98c55c6159679c58f","isMergeCommit":false,"messageTitle":"Add ability to understand date times given in dd/MM/yyyy HH:mm format and prompt for the correct format otherwise","messageBody":"Date was previously treated as a string, which creates problems when trying to do chronological operations on tasks.\n\nImplemented using java LocalDateTime, receives in one format and prints in another\n","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":29}}},{"hash":"ad717a0931ea00a973f52c62c03f07b2192f0801","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"a8f5919b952bddd8e8779d052f0fb322634e189a","isMergeCommit":false,"messageTitle":"Refactor code to extract out closely related code as classes and as such use more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":145,"deletions":99}}},{"hash":"f6e3a80770645dd83bc87310834c118fa671a037","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"8126f7c78281b7826394b8e5dbb69b07e4f13e05","isMergeCommit":false,"messageTitle":"Restructure folders to place duke related files in the duke package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":27}}},{"hash":"c0617b30bf2eede6bf13e32cc155fa9fcb52f9ff","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"976dbb62855e12689fa96f6e0c3a920a8b62fb34","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7e630c93fbdacdb8b059457c7c3246c5e30831b3","isMergeCommit":false,"messageTitle":"set up gradle for testing","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"a85f84d16bbdfd26edb0650f96d1e42b1730b040","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"d72e25fc286d2e43c957bf90e65f0c6e3a134d88","isMergeCommit":false,"messageTitle":"add JUnit tests to test the loadTask function in storage and the markTask function in TaskList","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":205,"deletions":33},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"8baec5bf11f6ce9b91fd905650c17c9bba17f1ed","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"4473c46bab231030181948d3fcdbd018213f7876","isMergeCommit":false,"messageTitle":"add JavaDocs for all classes","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":189,"deletions":16}}},{"hash":"806cff7aae73bf7c3efe9b775ff242f192162687","isMergeCommit":false,"messageTitle":"fix code violations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":66}}},{"hash":"f6b43503e2d1f198b8973e9cb148d2d2cb9d3162","isMergeCommit":false,"messageTitle":"add find functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":1}}},{"hash":"07c76b238c8fd4ffa0ca1994c1073661319e0562","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"caccc31bf58d27ddf75c5c2f1c5462ee56b2450d","isMergeCommit":true,"messageTitle":"Resolve merge conflicts between the javadoc and coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"54674e5277ec5a6dae5034a1f624f4c8ffcf06d5","isMergeCommit":true,"messageTitle":"Resolve merge conflict between master branch and branch-Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"39fac1337f2793801e93999fafe95637e7bd080c","isMergeCommit":false,"messageTitle":"add checkstyle and fixed the errros pointed out by checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":125,"deletions":82}}},{"hash":"36d6920cfe5fd1e60568c2aec012d37a535effb1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Checkstyle\u0027","messageBody":"","tags":["A-Checkstyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"zhengyup":{"java":1129,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":7,"txt":18}},"authorContributionVariance":{"zhengyup":61972.574},"authorDisplayNameMap":{"zhengyup":"CS2103T-W17-2 POH ..G YU"}}